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.
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user