[Libav-user] Calculating the number of bytes in YUV planes

Sampsa Riikonen sampsa.riikonen at iki.fi
Mon Apr 23 08:16:03 EEST 2018


Dear List,

I am decoding H264 into YUV and using the YUV bitmaps in a custom 
application.

For av pixel formats

AV_PIX_FMT_YUV420P

AV_PIX_FMT_YUVJ420P

I calculate the number of bytes in each plane like this (av_frame is 
AVFrame*):

y_size =(GLsizei)( (av_frame->height)*(av_frame->linesize[0]) );
u_size =(GLsizei)( (av_frame->height/2)*(av_frame->linesize[1]) );
v_size =(GLsizei)( (av_frame->height/2)*(av_frame->linesize[2]) );

Question 1: Is there a more "standard" way of doing this?  Here I am 
using "outside" information by assuming that "height/2".  Can I get the 
number of bytes in each plane (safely) somewhere from the AVCodecContext 
or AVFrame structures directly?

Then, accessing the data itself:

av_frame->data[0] has y_size bytes

av_frame->data[1] has u_size bytes

av_frame->data[2] has v_size bytes

Question 2: Can I assume that data[0]..data[2] is a continuous block of 
memory?

Regards,

Sampsa




More information about the Libav-user mailing list