[FFmpeg-user] Revisit FFmpeg Frame Lost
JIA Pei
jp4work at gmail.com
Sat Feb 16 00:41:47 CET 2013
Hi, all:
Sorry to bug all of you. This is actually a very old topic, but I still
would like to mention it again.
Actually what I've done so far is:
1) using the following 2 commands to create 2 video files from the same
image sequence (268 images in total)
*ffmpeg -i %3d video.mpg*
*ffmpeg ii %3d video.mp4*
2) trying to use the following patch of code to decode these 2 video files
--- in the following patch, I just count the number of frames in these 2
video files.
int e = ERROR_NONE;
AVPacket pkt;
av_init_packet(&pkt);
if( av_read_frame(this->m_pFormatCtxDec, &pkt) < 0)
{
return (e = ERROR_ENDOFFILE);
}
if(pkt.stream_index == this->m_iVideoStreamIdx)
{
int got_picture = 0;
int len = avcodec_decode_video2(this->m_pCodecCtxDecVideo,
this->m_pVideoFrame,
&got_picture,
&pkt);
if(!got_picture)
return (e = ERROR_GOTPICTUREPTR);
if(len < 0)
return (e = ERROR_VIDEODECODING);
++this->m_iNbOfFrames;
}
As mentioned in *av_read_frame()* documentation,
*For video, the packet contains * exactly one frame*
So, what I've been expecting is: this->m_iNbOfFrames
should be equal to 268 (total number of frames inside video files. )
However,
for .mpg, I got 267 images after decoding; (lack of 1 frame)
for .mp4, I got 260 images after decoding (lack of 8 frames)
It seems http://ffmpeg.org/doxygen/trunk/api-example_8c-source.html is able
to handle the "frame lost" issue, but it uses* fread()* instead of *
av_read_frame()*. If I insist on using *av_read_frame()*, how can I avoid
this "frame lost" issue?
Please do help.. Thank you very much.
--
Pei JIA
Email: jp4work at gmail.com
cell: +1 604-362-5816
Welcome to Vision Open
http://www.visionopen.com
More information about the ffmpeg-user
mailing list