[Libav-user] Seeking in a video with interframes

Alex Cohn alexcohn at netvision.net.il
Thu Jun 2 12:07:22 CEST 2011


IIRC, some decoders may accept request_sample_format field or other
"hints" in AVCodecContext (see libavcodec/avcodec.h).

Alex

On Thu, Jun 2, 2011 at 1:33 AM, Jaymie Strecker <jstrecker at kosada.com> wrote:
> Alex, thanks for your reply. I'm not sure what you mean by "color conversion or filtering".  You're referring to something like sws_scale? This is basically my read/decode loop for seeking--
>
> // for each frame from the keyframe to the frame you want:
> do {
>   av_read_frame(pFormatCtx, &packet);
>   if(packet.stream_index==videoStream)  {
>       avcodec_decode_video2(pCodecCtx, captureFrame, &gotPicture, &packet);
>   }
>   av_free_packet(&packet);
> } while (! gotPicture);
>
> There's no color conversion or filtering in there, right?
>
> -Jaymie
>
>
> On Jun 1, 2011, at 4:01 PM, Alex Cohn wrote:
>
>> I am afraid you are out of luck there. You can use AVSEEK_FLAG_ANY
>> only if you are not interested in the decoded results. For example,
>> this way you can extract some metadata, or start read process to reach
>> the next I-frame.
>>
>> There are some optimizations to consider for approach (1), though. For
>> example, make sure you request no color conversion or filtering for
>> the frames that you do not need.
>>
>> Alex
>>
>> On Wed, Jun 1, 2011 at 9:15 PM, Jaymie Strecker <jstrecker at kosada.com> wrote:
>>> If you want to seek to an arbitrary frame in a video with interframes, what are your options?
>>>
>>> As I understand it, you should be able to:
>>> (1) seek to the previous keyframe and then enter a read/decode loop until you reach the frame you want, or
>>> (2) pass AVSEEK_FLAG_ANY to the seek function (av_seek_frame or avformat_seek_file).
>>>
>>> Does (2) work? I've tried it with both seek functions, and with various configurations of avcodec_flush_buffers (flush before seeking, after seeking, or not at all) -- but, at best, it results in frames with artifacts. If it makes a difference, I'm working with H.264 videos.
>>>
>>> So, right now I'm using (1) but the read/decode loop is slow. Is there a faster way to seek?
>>>
>>> -Jaymie
>>> _______________________________________________
>>> Libav-user mailing list
>>> Libav-user at ffmpeg.org
>>> http://ffmpeg.org/mailman/listinfo/libav-user
>>>
>> _______________________________________________
>> Libav-user mailing list
>> Libav-user at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/libav-user
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>


More information about the Libav-user mailing list