This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 1ccd2f6243b3d9336fb361018d83cbf9ce0ae1b9
Author:     Gyan Doshi <[email protected]>
AuthorDate: Sun Jan 11 16:48:32 2026 +0530
Commit:     Gyan Doshi <[email protected]>
CommitDate: Mon Jan 19 16:51:31 2026 +0530

    avcodec/bsf/setts: rescale TS when changing TB
    
    The setts bsf has an option to change TB. However the filter only
    changed the TB and did not rescale the ts and duration, so it
    effectively and silently stretched or squeezed the stream.
    
    The pts, dts and duration are now rescaled to maintain temporal fidelity.
---
 libavcodec/bsf/setts.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/libavcodec/bsf/setts.c b/libavcodec/bsf/setts.c
index 9c27b24a39..ab206598c5 100644
--- a/libavcodec/bsf/setts.c
+++ b/libavcodec/bsf/setts.c
@@ -88,6 +88,7 @@ typedef struct SetTSContext {
     char *duration_str;
 
     AVRational time_base;
+    int user_outtb;
 
     int64_t frame_number;
 
@@ -142,8 +143,13 @@ static int setts_init(AVBSFContext *ctx)
         }
     }
 
-    if (s->time_base.num > 0 && s->time_base.den > 0)
+    if (s->time_base.num > 0 && s->time_base.den > 0) {
         ctx->time_base_out = s->time_base;
+        s->user_outtb = 1;
+    } else if (s->time_base.num || !s->time_base.den) {
+        av_log(ctx, AV_LOG_ERROR, "Invalid value %d/%d specified for output 
timebase\n", s->time_base.num, s->time_base.den);
+        return AVERROR_INVALIDDATA;
+    }
 
     s->frame_number= 0;
     s->var_values[VAR_STARTPTS] = AV_NOPTS_VALUE;
@@ -219,6 +225,12 @@ static int setts_filter(AVBSFContext *ctx, AVPacket *pkt)
     if (ret < 0)
         return ret;
 
+    if (s->user_outtb) {
+        new_pts = av_rescale_q(new_pts, ctx->time_base_in, ctx->time_base_out);
+        new_dts = av_rescale_q(new_dts, ctx->time_base_in, ctx->time_base_out);
+        new_duration = av_rescale_q(new_duration, ctx->time_base_in, 
ctx->time_base_out);
+    }
+
     pkt->pts = new_pts;
     pkt->dts = new_dts;
     pkt->duration = new_duration;

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to