Compartir a través de


Controlar el paso en los códecs de AVStream

Cuando un descodificador está conectado a un representador como El representador de vídeo mejorado (EVR) o un componente que admite Direct3D, el minidriver recibe búferes D3D en lugar de búferes de memoria del sistema.

A diferencia de los búferes de memoria del sistema, que se deben copiar en una superficie D3D antes de la representación, el motor de representación puede mostrar directamente los búferes D3D. Por lo tanto, mediante el uso de búferes D3D en lugar de búferes de memoria del sistema, el minidriver guarda una operación de copia para cada búfer.

Cuando un minidriver compatible con SHED recibe búferes D3D, la superficie D3D está bloqueada y un puntero a él se encuentra en KSSTREAM_HEADER. Datos. La información del intervalo de superficie se proporciona en la extensión KS_FRAME_INFO para KSSTREAM_HEADER, como se muestra en el ejemplo de código siguiente:

typedef struct KS_FRAME_INFO {
    ULONG                   ExtendedHeaderSize; // Size of this extended header
    DWORD                   dwFrameFlags;       // Field1, Field2, or Frame
    LONGLONG                PictureNumber;
    LONGLONG                DropCount;

    // The following are only set when you use OverlayMixer
    HANDLE                  hDirectDraw;        // user mode DDraw handle
    HANDLE                  hSurfaceHandle;     // user mode surface handle
    RECT                    DirectDrawRect;     // portion of surface locked
    union {
  LONG               lSurfacePitch;  // Contains surface pitch a.k.a stride
         DWORD              Reserved1;
    };
    // Reserved fields, never reference these
    DWORD                   Reserved2;
    DWORD                   Reserved3;
    DWORD                   Reserved4;
} KS_FRAME_INFO, *PKS_FRAME_INFO;

Los minidrivers deben usar el miembro biWidth de la estructura KS_BITMAPINFOHEADER como ancho de superficie.

(KS_VIDEOINFOHEADER. indexHeader es de tipo KS_BITMAPINFOHEADER. KS_DATARANGE_VIDEO. VideoInfoHeader es de tipo KS_VIDEOINFOHEADER).

Si KS_FRAME_INFO. lSurfacePitch tiene un valor distinto de cero, el minidriver debe usar lSurfacePitch como ancho o paso para el búfer especificado en el KSSTREAM_HEADER relacionado. De lo contrario, la imagen de salida aparece engrasada.