问题
I tried to find what each cell of AVFrame.linesize[]
means, but I didn't found.
As I understood linesize[0]
is the width, linesize[1]
is the height.
- If I'm right what does other cells mean?
- why after
avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);
only linesize[0] has the value and other cells are always 0?
UPDATED
I think AVFrame.data[i] and AVFrame.linesize[i] are the data of specific color in the row and the length of the row, am I correct?
回答1:
In the case of planar data, such as YUV420
, linesize[i]
contains stride for the i
-th plane.
For example, for frame 640x480
data[0]
contains pointer to Y
component, data[1]
and data[2]
contains pointers to U
and V
planes. In this case, linesize[0] == 640
, linesize[1] == linesize[2] == 320
(because the U
and V
planes is less than Y
plane half)
In the case of pixel data (RGB24
), there is only one plane (data[0]
) and linesize[0] == width * channels
(640 * 3
for RGB24
)
回答2:
Have a look at description of video frame formats:
- YUV pixel formats
- Video Media Types - Image Stride
You will see that formats are split into two big groups: packed and planar, depending on whether the components are kept separately or interleaved. Strides have slightly different meaning for those, and basically they are number of bytes you need to skip to advance by a row.
来源:https://stackoverflow.com/questions/13286022/can-anyone-help-in-understanding-avframe-linesize