[FFmpeg-cvslog] r25451 - in trunk: doc/filters.texi ffmpeg.c libavfilter/avfilter.h libavfilter/vsrc_buffer.c

stefano subversion
Tue Oct 12 20:40:20 CEST 2010


Author: stefano
Date: Tue Oct 12 20:40:20 2010
New Revision: 25451

Log:
Extend buffer source to accept the time base for the output PTS.

Modified:
   trunk/doc/filters.texi
   trunk/ffmpeg.c
   trunk/libavfilter/avfilter.h
   trunk/libavfilter/vsrc_buffer.c

Modified: trunk/doc/filters.texi
==============================================================================
--- trunk/doc/filters.texi	Tue Oct 12 20:40:16 2010	(r25450)
+++ trunk/doc/filters.texi	Tue Oct 12 20:40:20 2010	(r25451)
@@ -611,7 +611,7 @@ This source is mainly intended for a pro
 through the interface defined in @file{libavfilter/vsrc_buffer.h}.
 
 It accepts the following parameters:
- at var{width}:@var{height}:@var{pix_fmt_string}
+ at var{width}:@var{height}:@var{pix_fmt_string}:@var{timebase_num}:@var{timebase_den}
 
 All the parameters need to be explicitely defined.
 
@@ -628,19 +628,23 @@ A string representing the pixel format o
 It may be a number corresponding to a pixel format, or a pixel format
 name.
 
+ at item timebase_num, timebase_den
+Specify numerator and denomitor of the timebase assumed by the
+timestamps of the buffered frames.
 @end table
 
 For example:
 @example
-buffer=320:240:yuv410p
+buffer=320:240:yuv410p:1:24
 @end example
 
 will instruct the source to accept video frames with size 320x240 and
-with format "yuv410p". Since the pixel format with name "yuv410p"
-corresponds to the number 6 (check the enum PixelFormat definition in
- at file{libavutil/pixfmt.h}), this example corresponds to:
+with format "yuv410p" and assuming 1/24 as the timestamps timebase.
+Since the pixel format with name "yuv410p" corresponds to the number 6
+(check the enum PixelFormat definition in @file{libavutil/pixfmt.h}),
+this example corresponds to:
 @example
-buffer=320:240:6
+buffer=320:240:6:1:24
 @end example
 
 @section color

Modified: trunk/ffmpeg.c
==============================================================================
--- trunk/ffmpeg.c	Tue Oct 12 20:40:16 2010	(r25450)
+++ trunk/ffmpeg.c	Tue Oct 12 20:40:20 2010	(r25451)
@@ -424,8 +424,9 @@ static int configure_filters(AVInputStre
     if ((ret = avfilter_open(&ist->output_video_filter, &output_filter, "out")) < 0)
         return ret;
 
-    snprintf(args, 255, "%d:%d:%d", ist->st->codec->width,
-             ist->st->codec->height, ist->st->codec->pix_fmt);
+    snprintf(args, 255, "%d:%d:%d:%d:%d", ist->st->codec->width,
+             ist->st->codec->height, ist->st->codec->pix_fmt,
+             ist->st->time_base.num, ist->st->time_base.den);
     if ((ret = avfilter_init_filter(ist->input_video_filter, args, NULL)) < 0)
         return ret;
     if ((ret = avfilter_init_filter(ist->output_video_filter, NULL, &codec->pix_fmt)) < 0)

Modified: trunk/libavfilter/avfilter.h
==============================================================================
--- trunk/libavfilter/avfilter.h	Tue Oct 12 20:40:16 2010	(r25450)
+++ trunk/libavfilter/avfilter.h	Tue Oct 12 20:40:20 2010	(r25451)
@@ -26,7 +26,7 @@
 
 #define LIBAVFILTER_VERSION_MAJOR  1
 #define LIBAVFILTER_VERSION_MINOR 51
-#define LIBAVFILTER_VERSION_MICRO  0
+#define LIBAVFILTER_VERSION_MICRO  1
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                LIBAVFILTER_VERSION_MINOR, \

Modified: trunk/libavfilter/vsrc_buffer.c
==============================================================================
--- trunk/libavfilter/vsrc_buffer.c	Tue Oct 12 20:40:16 2010	(r25450)
+++ trunk/libavfilter/vsrc_buffer.c	Tue Oct 12 20:40:20 2010	(r25451)
@@ -33,6 +33,7 @@ typedef struct {
     int               has_frame;
     int               h, w;
     enum PixelFormat  pix_fmt;
+    AVRational        time_base;     ///< time_base to set in the output link
     AVRational        pixel_aspect;
 } BufferSourceContext;
 
@@ -66,8 +67,9 @@ static av_cold int init(AVFilterContext 
     char pix_fmt_str[128];
     int n = 0;
 
-    if (!args || (n = sscanf(args, "%d:%d:%127s", &c->w, &c->h, pix_fmt_str)) != 3) {
-        av_log(ctx, AV_LOG_ERROR, "Expected 3 arguments, but only %d found in '%s'\n", n, args ? args : "");
+    if (!args ||
+        (n = sscanf(args, "%d:%d:%127[^:]:%d:%d", &c->w, &c->h, pix_fmt_str, &c->time_base.num, &c->time_base.den)) != 5) {
+        av_log(ctx, AV_LOG_ERROR, "Expected 5 arguments, but only %d found in '%s'\n", n, args);
         return AVERROR(EINVAL);
     }
     if ((c->pix_fmt = av_get_pix_fmt(pix_fmt_str)) == PIX_FMT_NONE) {
@@ -98,6 +100,7 @@ static int config_props(AVFilterLink *li
 
     link->w = c->w;
     link->h = c->h;
+    link->time_base = c->time_base;
 
     return 0;
 }



More information about the ffmpeg-cvslog mailing list