a frame can consist of several packets. thats why you need to call av_decode_video2 multiple times until it has a fully decoded frame for you. the return values tell you how much data was read. you should adjust packet.data and packet.size by those values.
there a a lot of examples out there that show this. gr markus -- sent from ipad > On 27 aug. 2014, at 15:48, Krishna <[email protected]> wrote: > > Hi, > > I am writing an HEVC decoder and it seems that the first several frames are > not decoded by avcodec_decode_video2(). Here is my code snippet. The input is > an video-only stream (no audio). This is my function, that is called each > time I need a single frame (that is essentially what I want -- one frame at > a time). > > bool decode(pFormatCtx, pCodecCtx) > { > int gotaFrame=0; > int retVal = 0; > while (gotaFrame==0) { > > printf("1\t"); > > if ( !av_read_frame(pFormatCtx, &packet) ) { > if(packet.stream_index==videoStreamIndex) { > > // try decoding > retVal = avcodec_decode_video2(pCodecCtx, pFrame, &gotaFrame, > &packet); > printf("%d\t", retVal); > > if (gotaFrame) { // decode success. > > printf("2\t"); > > // dump to yuv ... not shown here. > > // cleanup > av_frame_unref(pFrame); > av_frame_free(&pFrame); > av_free_packet(&packet); > > return true; > } > } > } > } > } > > Here is the output of retVal: > > retval=33149 > retval=6715 > retval=767 > retval=264 > retval=126 > retval=147 > retval=286 > retval=140 > retval=141 > retval=7243 > retval=568 > retval=315 > retval=95 > retval=146 > retval=328 > retval=159 > retval=121 > retval=7010 > retval=571 > retval=309 > > After the retVal=309, gotaFrame becomes 1. Essentially, I have lost a lot of > frames. Can someone help me out here? > > How do I get one frame at a time? > > Thank you! > _______________________________________________ > Libav-user mailing list > [email protected] > http://ffmpeg.org/mailman/listinfo/libav-user _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
