FFmpeg
opt_common.c
Go to the documentation of this file.
1 /*
2  * Option handlers shared between the tools.
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "config.h"
22 
23 #include <stdio.h>
24 
25 #include "cmdutils.h"
26 #include "fopen_utf8.h"
27 #include "opt_common.h"
28 
29 #include "libavutil/avassert.h"
30 #include "libavutil/avstring.h"
31 #include "libavutil/bprint.h"
33 #include "libavutil/cpu.h"
34 #include "libavutil/dict.h"
35 #include "libavutil/error.h"
36 #include "libavutil/ffversion.h"
37 #include "libavutil/log.h"
38 #include "libavutil/mem.h"
39 #include "libavutil/parseutils.h"
40 #include "libavutil/pixdesc.h"
41 #include "libavutil/version.h"
42 
43 #include "libavcodec/avcodec.h"
44 #include "libavcodec/bsf.h"
45 #include "libavcodec/codec.h"
46 #include "libavcodec/codec_desc.h"
47 #include "libavcodec/version.h"
48 
49 #include "libavformat/avformat.h"
50 #include "libavformat/version.h"
51 
52 #include "libavdevice/avdevice.h"
53 #include "libavdevice/version.h"
54 
55 #include "libavfilter/avfilter.h"
56 #include "libavfilter/version.h"
57 
58 #include "libswscale/swscale.h"
59 #include "libswscale/version.h"
60 
62 #include "libswresample/version.h"
63 
64 
69 };
70 
71 enum show_codec {
74 };
75 
76 static FILE *report_file;
78 
79 int show_license(void *optctx, const char *opt, const char *arg)
80 {
81 #if CONFIG_NONFREE
82  printf(
83  "This version of %s has nonfree parts compiled in.\n"
84  "Therefore it is not legally redistributable.\n",
85  program_name );
86 #elif CONFIG_GPLV3
87  printf(
88  "%s is free software; you can redistribute it and/or modify\n"
89  "it under the terms of the GNU General Public License as published by\n"
90  "the Free Software Foundation; either version 3 of the License, or\n"
91  "(at your option) any later version.\n"
92  "\n"
93  "%s is distributed in the hope that it will be useful,\n"
94  "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
95  "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
96  "GNU General Public License for more details.\n"
97  "\n"
98  "You should have received a copy of the GNU General Public License\n"
99  "along with %s. If not, see <http://www.gnu.org/licenses/>.\n",
101 #elif CONFIG_GPL
102  printf(
103  "%s is free software; you can redistribute it and/or modify\n"
104  "it under the terms of the GNU General Public License as published by\n"
105  "the Free Software Foundation; either version 2 of the License, or\n"
106  "(at your option) any later version.\n"
107  "\n"
108  "%s is distributed in the hope that it will be useful,\n"
109  "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
110  "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
111  "GNU General Public License for more details.\n"
112  "\n"
113  "You should have received a copy of the GNU General Public License\n"
114  "along with %s; if not, write to the Free Software\n"
115  "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n",
117 #elif CONFIG_LGPLV3
118  printf(
119  "%s is free software; you can redistribute it and/or modify\n"
120  "it under the terms of the GNU Lesser General Public License as published by\n"
121  "the Free Software Foundation; either version 3 of the License, or\n"
122  "(at your option) any later version.\n"
123  "\n"
124  "%s is distributed in the hope that it will be useful,\n"
125  "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
126  "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
127  "GNU Lesser General Public License for more details.\n"
128  "\n"
129  "You should have received a copy of the GNU Lesser General Public License\n"
130  "along with %s. If not, see <http://www.gnu.org/licenses/>.\n",
132 #else
133  printf(
134  "%s is free software; you can redistribute it and/or\n"
135  "modify it under the terms of the GNU Lesser General Public\n"
136  "License as published by the Free Software Foundation; either\n"
137  "version 2.1 of the License, or (at your option) any later version.\n"
138  "\n"
139  "%s is distributed in the hope that it will be useful,\n"
140  "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
141  "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
142  "Lesser General Public License for more details.\n"
143  "\n"
144  "You should have received a copy of the GNU Lesser General Public\n"
145  "License along with %s; if not, write to the Free Software\n"
146  "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n",
148 #endif
149 
150  return 0;
151 }
152 
153 static int warned_cfg = 0;
154 
155 #define INDENT 1
156 #define SHOW_VERSION 2
157 #define SHOW_CONFIG 4
158 #define SHOW_COPYRIGHT 8
159 
160 #define PRINT_LIB_INFO(libname, LIBNAME, flags, level) \
161  if (CONFIG_##LIBNAME) { \
162  const char *indent = flags & INDENT? " " : ""; \
163  if (flags & SHOW_VERSION) { \
164  unsigned int version = libname##_version(); \
165  av_log(NULL, level, \
166  "%slib%-11s %2d.%3d.%3d / %2d.%3d.%3d\n", \
167  indent, #libname, \
168  LIB##LIBNAME##_VERSION_MAJOR, \
169  LIB##LIBNAME##_VERSION_MINOR, \
170  LIB##LIBNAME##_VERSION_MICRO, \
171  AV_VERSION_MAJOR(version), AV_VERSION_MINOR(version),\
172  AV_VERSION_MICRO(version)); \
173  } \
174  if (flags & SHOW_CONFIG) { \
175  const char *cfg = libname##_configuration(); \
176  if (strcmp(FFMPEG_CONFIGURATION, cfg)) { \
177  if (!warned_cfg) { \
178  av_log(NULL, level, \
179  "%sWARNING: library configuration mismatch\n", \
180  indent); \
181  warned_cfg = 1; \
182  } \
183  av_log(NULL, level, "%s%-11s configuration: %s\n", \
184  indent, #libname, cfg); \
185  } \
186  } \
187  } \
188 
189 static void print_all_libs_info(int flags, int level)
190 {
191  PRINT_LIB_INFO(avutil, AVUTIL, flags, level);
192  PRINT_LIB_INFO(avcodec, AVCODEC, flags, level);
193  PRINT_LIB_INFO(avformat, AVFORMAT, flags, level);
194  PRINT_LIB_INFO(avdevice, AVDEVICE, flags, level);
195  PRINT_LIB_INFO(avfilter, AVFILTER, flags, level);
196  PRINT_LIB_INFO(swscale, SWSCALE, flags, level);
197  PRINT_LIB_INFO(swresample, SWRESAMPLE, flags, level);
198 }
199 
200 static void print_program_info(int flags, int level)
201 {
202  const char *indent = flags & INDENT? " " : "";
203 
204  av_log(NULL, level, "%s version " FFMPEG_VERSION, program_name);
205  if (flags & SHOW_COPYRIGHT)
206  av_log(NULL, level, " Copyright (c) %d-%d the FFmpeg developers",
207  program_birth_year, CONFIG_THIS_YEAR);
208  av_log(NULL, level, "\n");
209  av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);
210 
211  av_log(NULL, level, "%sconfiguration: " FFMPEG_CONFIGURATION "\n", indent);
212 }
213 
214 static void print_buildconf(int flags, int level)
215 {
216  const char *indent = flags & INDENT ? " " : "";
217  char str[] = { FFMPEG_CONFIGURATION };
218  char *conflist, *remove_tilde, *splitconf;
219 
220  // Change all the ' --' strings to '~--' so that
221  // they can be identified as tokens.
222  while ((conflist = strstr(str, " --")) != NULL) {
223  conflist[0] = '~';
224  }
225 
226  // Compensate for the weirdness this would cause
227  // when passing 'pkg-config --static'.
228  while ((remove_tilde = strstr(str, "pkg-config~")) != NULL) {
229  remove_tilde[sizeof("pkg-config~") - 2] = ' ';
230  }
231 
232  splitconf = strtok(str, "~");
233  av_log(NULL, level, "\n%sconfiguration:\n", indent);
234  while (splitconf != NULL) {
235  av_log(NULL, level, "%s%s%s\n", indent, indent, splitconf);
236  splitconf = strtok(NULL, "~");
237  }
238 }
239 
240 void show_banner(int argc, char **argv, const OptionDef *options)
241 {
242  int idx = locate_option(argc, argv, options, "version");
243  if (hide_banner || idx)
244  return;
245 
249 }
250 
251 int show_version(void *optctx, const char *opt, const char *arg)
252 {
256 
257  return 0;
258 }
259 
260 int show_buildconf(void *optctx, const char *opt, const char *arg)
261 {
264 
265  return 0;
266 }
267 
268 #define PRINT_CODEC_SUPPORTED(codec, config, type, name, elem, fmt, ...) \
269  do { \
270  int num = 0; \
271  const type *elem = NULL; \
272  avcodec_get_supported_config(NULL, codec, config, 0, \
273  (const void **) &elem, &num); \
274  if (elem) { \
275  printf(" Supported " name ":"); \
276  for (int i = 0; i < num; i++) { \
277  printf(" " fmt, __VA_ARGS__); \
278  elem++; \
279  } \
280  printf("\n"); \
281  } \
282  } while (0)
283 
284 static const char *get_channel_layout_desc(const AVChannelLayout *layout, AVBPrint *bp)
285 {
286  int ret;
287  av_bprint_clear(bp);
289  if (!av_bprint_is_complete(bp) || ret < 0)
290  return "unknown/invalid";
291  return bp->str;
292 }
293 
294 static void print_codec(const AVCodec *c)
295 {
296  int encoder = av_codec_is_encoder(c);
297  AVBPrint desc;
298 
299  printf("%s %s [%s]:\n", encoder ? "Encoder" : "Decoder", c->name,
300  c->long_name ? c->long_name : "");
301 
302  printf(" General capabilities: ");
303  if (c->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)
304  printf("horizband ");
305  if (c->capabilities & AV_CODEC_CAP_DR1)
306  printf("dr1 ");
307  if (c->capabilities & AV_CODEC_CAP_DELAY)
308  printf("delay ");
309  if (c->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME)
310  printf("small ");
311  if (c->capabilities & AV_CODEC_CAP_EXPERIMENTAL)
312  printf("exp ");
313  if (c->capabilities & AV_CODEC_CAP_CHANNEL_CONF)
314  printf("chconf ");
315  if (c->capabilities & AV_CODEC_CAP_PARAM_CHANGE)
316  printf("paramchange ");
317  if (c->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
318  printf("variable ");
319  if (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
322  printf("threads ");
323  if (c->capabilities & AV_CODEC_CAP_AVOID_PROBING)
324  printf("avoidprobe ");
325  if (c->capabilities & AV_CODEC_CAP_HARDWARE)
326  printf("hardware ");
327  if (c->capabilities & AV_CODEC_CAP_HYBRID)
328  printf("hybrid ");
329  if (c->capabilities & AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE)
330  printf("reorderedopaque ");
331  if (c->capabilities & AV_CODEC_CAP_ENCODER_FLUSH)
332  printf("flush ");
333  if (c->capabilities & AV_CODEC_CAP_ENCODER_RECON_FRAME)
334  printf("reconframe ");
335  if (!c->capabilities)
336  printf("none");
337  printf("\n");
338 
339  if (c->type == AVMEDIA_TYPE_VIDEO ||
340  c->type == AVMEDIA_TYPE_AUDIO) {
341  printf(" Threading capabilities: ");
342  switch (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
346  AV_CODEC_CAP_SLICE_THREADS: printf("frame and slice"); break;
347  case AV_CODEC_CAP_FRAME_THREADS: printf("frame"); break;
348  case AV_CODEC_CAP_SLICE_THREADS: printf("slice"); break;
349  case AV_CODEC_CAP_OTHER_THREADS: printf("other"); break;
350  default: printf("none"); break;
351  }
352  printf("\n");
353  }
354 
355  if (avcodec_get_hw_config(c, 0)) {
356  printf(" Supported hardware devices: ");
357  for (int i = 0;; i++) {
359  const char *name;
360  if (!config)
361  break;
362  name = av_hwdevice_get_type_name(config->device_type);
363  if (name)
364  printf("%s ", name);
365  }
366  printf("\n");
367  }
368 
370  fps, "%d/%d", fps->num, fps->den);
372  "pixel formats", fmt, "%s", av_get_pix_fmt_name(*fmt));
374  rate, "%d", *rate);
376  "sample formats", fmt, "%s", av_get_sample_fmt_name(*fmt));
377 
380  "channel layouts", layout, "%s",
383 
384  if (c->priv_class) {
385  show_help_children(c->priv_class,
388  }
389 }
390 
391 static const AVCodec *next_codec_for_id(enum AVCodecID id, void **iter,
392  int encoder)
393 {
394  const AVCodec *c;
395  while ((c = av_codec_iterate(iter))) {
396  if (c->id == id &&
397  (encoder ? av_codec_is_encoder(c) : av_codec_is_decoder(c)))
398  return c;
399  }
400  return NULL;
401 }
402 
403 static void show_help_codec(const char *name, int encoder)
404 {
405  const AVCodecDescriptor *desc;
406  const AVCodec *codec;
407 
408  if (!name) {
409  av_log(NULL, AV_LOG_ERROR, "No codec name specified.\n");
410  return;
411  }
412 
413  codec = encoder ? avcodec_find_encoder_by_name(name) :
415 
416  if (codec)
417  print_codec(codec);
418  else if ((desc = avcodec_descriptor_get_by_name(name))) {
419  void *iter = NULL;
420  int printed = 0;
421 
422  while ((codec = next_codec_for_id(desc->id, &iter, encoder))) {
423  printed = 1;
424  print_codec(codec);
425  }
426 
427  if (!printed) {
428  av_log(NULL, AV_LOG_ERROR, "Codec '%s' is known to FFmpeg, "
429  "but no %s for it are available. FFmpeg might need to be "
430  "recompiled with additional external libraries.\n",
431  name, encoder ? "encoders" : "decoders");
432  }
433  } else {
434  av_log(NULL, AV_LOG_ERROR, "Codec '%s' is not recognized by FFmpeg.\n",
435  name);
436  }
437 }
438 
439 static void show_help_demuxer(const char *name)
440 {
442 
443  if (!fmt) {
444  av_log(NULL, AV_LOG_ERROR, "Unknown format '%s'.\n", name);
445  return;
446  }
447 
448  printf("Demuxer %s [%s]:\n", fmt->name, fmt->long_name);
449 
450  if (fmt->extensions)
451  printf(" Common extensions: %s.\n", fmt->extensions);
452 
453  if (fmt->priv_class)
455 }
456 
457 static void show_help_protocol(const char *name)
458 {
459  const AVClass *proto_class;
460 
461  if (!name) {
462  av_log(NULL, AV_LOG_ERROR, "No protocol name specified.\n");
463  return;
464  }
465 
466  proto_class = avio_protocol_get_class(name);
467  if (!proto_class) {
468  av_log(NULL, AV_LOG_ERROR, "Unknown protocol '%s'.\n", name);
469  return;
470  }
471 
473 }
474 
475 static void show_help_muxer(const char *name)
476 {
477  const AVCodecDescriptor *desc;
478  const AVOutputFormat *fmt = av_guess_format(name, NULL, NULL);
479 
480  if (!fmt) {
481  av_log(NULL, AV_LOG_ERROR, "Unknown format '%s'.\n", name);
482  return;
483  }
484 
485  printf("Muxer %s [%s]:\n", fmt->name, fmt->long_name);
486 
487  if (fmt->extensions)
488  printf(" Common extensions: %s.\n", fmt->extensions);
489  if (fmt->mime_type)
490  printf(" Mime type: %s.\n", fmt->mime_type);
491  if (fmt->video_codec != AV_CODEC_ID_NONE &&
493  printf(" Default video codec: %s.\n", desc->name);
494  }
495  if (fmt->audio_codec != AV_CODEC_ID_NONE &&
497  printf(" Default audio codec: %s.\n", desc->name);
498  }
499  if (fmt->subtitle_codec != AV_CODEC_ID_NONE &&
501  printf(" Default subtitle codec: %s.\n", desc->name);
502  }
503 
504  if (fmt->priv_class)
506 }
507 
508 #if CONFIG_AVFILTER
509 static void show_help_filter(const char *name)
510 {
511 #if CONFIG_AVFILTER
513  int i, count;
514 
515  if (!name) {
516  av_log(NULL, AV_LOG_ERROR, "No filter name specified.\n");
517  return;
518  } else if (!f) {
519  av_log(NULL, AV_LOG_ERROR, "Unknown filter '%s'.\n", name);
520  return;
521  }
522 
523  printf("Filter %s\n", f->name);
524  if (f->description)
525  printf(" %s\n", f->description);
526 
527  if (f->flags & AVFILTER_FLAG_SLICE_THREADS)
528  printf(" slice threading supported\n");
529 
530  printf(" Inputs:\n");
531  count = avfilter_filter_pad_count(f, 0);
532  for (i = 0; i < count; i++) {
533  printf(" #%d: %s (%s)\n", i, avfilter_pad_get_name(f->inputs, i),
535  }
536  if (f->flags & AVFILTER_FLAG_DYNAMIC_INPUTS)
537  printf(" dynamic (depending on the options)\n");
538  else if (!count)
539  printf(" none (source filter)\n");
540 
541  printf(" Outputs:\n");
542  count = avfilter_filter_pad_count(f, 1);
543  for (i = 0; i < count; i++) {
544  printf(" #%d: %s (%s)\n", i, avfilter_pad_get_name(f->outputs, i),
546  }
547  if (f->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS)
548  printf(" dynamic (depending on the options)\n");
549  else if (!count)
550  printf(" none (sink filter)\n");
551 
552  if (f->priv_class)
555  if (f->flags & AVFILTER_FLAG_SUPPORT_TIMELINE)
556  printf("This filter has support for timeline through the 'enable' option.\n");
557 #else
558  av_log(NULL, AV_LOG_ERROR, "Build without libavfilter; "
559  "can not to satisfy request\n");
560 #endif
561 }
562 #endif
563 
564 static void show_help_bsf(const char *name)
565 {
567 
568  if (!name) {
569  av_log(NULL, AV_LOG_ERROR, "No bitstream filter name specified.\n");
570  return;
571  } else if (!bsf) {
572  av_log(NULL, AV_LOG_ERROR, "Unknown bit stream filter '%s'.\n", name);
573  return;
574  }
575 
576  printf("Bit stream filter %s\n", bsf->name);
577  if (bsf->codec_ids) {
578  const enum AVCodecID *id = bsf->codec_ids;
579  printf(" Supported codecs:");
580  while (*id != AV_CODEC_ID_NONE) {
581  printf(" %s", avcodec_descriptor_get(*id)->name);
582  id++;
583  }
584  printf("\n");
585  }
586  if (bsf->priv_class)
588 }
589 
590 int show_help(void *optctx, const char *opt, const char *arg)
591 {
592  char *topic, *par;
594 
595  topic = av_strdup(arg ? arg : "");
596  if (!topic)
597  return AVERROR(ENOMEM);
598  par = strchr(topic, '=');
599  if (par)
600  *par++ = 0;
601 
602  if (!*topic) {
603  show_help_default(topic, par);
604  } else if (!strcmp(topic, "decoder")) {
606  } else if (!strcmp(topic, "encoder")) {
608  } else if (!strcmp(topic, "demuxer")) {
609  show_help_demuxer(par);
610  } else if (!strcmp(topic, "muxer")) {
611  show_help_muxer(par);
612  } else if (!strcmp(topic, "protocol")) {
613  show_help_protocol(par);
614 #if CONFIG_AVFILTER
615  } else if (!strcmp(topic, "filter")) {
616  show_help_filter(par);
617 #endif
618  } else if (!strcmp(topic, "bsf")) {
619  show_help_bsf(par);
620  } else {
621  show_help_default(topic, par);
622  }
623 
624  av_freep(&topic);
625  return 0;
626 }
627 
628 static void print_codecs_for_id(enum AVCodecID id, int encoder)
629 {
630  void *iter = NULL;
631  const AVCodec *codec;
632 
633  printf(" (%s:", encoder ? "encoders" : "decoders");
634 
635  while ((codec = next_codec_for_id(id, &iter, encoder)))
636  printf(" %s", codec->name);
637 
638  printf(")");
639 }
640 
641 static int compare_codec_desc(const void *a, const void *b)
642 {
643  const AVCodecDescriptor * const *da = a;
644  const AVCodecDescriptor * const *db = b;
645 
646  return (*da)->type != (*db)->type ? FFDIFFSIGN((*da)->type, (*db)->type) :
647  strcmp((*da)->name, (*db)->name);
648 }
649 
650 static int get_codecs_sorted(const AVCodecDescriptor ***rcodecs)
651 {
652  const AVCodecDescriptor *desc = NULL;
653  const AVCodecDescriptor **codecs;
654  unsigned nb_codecs = 0, i = 0;
655 
656  while ((desc = avcodec_descriptor_next(desc)))
657  nb_codecs++;
658  if (!(codecs = av_calloc(nb_codecs, sizeof(*codecs))))
659  return AVERROR(ENOMEM);
660  desc = NULL;
661  while ((desc = avcodec_descriptor_next(desc)))
662  codecs[i++] = desc;
663  av_assert0(i == nb_codecs);
664  qsort(codecs, nb_codecs, sizeof(*codecs), compare_codec_desc);
665  *rcodecs = codecs;
666  return nb_codecs;
667 }
668 
670 {
671  switch (type) {
672  case AVMEDIA_TYPE_VIDEO: return 'V';
673  case AVMEDIA_TYPE_AUDIO: return 'A';
674  case AVMEDIA_TYPE_DATA: return 'D';
675  case AVMEDIA_TYPE_SUBTITLE: return 'S';
676  case AVMEDIA_TYPE_ATTACHMENT:return 'T';
677  default: return '?';
678  }
679 }
680 
681 int show_codecs(void *optctx, const char *opt, const char *arg)
682 {
683  const AVCodecDescriptor **codecs;
684  unsigned i;
685  int nb_codecs = get_codecs_sorted(&codecs);
686 
687  if (nb_codecs < 0)
688  return nb_codecs;
689 
690  printf("Codecs:\n"
691  " D..... = Decoding supported\n"
692  " .E.... = Encoding supported\n"
693  " ..V... = Video codec\n"
694  " ..A... = Audio codec\n"
695  " ..S... = Subtitle codec\n"
696  " ..D... = Data codec\n"
697  " ..T... = Attachment codec\n"
698  " ...I.. = Intra frame-only codec\n"
699  " ....L. = Lossy compression\n"
700  " .....S = Lossless compression\n"
701  " -------\n");
702  for (i = 0; i < nb_codecs; i++) {
703  const AVCodecDescriptor *desc = codecs[i];
704  const AVCodec *codec;
705  void *iter = NULL;
706 
707  if (strstr(desc->name, "_deprecated"))
708  continue;
709 
710  printf(" %c%c%c%c%c%c",
711  avcodec_find_decoder(desc->id) ? 'D' : '.',
712  avcodec_find_encoder(desc->id) ? 'E' : '.',
713  get_media_type_char(desc->type),
714  (desc->props & AV_CODEC_PROP_INTRA_ONLY) ? 'I' : '.',
715  (desc->props & AV_CODEC_PROP_LOSSY) ? 'L' : '.',
716  (desc->props & AV_CODEC_PROP_LOSSLESS) ? 'S' : '.');
717 
718  printf(" %-20s %s", desc->name, desc->long_name ? desc->long_name : "");
719 
720  /* print decoders/encoders when there's more than one or their
721  * names are different from codec name */
722  while ((codec = next_codec_for_id(desc->id, &iter, SHOW_DECODER))) {
723  if (strcmp(codec->name, desc->name)) {
725  break;
726  }
727  }
728  iter = NULL;
729  while ((codec = next_codec_for_id(desc->id, &iter, SHOW_ENCODER))) {
730  if (strcmp(codec->name, desc->name)) {
732  break;
733  }
734  }
735 
736  printf("\n");
737  }
738  av_free(codecs);
739  return 0;
740 }
741 
742 static int print_codecs(int encoder)
743 {
744  const AVCodecDescriptor **codecs;
745  int i, nb_codecs = get_codecs_sorted(&codecs);
746 
747  if (nb_codecs < 0)
748  return nb_codecs;
749 
750  printf("%s:\n"
751  " V..... = Video\n"
752  " A..... = Audio\n"
753  " S..... = Subtitle\n"
754  " .F.... = Frame-level multithreading\n"
755  " ..S... = Slice-level multithreading\n"
756  " ...X.. = Codec is experimental\n"
757  " ....B. = Supports draw_horiz_band\n"
758  " .....D = Supports direct rendering method 1\n"
759  " ------\n",
760  encoder ? "Encoders" : "Decoders");
761  for (i = 0; i < nb_codecs; i++) {
762  const AVCodecDescriptor *desc = codecs[i];
763  const AVCodec *codec;
764  void *iter = NULL;
765 
766  while ((codec = next_codec_for_id(desc->id, &iter, encoder))) {
767  printf(" %c%c%c%c%c%c",
768  get_media_type_char(desc->type),
769  (codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? 'F' : '.',
770  (codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? 'S' : '.',
771  (codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? 'X' : '.',
772  (codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND) ? 'B' : '.',
773  (codec->capabilities & AV_CODEC_CAP_DR1) ? 'D' : '.');
774 
775  printf(" %-20s %s", codec->name, codec->long_name ? codec->long_name : "");
776  if (strcmp(codec->name, desc->name))
777  printf(" (codec %s)", desc->name);
778 
779  printf("\n");
780  }
781  }
782  av_free(codecs);
783  return 0;
784 }
785 
786 int show_decoders(void *optctx, const char *opt, const char *arg)
787 {
788  return print_codecs(SHOW_DECODER);
789 }
790 
791 int show_encoders(void *optctx, const char *opt, const char *arg)
792 {
793  return print_codecs(SHOW_ENCODER);
794 }
795 
796 int show_bsfs(void *optctx, const char *opt, const char *arg)
797 {
798  const AVBitStreamFilter *bsf = NULL;
799  void *opaque = NULL;
800 
801  printf("Bitstream filters:\n");
802  while ((bsf = av_bsf_iterate(&opaque)))
803  printf("%s\n", bsf->name);
804  printf("\n");
805  return 0;
806 }
807 
808 int show_filters(void *optctx, const char *opt, const char *arg)
809 {
810 #if CONFIG_AVFILTER
811  const AVFilter *filter = NULL;
812  char descr[64], *descr_cur;
813  void *opaque = NULL;
814  int i, j;
815  const AVFilterPad *pad;
816 
817  printf("Filters:\n"
818  " T.. = Timeline support\n"
819  " .S. = Slice threading\n"
820  " A = Audio input/output\n"
821  " V = Video input/output\n"
822  " N = Dynamic number and/or type of input/output\n"
823  " | = Source or sink filter\n"
824  " ------\n");
825  while ((filter = av_filter_iterate(&opaque))) {
826  descr_cur = descr;
827  for (i = 0; i < 2; i++) {
828  unsigned nb_pads;
829  if (i) {
830  *(descr_cur++) = '-';
831  *(descr_cur++) = '>';
832  }
833  pad = i ? filter->outputs : filter->inputs;
834  nb_pads = avfilter_filter_pad_count(filter, i);
835  for (j = 0; j < nb_pads; j++) {
836  if (descr_cur >= descr + sizeof(descr) - 4)
837  break;
838  *(descr_cur++) = get_media_type_char(avfilter_pad_get_type(pad, j));
839  }
840  if (!j)
841  *(descr_cur++) = ((!i && (filter->flags & AVFILTER_FLAG_DYNAMIC_INPUTS)) ||
842  ( i && (filter->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS))) ? 'N' : '|';
843  }
844  *descr_cur = 0;
845  printf(" %c%c %-17s %-10s %s\n",
846  filter->flags & AVFILTER_FLAG_SUPPORT_TIMELINE ? 'T' : '.',
847  filter->flags & AVFILTER_FLAG_SLICE_THREADS ? 'S' : '.',
848  filter->name, descr, filter->description);
849  }
850 #else
851  printf("No filters available: libavfilter disabled\n");
852 #endif
853  return 0;
854 }
855 
856 static int is_device(const AVClass *avclass)
857 {
858  if (!avclass)
859  return 0;
860  return AV_IS_INPUT_DEVICE(avclass->category) || AV_IS_OUTPUT_DEVICE(avclass->category);
861 }
862 
863 static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers)
864 {
865  void *ifmt_opaque = NULL;
866  const AVInputFormat *ifmt = NULL;
867  void *ofmt_opaque = NULL;
868  const AVOutputFormat *ofmt = NULL;
869  const char *last_name;
870  int is_dev;
871  const char *is_device_placeholder = device_only ? "" : ".";
872 
873  printf("%s:\n"
874  " D.%s = Demuxing supported\n"
875  " .E%s = Muxing supported\n"
876  "%s"
877  " ---\n",
878  device_only ? "Devices" : "Formats",
879  is_device_placeholder, is_device_placeholder,
880  device_only ? "": " ..d = Is a device\n");
881 
882  last_name = "000";
883  for (;;) {
884  int decode = 0;
885  int encode = 0;
886  int device = 0;
887  const char *name = NULL;
888  const char *long_name = NULL;
889 
890  if (muxdemuxers != SHOW_DEMUXERS) {
891  ofmt_opaque = NULL;
892  while ((ofmt = av_muxer_iterate(&ofmt_opaque))) {
893  is_dev = is_device(ofmt->priv_class);
894  if (!is_dev && device_only)
895  continue;
896  if ((!name || strcmp(ofmt->name, name) < 0) &&
897  strcmp(ofmt->name, last_name) > 0) {
898  name = ofmt->name;
899  long_name = ofmt->long_name;
900  encode = 1;
901  device = is_dev;
902  }
903  }
904  }
905  if (muxdemuxers != SHOW_MUXERS) {
906  ifmt_opaque = NULL;
907  while ((ifmt = av_demuxer_iterate(&ifmt_opaque))) {
908  is_dev = is_device(ifmt->priv_class);
909  if (!is_dev && device_only)
910  continue;
911  if ((!name || strcmp(ifmt->name, name) < 0) &&
912  strcmp(ifmt->name, last_name) > 0) {
913  name = ifmt->name;
914  long_name = ifmt->long_name;
915  encode = 0;
916  device = is_dev;
917  }
918  if (name && strcmp(ifmt->name, name) == 0) {
919  decode = 1;
920  device = is_dev;
921  }
922  }
923  }
924  if (!name)
925  break;
926  last_name = name;
927 
928  printf(" %c%c%s %-15s %s\n",
929  decode ? 'D' : ' ',
930  encode ? 'E' : ' ',
931  device_only ? "" : (device ? "d" : " "),
932  name,
933  long_name ? long_name : " ");
934  }
935  return 0;
936 }
937 
938 int show_formats(void *optctx, const char *opt, const char *arg)
939 {
940  return show_formats_devices(optctx, opt, arg, 0, SHOW_DEFAULT);
941 }
942 
943 int show_muxers(void *optctx, const char *opt, const char *arg)
944 {
945  return show_formats_devices(optctx, opt, arg, 0, SHOW_MUXERS);
946 }
947 
948 int show_demuxers(void *optctx, const char *opt, const char *arg)
949 {
950  return show_formats_devices(optctx, opt, arg, 0, SHOW_DEMUXERS);
951 }
952 
953 int show_devices(void *optctx, const char *opt, const char *arg)
954 {
955  return show_formats_devices(optctx, opt, arg, 1, SHOW_DEFAULT);
956 }
957 
958 int show_protocols(void *optctx, const char *opt, const char *arg)
959 {
960  void *opaque = NULL;
961  const char *name;
962 
963  printf("Supported file protocols:\n"
964  "Input:\n");
965  while ((name = avio_enum_protocols(&opaque, 0)))
966  printf(" %s\n", name);
967  printf("Output:\n");
968  while ((name = avio_enum_protocols(&opaque, 1)))
969  printf(" %s\n", name);
970  return 0;
971 }
972 
973 int show_colors(void *optctx, const char *opt, const char *arg)
974 {
975  const char *name;
976  const uint8_t *rgb;
977  int i;
978 
979  printf("%-32s #RRGGBB\n", "name");
980 
981  for (i = 0; name = av_get_known_color_name(i, &rgb); i++)
982  printf("%-32s #%02x%02x%02x\n", name, rgb[0], rgb[1], rgb[2]);
983 
984  return 0;
985 }
986 
987 int show_pix_fmts(void *optctx, const char *opt, const char *arg)
988 {
989  const AVPixFmtDescriptor *pix_desc = NULL;
990 
991  printf("Pixel formats:\n"
992  "I.... = Supported Input format for conversion\n"
993  ".O... = Supported Output format for conversion\n"
994  "..H.. = Hardware accelerated format\n"
995  "...P. = Paletted format\n"
996  "....B = Bitstream format\n"
997  "FLAGS NAME NB_COMPONENTS BITS_PER_PIXEL BIT_DEPTHS\n"
998  "-----\n");
999 
1000 #if !CONFIG_SWSCALE
1001 # define sws_isSupportedInput(x) 0
1002 # define sws_isSupportedOutput(x) 0
1003 #endif
1004 
1005  while ((pix_desc = av_pix_fmt_desc_next(pix_desc))) {
1007  printf("%c%c%c%c%c %-16s %d %3d %d",
1008  sws_isSupportedInput (pix_fmt) ? 'I' : '.',
1009  sws_isSupportedOutput(pix_fmt) ? 'O' : '.',
1010  pix_desc->flags & AV_PIX_FMT_FLAG_HWACCEL ? 'H' : '.',
1011  pix_desc->flags & AV_PIX_FMT_FLAG_PAL ? 'P' : '.',
1012  pix_desc->flags & AV_PIX_FMT_FLAG_BITSTREAM ? 'B' : '.',
1013  pix_desc->name,
1014  pix_desc->nb_components,
1015  av_get_bits_per_pixel(pix_desc),
1016  pix_desc->comp[0].depth);
1017 
1018  for (unsigned i = 1; i < pix_desc->nb_components; i++)
1019  printf("-%d", pix_desc->comp[i].depth);
1020  printf("\n");
1021  }
1022  return 0;
1023 }
1024 
1025 int show_layouts(void *optctx, const char *opt, const char *arg)
1026 {
1027  const AVChannelLayout *ch_layout;
1028  void *iter = NULL;
1029  char buf[128], buf2[128];
1030  int i = 0;
1031 
1032  printf("Individual channels:\n"
1033  "NAME DESCRIPTION\n");
1034  for (i = 0; i < 63; i++) {
1035  av_channel_name(buf, sizeof(buf), i);
1036  if (strstr(buf, "USR"))
1037  continue;
1038  av_channel_description(buf2, sizeof(buf2), i);
1039  printf("%-14s %s\n", buf, buf2);
1040  }
1041  printf("\nStandard channel layouts:\n"
1042  "NAME DECOMPOSITION\n");
1043  while (ch_layout = av_channel_layout_standard(&iter)) {
1044  av_channel_layout_describe(ch_layout, buf, sizeof(buf));
1045  printf("%-14s ", buf);
1046  for (i = 0; i < 63; i++) {
1047  int idx = av_channel_layout_index_from_channel(ch_layout, i);
1048  if (idx >= 0) {
1049  av_channel_name(buf2, sizeof(buf2), i);
1050  printf("%s%s", idx ? "+" : "", buf2);
1051  }
1052  }
1053  printf("\n");
1054  }
1055  return 0;
1056 }
1057 
1058 int show_sample_fmts(void *optctx, const char *opt, const char *arg)
1059 {
1060  int i;
1061  char fmt_str[128];
1062  for (i = -1; i < AV_SAMPLE_FMT_NB; i++)
1063  printf("%s\n", av_get_sample_fmt_string(fmt_str, sizeof(fmt_str), i));
1064  return 0;
1065 }
1066 
1067 int show_dispositions(void *optctx, const char *opt, const char *arg)
1068 {
1069  for (int i = 0; i < 32; i++) {
1070  const char *str = av_disposition_to_string(1U << i);
1071  if (str)
1072  printf("%s\n", str);
1073  }
1074  return 0;
1075 }
1076 
1077 int opt_cpuflags(void *optctx, const char *opt, const char *arg)
1078 {
1079  int ret;
1080  unsigned flags = av_get_cpu_flags();
1081 
1082  if ((ret = av_parse_cpu_caps(&flags, arg)) < 0)
1083  return ret;
1084 
1086  return 0;
1087 }
1088 
1089 int opt_cpucount(void *optctx, const char *opt, const char *arg)
1090 {
1091  int ret;
1092  int count;
1093 
1094  static const AVOption opts[] = {
1095  {"count", NULL, 0, AV_OPT_TYPE_INT, { .i64 = -1}, -1, INT_MAX},
1096  {NULL},
1097  };
1098  static const AVClass class = {
1099  .class_name = "cpucount",
1100  .item_name = av_default_item_name,
1101  .option = opts,
1102  .version = LIBAVUTIL_VERSION_INT,
1103  };
1104  const AVClass *pclass = &class;
1105 
1106  ret = av_opt_eval_int(&pclass, opts, arg, &count);
1107 
1108  if (!ret) {
1109  av_cpu_force_count(count);
1110  }
1111 
1112  return ret;
1113 }
1114 
1115 static void expand_filename_template(AVBPrint *bp, const char *template,
1116  struct tm *tm)
1117 {
1118  int c;
1119 
1120  while ((c = *(template++))) {
1121  if (c == '%') {
1122  if (!(c = *(template++)))
1123  break;
1124  switch (c) {
1125  case 'p':
1126  av_bprintf(bp, "%s", program_name);
1127  break;
1128  case 't':
1129  av_bprintf(bp, "%04d%02d%02d-%02d%02d%02d",
1130  tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
1131  tm->tm_hour, tm->tm_min, tm->tm_sec);
1132  break;
1133  case '%':
1134  av_bprint_chars(bp, c, 1);
1135  break;
1136  }
1137  } else {
1138  av_bprint_chars(bp, c, 1);
1139  }
1140  }
1141 }
1142 
1143 static void log_callback_report(void *ptr, int level, const char *fmt, va_list vl)
1144 {
1145  va_list vl2;
1146  char line[1024];
1147  static int print_prefix = 1;
1148 
1149  va_copy(vl2, vl);
1150  av_log_default_callback(ptr, level, fmt, vl);
1151  av_log_format_line(ptr, level, fmt, vl2, line, sizeof(line), &print_prefix);
1152  va_end(vl2);
1153  if (report_file_level >= level) {
1154  fputs(line, report_file);
1155  fflush(report_file);
1156  }
1157 }
1158 
1159 int init_report(const char *env, FILE **file)
1160 {
1161  char *filename_template = NULL;
1162  char *key, *val;
1163  int ret, count = 0;
1164  int prog_loglevel, envlevel = 0;
1165  time_t now;
1166  struct tm *tm;
1167  AVBPrint filename;
1168 
1169  if (report_file) /* already opened */
1170  return 0;
1171  time(&now);
1172  tm = localtime(&now);
1173 
1174  while (env && *env) {
1175  if ((ret = av_opt_get_key_value(&env, "=", ":", 0, &key, &val)) < 0) {
1176  if (count)
1178  "Failed to parse FFREPORT environment variable: %s\n",
1179  av_err2str(ret));
1180  break;
1181  }
1182  if (*env)
1183  env++;
1184  count++;
1185  if (!strcmp(key, "file")) {
1186  av_free(filename_template);
1187  filename_template = val;
1188  val = NULL;
1189  } else if (!strcmp(key, "level")) {
1190  char *tail;
1191  report_file_level = strtol(val, &tail, 10);
1192  if (*tail) {
1193  av_log(NULL, AV_LOG_FATAL, "Invalid report file level\n");
1194  av_free(key);
1195  av_free(val);
1196  av_free(filename_template);
1197  return AVERROR(EINVAL);
1198  }
1199  envlevel = 1;
1200  } else {
1201  av_log(NULL, AV_LOG_ERROR, "Unknown key '%s' in FFREPORT\n", key);
1202  }
1203  av_free(val);
1204  av_free(key);
1205  }
1206 
1208  expand_filename_template(&filename,
1209  av_x_if_null(filename_template, "%p-%t.log"), tm);
1210  av_free(filename_template);
1211  if (!av_bprint_is_complete(&filename)) {
1212  av_log(NULL, AV_LOG_ERROR, "Out of memory building report file name\n");
1213  return AVERROR(ENOMEM);
1214  }
1215 
1216  prog_loglevel = av_log_get_level();
1217  if (!envlevel)
1218  report_file_level = FFMAX(report_file_level, prog_loglevel);
1219 
1220  report_file = fopen_utf8(filename.str, "w");
1221  if (!report_file) {
1222  int ret = AVERROR(errno);
1223  av_log(NULL, AV_LOG_ERROR, "Failed to open report \"%s\": %s\n",
1224  filename.str, strerror(errno));
1225  return ret;
1226  }
1229  "%s started on %04d-%02d-%02d at %02d:%02d:%02d\n"
1230  "Report written to \"%s\"\n"
1231  "Log level: %d\n",
1232  program_name,
1233  tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
1234  tm->tm_hour, tm->tm_min, tm->tm_sec,
1235  filename.str, report_file_level);
1236  av_bprint_finalize(&filename, NULL);
1237 
1238  if (file)
1239  *file = report_file;
1240 
1241  return 0;
1242 }
1243 
1244 int opt_report(void *optctx, const char *opt, const char *arg)
1245 {
1246  return init_report(NULL, NULL);
1247 }
1248 
1249 int opt_max_alloc(void *optctx, const char *opt, const char *arg)
1250 {
1251  char *tail;
1252  size_t max;
1253 
1254  max = strtol(arg, &tail, 10);
1255  if (*tail) {
1256  av_log(NULL, AV_LOG_FATAL, "Invalid max_alloc \"%s\".\n", arg);
1257  return AVERROR(EINVAL);
1258  }
1259  av_max_alloc(max);
1260  return 0;
1261 }
1262 
1263 int opt_loglevel(void *optctx, const char *opt, const char *arg)
1264 {
1265  const struct { const char *name; int level; } log_levels[] = {
1266  { "quiet" , AV_LOG_QUIET },
1267  { "panic" , AV_LOG_PANIC },
1268  { "fatal" , AV_LOG_FATAL },
1269  { "error" , AV_LOG_ERROR },
1270  { "warning", AV_LOG_WARNING },
1271  { "info" , AV_LOG_INFO },
1272  { "verbose", AV_LOG_VERBOSE },
1273  { "debug" , AV_LOG_DEBUG },
1274  { "trace" , AV_LOG_TRACE },
1275  };
1276  const char *token;
1277  char *tail;
1278  int flags = av_log_get_flags();
1279  int level = av_log_get_level();
1280  int cmd, i = 0;
1281 
1282  av_assert0(arg);
1283  while (*arg) {
1284  token = arg;
1285  if (*token == '+' || *token == '-') {
1286  cmd = *token++;
1287  } else {
1288  cmd = 0;
1289  }
1290  if (!i && !cmd) {
1291  flags = 0; /* missing relative prefix, build absolute value */
1292  }
1293  if (av_strstart(token, "repeat", &arg)) {
1294  if (cmd == '-') {
1296  } else {
1298  }
1299  } else if (av_strstart(token, "level", &arg)) {
1300  if (cmd == '-') {
1302  } else {
1304  }
1305  } else if (av_strstart(token, "time", &arg)) {
1306  if (cmd == '-') {
1308  } else {
1310  }
1311  } else if (av_strstart(token, "datetime", &arg)) {
1312  if (cmd == '-') {
1314  } else {
1316  }
1317  } else {
1318  break;
1319  }
1320  i++;
1321  }
1322  if (!*arg) {
1323  goto end;
1324  } else if (*arg == '+') {
1325  arg++;
1326  } else if (!i) {
1327  flags = av_log_get_flags(); /* level value without prefix, reset flags */
1328  }
1329 
1330  for (i = 0; i < FF_ARRAY_ELEMS(log_levels); i++) {
1331  if (!strcmp(log_levels[i].name, arg)) {
1332  level = log_levels[i].level;
1333  goto end;
1334  }
1335  }
1336 
1337  level = strtol(arg, &tail, 10);
1338  if (*tail) {
1339  av_log(NULL, AV_LOG_FATAL, "Invalid loglevel \"%s\". "
1340  "Possible levels are numbers or:\n", arg);
1341  for (i = 0; i < FF_ARRAY_ELEMS(log_levels); i++)
1342  av_log(NULL, AV_LOG_FATAL, "\"%s\"\n", log_levels[i].name);
1343  av_log(NULL, AV_LOG_FATAL, "Possible flags are:\n");
1344  av_log(NULL, AV_LOG_FATAL, "\"repeat\"\n");
1345  av_log(NULL, AV_LOG_FATAL, "\"level\"\n");
1346  av_log(NULL, AV_LOG_FATAL, "\"time\"\n");
1347  av_log(NULL, AV_LOG_FATAL, "\"datetime\"\n");
1348  return AVERROR(EINVAL);
1349  }
1350 
1351 end:
1354  return 0;
1355 }
1356 
1357 #if CONFIG_AVDEVICE
1358 static void print_device_list(const AVDeviceInfoList *device_list)
1359 {
1360  // print devices
1361  for (int i = 0; i < device_list->nb_devices; i++) {
1362  const AVDeviceInfo *device = device_list->devices[i];
1363  printf("%c %s [%s] (", device_list->default_device == i ? '*' : ' ',
1364  device->device_name, device->device_description);
1365  if (device->nb_media_types > 0) {
1366  for (int j = 0; j < device->nb_media_types; ++j) {
1367  const char* media_type = av_get_media_type_string(device->media_types[j]);
1368  if (j > 0)
1369  printf(", ");
1370  printf("%s", media_type ? media_type : "unknown");
1371  }
1372  } else {
1373  printf("none");
1374  }
1375  printf(")\n");
1376  }
1377 }
1378 
1379 static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
1380 {
1381  int ret;
1382  AVDeviceInfoList *device_list = NULL;
1383 
1384  if (!fmt || !fmt->priv_class || !AV_IS_INPUT_DEVICE(fmt->priv_class->category))
1385  return AVERROR(EINVAL);
1386 
1387  printf("Auto-detected sources for %s:\n", fmt->name);
1388  if ((ret = avdevice_list_input_sources(fmt, NULL, opts, &device_list)) < 0) {
1389  printf("Cannot list sources: %s\n", av_err2str(ret));
1390  goto fail;
1391  }
1392 
1393  print_device_list(device_list);
1394 
1395  fail:
1396  avdevice_free_list_devices(&device_list);
1397  return ret;
1398 }
1399 
1400 static int print_device_sinks(const AVOutputFormat *fmt, AVDictionary *opts)
1401 {
1402  int ret;
1403  AVDeviceInfoList *device_list = NULL;
1404 
1405  if (!fmt || !fmt->priv_class || !AV_IS_OUTPUT_DEVICE(fmt->priv_class->category))
1406  return AVERROR(EINVAL);
1407 
1408  printf("Auto-detected sinks for %s:\n", fmt->name);
1409  if ((ret = avdevice_list_output_sinks(fmt, NULL, opts, &device_list)) < 0) {
1410  printf("Cannot list sinks: %s\n", av_err2str(ret));
1411  goto fail;
1412  }
1413 
1414  print_device_list(device_list);
1415 
1416  fail:
1417  avdevice_free_list_devices(&device_list);
1418  return ret;
1419 }
1420 
1421 static int show_sinks_sources_parse_arg(const char *arg, char **dev, AVDictionary **opts)
1422 {
1423  int ret;
1424  if (arg) {
1425  char *opts_str = NULL;
1426  av_assert0(dev && opts);
1427  *dev = av_strdup(arg);
1428  if (!*dev)
1429  return AVERROR(ENOMEM);
1430  if ((opts_str = strchr(*dev, ','))) {
1431  *(opts_str++) = '\0';
1432  if (opts_str[0] && ((ret = av_dict_parse_string(opts, opts_str, "=", ":", 0)) < 0)) {
1433  av_freep(dev);
1434  return ret;
1435  }
1436  }
1437  } else
1438  printf("\nDevice name is not provided.\n"
1439  "You can pass devicename[,opt1=val1[,opt2=val2...]] as an argument.\n\n");
1440  return 0;
1441 }
1442 
1443 int show_sources(void *optctx, const char *opt, const char *arg)
1444 {
1445  const AVInputFormat *fmt = NULL;
1446  char *dev = NULL;
1447  AVDictionary *opts = NULL;
1448  int ret = 0;
1449  int error_level = av_log_get_level();
1450 
1452 
1453  if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
1454  goto fail;
1455 
1456  do {
1457  fmt = av_input_audio_device_next(fmt);
1458  if (fmt) {
1459  if (!strcmp(fmt->name, "lavfi"))
1460  continue; //it's pointless to probe lavfi
1461  if (dev && !av_match_name(dev, fmt->name))
1462  continue;
1463  print_device_sources(fmt, opts);
1464  }
1465  } while (fmt);
1466  do {
1467  fmt = av_input_video_device_next(fmt);
1468  if (fmt) {
1469  if (dev && !av_match_name(dev, fmt->name))
1470  continue;
1471  print_device_sources(fmt, opts);
1472  }
1473  } while (fmt);
1474  fail:
1475  av_dict_free(&opts);
1476  av_free(dev);
1477  av_log_set_level(error_level);
1478  return ret;
1479 }
1480 
1481 int show_sinks(void *optctx, const char *opt, const char *arg)
1482 {
1483  const AVOutputFormat *fmt = NULL;
1484  char *dev = NULL;
1485  AVDictionary *opts = NULL;
1486  int ret = 0;
1487  int error_level = av_log_get_level();
1488 
1490 
1491  if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
1492  goto fail;
1493 
1494  do {
1495  fmt = av_output_audio_device_next(fmt);
1496  if (fmt) {
1497  if (dev && !av_match_name(dev, fmt->name))
1498  continue;
1499  print_device_sinks(fmt, opts);
1500  }
1501  } while (fmt);
1502  do {
1503  fmt = av_output_video_device_next(fmt);
1504  if (fmt) {
1505  if (dev && !av_match_name(dev, fmt->name))
1506  continue;
1507  print_device_sinks(fmt, opts);
1508  }
1509  } while (fmt);
1510  fail:
1511  av_dict_free(&opts);
1512  av_free(dev);
1513  av_log_set_level(error_level);
1514  return ret;
1515 }
1516 #endif /* CONFIG_AVDEVICE */
show_demuxers
int show_demuxers(void *optctx, const char *opt, const char *arg)
Print a listing containing all the demuxer supported by the program (including devices).
Definition: opt_common.c:948
flags
const SwsFlags flags[]
Definition: swscale.c:85
fopen_utf8
static FILE * fopen_utf8(const char *path, const char *mode)
Definition: fopen_utf8.h:66
AVCodec
AVCodec.
Definition: codec.h:172
show_help_default
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler.
Definition: ffmpeg_opt.c:1310
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition: avutil.h:203
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
level
uint8_t level
Definition: svq3.c:208
avfilter_filter_pad_count
unsigned avfilter_filter_pad_count(const AVFilter *filter, int is_output)
Get the number of elements in an AVFilter's inputs or outputs array.
Definition: avfilter.c:631
AVOutputFormat::extensions
const char * extensions
comma-separated filename extensions
Definition: avformat.h:516
AVOutputFormat::name
const char * name
Definition: avformat.h:508
av_bprint_is_complete
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
Definition: bprint.h:218
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
avio_protocol_get_class
const AVClass * avio_protocol_get_class(const char *name)
Get AVClass by names of available protocols.
Definition: protocols.c:115
printf
__device__ int printf(const char *,...)
AV_IS_INPUT_DEVICE
#define AV_IS_INPUT_DEVICE(category)
Definition: log.h:59
avfilter_pad_get_name
const char * avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx)
Get the name of an AVFilterPad.
Definition: avfilter.c:988
AVCodec::long_name
const char * long_name
Descriptive name for the codec, meant to be more human readable than name.
Definition: codec.h:184
show_filters
int show_filters(void *optctx, const char *opt, const char *arg)
Print a listing containing all the filters supported by the program.
Definition: opt_common.c:808
sws_isSupportedOutput
#define sws_isSupportedOutput(x)
AV_CODEC_PROP_LOSSY
#define AV_CODEC_PROP_LOSSY
Codec supports lossy compression.
Definition: codec_desc.h:78
av_get_sample_fmt_string
char * av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt)
Generate a string corresponding to the sample format with sample_fmt, or a header if sample_fmt is ne...
Definition: samplefmt.c:95
av_bprint_init
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
Definition: bprint.c:69
AV_LOG_QUIET
#define AV_LOG_QUIET
Print no output.
Definition: log.h:192
AV_CODEC_CAP_HARDWARE
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition: codec.h:130
AV_CODEC_CONFIG_SAMPLE_RATE
@ AV_CODEC_CONFIG_SAMPLE_RATE
int, terminated by 0
Definition: avcodec.h:2562
AV_LOG_PANIC
#define AV_LOG_PANIC
Something went really wrong and we will crash now.
Definition: log.h:197
AVDeviceInfo::device_name
char * device_name
device name, format depends on device
Definition: avdevice.h:334
print_program_info
static void print_program_info(int flags, int level)
Definition: opt_common.c:200
version.h
AVCodecDescriptor::name
const char * name
Name of the codec described by this descriptor.
Definition: codec_desc.h:46
AVBitStreamFilter::name
const char * name
Definition: bsf.h:112
AV_CODEC_CAP_ENCODER_RECON_FRAME
#define AV_CODEC_CAP_ENCODER_RECON_FRAME
The encoder is able to output reconstructed frame data, i.e.
Definition: codec.h:159
program_name
const char program_name[]
program name, defined by the program for show_version().
Definition: ffmpeg.c:89
is_device
static int is_device(const AVClass *avclass)
Definition: opt_common.c:856
AVDeviceInfoList::nb_devices
int nb_devices
number of autodetected devices
Definition: avdevice.h:345
avcodec_find_encoder
const AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
Definition: allcodecs.c:1044
show_devices
int show_devices(void *optctx, const char *opt, const char *arg)
Print a listing containing all the devices supported by the program.
Definition: opt_common.c:953
log_callback_report
static void log_callback_report(void *ptr, int level, const char *fmt, va_list vl)
Definition: opt_common.c:1143
show_formats_devices
static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers)
Definition: opt_common.c:863
pixdesc.h
SHOW_CONFIG
#define SHOW_CONFIG
Definition: opt_common.c:157
AVCodec::capabilities
int capabilities
Codec capabilities.
Definition: codec.h:191
init_report
int init_report(const char *env, FILE **file)
Definition: opt_common.c:1159
av_disposition_to_string
const char * av_disposition_to_string(int disposition)
Definition: options.c:589
opt_report
int opt_report(void *optctx, const char *opt, const char *arg)
Definition: opt_common.c:1244
AVComponentDescriptor::depth
int depth
Number of bits in the component.
Definition: pixdesc.h:57
AVPixFmtDescriptor::name
const char * name
Definition: pixdesc.h:70
show_muxdemuxers
show_muxdemuxers
Definition: opt_common.c:65
AVOption
AVOption.
Definition: opt.h:429
b
#define b
Definition: input.c:43
av_pix_fmt_desc_next
const AVPixFmtDescriptor * av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
Iterate over all pixel format descriptors known to libavutil.
Definition: pixdesc.c:3463
show_pix_fmts
int show_pix_fmts(void *optctx, const char *opt, const char *arg)
Print a listing containing all the pixel formats supported by the program.
Definition: opt_common.c:987
avio_enum_protocols
const char * avio_enum_protocols(void **opaque, int output)
Iterate through names of available protocols.
Definition: protocols.c:100
print_codecs_for_id
static void print_codecs_for_id(enum AVCodecID id, int encoder)
Definition: opt_common.c:628
version.h
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:226
filter
void(* filter)(uint8_t *src, int stride, int qscale)
Definition: h263dsp.c:29
PRINT_CODEC_SUPPORTED
#define PRINT_CODEC_SUPPORTED(codec, config, type, name, elem, fmt,...)
Definition: opt_common.c:268
show_help_children
void show_help_children(const AVClass *class, int flags)
Show help for all options with given flags in class and all its children.
Definition: cmdutils.c:140
av_get_bits_per_pixel
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel used by the pixel format described by pixdesc.
Definition: pixdesc.c:3408
get_media_type_char
static char get_media_type_char(enum AVMediaType type)
Definition: opt_common.c:669
max
#define max(a, b)
Definition: cuda_runtime.h:33
show_buildconf
int show_buildconf(void *optctx, const char *opt, const char *arg)
Print the build configuration of the program to stdout.
Definition: opt_common.c:260
AVDictionary
Definition: dict.c:32
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
show_dispositions
int show_dispositions(void *optctx, const char *opt, const char *arg)
Print a listing containing all supported stream dispositions.
Definition: opt_common.c:1067
AV_CODEC_CONFIG_PIX_FORMAT
@ AV_CODEC_CONFIG_PIX_FORMAT
AVPixelFormat, terminated by AV_PIX_FMT_NONE.
Definition: avcodec.h:2560
hide_banner
int hide_banner
Definition: cmdutils.c:60
tf_sess_config.config
config
Definition: tf_sess_config.py:33
cpu.h
SHOW_MUXERS
@ SHOW_MUXERS
Definition: opt_common.c:68
show_license
int show_license(void *optctx, const char *opt, const char *arg)
Print the license of the program to stdout.
Definition: opt_common.c:79
av_channel_layout_describe_bprint
int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, AVBPrint *bp)
bprint variant of av_channel_layout_describe().
Definition: channel_layout.c:600
AVOutputFormat::subtitle_codec
enum AVCodecID subtitle_codec
default subtitle codec
Definition: avformat.h:520
av_input_audio_device_next
const av_cold AVInputFormat * av_input_audio_device_next(const AVInputFormat *d)
Audio input devices iterator.
Definition: alldevices.c:124
AV_LOG_PRINT_TIME
#define AV_LOG_PRINT_TIME
Include system time in log output.
Definition: log.h:413
OptionDef
Definition: cmdutils.h:195
AVInputFormat::long_name
const char * long_name
Descriptive name for the format, meant to be more human-readable than name.
Definition: avformat.h:558
avdevice_list_output_sinks
int avdevice_list_output_sinks(const AVOutputFormat *device, const char *device_name, AVDictionary *device_options, AVDeviceInfoList **device_list)
Definition: avdevice.c:96
SHOW_DEMUXERS
@ SHOW_DEMUXERS
Definition: opt_common.c:67
av_max_alloc
void av_max_alloc(size_t max)
Set the maximum size that may be allocated in one block.
Definition: mem.c:76
rgb
Definition: rpzaenc.c:60
fopen_utf8.h
bsf.h
show_encoders
int show_encoders(void *optctx, const char *opt, const char *arg)
Print a listing containing all the encoders supported by the program.
Definition: opt_common.c:791
av_opt_get_key_value
int av_opt_get_key_value(const char **ropts, const char *key_val_sep, const char *pairs_sep, unsigned flags, char **rkey, char **rval)
Extract a key-value pair from the beginning of a string.
Definition: opt.c:1869
AV_PIX_FMT_FLAG_HWACCEL
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
Definition: pixdesc.h:128
av_filter_iterate
const AVFilter * av_filter_iterate(void **opaque)
Iterate over all registered filters.
Definition: allfilters.c:643
AV_BPRINT_SIZE_AUTOMATIC
#define AV_BPRINT_SIZE_AUTOMATIC
val
static double val(void *priv, double ch)
Definition: aeval.c:77
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
report_file_level
static int report_file_level
Definition: opt_common.c:77
AV_CODEC_CAP_ENCODER_FLUSH
#define AV_CODEC_CAP_ENCODER_FLUSH
This encoder can be flushed using avcodec_flush_buffers().
Definition: codec.h:151
AVFILTER_FLAG_DYNAMIC_INPUTS
#define AVFILTER_FLAG_DYNAMIC_INPUTS
The number of the filter inputs is not determined just by AVFilter.inputs.
Definition: avfilter.h:156
show_version
int show_version(void *optctx, const char *opt, const char *arg)
Print the version of the program to stdout.
Definition: opt_common.c:251
codec.h
AVRational::num
int num
Numerator.
Definition: rational.h:59
av_unused
#define av_unused
Definition: attributes.h:164
show_codecs
int show_codecs(void *optctx, const char *opt, const char *arg)
Print a listing containing all the codecs supported by the program.
Definition: opt_common.c:681
show_help_muxer
static void show_help_muxer(const char *name)
Definition: opt_common.c:475
SHOW_ENCODER
@ SHOW_ENCODER
Definition: opt_common.c:73
AVFilterPad
A filter pad used for either input or output.
Definition: filters.h:40
FFDIFFSIGN
#define FFDIFFSIGN(x, y)
Comparator.
Definition: macros.h:45
AV_OPT_FLAG_AUDIO_PARAM
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:357
AVDeviceInfoList::devices
AVDeviceInfo ** devices
list of autodetected devices
Definition: avdevice.h:344
next_codec_for_id
static const AVCodec * next_codec_for_id(enum AVCodecID id, void **iter, int encoder)
Definition: opt_common.c:391
avassert.h
AV_LOG_TRACE
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:236
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
av_cpu_force_count
void av_cpu_force_count(int count)
Overrides cpu count detection and forces the specified count.
Definition: cpu.c:282
AV_CODEC_CAP_EXPERIMENTAL
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
Definition: codec.h:87
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
AVInputFormat
Definition: avformat.h:546
AVInputFormat::extensions
const char * extensions
If extensions are defined, then no probe is done.
Definition: avformat.h:573
avdevice_list_input_sources
int avdevice_list_input_sources(const AVInputFormat *device, const char *device_name, AVDictionary *device_options, AVDeviceInfoList **device_list)
List devices.
Definition: avdevice.c:85
av_channel_layout_describe
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
Definition: channel_layout.c:654
av_log_format_line
void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, char *line, int line_size, int *print_prefix)
Format a line of log the same way as the default callback.
Definition: log.c:362
decode
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:72
report_file
static FILE * report_file
Definition: opt_common.c:76
compare_codec_desc
static int compare_codec_desc(const void *a, const void *b)
Definition: opt_common.c:641
AVCodecDescriptor
This struct describes the properties of a single codec described by an AVCodecID.
Definition: codec_desc.h:38
AV_CODEC_CONFIG_SAMPLE_FORMAT
@ AV_CODEC_CONFIG_SAMPLE_FORMAT
AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE.
Definition: avcodec.h:2563
PRINT_LIB_INFO
#define PRINT_LIB_INFO(libname, LIBNAME, flags, level)
Definition: opt_common.c:160
AVInputFormat::name
const char * name
A comma separated list of short names for the format.
Definition: avformat.h:551
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demux_decode.c:41
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:201
AV_CODEC_CAP_OTHER_THREADS
#define AV_CODEC_CAP_OTHER_THREADS
Codec supports multithreading through a method other than slice- or frame-level multithreading.
Definition: codec.h:109
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
Definition: codec.h:144
AVOutputFormat::audio_codec
enum AVCodecID audio_codec
default audio codec
Definition: avformat.h:518
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
av_channel_layout_standard
const AVChannelLayout * av_channel_layout_standard(void **opaque)
Iterate over all standard channel layouts.
Definition: channel_layout.c:854
av_get_cpu_flags
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
Definition: cpu.c:109
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
show_bsfs
int show_bsfs(void *optctx, const char *opt, const char *arg)
Print a listing containing all the bit stream filters supported by the program.
Definition: opt_common.c:796
show_banner
void show_banner(int argc, char **argv, const OptionDef *options)
Print the program banner to stderr.
Definition: opt_common.c:240
av_hwdevice_get_type_name
const char * av_hwdevice_get_type_name(enum AVHWDeviceType type)
Get the string name of an AVHWDeviceType.
Definition: hwcontext.c:120
AVBitStreamFilter::codec_ids
enum AVCodecID * codec_ids
A list of codec ids supported by the filter, terminated by AV_CODEC_ID_NONE.
Definition: bsf.h:119
av_get_sample_fmt_name
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
Definition: samplefmt.c:51
key
const char * key
Definition: hwcontext_opencl.c:189
AVMEDIA_TYPE_DATA
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition: avutil.h:202
AVDeviceInfo::media_types
enum AVMediaType * media_types
array indicating what media types(s), if any, a device can provide.
Definition: avdevice.h:336
AV_OPT_FLAG_BSF_PARAM
#define AV_OPT_FLAG_BSF_PARAM
A generic parameter which can be set by the user for bit stream filtering.
Definition: opt.h:372
arg
const char * arg
Definition: jacosubdec.c:65
AV_LOG_PRINT_DATETIME
#define AV_LOG_PRINT_DATETIME
Include system date and time in log output.
Definition: log.h:418
AVDeviceInfo::nb_media_types
int nb_media_types
length of media_types array, 0 if device cannot provide any media types
Definition: avdevice.h:337
AV_IS_OUTPUT_DEVICE
#define AV_IS_OUTPUT_DEVICE(category)
Definition: log.h:64
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:95
av_log_get_level
int av_log_get_level(void)
Get the current log level.
Definition: log.c:472
print_codec
static void print_codec(const AVCodec *c)
Definition: opt_common.c:294
fail
#define fail
Definition: test.h:478
AV_CODEC_PROP_INTRA_ONLY
#define AV_CODEC_PROP_INTRA_ONLY
Codec uses only intra compression.
Definition: codec_desc.h:72
avfilter_get_by_name
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
Definition: allfilters.c:656
opts
static AVDictionary * opts
Definition: movenc.c:51
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
NULL
#define NULL
Definition: coverity.c:32
avcodec_find_decoder_by_name
const AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition: allcodecs.c:1077
print_all_libs_info
static void print_all_libs_info(int flags, int level)
Definition: opt_common.c:189
AVPixFmtDescriptor::nb_components
uint8_t nb_components
The number of components each pixel has, (1-4)
Definition: pixdesc.h:71
AV_CODEC_CONFIG_FRAME_RATE
@ AV_CODEC_CONFIG_FRAME_RATE
AVRational, terminated by {0, 0}.
Definition: avcodec.h:2561
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVOutputFormat::long_name
const char * long_name
Descriptive name for the format, meant to be more human-readable than name.
Definition: avformat.h:514
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
av_log_set_flags
void av_log_set_flags(int arg)
Definition: log.c:482
parseutils.h
opt_loglevel
int opt_loglevel(void *optctx, const char *opt, const char *arg)
Set the libav* libraries log level.
Definition: opt_common.c:1263
options
Definition: swscale.c:50
AVBitStreamFilter::priv_class
const AVClass * priv_class
A class for the private data, used to declare bitstream filter private AVOptions.
Definition: bsf.h:130
AV_CODEC_CAP_VARIABLE_FRAME_SIZE
#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE
Audio encoder supports receiving a different number of samples in each call.
Definition: codec.h:113
warned_cfg
static int warned_cfg
Definition: opt_common.c:153
AVOutputFormat::priv_class
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:536
AVPixFmtDescriptor::flags
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
Definition: pixdesc.h:94
AV_OPT_FLAG_ENCODING_PARAM
#define AV_OPT_FLAG_ENCODING_PARAM
A generic parameter which can be set by the user for muxing or encoding.
Definition: opt.h:352
swresample.h
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
show_sample_fmts
int show_sample_fmts(void *optctx, const char *opt, const char *arg)
Print a listing containing all the sample formats supported by the program.
Definition: opt_common.c:1058
error.h
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:49
avcodec_find_decoder
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition: allcodecs.c:1049
AVFILTER_FLAG_DYNAMIC_OUTPUTS
#define AVFILTER_FLAG_DYNAMIC_OUTPUTS
The number of the filter outputs is not determined just by AVFilter.outputs.
Definition: avfilter.h:162
AV_CODEC_CAP_CHANNEL_CONF
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition: codec.h:91
show_layouts
int show_layouts(void *optctx, const char *opt, const char *arg)
Print a listing containing all the standard channel layouts supported by the program.
Definition: opt_common.c:1025
locate_option
int locate_option(int argc, char **argv, const OptionDef *options, const char *optname)
Return index of option opt in argv or 0 if not found.
Definition: cmdutils.c:489
av_codec_is_decoder
int av_codec_is_decoder(const AVCodec *codec)
Definition: utils.c:85
get_channel_layout_desc
static const char * get_channel_layout_desc(const AVChannelLayout *layout, AVBPrint *bp)
Definition: opt_common.c:284
AV_CODEC_CONFIG_CHANNEL_LAYOUT
@ AV_CODEC_CONFIG_CHANNEL_LAYOUT
AVChannelLayout, terminated by {0}.
Definition: avcodec.h:2564
AV_OPT_FLAG_FILTERING_PARAM
#define AV_OPT_FLAG_FILTERING_PARAM
A generic parameter which can be set by the user for filtering.
Definition: opt.h:381
f
f
Definition: af_crystalizer.c:122
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AV_SAMPLE_FMT_NB
@ AV_SAMPLE_FMT_NB
Number of sample formats. DO NOT USE if linking dynamically.
Definition: samplefmt.h:71
AVMediaType
AVMediaType
Definition: avutil.h:198
av_log_set_callback
void av_log_set_callback(void(*callback)(void *, int, const char *, va_list))
Set the logging callback.
Definition: log.c:492
av_bprint_finalize
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition: bprint.c:235
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:319
AVClass::category
AVClassCategory category
Category used for visualization (like color).
Definition: log.h:133
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
av_err2str
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: error.h:122
av_output_video_device_next
const av_cold AVOutputFormat * av_output_video_device_next(const AVOutputFormat *d)
Video output devices iterator.
Definition: alldevices.c:139
av_parse_cpu_caps
int av_parse_cpu_caps(unsigned *flags, const char *s)
Parse CPU caps from a string and update the given AV_CPU_* flags based on that.
Definition: cpu.c:119
AV_PIX_FMT_FLAG_BITSTREAM
#define AV_PIX_FMT_FLAG_BITSTREAM
All values of a component are bit-wise packed end to end.
Definition: pixdesc.h:124
AVDeviceInfo
Structure describes basic parameters of the device.
Definition: avdevice.h:333
av_demuxer_iterate
const AVInputFormat * av_demuxer_iterate(void **opaque)
Iterate over all registered demuxers.
Definition: allformats.c:616
av_log_get_flags
int av_log_get_flags(void)
Definition: log.c:487
avdevice.h
avdevice_free_list_devices
void avdevice_free_list_devices(AVDeviceInfoList **device_list)
Convenient function to free result of avdevice_list_devices().
Definition: avdevice.c:107
show_protocols
int show_protocols(void *optctx, const char *opt, const char *arg)
Print a listing containing all the protocols supported by the program.
Definition: opt_common.c:958
av_channel_description
int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel_id)
Get a human readable string describing a given channel.
Definition: channel_layout.c:138
encode
static void encode(AVCodecContext *ctx, AVFrame *frame, AVPacket *pkt, FILE *output)
Definition: encode_audio.c:116
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
show_decoders
int show_decoders(void *optctx, const char *opt, const char *arg)
Print a listing containing all the decoders supported by the program.
Definition: opt_common.c:786
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: codec.h:99
line
Definition: graph2dot.c:48
av_pix_fmt_desc_get_id
enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
Definition: pixdesc.c:3475
av_dict_free
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition: dict.c:233
codecs
static const struct codec_string codecs[]
av_strstart
int av_strstart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str.
Definition: avstring.c:36
va_copy
#define va_copy(dst, src)
Definition: va_copy.h:31
AVDeviceInfo::device_description
char * device_description
human friendly name
Definition: avdevice.h:335
show_help_bsf
static void show_help_bsf(const char *name)
Definition: opt_common.c:564
sws_isSupportedInput
#define sws_isSupportedInput(x)
AVOutputFormat::mime_type
const char * mime_type
Definition: avformat.h:515
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:221
avcodec_descriptor_next
const AVCodecDescriptor * avcodec_descriptor_next(const AVCodecDescriptor *prev)
Iterate over all codec descriptors known to libavcodec.
Definition: codec_desc.c:3909
av_codec_is_encoder
int av_codec_is_encoder(const AVCodec *codec)
Definition: utils.c:79
layout
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel layout
Definition: filter_design.txt:18
AV_CODEC_PROP_LOSSLESS
#define AV_CODEC_PROP_LOSSLESS
Codec supports lossless compression.
Definition: codec_desc.h:82
av_log_set_level
void av_log_set_level(int level)
Set the log level.
Definition: log.c:477
bprint.h
INDENT
#define INDENT
Definition: opt_common.c:155
get_codecs_sorted
static int get_codecs_sorted(const AVCodecDescriptor ***rcodecs)
Definition: opt_common.c:650
show_colors
int show_colors(void *optctx, const char *opt, const char *arg)
Print a listing containing all the color names and values recognized by the program.
Definition: opt_common.c:973
SHOW_VERSION
#define SHOW_VERSION
Definition: opt_common.c:156
log.h
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:50
AVOutputFormat
Definition: avformat.h:507
av_channel_name
int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel_id)
Get a human readable string in an abbreviated form describing a given channel.
Definition: channel_layout.c:105
AVSampleFormat
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:55
av_force_cpu_flags
void av_force_cpu_flags(int arg)
Disables cpu detection and forces the specified flags.
Definition: cpu.c:81
print_codecs
static int print_codecs(int encoder)
Definition: opt_common.c:742
AVMEDIA_TYPE_ATTACHMENT
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
Definition: avutil.h:204
AV_OPT_FLAG_VIDEO_PARAM
#define AV_OPT_FLAG_VIDEO_PARAM
Definition: opt.h:358
show_help_demuxer
static void show_help_demuxer(const char *name)
Definition: opt_common.c:439
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
opt_max_alloc
int opt_max_alloc(void *optctx, const char *opt, const char *arg)
Definition: opt_common.c:1249
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
av_codec_iterate
const AVCodec * av_codec_iterate(void **opaque)
Iterate over all registered codecs.
Definition: allcodecs.c:998
show_help_protocol
static void show_help_protocol(const char *name)
Definition: opt_common.c:457
avcodec.h
AVFilter
Filter definition.
Definition: avfilter.h:216
version.h
version.h
version.h
ret
ret
Definition: filter_design.txt:187
AV_LOG_FATAL
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
Definition: log.h:204
av_bsf_iterate
const AVBitStreamFilter * av_bsf_iterate(void **opaque)
Iterate over all registered bitstream filters.
Definition: bitstream_filters.c:81
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:81
av_opt_eval_int
int av_opt_eval_int(void *obj, const AVOption *o, const char *val, int *int_out)
AVDeviceInfoList
List of devices.
Definition: avdevice.h:343
show_codec
show_codec
Definition: opt_common.c:71
log_callback_help
void log_callback_help(void *ptr, int level, const char *fmt, va_list vl)
Trivial log callback.
Definition: cmdutils.c:70
show_muxers
int show_muxers(void *optctx, const char *opt, const char *arg)
Print a listing containing all the muxers supported by the program (including devices).
Definition: opt_common.c:943
avformat.h
av_bprintf
void av_bprintf(AVBPrint *buf, const char *fmt,...)
Definition: bprint.c:122
dict.h
opt_cpucount
int opt_cpucount(void *optctx, const char *opt, const char *arg)
Override the cpucount.
Definition: opt_common.c:1089
AV_LOG_SKIP_REPEATED
#define AV_LOG_SKIP_REPEATED
Skip repeated messages, this requires the user app to use av_log() instead of (f)printf as the 2 woul...
Definition: log.h:400
U
#define U(x)
Definition: vpx_arith.h:37
avfilter_pad_get_type
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
Definition: avfilter.c:993
av_get_media_type_string
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
Definition: utils.c:28
av_muxer_iterate
const AVOutputFormat * av_muxer_iterate(void **opaque)
Iterate over all registered muxers.
Definition: allformats.c:595
AVDeviceInfoList::default_device
int default_device
index of default device or -1 if no default
Definition: avdevice.h:346
channel_layout.h
show_formats
int show_formats(void *optctx, const char *opt, const char *arg)
Print a listing containing all the formats supported by the program (including devices).
Definition: opt_common.c:938
AVBitStreamFilter
Definition: bsf.h:111
av_channel_layout_index_from_channel
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, enum AVChannel channel)
Get the index of a given channel in a channel layout.
Definition: channel_layout.c:715
opt_common.h
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:259
avfilter.h
av_bprint_clear
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data.
Definition: bprint.c:227
version.h
av_match_name
int av_match_name(const char *name, const char *names)
Match instances of a name in a comma-separated list of names.
Definition: avstring.c:346
av_dict_parse_string
int av_dict_parse_string(AVDictionary **pm, const char *str, const char *key_val_sep, const char *pairs_sep, int flags)
Parse the key/value pairs list and add the parsed entries to a dictionary.
Definition: dict.c:210
print_buildconf
static void print_buildconf(int flags, int level)
Definition: opt_common.c:214
opt_cpuflags
int opt_cpuflags(void *optctx, const char *opt, const char *arg)
Override the cpuflags.
Definition: opt_common.c:1077
AVPixFmtDescriptor::comp
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
Definition: pixdesc.h:105
AVOutputFormat::video_codec
enum AVCodecID video_codec
default video codec
Definition: avformat.h:519
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:76
av_find_input_format
const AVInputFormat * av_find_input_format(const char *short_name)
Find AVInputFormat based on the short name of the input format.
Definition: format.c:146
avcodec_get_hw_config
const AVCodecHWConfig * avcodec_get_hw_config(const AVCodec *codec, int index)
Retrieve supported hardware configurations for a codec.
Definition: utils.c:842
SHOW_DEFAULT
@ SHOW_DEFAULT
Definition: opt_common.c:66
AV_CODEC_CAP_PARAM_CHANGE
#define AV_CODEC_CAP_PARAM_CHANGE
Codec supports changed parameters at any point.
Definition: codec.h:103
expand_filename_template
static void expand_filename_template(AVBPrint *bp, const char *template, struct tm *tm)
Definition: opt_common.c:1115
AVFILTER_FLAG_SLICE_THREADS
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Definition: avfilter.h:167
AV_OPT_FLAG_DECODING_PARAM
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
Definition: opt.h:356
desc
const char * desc
Definition: libsvtav1.c:83
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
av_log_default_callback
void av_log_default_callback(void *ptr, int level, const char *fmt, va_list vl)
Default logging callback.
Definition: log.c:380
av_guess_format
const AVOutputFormat * av_guess_format(const char *short_name, const char *filename, const char *mime_type)
Return the output format in the list of registered output formats which best matches the provided par...
Definition: format.c:79
mem.h
av_output_audio_device_next
const av_cold AVOutputFormat * av_output_audio_device_next(const AVOutputFormat *d)
Audio output devices iterator.
Definition: alldevices.c:134
av_strdup
#define av_strdup(s)
Definition: ops_asmgen.c:47
AV_CODEC_CAP_HYBRID
#define AV_CODEC_CAP_HYBRID
Codec is potentially backed by a hardware implementation, but not necessarily.
Definition: codec.h:137
av_get_known_color_name
const char * av_get_known_color_name(int color_idx, const uint8_t **rgbp)
Get the name of a color from the internal table of hard-coded named colors.
Definition: parseutils.c:439
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
SHOW_COPYRIGHT
#define SHOW_COPYRIGHT
Definition: opt_common.c:158
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVFILTER_FLAG_SUPPORT_TIMELINE
#define AVFILTER_FLAG_SUPPORT_TIMELINE
Handy mask to test whether the filter supports or no the timeline feature (internally or generically)...
Definition: avfilter.h:210
show_help_codec
static void show_help_codec(const char *name, int encoder)
Definition: opt_common.c:403
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
cmdutils.h
SHOW_DECODER
@ SHOW_DECODER
Definition: opt_common.c:72
show_help
int show_help(void *optctx, const char *opt, const char *arg)
Generic -h handler common to all fftools.
Definition: opt_common.c:590
rgb
static const SheerTable rgb[2]
Definition: sheervideodata.h:32
AV_CODEC_CAP_DRAW_HORIZ_BAND
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: codec.h:44
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AV_CODEC_CAP_AVOID_PROBING
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: codec.h:123
AVCodecHWConfig
Definition: codec.h:330
av_bprint_chars
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.
Definition: bprint.c:130
avcodec_descriptor_get
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
Definition: codec_desc.c:3903
av_input_video_device_next
const av_cold AVInputFormat * av_input_video_device_next(const AVInputFormat *d)
Video input devices iterator.
Definition: alldevices.c:129
avstring.h
avcodec_descriptor_get_by_name
const AVCodecDescriptor * avcodec_descriptor_get_by_name(const char *name)
Definition: codec_desc.c:3918
AV_CODEC_CAP_SMALL_LAST_FRAME
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
Definition: codec.h:81
codec_desc.h
AV_PIX_FMT_FLAG_PAL
#define AV_PIX_FMT_FLAG_PAL
Pixel format has a palette in data[1], values are indexes in this palette.
Definition: pixdesc.h:120
AV_LOG_PRINT_LEVEL
#define AV_LOG_PRINT_LEVEL
Include the log severity in messages originating from codecs.
Definition: log.h:408
swscale.h
AVInputFormat::priv_class
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:577
av_x_if_null
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
Definition: avutil.h:311
version.h
av_get_pix_fmt_name
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition: pixdesc.c:3376
avcodec_find_encoder_by_name
const AVCodec * avcodec_find_encoder_by_name(const char *name)
Find a registered encoder with the specified name.
Definition: allcodecs.c:1072
program_birth_year
const int program_birth_year
program birth year, defined by the program for show_banner()
Definition: ffmpeg.c:90
av_bsf_get_by_name
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
Definition: bitstream_filters.c:93