Message ID | 20200107121441.8370-1-ffmpeg@gyani.pro |
---|---|
State | Accepted |
Headers | show |
Series | [FFmpeg-devel] avfilter/f_metadata: allow direct flushing when printing to file | expand |
Context | Check | Description |
---|---|---|
andriy/ffmpeg-patchwork | success | Make fate finished |
On 07-01-2020 05:44 pm, Gyan Doshi wrote: > Useful for monitoring sparse data in realtime > --- > doc/filters.texi | 3 +++ > libavfilter/f_metadata.c | 6 ++++++ > 2 files changed, 9 insertions(+) > > diff --git a/doc/filters.texi b/doc/filters.texi > index fc2d198077..e682ba62bb 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -22711,6 +22711,9 @@ plain filename any writable url can be specified. Filename ``-'' is a shorthand > for standard output. If @code{file} option is not set, output is written to the log > with AV_LOG_INFO loglevel. > > +@item direct > +Reduces buffering in print mode when output is written to a URL set using @var{file}. > + > @end table > > @subsection Examples > diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c > index 3bf4bb17f5..bf298e9d39 100644 > --- a/libavfilter/f_metadata.c > +++ b/libavfilter/f_metadata.c > @@ -88,6 +88,8 @@ typedef struct MetadataContext { > int (*compare)(struct MetadataContext *s, > const char *value1, const char *value2); > void (*print)(AVFilterContext *ctx, const char *msg, ...) av_printf_format(2, 3); > + > + int direct; // reduces buffering when printing to user-supplied URL > } MetadataContext; > > #define OFFSET(x) offsetof(MetadataContext, x) > @@ -111,6 +113,7 @@ static const AVOption filt_name##_options[] = { \ > { "ends_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_ENDS_WITH }, 0, 0, FLAGS, "function" }, \ > { "expr", "set expression for expr function", OFFSET(expr_str), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ > { "file", "set file where to print metadata information", OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ > + { "direct", "reduce buffering when printing to user-set file or pipe", OFFSET(direct), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, FLAGS }, \ > { NULL } \ > } > > @@ -274,6 +277,9 @@ static av_cold int init(AVFilterContext *ctx) > s->file_str, buf); > return ret; > } > + > + if (s->direct) > + s->avio_context->direct = AVIO_FLAG_DIRECT; > } > > return 0; Plan to push tonight. Gyan
On 10-01-2020 11:00 am, Gyan wrote: > > > On 07-01-2020 05:44 pm, Gyan Doshi wrote: >> Useful for monitoring sparse data in realtime >> --- >> doc/filters.texi | 3 +++ >> libavfilter/f_metadata.c | 6 ++++++ >> 2 files changed, 9 insertions(+) >> >> diff --git a/doc/filters.texi b/doc/filters.texi >> index fc2d198077..e682ba62bb 100644 >> --- a/doc/filters.texi >> +++ b/doc/filters.texi >> @@ -22711,6 +22711,9 @@ plain filename any writable url can be >> specified. Filename ``-'' is a shorthand >> for standard output. If @code{file} option is not set, output is >> written to the log >> with AV_LOG_INFO loglevel. >> +@item direct >> +Reduces buffering in print mode when output is written to a URL set >> using @var{file}. >> + >> @end table >> @subsection Examples >> diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c >> index 3bf4bb17f5..bf298e9d39 100644 >> --- a/libavfilter/f_metadata.c >> +++ b/libavfilter/f_metadata.c >> @@ -88,6 +88,8 @@ typedef struct MetadataContext { >> int (*compare)(struct MetadataContext *s, >> const char *value1, const char *value2); >> void (*print)(AVFilterContext *ctx, const char *msg, ...) >> av_printf_format(2, 3); >> + >> + int direct; // reduces buffering when printing to >> user-supplied URL >> } MetadataContext; >> #define OFFSET(x) offsetof(MetadataContext, x) >> @@ -111,6 +113,7 @@ static const AVOption filt_name##_options[] = { \ >> { "ends_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = >> METADATAF_ENDS_WITH }, 0, 0, FLAGS, "function" }, \ >> { "expr", "set expression for expr function", OFFSET(expr_str), >> AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ >> { "file", "set file where to print metadata information", >> OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ >> + { "direct", "reduce buffering when printing to user-set file or >> pipe", OFFSET(direct), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, FLAGS }, \ >> { NULL } \ >> } >> @@ -274,6 +277,9 @@ static av_cold int init(AVFilterContext *ctx) >> s->file_str, buf); >> return ret; >> } >> + >> + if (s->direct) >> + s->avio_context->direct = AVIO_FLAG_DIRECT; >> } >> return 0; > > Plan to push tonight. Pushed as 22a06a539ddba083b0a496a1871a90afb8d51627 Gyan
diff --git a/doc/filters.texi b/doc/filters.texi index fc2d198077..e682ba62bb 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -22711,6 +22711,9 @@ plain filename any writable url can be specified. Filename ``-'' is a shorthand for standard output. If @code{file} option is not set, output is written to the log with AV_LOG_INFO loglevel. +@item direct +Reduces buffering in print mode when output is written to a URL set using @var{file}. + @end table @subsection Examples diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c index 3bf4bb17f5..bf298e9d39 100644 --- a/libavfilter/f_metadata.c +++ b/libavfilter/f_metadata.c @@ -88,6 +88,8 @@ typedef struct MetadataContext { int (*compare)(struct MetadataContext *s, const char *value1, const char *value2); void (*print)(AVFilterContext *ctx, const char *msg, ...) av_printf_format(2, 3); + + int direct; // reduces buffering when printing to user-supplied URL } MetadataContext; #define OFFSET(x) offsetof(MetadataContext, x) @@ -111,6 +113,7 @@ static const AVOption filt_name##_options[] = { \ { "ends_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_ENDS_WITH }, 0, 0, FLAGS, "function" }, \ { "expr", "set expression for expr function", OFFSET(expr_str), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "file", "set file where to print metadata information", OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ + { "direct", "reduce buffering when printing to user-set file or pipe", OFFSET(direct), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, FLAGS }, \ { NULL } \ } @@ -274,6 +277,9 @@ static av_cold int init(AVFilterContext *ctx) s->file_str, buf); return ret; } + + if (s->direct) + s->avio_context->direct = AVIO_FLAG_DIRECT; } return 0;