<div dir="rtl"><div style="direction: ltr;">av_read_frame does not return until the third frame arrives. This introduces 2 frames delay <u>before</u> the decoding.</div><div style="direction: ltr;"><br></div><div style="direction: ltr;">
Carmel</div><br><div class="gmail_quote"><div dir="ltr">2011/7/26 Alex Cohn <span dir="ltr"><<a href="mailto:alexcohn@netvision.net.il">alexcohn@netvision.net.il</a>></span></div><blockquote class="gmail_quote" style="margin:0 .8ex;border-left:1px #ccc solid;border-right:1px #ccc solid;padding-left:1ex;padding-right:1ex">
<div dir="ltr"><div class="gmail_quote"><div class="im">On Tue, Jul 26, 2011 at 08:44, כרמל מגן <span dir="ltr"><<a href="mailto:carmel.work@gmail.com" target="_blank">carmel.work@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 .8ex;border-left:1px #ccc solid;border-right:1px #ccc solid;padding-left:1ex;padding-right:1ex">

<div dir="rtl"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div dir="ltr">That won't help me, what I'm trying to achieve is minimum latency and currently the libav introduces 2 frames of latency on the transport alone, before the decoding. That's what I'm trying to solve</div>


<div dir="ltr"><br></div><div dir="ltr">Carmel</div></blockquote></div></blockquote></div><div><br>Why will this not help you?<br><br>The scenario is as follows:<br><br>1. av_read_frame(pFormatCtx, &packet) <br>
    gives you the first packet.<br>
    make sure that packet.stream_index corresponds to the video stream<br>
    and (packet.flags & AV_PKT_FLAG_KEY) != 0m i.e. this is an I-frame.<br>
<br>2. res = avcodec_decode_video2(pCodecCtx, decodedFrame, &frameFinished, &packet)<br>
    returns positive, but frameFinished is 0. <br>
    This happens because pCodecCtx->max_b_frames > 0.<br>
    <br>
<br>
3. repeat step 2 again (immediately, don't wait for the next frame on input!!). <br>    If you have pCodecCtx->max_b_frames == 1, frameFinished will be true now. <br>    In your case, it is probably 2, therefore repeat step 2 once more.<br>

<br>4. Now you have the decodedFrame OK. Display it, and go back to 1.<br><br>The latency for the first frame will be 3*time of avcodec_decode_video2(). For the second frame and on, you will get decodedFrame in one cycle.<br>

<br>Please note that you should not perform the trick of looping step 2 if the input packet is not I-frame. For P-frames, you will get wrong output.<br><br>Regards,<br><font color="#888888">Alex<br><br></font></div><div class="im">
<blockquote class="gmail_quote" style="margin:0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);border-right:1px solid rgb(204, 204, 204);padding-left:1ex;padding-right:1ex">
<div dir="rtl"><div style="direction:ltr"></div><div class="gmail_quote"><div dir="ltr">2011/7/26 Alex Cohn <span dir="ltr"><<a href="mailto:alexcohn@netvision.net.il" target="_blank">alexcohn@netvision.net.il</a>></span></div>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>On Tuesday, July 26, 2011, כרמל מגן <<a href="mailto:carmel.work@gmail.com" target="_blank">carmel.work@gmail.com</a>> wrote:<br>


> I don't have b-frames in the stream, and anyway, since I do the decoding myself, and not through the libav, I want it to leave the logic to me and just pass everything as it arrives. Is there anyway to cause it to work that way?<br>



> Carmel<br><br></div>Send the first frame to decoder in a loop until you receive output.<br><br>בהצלחה<br><font color="#888888">Alex Cohn</font><br></div></blockquote></div></div></blockquote></div></div><br></div>
<br>_______________________________________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org">Libav-user@ffmpeg.org</a><br>
<a href="http://ffmpeg.org/mailman/listinfo/libav-user" target="_blank">http://ffmpeg.org/mailman/listinfo/libav-user</a><br>
<br></blockquote></div><br></div>