AM_MEDIA_TYPE estructura (strmif.h)

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

La estructura AM_MEDIA_TYPE describe el formato de un ejemplo multimedia.

Sintaxis

typedef struct _AMMediaType {
  GUID     majortype;
  GUID     subtype;
  BOOL     bFixedSizeSamples;
  BOOL     bTemporalCompression;
  ULONG    lSampleSize;
  GUID     formattype;
  IUnknown *pUnk;
  ULONG    cbFormat;
  BYTE     *pbFormat;
} AM_MEDIA_TYPE;

Miembros

majortype

Identificador único global (GUID) que especifica el tipo principal del ejemplo multimedia. Para obtener una lista de posibles tipos principales, vea Tipos de medios.

subtype

GUID que especifica el subtipo del ejemplo multimedia. Para obtener una lista de posibles subtipos, vea Tipos de medios. Para algunos formatos, el valor puede ser MEDIASUBTYPE_None, lo que significa que el formato no requiere un subtipo.

bFixedSizeSamples

Si es TRUE, las muestras tienen un tamaño fijo. Este campo solo es informativo. En el caso del audio, generalmente se establece en TRUE. En el caso del vídeo, normalmente es TRUE para el vídeo sin comprimir y FALSE para el vídeo comprimido.

bTemporalCompression

Si es TRUE, los ejemplos se comprimen mediante la compresión temporal (interframe). Un valor true indica que no todos los fotogramas son fotogramas clave. Este campo solo es informativo.

lSampleSize

Tamaño del ejemplo en bytes. Para los datos comprimidos, el valor puede ser cero.

formattype

GUID que especifica la estructura utilizada para el bloque de formato. El miembro pbFormat apunta a la estructura de formato correspondiente. Los tipos de formato incluyen lo siguiente:

Tipo de formato Estructura de formato
FORMAT_DvInfo

DVINFO

FORMAT_MPEG2Video

MPEG2VIDEOINFO

FORMAT_MPEGStreams

AM_MPEGSYSTEMTYPE

FORMAT_MPEGVideo

MPEG1VIDEOINFO

FORMAT_None
Ninguno.
FORMAT_VideoInfo

VIDEOINFOHEADER

FORMAT_VideoInfo2

VIDEOINFOHEADER2

FORMAT_WaveFormatEx

WAVEFORMATEX

GUID_NULL
Ninguno

pUnk

No se usa. Se establece en NULL.

cbFormat

Tamaño del bloque de formato, en bytes.

pbFormat

Puntero al bloque de formato. El tipo de estructura se especifica mediante el miembro formattype . La estructura de formato debe estar presente, a menos que el tipo de formato sea GUID_NULL o FORMAT_None.

El búfer pbFormat debe asignarse llamando a CoTaskMemAlloc. Para liberar el bloque de formato, llame a FreeMediaType.

Observaciones

Cuando se conectan dos patillas, negocian un tipo de medio, que se define mediante una estructura AM_MEDIA_TYPE . El tipo de medio describe el formato de los datos que intercambiarán los filtros. Si los filtros no están de acuerdo con un tipo de medio, no se pueden conectar.

El tipo de secuencia se especifica mediante dos GUID, denominado tipo principal y subtipo. El tipo principal define la categoría general, como vídeo, audio o secuencia de bytes. El subtipo define una categoría más estrecha dentro del tipo principal. Por ejemplo, los subtipos de vídeo incluyen RGB de 8 bits, 16 bits, 24 bits y RGB de 32 bits.

La estructura AM_MEDIA_TYPE va seguida de un bloque de datos de longitud variable que contiene información específica del formato. El miembro pbFormat apunta a este bloque, denominado bloque de formato. El diseño del bloque de formato depende del tipo de datos de la secuencia y lo especifica el miembro formattype . El bloque de formato puede ser NULL. Compruebe el miembro cbFormat para determinar el tamaño. Convierta el miembro pbFormat para acceder al bloque de formato. Por ejemplo:

C++
if (pmt->formattype == FORMAT_VideoInfo)
{
    // Check the buffer size.
    if (pmt->cbFormat >= sizeof(VIDEOINFOHEADER))
    {
        VIDEOINFOHEADER *pVih = 
            reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat);
        /* Access VIDEOINFOHEADER members through pVih. */
    }
}
En algunas situaciones, puede establecer el bloque de formato en NULL y el tipo de formato en GUID_NULL, lo que da lugar a un tipo de medio parcial. Esto le permite especificar un intervalo de posibles formatos. Por ejemplo, puede especificar RGB de 24 bits (MEDIASUBTYPE_RGB24) sin dar un ancho o alto exactos.

Para obtener información detallada sobre un tipo de medio especificado con fines de depuración, use el método DisplayType .

Requisitos

   
Encabezado strmif.h (incluye Dshow.h)

Consulte también

Acerca de los tipos de medios

Estructuras directShow

Funciones de tipo de medio

Tipos de medios