mmpeg video ffmpeg libavcodec stride

video - mmpeg - ffmpeg wiki



¿Alguien puede ayudar a comprender AVFrame.linesize[]? (2)

Echa un vistazo a la descripción de los formatos de cuadros de video:

Verá que los formatos se dividen en dos grandes grupos: empaquetado y plano, dependiendo de si los componentes se mantienen separados o intercalados. Las zancadas tienen un significado ligeramente diferente para ellas, y básicamente son la cantidad de bytes que debe omitir para avanzar una fila.

Intenté encontrar lo que significa cada celda de AVFrame.linesize[] , pero no lo encontré.

Como entendí el linesize[0] es el ancho, el linesize[1] es la altura.

  1. Si tengo razón, ¿qué significan otras células?
  2. ¿Por qué después de avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet); solo el tamaño de línea [0] tiene el valor y las otras celdas son siempre 0?

ACTUALIZADO

Creo que AVFrame.data [i] y AVFrame.linesize [i] son ​​los datos de un color específico en la fila y la longitud de la fila, ¿estoy en lo cierto?


En el caso de datos planares, como YUV420 , el linesize[i] contiene zancada para el i -ésimo plano.

Por ejemplo, para el cuadro 640x480 data[0] contienen un puntero al componente Y , los data[1] y los data[2] contienen punteros a los planos U y V En este caso, linesize[0] == 640 , linesize[1] == linesize[2] == 320 (porque los planos U y V son menores que la mitad del plano Y )

En el caso de datos de píxeles ( RGB24 ), solo hay un plano ( data[0] ) y linesize[0] == width * channels ( 640 * 3 para RGB24 )