[FFmpeg-devel] [PATCH] avfilter/vsrc_ddagrab: add option to control pts offset removal

Jan Ekström jeebjp at gmail.com
Tue Apr 11 23:18:47 EEST 2023


This keeps the default behavior as-is by defaulting to true,
while allowing to start the timestamps with the offset from
av_gettime_relative epoch start. This allows for synchronization
with other capture modules that utilize the same epoch start, such
as DShow audio capture.
---
 libavfilter/vsrc_ddagrab.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavfilter/vsrc_ddagrab.c b/libavfilter/vsrc_ddagrab.c
index 042842104f..14fb4abd10 100644
--- a/libavfilter/vsrc_ddagrab.c
+++ b/libavfilter/vsrc_ddagrab.c
@@ -100,6 +100,7 @@ typedef struct DdagrabContext {
     int        out_fmt;
     int        allow_fallback;
     int        force_fmt;
+    int        start_pts_at_zero;
 } DdagrabContext;
 
 #define OFFSET(x) offsetof(DdagrabContext, x)
@@ -123,6 +124,8 @@ static const AVOption ddagrab_options[] = {
                                                    OFFSET(allow_fallback), AV_OPT_TYPE_BOOL,   { .i64 = 0    },       0,       1, FLAGS },
     { "force_fmt",  "exclude BGRA from format list (experimental, discouraged by Microsoft)",
                                                    OFFSET(force_fmt),  AV_OPT_TYPE_BOOL,       { .i64 = 0    },       0,       1, FLAGS },
+    { "start_pts_at_zero", "start timestamps at PTS=0, removing any initial offset",
+                                                   OFFSET(start_pts_at_zero), AV_OPT_TYPE_BOOL, { .i64 = 1   },       0,       1, FLAGS },
     { NULL }
 };
 
@@ -913,7 +916,7 @@ static int ddagrab_request_frame(AVFilterLink *outlink)
         av_usleep(delay);
     }
 
-    if (!dda->first_pts)
+    if (dda->start_pts_at_zero && !dda->first_pts)
         dda->first_pts = now;
     now -= dda->first_pts;
 
-- 
2.40.0



More information about the ffmpeg-devel mailing list