<div dir="ltr">The correct process is described at <a href="https://ffmpeg.org/doxygen/3.3/group__lavc__encdec.html" target="_blank">https://ffmpeg.org/doxygen/3.3/group__lavc__encdec.html</a>.<div><br></div><div>To summarize: after each call to avcodec_send_packet, you loop, calling avcodec_receive_frame and processing returned frames until you get AVERROR(AGAIN) or an error. When you get AVERROR(AGAIN), it is time to call avcodec_send_packet with the next received packet, then start the loop again. Any other non-zero return from avcodec_receive_frame is a real error, which you have to deal with as you wish. Note that you can receive 0, 1, or more frames for each packet you send, depending on the codec.</div><div><br></div><div>When encoding, it is the same, with avcodec_send_frame and avcodec_receive_packet.</div><div><br></div><div>- Richard</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Sep 8, 2020 at 6:09 AM Jérôme SALAYET <<a href="mailto:jerome.salayet@hymatom.fr" target="_blank">jerome.salayet@hymatom.fr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="FR">
<div>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td style="padding:0.75pt">
<p class="MsoNormal">Hello, <u></u><u></u></p>
<p class="MsoNormal">I recently want to use the last FFMPEG release version to decode video packets. avcodec_decode_video2 is deprecated so I want to use
<span>avcodec_send_packet and avcodec_receive_frame<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>I’m just not sure waht about doing when receiving eror like AVERROR(EAGAIN),
</span>AVERROR_EOF… my code is below.<u></u><u></u></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New";color:blue">int</span><span style="font-size:10pt;font-family:"Courier New""> FFMpegImgDecode( AVCodecContext* lpCodecCtx, AVPacket* lpAVPacket, AVFrame*
 lpAVFrame)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">{
<span style="color:blue">int</span> iResult       = 1;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New""> 
<span style="color:blue">int</span> iDecodeResult = 1;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">           
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">     
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New";color:blue">  if</span><span style="font-size:10pt;font-family:"Courier New""> ((lpCodecCtx!=NULL) && (lpAVFrame!=NULL) && (lpAVPacket!=NULL))<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">   {
<span style="color:blue">if</span> (m_lpCodecCtx->codec_type == AVMEDIA_TYPE_VIDEO)
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">      { iResult = lpfnavcodec_send_packet( m_lpCodecCtx, &m_lpPacket);
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New";color:blue">        if</span><span style="font-size:10pt;font-family:"Courier New""> (iResult == AVERROR_EOF)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">         { iResult = 0;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">         }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">       <span style="color:blue">if</span> (iResult == 0)
<span style="color:green">// success<u></u><u></u></span></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">         { iDecodeResult = lpfnavcodec_receive_frame(m_lpCodecCtx, m_lpFrame);<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">          
<span style="color:green">// iDecodeResult == 0                => Success<u></u><u></u></span></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">          <span style="color:green">// iDecodeResult == AVERROR(EAGAIN)) => Need to feed the next input frame<u></u><u></u></span></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">          <span style="color:green">// else                              => Error<u></u><u></u></span></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">          
<span style="color:blue">if</span> (iDecodeResult==AVERROR(EAGAIN))<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">            { printf(<span style="color:red">"avcodec_receive_frame ERROR [AVERROR(EAGAIN)]\r\n"</span>);<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">            }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">          
<span style="color:blue">if</span> ((iDecodeResult!=0) && (iDecodeResult!=AVERROR(EAGAIN)))<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">            { char szErrorText[255];<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">              av_strerror( iResult, szErrorText,
<span style="color:blue">sizeof</span>(szErrorText));<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">              printf(<span style="color:red">"avcodec_receive_frame ERROR [%i][%s]\r\n"</span>, iResult, szErrorText);<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">            }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">         }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">       <span style="color:blue">else<u></u><u></u></span></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">         { char szErrorText[255];<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">           av_strerror( iResult, szErrorText,
<span style="color:blue">sizeof</span>(szErrorText));<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">           printf(<span style="color:red">"avcodec_send_packet ERROR [%i][%s]\r\n"</span>, iResult, szErrorText);<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">           iDecodeResult = iResult;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">     
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">        }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">      }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">   }<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New";color:blue">  return</span><span style="font-size:10pt;font-family:"Courier New""> iDecodeResult;   
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">}<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>Also sometimes I receive error :
</span><span lang="EN-US">avcodec_send_packet ERROR [-1094995529][Invalid data found when processing input].<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">It is when I decompress a h264 video stream from a camera. Do you think it is possible that this error can arrive if I have some network trouble with the camera.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Regards,<u></u><u></u></span></p>
</td>
<td style="padding:0.75pt"></td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

_______________________________________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a><br>
<a href="https://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">https://ffmpeg.org/mailman/listinfo/libav-user</a><br>
<br>
To unsubscribe, visit link above, or email<br>
<a href="mailto:libav-user-request@ffmpeg.org" target="_blank">libav-user-request@ffmpeg.org</a> with subject "unsubscribe".</blockquote></div>