FFmpeg
Loading...
Searching...
No Matches
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"
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"
47#include "libavcodec/version.h"
48
50#include "libavformat/version.h"
51
53#include "libavdevice/version.h"
54
56#include "libavfilter/version.h"
57
58#include "libswscale/swscale.h"
59#include "libswscale/version.h"
60
63
64
70
75
76static FILE *report_file;
78
79int 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",
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
153static 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
189static 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
200static void print_program_info(int flags, int level)
201{
202 const char *indent = flags & INDENT? " " : "";
203
204 av_log(NULL, level, "%s version %s", program_name, FFMPEG_VERSION);
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: %s\n", indent, FFMPEG_CONFIGURATION);
212}
213
214static 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
240void 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
251int show_version(void *optctx, const char *opt, const char *arg)
252{
256
257 return 0;
258}
259
260int 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
284static 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
294static 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++) {
358 const AVCodecHWConfig *config = avcodec_get_hw_config(c, 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
391static 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 &&
398 return c;
399 }
400 return NULL;
401}
402
403static 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);
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
439static 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
457static 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
475static void show_help_muxer(const char *name)
476{
477 const AVCodecDescriptor *desc;
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
509static 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)
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
564static 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
590int 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")) {
610 } else if (!strcmp(topic, "muxer")) {
611 show_help_muxer(par);
612 } else if (!strcmp(topic, "protocol")) {
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
628static 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
641static 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
650static int get_codecs_sorted(const AVCodecDescriptor ***rcodecs)
651{
652 const AVCodecDescriptor *desc = NULL;
654 unsigned nb_codecs = 0, i = 0;
655
657 nb_codecs++;
658 if (!(codecs = av_calloc(nb_codecs, sizeof(*codecs))))
659 return AVERROR(ENOMEM);
660 desc = NULL;
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
681int show_codecs(void *optctx, const char *opt, const char *arg)
682{
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' : '.',
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 }
739 return 0;
740}
741
742static int print_codecs(int encoder)
743{
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",
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 }
783 return 0;
784}
785
786int show_decoders(void *optctx, const char *opt, const char *arg)
787{
789}
790
791int show_encoders(void *optctx, const char *opt, const char *arg)
792{
794}
795
796int 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
808int 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;
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
856static 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
863static 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
938int show_formats(void *optctx, const char *opt, const char *arg)
939{
940 return show_formats_devices(optctx, opt, arg, 0, SHOW_DEFAULT);
941}
942
943int show_muxers(void *optctx, const char *opt, const char *arg)
944{
945 return show_formats_devices(optctx, opt, arg, 0, SHOW_MUXERS);
946}
947
948int show_demuxers(void *optctx, const char *opt, const char *arg)
949{
950 return show_formats_devices(optctx, opt, arg, 0, SHOW_DEMUXERS);
951}
952
953int show_devices(void *optctx, const char *opt, const char *arg)
954{
955 return show_formats_devices(optctx, opt, arg, 1, SHOW_DEFAULT);
956}
957
958int 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
973int 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
987int 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
1025int 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
1058int 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
1067int 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
1077int 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
1089int 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
1115static 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
1143static 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
1159int 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",
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
1244int opt_report(void *optctx, const char *opt, const char *arg)
1245{
1246 return init_report(NULL, NULL);
1247}
1248
1249int 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 }
1260 return 0;
1261}
1262
1263int 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
1351end:
1354 return 0;
1355}
1356
1357#if CONFIG_AVDEVICE
1358static 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
1379static 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
1400static 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
1421static 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
1443int show_sources(void *optctx, const char *opt, const char *arg)
1444{
1445 const AVInputFormat *fmt = NULL;
1446 char *dev = 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:
1476 av_free(dev);
1477 av_log_set_level(error_level);
1478 return ret;
1479}
1480
1481int show_sinks(void *optctx, const char *opt, const char *arg)
1482{
1483 const AVOutputFormat *fmt = NULL;
1484 char *dev = 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:
1512 av_free(dev);
1513 av_log_set_level(error_level);
1514 return ret;
1515}
1516#endif /* CONFIG_AVDEVICE */
static double val(void *priv, double ch)
Definition aeval.c:77
static AVDictionary * opts
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Libavcodec external API header.
Main libavdevice API header.
Main libavfilter public API header.
Main libavformat public API header.
const char * av_disposition_to_string(int disposition)
Definition options.c:587
const AVClass * avio_protocol_get_class(const char *name)
Get AVClass by names of available protocols.
Definition protocols.c:116
const char * avio_enum_protocols(void **opaque, int output)
Iterate through names of available protocols.
Definition protocols.c:101
void av_bprintf(AVBPrint *buf, const char *fmt,...)
Definition bprint.c:122
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
Definition bprint.c:69
AVBPrint public header.
#define AV_BPRINT_SIZE_AUTOMATIC
#define flags(name, subs,...)
Definition cbs_h264.c:74
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define f(width, name)
Definition cbs_vp8.c:236
Public libavutil channel layout APIs header.
int hide_banner
Definition cmdutils.c:60
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
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
void log_callback_help(void *ptr, int level, const char *fmt, va_list vl)
Trivial log callback.
Definition cmdutils.c:70
const char program_name[]
program name, defined by the program for show_version().
Definition ffmpeg.c:89
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler.
const int program_birth_year
program birth year, defined by the program for show_banner()
Definition ffmpeg.c:90
static const struct codec_string codecs[]
#define NULL
Definition coverity.c:32
__device__ int printf(const char *,...)
#define max(a, b)
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static enum AVPixelFormat pix_fmt
Public dictionary API.
static void encode(AVCodecContext *ctx, AVFrame *frame, AVPacket *pkt, FILE *output)
error code definitions
const char * key
static FILE * fopen_utf8(const char *path, const char *mode)
Definition fopen_utf8.h:66
#define fail
Definition test.h:479
#define AV_OPT_FLAG_FILTERING_PARAM
A generic parameter which can be set by the user for filtering.
Definition opt.h:380
#define AV_OPT_FLAG_BSF_PARAM
A generic parameter which can be set by the user for bit stream filtering.
Definition opt.h:371
#define AV_OPT_FLAG_AUDIO_PARAM
Definition opt.h:356
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
Definition opt.h:355
#define AV_OPT_FLAG_VIDEO_PARAM
Definition opt.h:357
#define AV_OPT_FLAG_ENCODING_PARAM
A generic parameter which can be set by the user for muxing or encoding.
Definition opt.h:351
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
const AVBitStreamFilter * av_bsf_iterate(void **opaque)
Iterate over all registered bitstream filters.
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition codec.h:41
#define AV_CODEC_PROP_LOSSY
Codec supports lossy compression.
Definition codec_desc.h:78
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
#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:147
#define AV_CODEC_CAP_ENCODER_FLUSH
This encoder can be flushed using avcodec_flush_buffers().
Definition codec.h:154
int av_codec_is_encoder(const AVCodec *codec)
Definition utils.c:79
#define AV_CODEC_CAP_OTHER_THREADS
Codec supports multithreading through a method other than slice- or frame-level multithreading.
Definition codec.h:112
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition codec.h:126
#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE
Audio encoder supports receiving a different number of samples in each call.
Definition codec.h:116
#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:79
#define AV_CODEC_PROP_LOSSLESS
Codec supports lossless compression.
Definition codec_desc.h:82
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
int av_codec_is_decoder(const AVCodec *codec)
Definition utils.c:85
#define AV_CODEC_PROP_INTRA_ONLY
Codec uses only intra compression.
Definition codec_desc.h:72
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition codec.h:102
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition allcodecs.c:990
const AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition allcodecs.c:1018
const AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
Definition allcodecs.c:985
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition codec_id.h:47
const AVCodecHWConfig * avcodec_get_hw_config(const AVCodec *codec, int index)
Retrieve supported hardware configurations for a codec.
Definition utils.c:857
const AVCodec * avcodec_find_encoder_by_name(const char *name)
Find a registered encoder with the specified name.
Definition allcodecs.c:1013
const AVCodecDescriptor * avcodec_descriptor_next(const AVCodecDescriptor *prev)
Iterate over all codec descriptors known to libavcodec.
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition codec.h:94
#define AV_CODEC_CAP_PARAM_CHANGE
Codec supports changed parameters at any point.
Definition codec.h:106
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
Definition codec.h:133
const AVCodecDescriptor * avcodec_descriptor_get_by_name(const char *name)
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
Definition codec.h:84
#define AV_CODEC_CAP_ENCODER_RECON_FRAME
The encoder is able to output reconstructed frame data, i.e.
Definition codec.h:162
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition codec.h:98
const AVCodec * av_codec_iterate(void **opaque)
Iterate over all registered codecs.
Definition allcodecs.c:943
#define AV_CODEC_CAP_HYBRID
Codec is potentially backed by a hardware implementation, but not necessarily.
Definition codec.h:140
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
Definition codec.h:90
@ AV_CODEC_ID_NONE
Definition codec_id.h:48
@ AV_CODEC_CONFIG_PIX_FORMAT
AVPixelFormat, terminated by AV_PIX_FMT_NONE.
Definition avcodec.h:2573
@ AV_CODEC_CONFIG_SAMPLE_FORMAT
AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE.
Definition avcodec.h:2576
@ AV_CODEC_CONFIG_FRAME_RATE
AVRational, terminated by {0, 0}.
Definition avcodec.h:2574
@ AV_CODEC_CONFIG_SAMPLE_RATE
int, terminated by 0
Definition avcodec.h:2575
@ AV_CODEC_CONFIG_CHANNEL_LAYOUT
AVChannelLayout, terminated by {0}.
Definition avcodec.h:2577
av_cold const AVOutputFormat * av_output_video_device_next(const AVOutputFormat *d)
Video output devices iterator.
Definition alldevices.c:139
av_cold const AVOutputFormat * av_output_audio_device_next(const AVOutputFormat *d)
Audio output devices iterator.
Definition alldevices.c:134
void avdevice_free_list_devices(AVDeviceInfoList **device_list)
Convenient function to free result of avdevice_list_devices().
Definition avdevice.c:107
av_cold const AVInputFormat * av_input_video_device_next(const AVInputFormat *d)
Video input devices iterator.
Definition alldevices.c:129
int avdevice_list_output_sinks(const AVOutputFormat *device, const char *device_name, AVDictionary *device_options, AVDeviceInfoList **device_list)
Definition avdevice.c:96
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_cold const AVInputFormat * av_input_audio_device_next(const AVInputFormat *d)
Audio input devices iterator.
Definition alldevices.c:124
const AVOutputFormat * av_muxer_iterate(void **opaque)
Iterate over all registered muxers.
Definition allformats.c:597
const AVInputFormat * av_demuxer_iterate(void **opaque)
Iterate over all registered demuxers.
Definition allformats.c:618
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
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
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name.
Definition allfilters.c:655
#define AVFILTER_FLAG_DYNAMIC_OUTPUTS
The number of the filter outputs is not determined just by AVFilter.outputs.
Definition avfilter.h:161
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
Definition avfilter.c:993
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
const char * avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx)
Get the name of an AVFilterPad.
Definition avfilter.c:988
const AVFilter * av_filter_iterate(void **opaque)
Iterate over all registered filters.
Definition allfilters.c:642
#define AVFILTER_FLAG_SUPPORT_TIMELINE
Handy mask to test whether the filter supports or no the timeline feature (internally or generically)...
Definition avfilter.h:209
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Definition avfilter.h:166
#define AVFILTER_FLAG_DYNAMIC_INPUTS
The number of the filter inputs is not determined just by AVFilter.inputs.
Definition avfilter.h:155
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.
int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, AVBPrint *bp)
bprint variant of av_channel_layout_describe().
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.
int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel_id)
Get a human readable string describing a given channel.
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.
const AVChannelLayout * av_channel_layout_standard(void **opaque)
Iterate over all standard channel layouts.
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
Definition bprint.h:218
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition bprint.c:235
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.
Definition bprint.c:130
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data.
Definition bprint.c:227
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition dict.c:233
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
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition error.h:122
#define AVERROR(e)
Definition error.h:45
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition log.h:236
#define AV_LOG_PANIC
Something went really wrong and we will crash now.
Definition log.h:197
#define AV_LOG_QUIET
Print no output.
Definition log.h:192
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
Definition log.h:204
#define AV_LOG_VERBOSE
Detailed information.
Definition log.h:226
#define AV_LOG_INFO
Standard information.
Definition log.h:221
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
#define AV_LOG_PRINT_DATETIME
Include system date and time in log output.
Definition log.h:418
void av_log_set_callback(void(*callback)(void *, int, const char *, va_list))
Set the logging callback.
Definition log.c:491
#define AV_LOG_PRINT_TIME
Include system time in log output.
Definition log.h:413
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
void av_log_set_level(int level)
Set the log level.
Definition log.c:476
void av_log_default_callback(void *ptr, int level, const char *fmt, va_list vl)
Default logging callback.
Definition log.c:379
#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
int av_log_get_flags(void)
Definition log.c:486
#define AV_LOG_PRINT_LEVEL
Include the log severity in messages originating from codecs.
Definition log.h:408
int av_log_get_level(void)
Get the current log level.
Definition log.c:471
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:361
void av_log_set_flags(int arg)
Definition log.c:481
void av_max_alloc(size_t max)
Set the maximum size that may be allocated in one block.
Definition mem.c:76
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
AVMediaType
Definition avutil.h:198
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
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
Definition avutil.h:204
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AVMEDIA_TYPE_SUBTITLE
Definition avutil.h:203
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition avutil.h:202
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
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
AVSampleFormat
Audio sample formats.
Definition samplefmt.h:55
@ AV_SAMPLE_FMT_NB
Number of sample formats. DO NOT USE if linking dynamically.
Definition samplefmt.h:71
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:341
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
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
int av_opt_eval_int(void *obj, const AVOption *o, const char *val, int *int_out)
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:1953
int a
const char * av_hwdevice_get_type_name(enum AVHWDeviceType type)
Get the string name of an AVHWDeviceType.
Definition hwcontext.c:120
cl_device_type type
#define b
Definition input.c:43
const char * arg
Definition jacosubdec.c:65
Libavcodec version macros.
Libavdevice version macros.
Libavfilter version macros.
Libavformat version macros.
#define av_unused
Definition attributes.h:164
void av_force_cpu_flags(int arg)
Disables cpu detection and forces the specified flags.
Definition cpu.c:81
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
void av_cpu_force_count(int count)
Overrides cpu count detection and forces the specified count.
Definition cpu.c:282
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
Definition cpu.c:109
Libavutil version macros.
const char * desc
Definition libsvtav1.c:83
Libswresample version macros.
swscale version macros
#define AV_IS_OUTPUT_DEVICE(category)
Definition log.h:64
#define AV_IS_INPUT_DEVICE(category)
Definition log.h:59
#define FFMAX(a, b)
Definition macros.h:47
#define FFDIFFSIGN(x, y)
Comparator.
Definition macros.h:45
uint64_t layout
void * av_calloc(size_t nmemb, size_t size)
Definition mem.c:264
Memory handling functions.
#define av_strdup(s)
Definition ops_static.c:55
static int get_codecs_sorted(const AVCodecDescriptor ***rcodecs)
Definition opt_common.c:650
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
int opt_loglevel(void *optctx, const char *opt, const char *arg)
Set the libav* libraries log level.
int opt_cpuflags(void *optctx, const char *opt, const char *arg)
Override the cpuflags.
int show_help(void *optctx, const char *opt, const char *arg)
Generic -h handler common to all fftools.
Definition opt_common.c:590
static void log_callback_report(void *ptr, int level, const char *fmt, va_list vl)
static void show_help_bsf(const char *name)
Definition opt_common.c:564
static void show_help_codec(const char *name, int encoder)
Definition opt_common.c:403
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
static void show_help_demuxer(const char *name)
Definition opt_common.c:439
int show_sample_fmts(void *optctx, const char *opt, const char *arg)
Print a listing containing all the sample formats supported by the program.
#define SHOW_CONFIG
Definition opt_common.c:157
static int report_file_level
Definition opt_common.c:77
show_muxdemuxers
Definition opt_common.c:65
@ SHOW_DEFAULT
Definition opt_common.c:66
@ SHOW_DEMUXERS
Definition opt_common.c:67
@ SHOW_MUXERS
Definition opt_common.c:68
#define SHOW_VERSION
Definition opt_common.c:156
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
#define INDENT
Definition opt_common.c:155
static int compare_codec_desc(const void *a, const void *b)
Definition opt_common.c:641
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
static FILE * report_file
Definition opt_common.c:76
static void print_all_libs_info(int flags, int level)
Definition opt_common.c:189
static void print_buildconf(int flags, int level)
Definition opt_common.c:214
#define PRINT_LIB_INFO(libname, LIBNAME, flags, level)
Definition opt_common.c:160
int show_dispositions(void *optctx, const char *opt, const char *arg)
Print a listing containing all supported stream dispositions.
int show_layouts(void *optctx, const char *opt, const char *arg)
Print a listing containing all the standard channel layouts supported by the program.
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
int show_version(void *optctx, const char *opt, const char *arg)
Print the version of the program to stdout.
Definition opt_common.c:251
static void expand_filename_template(AVBPrint *bp, const char *template, struct tm *tm)
static void show_help_protocol(const char *name)
Definition opt_common.c:457
static int print_codecs(int encoder)
Definition opt_common.c:742
static const char * get_channel_layout_desc(const AVChannelLayout *layout, AVBPrint *bp)
Definition opt_common.c:284
static char get_media_type_char(enum AVMediaType type)
Definition opt_common.c:669
int opt_cpucount(void *optctx, const char *opt, const char *arg)
Override the cpucount.
void show_banner(int argc, char **argv, const OptionDef *options)
Print the program banner to stderr.
Definition opt_common.c:240
static void show_help_muxer(const char *name)
Definition opt_common.c:475
int show_license(void *optctx, const char *opt, const char *arg)
Print the license of the program to stdout.
Definition opt_common.c:79
static int warned_cfg
Definition opt_common.c:153
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
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
show_codec
Definition opt_common.c:71
@ SHOW_DECODER
Definition opt_common.c:72
@ SHOW_ENCODER
Definition opt_common.c:73
static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers)
Definition opt_common.c:863
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
static void print_program_info(int flags, int level)
Definition opt_common.c:200
#define SHOW_COPYRIGHT
Definition opt_common.c:158
int init_report(const char *env, FILE **file)
static void print_codec(const AVCodec *c)
Definition opt_common.c:294
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
static const AVCodec * next_codec_for_id(enum AVCodecID id, void **iter, int encoder)
Definition opt_common.c:391
#define sws_isSupportedOutput(x)
static int is_device(const AVClass *avclass)
Definition opt_common.c:856
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
int opt_max_alloc(void *optctx, const char *opt, const char *arg)
#define PRINT_CODEC_SUPPORTED(codec, config, type, name, elem, fmt,...)
Definition opt_common.c:268
int opt_report(void *optctx, const char *opt, const char *arg)
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
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
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
#define sws_isSupportedInput(x)
static void print_codecs_for_id(enum AVCodecID id, int encoder)
Definition opt_common.c:628
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
misc parsing utilities
enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
Definition pixdesc.c:3479
const AVPixFmtDescriptor * av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
Iterate over all pixel format descriptors known to libavutil.
Definition pixdesc.c:3467
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:3412
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:3380
#define AV_PIX_FMT_FLAG_BITSTREAM
All values of a component are bit-wise packed end to end.
Definition pixdesc.h:124
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
Definition pixdesc.h:128
#define AV_PIX_FMT_FLAG_PAL
Pixel format has a palette in data[1], values are indexes in this palette.
Definition pixdesc.h:120
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
const char * name
Definition qsvenc.c:142
#define FF_ARRAY_ELEMS(a)
const AVClass * priv_class
A class for the private data, used to declare bitstream filter private AVOptions.
Definition bsf.h:130
const char * name
Definition bsf.h:112
enum AVCodecID * codec_ids
A list of codec ids supported by the filter, terminated by AV_CODEC_ID_NONE.
Definition bsf.h:119
An AVChannelLayout holds information about the channel layout of audio data.
Describe the class of an AVClass context structure.
Definition log.h:76
AVClassCategory category
Category used for visualization (like color).
Definition log.h:133
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
This struct describes the properties of a single codec described by an AVCodecID.
Definition codec_desc.h:38
const char * name
Name of the codec described by this descriptor.
Definition codec_desc.h:46
AVCodec.
Definition codec.h:175
const char * long_name
Descriptive name for the codec, meant to be more human readable than name.
Definition codec.h:187
const char * name
Name of the codec implementation.
Definition codec.h:182
int capabilities
Codec capabilities.
Definition codec.h:194
int depth
Number of bits in the component.
Definition pixdesc.h:57
List of devices.
Definition avdevice.h:343
int nb_devices
number of autodetected devices
Definition avdevice.h:345
int default_device
index of default device or -1 if no default
Definition avdevice.h:346
AVDeviceInfo ** devices
list of autodetected devices
Definition avdevice.h:344
Structure describes basic parameters of the device.
Definition avdevice.h:333
char * device_description
human friendly name
Definition avdevice.h:335
enum AVMediaType * media_types
array indicating what media types(s), if any, a device can provide.
Definition avdevice.h:336
int nb_media_types
length of media_types array, 0 if device cannot provide any media types
Definition avdevice.h:337
char * device_name
device name, format depends on device
Definition avdevice.h:334
A filter pad used for either input or output.
Definition filters.h:40
Filter definition.
Definition avfilter.h:215
const char * long_name
Descriptive name for the format, meant to be more human-readable than name.
Definition avformat.h:577
const char * name
A comma separated list of short names for the format.
Definition avformat.h:570
const char * extensions
If extensions are defined, then no probe is done.
Definition avformat.h:592
const AVClass * priv_class
AVClass for the private context.
Definition avformat.h:596
AVOption.
Definition opt.h:428
const char * extensions
comma-separated filename extensions
Definition avformat.h:535
enum AVCodecID video_codec
default video codec
Definition avformat.h:538
enum AVCodecID audio_codec
default audio codec
Definition avformat.h:537
const char * long_name
Descriptive name for the format, meant to be more human-readable than name.
Definition avformat.h:533
const char * name
Definition avformat.h:527
const char * mime_type
Definition avformat.h:534
enum AVCodecID subtitle_codec
default subtitle codec
Definition avformat.h:539
const AVClass * priv_class
AVClass for the private context.
Definition avformat.h:555
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition pixdesc.h:69
const char * name
Definition pixdesc.h:70
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
Definition pixdesc.h:105
uint64_t flags
Combination of AV_PIX_FMT_FLAG_... flags.
Definition pixdesc.h:94
uint8_t nb_components
The number of components each pixel has, (1-4)
Definition pixdesc.h:71
Rational number (pair of numerator and denominator).
Definition rational.h:58
int num
Numerator.
Definition rational.h:59
Definition rpzaenc.c:60
uint8_t level
Definition svq3.c:208
libswresample public header
external API header
#define av_free(p)
#define av_freep(p)
#define av_log(a,...)
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
Definition h263dsp.c:29
#define va_copy(dst, src)
Definition va_copy.h:31
static double c[64]