Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo contiene instrucciones para generar histogramas durante la descodificación de vídeo utilizando las API de vídeo de Direct3D 11 o 12.
Comprobar las funcionalidades del histograma del dispositivo de vídeo
Antes de intentar generar histogramas, debe comprobar si el dispositivo de vídeo actual admite la característica de histograma de descodificación de vídeo.
Direct3D 12
Llame a ID3D12VideoDevice::CheckFeatureSupport para comprobar los detalles de soporte técnico de las operaciones de descodificación de vídeo de Direct3D 12. Pase el valor D3D12_FEATURE_VIDEO_DECODE_HISTOGRAM de la enumeración D3D12_FEATURE_VIDEO para especificar que está solicitando compatibilidad con los histogramas de descodificación de vídeo.
Direct3D 11
Llame a ID3D11VideoDevice2::CheckFeatureSupport y pase el valor D3D11_FEATURE_VIDEO_DECODER_HISTOGRAM del D3D11_FEATURE_VIDEO para determinar si los histogramas son compatibles con el dispositivo actual.
Habilitar histograma durante la descodificación
El autor de la llamada habilita la colección de datos del histograma proporcionando los búferes en los que se almacenan los datos del histograma. Un búfer de salida de histograma nulo para un componente determinado indica que la colección de histogramas está deshabilitada.
Direct3D 12
Para proporcionar búferes de salida para recibir datos de histograma mediante Direct3D 12, debe crear la lista de comandos de descodificación mediante el método ID3D12VideoDecodeCommandList1::D ecodeFrame1. Este método toma una estructura D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 como argumento. D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 tiene un campo de tipo D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM, que permite especificar un ID3D12Resource en el que se generan los datos del histograma.
Direct3D 11
La interfaz ID3D11VideoContext3 proporciona el método DecoderBeginFrame1, que permite proporcionar una o varias interfaces ID3D11Buffer en las que se generarán los datos del histograma. El D3D11_VIDEO_DECODER_HISTOGRAM_COMPONENT para especificar los componentes para los que desea que se generen datos de histograma.
Formato del búfer
La salida del histograma de descodificación se escribe en un búfer como un contador entero por componente. El formato del búfer es un valor de 32 bits por contenedor. Un dispositivo puede usar una profundidad de bits del contador entero inferior a 32 bits, pero debe ser de 16, 24 o 32 bits. Si es así, el valor del contador se almacena en los bits inferiores y los bits superiores sin usar son cero. Cuando el recuento de un contenedor supera el valor máximo, el dispositivo establece el valor máximo en su lugar. Los dispositivos notifican el número de contenedores admitidos, que deben ser un valor que sea una potencia de 2. El número mínimo de contenedores necesarios para los dispositivos que admiten esta característica es 64.
Debe proporcionar un búfer con un desplazamiento alineado de 256 bytes y un tamaño que sea el número de contenedores admitido multiplicado por el tamaño del contenedor (4 bytes) para cada componente solicitado. La colocación del contenedor viene determinada por:
binIndex = floor(value / [max value of channel + 1] * (countBins))
Cuando un formato define los bits útiles de un componente como menor que el número de bits de almacenamiento (por ejemplo, P010 usa los 10 bits superiores de 16 bits de almacenamiento de componentes), solo se consideran los bits útiles (P010 se trata como un valor de 10 bits).
El dispositivo de vídeo informa de los componentes compatibles. Si el autor de llamada no desea un histograma para un componente determinado, especifican nullptr. Si el controlador no admite un histograma para un componente determinado, el búfer de histograma de ese componente debe ser nullptr.
Cuando se admiten varios componentes, la aplicación puede solicitar cualquier combinación de componentes por descodificación de fotograma. Por ejemplo, si los informes de hardware admiten componentes Y, U y V, la aplicación puede solicitar el histograma Y solo para el fotograma uno, el histograma U solo para el fotograma dos y el histograma V solo para el fotograma 3. También pueden solicitar cualquier combinación de dos componentes o de los tres componentes.
Las aplicaciones proporcionan un desplazamiento y un puntero/controlador de búfer independientes para cada componente solicitado. Este puntero puede apuntar al mismo recurso que otro componente o un recurso independiente. El desplazamiento permite colocar varios componentes en el mismo búfer, pero la región de salida especificada por el desplazamiento y el tamaño del histograma no deben superponerse a otra salida del componente de histograma. El histograma también se puede escribir en el mismo búfer que otro contenido no relacionado, como cuando se usa en una estrategia de subasignación de recursos.
El runtime de D3D valida que los autores de llamadas solo habiliten el histograma para los componentes admitidos, que el desplazamiento del búfer está alineado y que el tamaño del búfer sea suficiente para el número notificado de contenedores.
Contenido protegido
Los búferes de histograma deben tener la misma protección de superficie que la superficie de salida de descodificación. Si la superficie de salida de descodificación no es un recurso protegido, el búfer de histograma no debe ser un recurso protegido. Si la superficie de salida de descodificación está protegida, el histograma debe ser un recurso protegido.
Temas relacionados
- [API de vídeo de Direct3D 12] (direct3d-12-video-apis.md) [Guía de programación de Media Foundation] (media-foundation-programming-guide.md)