[Libav-user] Regarding decoding the video data
Alexandre Millette
amillett at matrox.com
Tue Aug 7 14:53:13 CEST 2012
Hello,
Mohd Arshad Saleem wrote:
> We are working on H264 decoder side in which we are trying to decode the
> video data by using avcodec_decode_video() API.
avcodec_decode_video() is deprecated, you should use
avcodec_decode_video2().
> 1) Just wanted to know the size or length of decoded data which we are
> receiving and in which field of structure the decoded data is getting
> stored.
The second parameter of avcodec_decode_video2 is a pointer to a AVFrame
structure which will be filled with the decoded data upon returning.
AVFrame.data is an array that contains the decoded data, separated by
channels (data[0] would be the Y data in YUV).
Be sure to allocate the AVFrame first with avcodec_alloc_frame() and use
sws_scale() if you wish to convert your decoded data from any format
(usually YUV) to a more convenient (RGB) format.
As for the size of the decoded data, you can use:
int numBytes = avpicture_get_size( mpCodecCtx->pix_fmt,
mpCodecCtx->width, mpCodecCtx->height);
Where mpCodecCtx is your AVCodecContext structure pointer.
Although this would return the total size of the data decoded by
avcodec_decode_video2 and not the size of each channel. You could also
use AVFrame.linesize[i] * AVCodecContext.height to get the size of the
array reserved for the i channel.
Again, you can use sws_scale() to convert to a RGB format and simplify
your processing (assuming you can afford the performance cost).
Hope this helps,
Alex M.
More information about the Libav-user
mailing list