<div dir="ltr">Hi, <div><br></div><div>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). </div>
<div><br></div><div><div>bool decode(pFormatCtx, pCodecCtx)</div><div>{</div><div> int gotaFrame=0;</div><div> int retVal = 0;</div><div> while (gotaFrame==0) {</div><div><br></div><div> printf("1\t");</div>
<div><br></div><div> if ( !av_read_frame(pFormatCtx, &packet) ) { </div><div> if(packet.stream_index==videoStreamIndex) {</div><div><br></div><div> // try decoding</div><div> retVal = avcodec_decode_video2(pCodecCtx, pFrame, &gotaFrame, &packet);</div>
<div> printf("%d\t", retVal);</div><div><br></div><div> if (gotaFrame) { // decode success.</div><div><br></div><div> printf("2\t");</div><div><br></div>
<div> // dump to yuv ... not shown here. </div><div><br></div><div> // cleanup</div><div> av_frame_unref(pFrame);</div><div> av_frame_free(&pFrame);</div>
<div> av_free_packet(&packet);</div><div><br></div><div> return true;</div><div> }</div><div> }</div><div> }</div><div> }</div><div>}</div><div>
<br></div><div>Here is the output of retVal: </div><div><br></div><div><div>retval=33149<span class="" style="white-space:pre"> </span></div><div>retval=6715<span class="" style="white-space:pre"> </span></div><div>retval=767<span class="" style="white-space:pre"> </span></div>
<div>retval=264<span class="" style="white-space:pre"> </span></div><div>retval=126<span class="" style="white-space:pre"> </span></div><div>retval=147<span class="" style="white-space:pre"> </span></div><div>retval=286<span class="" style="white-space:pre"> </span></div>
<div>retval=140<span class="" style="white-space:pre"> </span></div><div>retval=141<span class="" style="white-space:pre"> </span></div><div>retval=7243<span class="" style="white-space:pre"> </span></div><div>retval=568<span class="" style="white-space:pre"> </span></div>
<div>retval=315<span class="" style="white-space:pre"> </span></div><div>retval=95<span class="" style="white-space:pre"> </span></div><div>retval=146<span class="" style="white-space:pre"> </span></div><div>retval=328<span class="" style="white-space:pre"> </span></div>
<div>retval=159<span class="" style="white-space:pre"> </span></div><div>retval=121<span class="" style="white-space:pre"> </span></div><div>retval=7010<span class="" style="white-space:pre"> </span></div><div>retval=571<span class="" style="white-space:pre"> </span></div>
<div>retval=309</div></div><div><br></div><div><span style="white-space:pre">After the retVal=309, gotaFrame becomes 1. Essentially, I have lost a lot of frames. Can someone help me out here? </span></div><div><br></div>
<div>
How do I get one frame at a time?</div><div><br></div><div>Thank you! </div>
</div></div>