Introducción
Desde hace algunos años, las tarjetas de vídeo implementan en su GPU (Unidad de Proceso Gráfico) la lógica necesaria para realizar ciertos procesos relacionados con la manipulación o decodificación de vídeo de manera que libera a la CPU de estas tareas. Al principio se trató de acelerar el MPEG2 y últimamente, los esfuerzos van dirigidos también al H.264 AVC y al VC-1, los dos códecs por excelencia de la Alta Definición.
Las tarjetas más conocidas para ello son la serie HD y superior de ATI y la 8x00 y superior de Nvidia, pueden ver mas detalles sobre ellas en la wiki. También los últimos chipsets de Intel (HDx000) parecen estar viniendo equipados con capacidades de decodificación por hardware.
Para conseguir esta aceleración, es necesario tener instalado algún códec que esté preparado para ello. Los de pago más conocidos son el de Cyberlink en la versión del PowerDVD Ultra con el añadido para alta definición y el Nero en sus últimas versiones también la soporta, aunque no estoy seguro si solo en las ATI o también en las Nvidia.
Si nos vamos a las opciones gratuitas de código abierto, el Media Player Classic - Home Cinema incorpora un códec de H264 y VC-1 que soporta la aceleración por hardware, tanto en XP como en Vista y 7. Este software está en constante desarrollo, y en las versiones que van sacando poco a poco (se pueden bajar de
http://www.xvidvideo.ru) se puede ver que el avance es constante.
Aquellos que estén interesado en seguir su desarrollo o comentar cosas con sus autores, pueden acudir a este hilo de Doom9.
Las tarjetas soportadas, incluye tanto las ATI serie 2000 como las Nvidia 8000 y superiores y algunos chipsets de Intel.
Configuración
Partimos de que están montados los últimos drivers con soporte de aceleración para las tarjetas correspondientes así como el Haali. También, es necesario realizar unos cambios en el registry para optimizar el funcionamiento de las ATI HD2400 y 2600, posteriormente a montar los drivers. Yo no pude usar la aceleración para las pelis a 1080 hasta que no pasé la última versión de esta utilidad, mientras que si me funcionaba mientras usara resoluciones de 1440x900 o inferiores.
Así mismo, también es recomendable tener actualizadas las DirectX a través de este enlace a la descarga del actualizador de MS.
Pondré primero la configuración más sencilla usando el MPC - Home Cinema.
En ambas opciones, como usamos el MPC, en la sección de Internal Filters, desactivamos la de MKV para que se encargue de manejar los Matroska el Haali splitter que deberemos de tener instalado, ya que por las pruebas que he realizado, el splitter de matroska interno del MPC da errores en algunas películas (Brazil) que impiden que se active la aceleración. También es aconsejable configurar el haali para que se ocupe de los AVI y desactivar también el splitter interno del MPC puesto que da problemas con algunos contenidos en este formato.
Media Player Classic - Home Cinema con códecs propios
Una vez instalado el programa, con el botón derecho encima de la pantalla, nos vamos a Opciones, Reproducción, Salida, y elegimos uno de los modos de render que soportan DXVA, que son Overlay Mixer, VMR7, VMR9 o VMR9 renderless (éste es el más recomendado), en XP y el EVR en el Vista. En caso de que necesitemos subtítulos, es importante que no habilitemos filtros externos, sino solamente el soporte interno que trae el propio MPC-HC, pero en este caso, tendremos que usar de render el VMR9 renderless para los usuarios de XP y el EVR Custom para los de Vista.
Comentar también que una de las mejoras que tiene esta versión del MPC es el soporte de un modo especial para evitar el Tearing que se selecciona en esta pantalla y que es el modo Direct3D.
Después de esto, nos vamos a la sección de Filtros Internos y nos aseguramos de que estén marcados tanto el H264/AVC (DXVA) y el VC-1 (DXVA). En caso de que tengamos una máquina que no pueda por si sola con algunas películas (como la mía Laughing ) y usemos normalmente el CoreAVC, desactivaremos también el H264/AVC (FFmpeg) y de esta manera, si tenemos configurado en filtros externos el CoreAVC, en caso de que la película no se compatible con el modo DXVA, el programa automáticamente elegirá el CoreAVC para descomprimirla.
En realidad, este programa, al estilo del VLC, se basta para decodificar con sus filtros internos casi todo lo que le echemos, por lo que suele ser innecesario montar ningún filtro/códec adicional para ver las películas más habituales.
También comentar que los filtros con soporte DXVA del MPC-HC también se pueden instalar independientemente del MPC-HC por si alguien los quiere usar con otra aplicación.
Si queremos tener la opción de usar subtítulos, deberemos prescindir de filtros externos (como el vobsub) puesto que estos hacen que se desactive la aceleración, y usar los internos del MPC que funcionan perfectamente, y para ello, deberemos de tener en la sección Output elegida la opción VMR9 renderless, aunque he comprobado que la aceleración funciona tanto con WMR9 como con la System Default. Si hacemos modificaciones en esta opción, es aconsejable cerrar y volver a abrir el MPC.
Estás pruebas han sido realizadas con mi Club3d ATI HD 2400 Pro en AGP y el MPC-HC versión 1862.
Parámetros de codificación necesarios para que un rip en x.264 sea compatible con DXVA
Parece ser que el problema del porque no funcionan la mayoría de los rips con la aceleración de hardware, es debido a que los controladores y códecs que se encargan de esto están pensados y diseñados solamente para contemplar el estándar de codificación de los H.264 que viene en los HD-DVD y Blu-Ray.
Esto implica que el nivel del perfil usado para la codificación o IDC debe ser el 4.1 y también debe contemplar las limitaciones en algunos parámetros que este perfil implica. Digamos que lo de los perfiles se usa para definir unos ciertos parámetros que se han de usar al codificar una película. Por defecto, el x264, el principal códec usado para generar los rips que solemos ver por estos lares, define un nivel de 5.1 para ese IDC, y éste es el primer escollo. El códec de Cyberlink desde que ve esta cabecera en el fichero a reproducir, empieza actuar de manera extraña, lo mas normal, es que en caso de que se llegue a ver, los cuadros por segundo caigan de su velocidad normal a una mucho mas lenta (en la mucho casos causa el bug de los 20 fps, en otros, como Brazil la caída es casi a 0 fps).
Es importante subrayar que con las últimas versiones del MPC-HC esto ya no es necesario, puesto que no solo se basa en la cabecera para saber si el vídeo cumple con las especificaciones necesarias para ser tratado por el DXVA.
De hecho, desde hace algún tiempo, las Nvidia y recientemente, a partir de los Catalist 10.4, también las ATI de la serie 4x00 y superior son capaces de decodificar por hard algunas películas de nivel 5.1. Para ello, en el filtro interno DXVA del MPC-HC existe una opción para deshabilitar el chequeo de Ref frames o de Nivel con la idea de pasárselo tal cual a la tarjeta gráfica.
Actualmente se está trabajando en un código para detectar si la tarjeta es capaz de acelerar o no este tipo de películas y habilitar o deshabilitar automáticamente el uso del DXVA.
Si queremos entrar mas en detalle, hay una tabla que el compañero Tamago puso en el hilo "Gráficas con Aceleración por Hardware" que paso a reproducir y que está cogido de un hilo de avsforums donde está la información más actualizada sobre el tema.
En la tabla se mencionan los parámetros que parecen estar influyendo directamente en la compatibilidad con la DXVA dependiendo del tamaño del vídeo. Digamos que expone cual es el máximo de estos parámetros para un tamaño de imagen dado. Si el fichero que tenemos sobrepasa estos parámetros, entonces lo mas seguro es que de problemas al intentar habilitar la DXVA o sencillamente no se reproduzca.
Hay dos tablas, una para versiones del x264 superiores a la 721 y otra para inferiores, ya que a partir de la 721 se han empezado a aplicar parches para facilitar el que se codifique pensando en que después los rips sean compatibles con la DXVA.
Cita:
Resolution: Max DPB Size (x264 revision 721+ encoder settings)
L4.1
1920x1088: 4 (--ref 4 --bframes 3)
1920x864: 5 (--ref 5 --bframes 3)
1920x720: 6 (--ref 6 --bframes 3)
L4.1
1280x720: 9 (--ref 9 --bframes 3)
1280x648: 10 (--ref 10 --bframes 3)
1280x588: 11 (--ref 11 --bframes 3)
1280x540: 12 (--ref 12 --bframes 3)
1280x498: 13 (--ref 13 --bframes 3)
1280x462: 14 (--ref 14 --bframes 3)
1280x432: 15 (--ref 15 --bframes 3)
1280x405: 16 (--ref 16 --bframes 3)
L3.1
720x(any): 8 (--ref 8 --bframes 3)
720x576: 11 (--ref 11 --bframes 3)
720x480: 13 (--ref 13 --bframes 3)
Resolution: Max DPB Size (x264 revision < 721 encoder settings)
L4.1
1920x1088: 4 (--ref 3 --bframes 3 --no-b-pyramid)
1920x864: 5 (--ref 4 --bframes 3 --no-b-pyramid)
1920x720: 6 (--ref 5 --bframes 3 --no-b-pyramid)
L4.1
1280x720: 9 (--ref 8 --bframes 3 --no-b-pyramid)
1280x648: 10 (--ref 9 --bframes 3 --no-b-pyramid)
1280x588: 11 (--ref 10 --bframes 3 --no-b-pyramid)
1280x540: 12 (--ref 11 --bframes 3 --no-b-pyramid)
1280x498: 13 (--ref 12 --bframes 3 --no-b-pyramid)
1280x462: 14 (--ref 13 --bframes 3 --no-b-pyramid)
1280x432: 15 (--ref 14 --bframes 3 --no-b-pyramid)
1280x405: 16 (--ref 15 --bframes 3 --no-b-pyramid)
L3.1
720x(any): 8 (--ref 10 --bframes 3 --no-b-pyramid)
720x576: 11 (--ref 10 --bframes 3 --no-b-pyramid)
720x480: 13 (--ref 12 --bframes 3 --no-b-pyramid)
Esto está en constante actualización, ya que se están realizando pruebas y cambios para confirmar que esto se cumple con todas las películas.
Resumo a continuación las razones por las que una película determinada pueden no funcionar con aceleración de hardware:
Los fallos de los mkv son por 5 razones:
1. Demasiados frames de referencia (según la tabla de arriba)
2. Resoluciones que no son múltiplos de 16 (vertical normalmente)
3. Problemas con el muxer usado. Algunas películas, basta con volver a muxearlas con la última versión del mkvmerge para que funcionen
4. Mal definido en la cabecera el Aspect Ratio (solo se permite 1:1, 4:3, 5:4 y 16:9)
5. Perfil de compresión mal definido (5.1 fallará la mayoría de las veces por lo que es preferible usar el 4.1)
Y también hay 5 soluciones para que los ficheros funcionen:
1. Cambiando en la cabecera la información de los frames de referencia con el H264Info, aunque la mayor parte de las veces causa corrupción del vídeo, así que mejor lo dejamos
2. Cambiar la resolución a un múltiplo de con el h264info, algunas veces causa una línea de color o gris debajo de la imagen pero funciona perfectamente
3. Volver a remuxear los ficheros con la última versión del mkvmerge
4. Cambiar el Aspect Ratio (SAR) con el h264info
5. Cambiar el perfil (IDC) con el h264Info o con el IDCChanger