<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>