N'importe qui peut aider dans la compréhension de AVFrame.linesize[]?
J'ai essayé de trouver ce que chaque cellule de AVFrame.linesize[]
moyens, mais je ne l'ai pas trouvée.
Ce que j'ai compris linesize[0]
est la largeur, linesize[1]
est à la hauteur.
- Si je suis juste de quoi d'autres cellules veux dire?
- pourquoi, après
avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);
seulement linesize[0] a la valeur et d'autres cellules sont toujours à 0?
Mis à JOUR
Je pense que AVFrame.data[i] et AVFrame.linesize[i] sont les données de couleur spécifique à la ligne et de la longueur de la ligne, ai-je raison?
Vous devez vous connecter pour publier un commentaire.
Dans le cas de plans de données, tels que
YUV420
,linesize[i]
contient de la foulée pour lai
-ème plan.Par exemple, pour le cadre
640x480
data[0]
contient pointeur versY
composant,data[1]
etdata[2]
contient des pointeurs versU
etV
avions. Dans ce cas,linesize[0] == 640
,linesize[1] == linesize[2] == 320
(parce que leU
etV
avions est moins queY
plan de la moitié)Dans le cas de données de pixels (
RGB24
), il n'existe qu'un seul plan (data[0]
) etlinesize[0] == width * channels
(640 * 3
pourRGB24
)avcodec_decode_video2(dc, yuvFrame, &got_picture, &h264packet);
si j'ai l'impressionlinesize
, ce n'est pas comme vous l'avez indiqué. pourquoi le linesize est aussi énorme(un grand 8 chiffres) ?Ont un coup d'oeil à la description de l'image vidéo en formats:
Vous verrez que les formats sont divisés en deux grands groupes: les paniers et plane, selon que les composants sont conservés séparément ou entrelacé. Des progrès ont un sens différent pour ceux, et ils sont essentiellement le nombre d'octets que vous avez besoin pour passer à l'avance par une rangée.