Problemas con CMVideoFormatDescriptionCreateFromH264ParameterSets
Pregunta
He intentado crear CMVideoFormatDescriptionRef
con CMVideoFormatDescriptionCreateFromH264ParameterSets
pero falla con el error -12712 (que no parece estar definido en ningún encabezado)
Tomé mi SPS y PPS de un avcC
átomo de un archivo mov (creado por una aplicación de cámara de iPhone):
61 76 63 43 01 64 00 29 FF E1 00 10 67 64 00 29 AC 56 80 78 02 27 E5 9A 80
80 80 81 01 00 05 28 EE 04 F2 C0
SPS parece ser: 67 64 00 29 AC 56 80 78 02 27 E5 9A 80 80 80 81
...y el PPS: 28 EE 04 F2 C0
Precedí a SPS y PPS con sus longitudes de 4 bytes (probé también longitudes de 1 byte y 2 bytes con los mismos resultados) y emití la llamada así:
uint8_t sps[] = {0x00, 0x00, 0x00, 0x10, 0x67, 0x64, 0x00, 0x29, 0xAC, 0x56, 0x80, 0x78, 0x02, 0x27, 0xE5, 0x9A, 0x80, 0x80, 0x80, 0x81};
uint8_t pps[] = {0x00, 0x00, 0x00, 0x05, 0x28, 0xEE, 0x04, 0xF2, 0xC0};
uint8_t* props[] = {sps, pps};
size_t sizes[] = {0x14, 0x09}; // sizes include the 4-byte length
CMVideoFormatDescriptionRef formatDesc;
OSStatus formatCreateResult = CMVideoFormatDescriptionCreateFromH264ParameterSets(NULL, 2, props, sizes, 4, &formatDesc);
Obtengo -12712 como resultado cada vez (probé SPS/PPS desde varios archivos y transmisiones).
¿Tienes alguna idea de qué hago mal?(El código se verificó en Xcode6-Beta4 en Simulator).Preferiría evitar analizar SPS y PPS por mi cuenta y usar CMVideoFormatDescriptionCreate simple :-)
Solución
No incluya el tamaño de 4 bytes.Ni en las cargas útiles sps/pps, ni en los valores de tamaño.
Otros consejos
Te busqué en Google ;-)
Comprueba este código de Chromium
https://src.chromium.org/svn/trunk/src/content/common/gpu/media/vt_video_decode_accelerator.cc
Y esta respuesta sobre H.264 SPS/PPS NALU
Posibles ubicaciones para los conjuntos de parámetros de secuencia/imagen para flujo H.264