40#ifndef FFTOOLS_FFMPEG_MUX_H
41#define FFTOOLS_FFMPEG_MUX_H
48#include "libavformat/avformat.h"
50#include "libavcodec/packet.h"
52#include "libavutil/dict.h"
53#include "libavutil/fifo.h"
54#include "libavutil/thread.h"
56#define SPECIFIER_OPT_FMT_str "%s"
57#define SPECIFIER_OPT_FMT_i "%i"
58#define SPECIFIER_OPT_FMT_i64 "%"PRId64
59#define SPECIFIER_OPT_FMT_ui64 "%"PRIu64
60#define SPECIFIER_OPT_FMT_f "%f"
61#define SPECIFIER_OPT_FMT_dbl "%lf"
63#define WARN_MULTIPLE_OPT_USAGE(name, type, so, st)\
65 char namestr[128] = "";\
66 const char *spec = so->specifier && so->specifier[0] ? so->specifier : "";\
67 for (int _i = 0; opt_name_##name[_i]; _i++)\
68 av_strlcatf(namestr, sizeof(namestr), "-%s%s", opt_name_##name[_i], opt_name_##name[_i+1] ? (opt_name_##name[_i+2] ? ", " : " or ") : "");\
69 av_log(NULL, AV_LOG_WARNING, "Multiple %s options specified for stream %d, only the last option '-%s%s%s "SPECIFIER_OPT_FMT_##type"' will be used.\n",\
70 namestr, st->index, opt_name_##name[0], spec[0] ? ":" : "", spec, so->u.type);\
73#define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)\
75 int _ret, _matches = 0;\
77 for (int _i = 0; _i < o->nb_ ## name; _i++) {\
78 char *spec = o->name[_i].specifier;\
79 if ((_ret = check_stream_specifier(fmtctx, st, spec)) > 0) {\
80 outvar = o->name[_i].u.type;\
87 WARN_MULTIPLE_OPT_USAGE(name, type, so, st);\
90#define MATCH_PER_TYPE_OPT(name, type, outvar, fmtctx, mediatype)\
93 for (i = 0; i < o->nb_ ## name; i++) {\
94 char *spec = o->name[i].specifier;\
95 if (!strcmp(spec, mediatype))\
96 outvar = o->name[i].u.type;\
int max_muxing_queue_size
size_t muxing_queue_data_size
size_t muxing_queue_data_threshold
atomic_int_least64_t last_filesize