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