On Wed, Dec 10, 2014 at 1:23 PM, wm4 <nfx...@googlemail.com> wrote:
> On Wed, 10 Dec 2014 03:38:03 +0100
> Lukasz Marek <lukasz.m.lu...@gmail.com> wrote:
>
>> W dniu środa, 10 grudnia 2014 Vittorio Giovara <vittorio.giov...@gmail.com>
>> napisał(a):
>>
>> > On Tue, Dec 9, 2014 at 10:17 PM, wm4 <nfx...@googlemail.com <javascript:;>>
>> > wrote:
>> > > On Tue,  9 Dec 2014 14:10:22 +0100
>> > > Michael Niedermayer <michae...@gmx.at <javascript:;>> wrote:
>> > >
>> > >> TODO: bump version, update APIChanges
>> > >>
>> > >> Signed-off-by: Michael Niedermayer <michae...@gmx.at <javascript:;>>
>> > >> ---
>> > >>  libavformat/avformat.h      |    8 ++++++++
>> > >>  libavformat/dump.c          |   24 ++++++++++++++++++------
>> > >>  libavformat/options_table.h |    1 +
>> > >>  3 files changed, 27 insertions(+), 6 deletions(-)
>> > >>
>> > >> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>> > >> index 2e54ed1..cbe3608 100644
>> > >> --- a/libavformat/avformat.h
>> > >> +++ b/libavformat/avformat.h
>> > >> @@ -1616,6 +1616,14 @@ typedef struct AVFormatContext {
>> > >>       */
>> > >>      char *format_whitelist;
>> > >>
>> > >> +    /**
>> > >> +     * Maximum number of lines per metadata tag to dump with av_log.
>> > >> +     * -1 means default
>> > >> +     * - encoding: unused
>> > >> +     * - decoding: set by user through AVOptions (NO direct access)
>> > >> +     */
>> > >> +    int dump_metadata_lines;
>> > >> +
>> > >>      /*****************************************************************
>> > >>       * All fields below this line are not part of the public API. They
>> > >>       * may not be used outside of libavformat and can be changed and
>> > >> diff --git a/libavformat/dump.c b/libavformat/dump.c
>> > >> index 56b37ff..38286b8 100644
>> > >> --- a/libavformat/dump.c
>> > >> +++ b/libavformat/dump.c
>> > >> @@ -126,7 +126,7 @@ static void print_fps(double d, const char *postfix)
>> > >>          av_log(NULL, AV_LOG_INFO, "%1.0fk %s", d / 1000, postfix);
>> > >>  }
>> > >>
>> > >> -static void dump_metadata(void *ctx, AVDictionary *m, const char
>> > *indent)
>> > >> +static void dump_metadata(void *ctx, AVDictionary *m, const char
>> > *indent, int dump_metadata_lines_arg)
>> > >>  {
>> > >>      if (m && !(av_dict_count(m) == 1 && av_dict_get(m, "language",
>> > NULL, 0))) {
>> > >>          AVDictionaryEntry *tag = NULL;
>> > >> @@ -135,16 +135,28 @@ static void dump_metadata(void *ctx, AVDictionary
>> > *m, const char *indent)
>> > >>          while ((tag = av_dict_get(m, "", tag, AV_DICT_IGNORE_SUFFIX)))
>> > >>              if (strcmp("language", tag->key)) {
>> > >>                  const char *p = tag->value;
>> > >> +                int lines = 0;
>> > >> +                int dump_metadata_lines = dump_metadata_lines_arg;
>> > >> +                if (dump_metadata_lines == -1) {
>> > >> +                    dump_metadata_lines = strcmp("comment", tag->key)
>> > ? 1 : 25;
>> > >> +                }
>> > >>                  av_log(ctx, AV_LOG_INFO,
>> > >>                         "%s  %-16s: ", indent, tag->key);
>> > >>                  while (*p) {
>> > >>                      char tmp[256];
>> > >>                      size_t len = strcspn(p, "\x8\xa\xb\xc\xd");
>> > >> +                    if (lines >= dump_metadata_lines) {
>> > >> +                        av_log(ctx, AV_LOG_INFO, "[%"SIZE_SPECIFIER"
>> > bytes ommited, use \'-dump_metadata_lines <max>\' to see more]", 
>> > strlen(p));
>> > >> +                        break;
>> > >> +                    }
>> > >>                      av_strlcpy(tmp, p, FFMIN(sizeof(tmp), len+1));
>> > >>                      av_log(ctx, AV_LOG_INFO, "%s", tmp);
>> > >>                      p += len;
>> > >>                      if (*p == 0xd) av_log(ctx, AV_LOG_INFO, " ");
>> > >> -                    if (*p == 0xa) av_log(ctx, AV_LOG_INFO, "\n%s
>> > %-16s: ", indent, "");
>> > >> +                    if (*p == 0xa) {
>> > >> +                        av_log(ctx, AV_LOG_INFO, "\n%s  %-16s: ",
>> > indent, "");
>> > >> +                        lines++;
>> > >> +                    }
>> > >>                      if (*p) p++;
>> > >>                  }
>> > >>                  av_log(ctx, AV_LOG_INFO, "\n");
>> > >> @@ -420,7 +432,7 @@ static void dump_stream_format(AVFormatContext *ic,
>> > int i,
>> > >>          av_log(NULL, AV_LOG_INFO, " (clean effects)");
>> > >>      av_log(NULL, AV_LOG_INFO, "\n");
>> > >>
>> > >> -    dump_metadata(NULL, st->metadata, "    ");
>> > >> +    dump_metadata(NULL, st->metadata, "    ", ic->dump_metadata_lines);
>> > >>
>> > >>      dump_sidedata(NULL, st, "    ");
>> > >>  }
>> > >> @@ -438,7 +450,7 @@ void av_dump_format(AVFormatContext *ic, int index,
>> > >>             index,
>> > >>             is_output ? ic->oformat->name : ic->iformat->name,
>> > >>             is_output ? "to" : "from", url);
>> > >> -    dump_metadata(NULL, ic->metadata, "  ");
>> > >> +    dump_metadata(NULL, ic->metadata, "  ", ic->dump_metadata_lines);
>> > >>
>> > >>      if (!is_output) {
>> > >>          av_log(NULL, AV_LOG_INFO, "  Duration: ");
>> > >> @@ -480,7 +492,7 @@ void av_dump_format(AVFormatContext *ic, int index,
>> > >>          av_log(NULL, AV_LOG_INFO,
>> > >>                 "end %f\n", ch->end * av_q2d(ch->time_base));
>> > >>
>> > >> -        dump_metadata(NULL, ch->metadata, "    ");
>> > >> +        dump_metadata(NULL, ch->metadata, "    ",
>> > ic->dump_metadata_lines);
>> > >>      }
>> > >>
>> > >>      if (ic->nb_programs) {
>> > >> @@ -490,7 +502,7 @@ void av_dump_format(AVFormatContext *ic, int index,
>> > >>                                                    "name", NULL, 0);
>> > >>              av_log(NULL, AV_LOG_INFO, "  Program %d %s\n",
>> > ic->programs[j]->id,
>> > >>                     name ? name->value : "");
>> > >> -            dump_metadata(NULL, ic->programs[j]->metadata, "    ");
>> > >> +            dump_metadata(NULL, ic->programs[j]->metadata, "    ",
>> > ic->dump_metadata_lines);
>> > >>              for (k = 0; k < ic->programs[j]->nb_stream_indexes; k++) {
>> > >>                  dump_stream_format(ic,
>> > ic->programs[j]->stream_index[k],
>> > >>                                     index, is_output);
>> > >> diff --git a/libavformat/options_table.h b/libavformat/options_table.h
>> > >> index 40f1e0a..75ddf9c 100644
>> > >> --- a/libavformat/options_table.h
>> > >> +++ b/libavformat/options_table.h
>> > >> @@ -99,6 +99,7 @@ static const AVOption avformat_options[] = {
>> > >>  {"dump_separator", "set information dump field separator",
>> > OFFSET(dump_separator), AV_OPT_TYPE_STRING, {.str = ", "}, CHAR_MIN,
>> > CHAR_MAX, D|E},
>> > >>  {"codec_whitelist", "List of decoders that are allowed to be used",
>> > OFFSET(codec_whitelist), AV_OPT_TYPE_STRING, { .str = NULL },  CHAR_MIN,
>> > CHAR_MAX, D },
>> > >>  {"format_whitelist", "List of demuxers that are allowed to be used",
>> > OFFSET(format_whitelist), AV_OPT_TYPE_STRING, { .str = NULL },  CHAR_MIN,
>> > CHAR_MAX, D },
>> > >> +{"dump_metadata_lines", "Maximum number of lines per metadata tag to
>> > dump with av_log", OFFSET(dump_metadata_lines), AV_OPT_TYPE_INT, { .i64 =
>> > -1 }, -1, INT_MAX, D },
>> > >>  {NULL},
>> > >>  };
>> > >>
>> > >
>> > > Stuff liken this doesn't belong in a library. /nag
>> >
>> > +1
>> >
>>
>> +4
>> have I won?
>>
>> Sometimes I read random commits and comments. sometimes I read comments for
>> my own patches. comments like last 2 one are useless, like spam. you dont
>> like, say why!
>
> Because dumping crap to stdio has no place in a library. What does
> ffprobe exist for?
>
> Sure, it's pretty isolated in dump.c, but I'm mostly offended that
> another obscure, barely useful (or actually completely useless) field
> it added to the already bloated beyond help AVFormatContext.

I am tempted to go for a +1, but I'll go with a more lengthy "I agree
with wm4, in my opinion adding fields to avformatcontext for something
that the application should do (in this case ffmpeg) is not
appropriate."

Cheers,
Vittorio
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to