[FFmpeg-devel] [PATCH] fftools/ffmpeg.c: allow forcing input framerate on streamcopy
Leo Izen
leo.izen at gmail.com
Mon Apr 1 18:12:23 EEST 2019
Bumping this? I'd like to request a review because I think being able to
set the input framerate on streamcopy is worthwhile. In case of
formatting issues with the reply email, I've attached the patch file as
well.
In terms of testing, I've tested this with various input formats
(matroska, mp4, avi, nut) and various output formats as well, both
shrinking and growing the framerate.
On 1/9/19 5:26 PM, Leo Izen wrote:
> ---
> fftools/ffmpeg.c | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
> index 544f1a1cef..f4bd5d97b7 100644
> --- a/fftools/ffmpeg.c
> +++ b/fftools/ffmpeg.c
> @@ -2038,12 +2038,14 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
> if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO)
> ost->sync_opts++;
>
> - if (pkt->pts != AV_NOPTS_VALUE)
> + if (ist->framerate.num)
> + opkt.pts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->mux_timebase) - ost_tb_start_time;
> + else if (pkt->pts != AV_NOPTS_VALUE)
> opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->mux_timebase) - ost_tb_start_time;
> else
> opkt.pts = AV_NOPTS_VALUE;
>
> - if (pkt->dts == AV_NOPTS_VALUE)
> + if (pkt->dts == AV_NOPTS_VALUE || ist->framerate.num)
> opkt.dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase);
> else
> opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->mux_timebase);
> @@ -2597,7 +2599,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo
> avpkt = *pkt;
> }
>
> - if (pkt && pkt->dts != AV_NOPTS_VALUE) {
> + if (pkt && pkt->dts != AV_NOPTS_VALUE && !ist->framerate.num) {
> ist->next_dts = ist->dts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q);
> if (ist->dec_ctx->codec_type != AVMEDIA_TYPE_VIDEO || !ist->decoding_needed)
> ist->next_pts = ist->pts = ist->dts;
> @@ -3153,8 +3155,15 @@ static int init_output_stream_streamcopy(OutputStream *ost)
> else
> sar = par_src->sample_aspect_ratio;
> ost->st->sample_aspect_ratio = par_dst->sample_aspect_ratio = sar;
> - ost->st->avg_frame_rate = ist->st->avg_frame_rate;
> - ost->st->r_frame_rate = ist->st->r_frame_rate;
> +
> + if (ist->framerate.num) {
> + ost->st->avg_frame_rate = ist->framerate;
> + ost->st->r_frame_rate = ist->framerate;
> + } else {
> + ost->st->avg_frame_rate = ist->st->avg_frame_rate;
> + ost->st->r_frame_rate = ist->st->r_frame_rate;
> + }
> +
> break;
> }
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-fftools-ffmpeg.c-allow-forcing-input-framerate-on-st.patch
Type: text/x-patch
Size: 2429 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20190401/8466317c/attachment.bin>
More information about the ffmpeg-devel
mailing list