<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">Hi Carl,

The following is how I seek a frame backward:

    AVStream *stream = m_format_ctx->streams[m_video_index];
    int64_t time_av_time_base = 1 * AV_TIME_BASE / stream->avg_frame_rate.num;

    int64_t frame_span = av_rescale_q(time_av_time_base, AV_TIME_BASE_Q, stream->time_base);
    int64_t timestamp = m_current_pts - m_frame_span;

    int ok = av_seek_frame(m_format_ctx, m_video_index, timestamp, AVSEEK_FLAG_BACKWARD);
    avcodec_flush_buffers(m_codec_ctx);

If there is no straight way to solve this problem, I'd consider the cache frames method.
And do you konw
>is there any convenient way to know the index of the frame, which is now playing?

Thanks very much.

BR

xftzg

At 2013-03-25 18:42:53,"Carl Eugen Hoyos" <cehoyos> wrote:
>xftzg <xftzg2013> writes:
>
>> I want to perform a 'Step Forwards/Backwards' operation in my player
>
>This is not a trivial task.
>I believe there are two main approaches:
>You can cache as many frames as you believe the user will want 
>to step backwards or you seek backwards to the next keyframe 
>and decode (again) until the requested frame (this may take 
>considerable time).
>If your problem is that you cannot seek backwards to a keyframe, 
>please post code that allows to test this.
>
>Carl Eugen
>
>_______________________________________________
>Libav-user mailing list
>Libav-user@ffmpeg.org
>http://ffmpeg.org/mailman/listinfo/libav-user
</xftzg2013></cehoyos></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>