[FFmpeg-devel] [PATCH] cmdutils: include type in filter list.
Stefano Sabatini
stefasab at gmail.com
Thu Jan 19 19:39:51 CET 2012
On date Thursday 2012-01-19 13:38:48 +0100, Nicolas George encoded:
>
> Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
> ---
>
> ffmpeg -filters will look like that:
>
> aconvert A->A Convert the input audio to sample_fmt:channel_layout:packed_fmt.
> amerge AA->A Merge two audio streams into a single multi-channel stream.
> abuffer |->A Buffer audio frames, and make them accessible to the filterchain.
> abuffersink A->| Buffer audio frames, and make them available to the end of the filter graph.
> anullsink A->| Do absolutely nothing with the input audio.
> deshake V->V Stabilize shaky video.
> overlay VV->V Overlay a video source on top of the input.
> split V->VV Pass on the input to two outputs.
> cellauto |->V Create pattern generated by an elementary cellular automaton.
> buffersink V->| Buffer video frames, and make them available to the end of the filter graph.
>
>
> cmdutils.c | 55 ++++++++++++++++++++++++++++++++++++-------------------
> 1 files changed, 36 insertions(+), 19 deletions(-)
>
> diff --git a/cmdutils.c b/cmdutils.c
> index 344e506..7e43d69 100644
> --- a/cmdutils.c
> +++ b/cmdutils.c
> @@ -764,6 +764,18 @@ int opt_formats(const char *opt, const char *arg)
> return 0;
> }
>
> +static char get_media_type_letter(enum AVMediaType type)
> +{
> + char map[AVMEDIA_TYPE_NB] = {
> + [AVMEDIA_TYPE_VIDEO] = 'V',
> + [AVMEDIA_TYPE_AUDIO] = 'A',
> + [AVMEDIA_TYPE_DATA] = 'D',
> + [AVMEDIA_TYPE_SUBTITLE] = 'S',
> + [AVMEDIA_TYPE_ATTACHMENT] = 'J',
> + };
> + return type >= 0 && type < AVMEDIA_TYPE_NB && map[type] ? map[type] : '?';
> +}
nit: get_media_type_char() (consistent with av_get_picture_type_char() for example)
> +
> int opt_codecs(const char *opt, const char *arg)
> {
> AVCodec *p = NULL, *p2;
> @@ -783,7 +795,6 @@ int opt_codecs(const char *opt, const char *arg)
> int decode = 0;
> int encode = 0;
> int cap = 0;
> - const char *type_str;
>
> p2 = NULL;
> while ((p = av_codec_next(p))) {
> @@ -804,24 +815,10 @@ int opt_codecs(const char *opt, const char *arg)
> break;
> last_name = p2->name;
>
> - switch (p2->type) {
> - case AVMEDIA_TYPE_VIDEO:
> - type_str = "V";
> - break;
> - case AVMEDIA_TYPE_AUDIO:
> - type_str = "A";
> - break;
> - case AVMEDIA_TYPE_SUBTITLE:
> - type_str = "S";
> - break;
> - default:
> - type_str = "?";
> - break;
> - }
> - printf(" %s%s%s%s%s%s %-15s %s",
> + printf(" %s%s%c%s%s%s %-15s %s",
> decode ? "D" : (/* p2->decoder ? "d" : */ " "),
> encode ? "E" : " ",
> - type_str,
> + get_media_type_letter(p2->type),
Please split the get_media_type_letter() change from the opt_filters()
change.
> cap & CODEC_CAP_DRAW_HORIZ_BAND ? "S" : " ",
> cap & CODEC_CAP_DR1 ? "D" : " ",
> cap & CODEC_CAP_TRUNCATED ? "T" : " ",
> @@ -875,11 +872,31 @@ int opt_protocols(const char *opt, const char *arg)
> int opt_filters(const char *opt, const char *arg)
> {
> AVFilter av_unused(**filter) = NULL;
> + char descr[64], *cur;
suggestion: at your discretion, desc and descp for showing the
correlation between the two variables
> + int i, j;
> + const AVFilterPad *pad;
>
> printf("Filters:\n");
> #if CONFIG_AVFILTER
> - while ((filter = av_filter_next(filter)) && *filter)
> - printf("%-16s %s\n", (*filter)->name, (*filter)->description);
> + while ((filter = av_filter_next(filter)) && *filter) {
> + cur = descr;
> + for (i = 0; i < 2; i++) {
> + if (i) {
> + *(cur++) = '-';
> + *(cur++) = '>';
> + }
> + pad = i ? (*filter)->outputs : (*filter)->inputs;
> + for (j = 0; pad[j].name; j++) {
> + if (cur >= descr + sizeof(descr) - 4)
> + break;
This check can be moved upward, also it is too restrictive on the
second run but this is just a nit (unrelevante from the practical POV,
so do as you prefer).
> + *(cur++) = get_media_type_letter(pad[j].type);
> + }
> + if (!j)
> + *(cur++) = '|';
> + }
> + *cur = 0;
> + printf("%-16s %-10s %s\n", (*filter)->name, descr, (*filter)->description);
> + }
> #endif
> return 0;
> }
Looks fine otherwise.
--
FFmpeg = Faithless & Free Mortal Ponderous Excellent Gladiator
More information about the ffmpeg-devel
mailing list