[Libav-user] Changing time_bases for decoder(mpeg2video) when sending packets with avcodec_send_packet().
Hristo Ivanov
hivanov.ffmailing at gmail.com
Mon Jun 4 13:51:43 EEST 2018
Hi
I am trying to implement my first video filter. Now I am looking at the
following example:
https://www.ffmpeg.org/doxygen/trunk/filtering_video_8c-example.html
In the function:
79 static int init_filters(const char *filters_descr)
we have this:
87 AVRational time_base =
fmt_ctx->streams[video_stream_index]->time_base;
later this time_base is used as argument for the 'in' buffer.
In the example there is no rescaling of the packets/frames, my guest is
that this is omitted in order to have a simpler example and the example
only works with decoders which do not change their timebase.
My questions:
1. Is it always a better idea to use the demuxers time_base (AVRational
time_base = fmt_ctx->streams[video_stream_index]->time_base;) as argument
to the input buffer? My guest is yes, as we have seen in the previous
messages the decoders time_base can change when packets are sent to be
decoded.
2. Isn't a rescale of the frame pts needed? Something like this:
1 ret = avcodec_receive_frame(dec_ctx, frame);
2 frame->pts = frame->best_effort_timestamp;
3
4 // Rescale the frame pts from decoder time_base back to stream
time_base.
5 frame->pts = av_rescale_q(frame->pts, dec_ctx->time_base,
fmt_ctx->streams[video_stream_index]->time_base;);
6
7 av_buffersrc_add_frame_flags(buffersrc_ctx, frame,
AV_BUFFERSRC_FLAG_KEEP_REF);
Thanks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20180604/477b2a01/attachment.html>
More information about the Libav-user
mailing list