diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-08-31 12:04:17 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-08-31 13:01:30 +0200 |
commit | 98298eb1034bddb4557fa689553dae793c2b0092 (patch) | |
tree | d35dcd981b6647c9f538bc9b346ab806864bc359 | |
parent | f3683349aecf3be4c9c875186a812c0cde8ecf41 (diff) | |
parent | ec36aa69448f20a78d8c4588265022e0b2272ab5 (diff) | |
download | ffmpeg-98298eb1034bddb4557fa689553dae793c2b0092.tar.gz |
Merge commit 'ec36aa69448f20a78d8c4588265022e0b2272ab5'
* commit 'ec36aa69448f20a78d8c4588265022e0b2272ab5':
x86: Fix linking with some or all of yasm, mmx, optimizations disabled
configure: Add more fine-grained SSE CPU capabilities flags
avfilter: x86: Use more precise compile template names
x86: cosmetics: Comment some #endifs for better readability
g723_1: add comfort noise generation
utvideoenc: Switch to dsputils' median prediction
utvideoenc: Avoid writing into the input picture
avtools: remove the distinction between func_arg and func2_arg.
avconv: make the -passlogfile option per-stream.
avconv: make the -pass option per-stream.
cmdutils: make -codecs print lossy/lossless flags.
lavc: add lossy/lossless codec properties.
Conflicts:
Changelog
cmdutils.c
configure
doc/APIchanges
ffmpeg.h
ffmpeg_opt.c
ffprobe.c
libavcodec/codec_desc.c
libavcodec/g723_1.c
libavcodec/utvideoenc.c
libavcodec/version.h
libavcodec/x86/mpegaudiodec.c
libavcodec/x86/rv40dsp_init.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
33 files changed, 928 insertions, 296 deletions
@@ -50,6 +50,7 @@ version next: - edge detection filter - framestep filter - ffmpeg -shortest option is now per-output file + -pass and -passlogfile are now per-output stream - volume measurement filter - Ut Video encoder - Matroska demuxer now identifies SRT subtitles as AV_CODEC_ID_SUBRIP diff --git a/cmdutils.c b/cmdutils.c index 619a4a81e5..a0ad3ef747 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -316,8 +316,7 @@ int parse_option(void *optctx, const char *opt, const char *arg, } else if (po->flags & OPT_DOUBLE) { *(double *)dst = parse_number_or_die(opt, arg, OPT_DOUBLE, -INFINITY, INFINITY); } else if (po->u.func_arg) { - int ret = po->flags & OPT_FUNC2 ? po->u.func2_arg(optctx, opt, arg) - : po->u.func_arg(opt, arg); + int ret = po->u.func_arg(optctx, opt, arg); if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Failed to set value '%s' for option '%s'\n", arg, opt); @@ -416,7 +415,7 @@ void parse_loglevel(int argc, char **argv, const OptionDef *options) if (!idx) idx = locate_option(argc, argv, options, "v"); if (idx && argv[idx + 1]) - opt_loglevel("loglevel", argv[idx + 1]); + opt_loglevel(NULL, "loglevel", argv[idx + 1]); idx = locate_option(argc, argv, options, "report"); if (idx || getenv("FFREPORT")) { opt_report("report"); @@ -433,7 +432,7 @@ void parse_loglevel(int argc, char **argv, const OptionDef *options) } #define FLAGS (o->type == AV_OPT_TYPE_FLAGS) ? AV_DICT_APPEND : 0 -int opt_default(const char *opt, const char *arg) +int opt_default(void *optctx, const char *opt, const char *arg) { const AVOption *o; char opt_stripped[128]; @@ -482,7 +481,7 @@ int opt_default(const char *opt, const char *arg) return AVERROR_OPTION_NOT_FOUND; } -int opt_loglevel(const char *opt, const char *arg) +int opt_loglevel(void *optctx, const char *opt, const char *arg) { const struct { const char *name; int level; } log_levels[] = { { "quiet" , AV_LOG_QUIET }, @@ -549,7 +548,7 @@ int opt_report(const char *opt) return 0; } -int opt_max_alloc(const char *opt, const char *arg) +int opt_max_alloc(void *optctx, const char *opt, const char *arg) { char *tail; size_t max; @@ -563,7 +562,7 @@ int opt_max_alloc(const char *opt, const char *arg) return 0; } -int opt_cpuflags(const char *opt, const char *arg) +int opt_cpuflags(void *optctx, const char *opt, const char *arg) { int ret; unsigned flags = av_get_cpu_flags(); @@ -575,13 +574,13 @@ int opt_cpuflags(const char *opt, const char *arg) return 0; } -int opt_codec_debug(const char *opt, const char *arg) +int opt_codec_debug(void *optctx, const char *opt, const char *arg) { av_log_set_level(AV_LOG_DEBUG); - return opt_default(opt, arg); + return opt_default(NULL, opt, arg); } -int opt_timelimit(const char *opt, const char *arg) +int opt_timelimit(void *optctx, const char *opt, const char *arg) { #if HAVE_SETRLIMIT int lim = parse_number_or_die(opt, arg, OPT_INT64, 0, INT_MAX); @@ -680,7 +679,7 @@ void show_banner(int argc, char **argv, const OptionDef *options) print_all_libs_info(INDENT|SHOW_VERSION, AV_LOG_INFO); } -int show_version(const char *opt, const char *arg) +int show_version(void *optctx, const char *opt, const char *arg) { av_log_set_callback(log_callback_help); print_program_info (0 , AV_LOG_INFO); @@ -689,7 +688,7 @@ int show_version(const char *opt, const char *arg) return 0; } -int show_license(const char *opt, const char *arg) +int show_license(void *optctx, const char *opt, const char *arg) { printf( #if CONFIG_NONFREE @@ -760,7 +759,7 @@ int show_license(const char *opt, const char *arg) return 0; } -int show_formats(const char *opt, const char *arg) +int show_formats(void *optctx, const char *opt, const char *arg) { AVInputFormat *ifmt = NULL; AVOutputFormat *ofmt = NULL; @@ -902,18 +901,20 @@ static void print_codecs_for_id(enum AVCodecID id, int encoder) printf(")"); } -int show_codecs(const char *opt, const char *arg) +int show_codecs(void *optctx, const char *opt, const char *arg) { const AVCodecDescriptor *desc = NULL; printf("Codecs:\n" - " D... = Decoding supported\n" - " .E.. = Encoding supported\n" - " ..V. = Video codec\n" - " ..A. = Audio codec\n" - " ..S. = Subtitle codec\n" - " ...I = Intra frame-only codec\n" - " -----\n"); + " D..... = Decoding supported\n" + " .E.... = Encoding supported\n" + " ..V... = Video codec\n" + " ..A... = Audio codec\n" + " ..S... = Subtitle codec\n" + " ...I.. = Intra frame-only codec\n" + " ....L. = Lossy compression\n" + " .....S = Lossless compression\n" + " -------\n"); while ((desc = avcodec_descriptor_next(desc))) { const AVCodec *codec = NULL; @@ -923,6 +924,8 @@ int show_codecs(const char *opt, const char *arg) printf("%c", get_media_type_char(desc->type)); printf((desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : "."); + printf((desc->props & AV_CODEC_PROP_LOSSY) ? "L" : "."); + printf((desc->props & AV_CODEC_PROP_LOSSLESS) ? "S" : "."); printf(" %-20s %s", desc->name, desc->long_name ? desc->long_name : ""); @@ -982,19 +985,19 @@ static void print_codecs(int encoder) } } -int show_decoders(const char *opt, const char *arg) +int show_decoders(void *optctx, const char *opt, const char *arg) { print_codecs(0); return 0; } -int show_encoders(const char *opt, const char *arg) +int show_encoders(void *optctx, const char *opt, const char *arg) { print_codecs(1); return 0; } -int show_bsfs(const char *opt, const char *arg) +int show_bsfs(void *optctx, const char *opt, const char *arg) { AVBitStreamFilter *bsf = NULL; @@ -1005,7 +1008,7 @@ int show_bsfs(const char *opt, const char *arg) return 0; } -int show_protocols(const char *opt, const char *arg) +int show_protocols(void *optctx, const char *opt, const char *arg) { void *opaque = NULL; const char *name; @@ -1020,7 +1023,7 @@ int show_protocols(const char *opt, const char *arg) return 0; } -int show_filters(const char *opt, const char *arg) +int show_filters(void *optctx, const char *opt, const char *arg) { AVFilter av_unused(**filter) = NULL; char descr[64], *descr_cur; @@ -1052,7 +1055,7 @@ int show_filters(const char *opt, const char *arg) return 0; } -int show_pix_fmts(const char *opt, const char *arg) +int show_pix_fmts(void *optctx, const char *opt, const char *arg) { enum PixelFormat pix_fmt; @@ -1087,7 +1090,7 @@ int show_pix_fmts(const char *opt, const char *arg) return 0; } -int show_layouts(const char *opt, const char *arg) +int show_layouts(void *optctx, const char *opt, const char *arg) { int i = 0; uint64_t layout, j; @@ -1116,7 +1119,7 @@ int show_layouts(const char *opt, const char *arg) return 0; } -int show_sample_fmts(const char *opt, const char *arg) +int show_sample_fmts(void *optctx, const char *opt, const char *arg) { int i; char fmt_str[128]; @@ -1211,7 +1214,7 @@ static void show_help_muxer(const char *name) show_help_children(fmt->priv_class, AV_OPT_FLAG_ENCODING_PARAM); } -int show_help(const char *opt, const char *arg) +int show_help(void *optctx, const char *opt, const char *arg) { char *topic, *par; av_log_set_callback(log_callback_help); diff --git a/cmdutils.h b/cmdutils.h index e3638a97fe..d78eb55b44 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -75,25 +75,25 @@ void log_callback_help(void* ptr, int level, const char* fmt, va_list vl); * Fallback for options that are not explicitly handled, these will be * parsed through AVOptions. */ -int opt_default(const char *opt, const char *arg); +int opt_default(void *optctx, const char *opt, const char *arg); /** * Set the libav* libraries log level. */ -int opt_loglevel(const char *opt, const char *arg); +int opt_loglevel(void *optctx, const char *opt, const char *arg); int opt_report(const char *opt); -int opt_max_alloc(const char *opt, const char *arg); +int opt_max_alloc(void *optctx, const char *opt, const char *arg); -int opt_cpuflags(const char *opt, const char *arg); +int opt_cpuflags(void *optctx, const char *opt, const char *arg); -int opt_codec_debug(const char *opt, const char *arg); +int opt_codec_debug(void *optctx, const char *opt, const char *arg); /** * Limit the execution time. */ -int opt_timelimit(const char *opt, const char *arg); +int opt_timelimit(void *optctx, const char *opt, const char *arg); /** * Parse a string and return its corresponding value as a double. @@ -154,7 +154,8 @@ typedef struct { #define OPT_INT64 0x0400 #define OPT_EXIT 0x0800 #define OPT_DATA 0x1000 -#define OPT_FUNC2 0x2000 +#define OPT_PERFILE 0x2000 /* the option is per-file (currently ffmpeg-only). + implied by OPT_OFFSET or OPT_SPEC */ #define OPT_OFFSET 0x4000 /* option is specified as an offset in a passed optctx */ #define OPT_SPEC 0x8000 /* option is to be stored in an array of SpecifierOpt. Implies OPT_OFFSET. Next element after the offset is @@ -163,8 +164,7 @@ typedef struct { #define OPT_DOUBLE 0x20000 union { void *dst_ptr; - int (*func_arg)(const char *, const char *); - int (*func2_arg)(void *, const char *, const char *); + int (*func_arg)(void *, const char *, const char *); size_t off; } u; const char *help; @@ -198,7 +198,7 @@ void show_help_default(const char *opt, const char *arg); /** * Generic -h handler common to all avtools. */ -int show_help(const char *opt, const char *arg); +int show_help(void *optctx, const char *opt, const char *arg); /** * Parse the command line arguments. @@ -296,81 +296,81 @@ void show_banner(int argc, char **argv, const OptionDef *options); * libraries. * This option processing function does not utilize the arguments. */ -int show_version(const char *opt, const char *arg); +int show_version(void *optctx, const char *opt, const char *arg); /** * Print the license of the program to stdout. The license depends on * the license of the libraries compiled into the program. * This option processing function does not utilize the arguments. */ -int show_license(const char *opt, const char *arg); +int show_license(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the formats supported by the * program. * This option processing function does not utilize the arguments. */ -int show_formats(const char *opt, const char *arg); +int show_formats(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the codecs supported by the * program. * This option processing function does not utilize the arguments. */ -int show_codecs(const char *opt, const char *arg); +int show_codecs(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the decoders supported by the * program. */ -int show_decoders(const char *opt, const char *arg); +int show_decoders(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the encoders supported by the * program. */ -int show_encoders(const char *opt, const char *arg); +int show_encoders(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the filters supported by the * program. * This option processing function does not utilize the arguments. */ -int show_filters(const char *opt, const char *arg); +int show_filters(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the bit stream filters supported by the * program. * This option processing function does not utilize the arguments. */ -int show_bsfs(const char *opt, const char *arg); +int show_bsfs(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the protocols supported by the * program. * This option processing function does not utilize the arguments. */ -int show_protocols(const char *opt, const char *arg); +int show_protocols(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the pixel formats supported by the * program. * This option processing function does not utilize the arguments. */ -int show_pix_fmts(const char *opt, const char *arg); +int show_pix_fmts(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the standard channel layouts supported by * the program. * This option processing function does not utilize the arguments. */ -int show_layouts(const char *opt, const char *arg); +int show_layouts(void *optctx, const char *opt, const char *arg); /** * Print a listing containing all the sample formats supported by the * program. */ -int show_sample_fmts(const char *opt, const char *arg); +int show_sample_fmts(void *optctx, const char *opt, const char *arg); /** * Return a positive value if a line read from standard input @@ -276,7 +276,11 @@ Optimization options (experts only): --disable-mmx disable MMX optimizations --disable-mmxext disable MMXEXT optimizations --disable-sse disable SSE optimizations + --disable-sse2 disable SSE2 optimizations + --disable-sse3 disable SSE3 optimizations --disable-ssse3 disable SSSE3 optimizations + --disable-sse4 disable SSE4 optimizations + --disable-sse42 disable SSE4.2 optimizations --disable-avx disable AVX optimizations --disable-fma4 disable FMA4 optimizations --disable-armv5te disable armv5te optimizations @@ -1202,30 +1206,38 @@ ARCH_LIST=' x86_64 ' -ARCH_EXT_LIST=' - altivec +ARCH_EXT_LIST_X86=' amd3dnow amd3dnowext + avx + fma4 + mmx + mmxext + sse + sse2 + sse3 + sse4 + sse42 + ssse3 +' + +ARCH_EXT_LIST=" + $ARCH_EXT_LIST_X86 + altivec armv5te armv6 armv6t2 armvfp - avx - fma4 mmi - mmx - mmxext neon ppc4xx - sse - ssse3 vfpv3 vis mipsfpu mips32r2 mipsdspr1 mipsdspr2 -' +" HAVE_LIST_PUB=' bigendian @@ -1498,13 +1510,18 @@ ppc4xx_deps="ppc" vis_deps="sparc" x86_64_suggest="cmov fast_cmov" + amd3dnow_deps="mmx" amd3dnowext_deps="amd3dnow" mmx_deps="x86" mmxext_deps="mmx" -sse_deps="mmx" -ssse3_deps="sse" -avx_deps="ssse3" +sse_deps="mmxext" +sse2_deps="sse" +sse3_deps="sse2" +ssse3_deps="sse3" +sse4_deps="ssse3" +sse42_deps="sse4" +avx_deps="sse42" fma4_deps="avx" aligned_stack_if_any="ppc x86" diff --git a/doc/APIchanges b/doc/APIchanges index c9a046b395..f9a624e208 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -77,6 +77,10 @@ API changes, most recent first: 2012-03-26 - a67d9cf - lavfi 2.66.100 Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. +2012-xx-xx - xxxxxxx - lavc 54.26.1 - avcodec.h + Add codec descriptor properties AV_CODEC_PROP_LOSSY and + AV_CODEC_PROP_LOSSLESS. + 2012-08-18 - lavc 54.26 - avcodec.h Add codec descriptors for accessing codec properties without having to refer to a specific decoder or encoder. diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index 49d2c0e76c..121fbc10ae 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -476,7 +476,7 @@ Use same quantizer as source (implies VBR). Note that this is NOT SAME QUALITY. Do not use this option unless you know you need it. -@item -pass @var{n} +@item -pass[:@var{stream_specifier}] @var{n} (@emph{output,per-stream}) Select the pass number (1 or 2). It is used to do two-pass video encoding. The statistics of the video are recorded in the first pass into a log file (see also the option -passlogfile), @@ -489,7 +489,7 @@ ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null @end example -@item -passlogfile @var{prefix} (@emph{global}) +@item -passlogfile[:@var{stream_specifier}] @var{prefix} (@emph{output,per-stream}) Set two-pass log file name prefix to @var{prefix}, the default file name prefix is ``ffmpeg2pass''. The complete file name will be @file{PREFIX-N.log}, where N is a number specific to the output @@ -414,6 +414,7 @@ void av_noreturn exit_program(int ret) av_freep(&output_streams[i]->forced_keyframes); av_freep(&output_streams[i]->avfilter); + av_freep(&output_streams[i]->logfile_prefix); av_freep(&output_streams[i]->filtered_frame); av_freep(&output_streams[i]); } @@ -2207,7 +2208,8 @@ static int transcode_init(void) FILE *f; snprintf(logfilename, sizeof(logfilename), "%s-%d.log", - pass_logfilename_prefix ? pass_logfilename_prefix : DEFAULT_PASS_LOGFILENAME_PREFIX, + ost->logfile_prefix ? ost->logfile_prefix : + DEFAULT_PASS_LOGFILENAME_PREFIX, i); if (!strcmp(ost->enc->name, "libx264")) { av_dict_set(&ost->opts, "stats", logfilename, AV_DICT_DONT_OVERWRITE); @@ -3089,7 +3091,7 @@ static void parse_cpuflags(int argc, char **argv, const OptionDef *options) { int idx = locate_option(argc, argv, options, "cpuflags"); if (idx && argv[idx + 1]) - opt_cpuflags("cpuflags", argv[idx + 1]); + opt_cpuflags(NULL, "cpuflags", argv[idx + 1]); } int main(int argc, char **argv) @@ -161,6 +161,10 @@ typedef struct OptionsContext { int nb_filters; SpecifierOpt *fix_sub_duration; int nb_fix_sub_duration; + SpecifierOpt *pass; + int nb_pass; + SpecifierOpt *passlogfiles; + int nb_passlogfiles; } OptionsContext; typedef struct InputFilter { @@ -308,6 +312,7 @@ typedef struct OutputStream { int audio_channels_map[SWR_CH_MAX]; /* list of the channels id to pick from the source stream */ int audio_channels_mapped; /* number of channels in audio_channels_map */ + char *logfile_prefix; FILE *logfile; OutputFilter *filter; @@ -350,7 +355,6 @@ extern int nb_output_files; extern FilterGraph **filtergraphs; extern int nb_filtergraphs; -extern const char *pass_logfilename_prefix; extern char *vstats_filename; extern float audio_drift_threshold; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 41db1b2456..f337a9186c 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -54,7 +54,6 @@ }\ } -const char *pass_logfilename_prefix; char *vstats_filename; float audio_drift_threshold = 0.1; @@ -89,7 +88,6 @@ static int no_file_overwrite = 0; static int video_discard = 0; static int intra_dc_precision = 8; static int do_psnr = 0; -static int do_pass = 0; static int input_sync; void reset_options(OptionsContext *o, int is_input) @@ -142,28 +140,28 @@ void reset_options(OptionsContext *o, int is_input) } -static int opt_frame_crop(const char *opt, const char *arg) +static int opt_frame_crop(void *optctx, const char *opt, const char *arg) { av_log(NULL, AV_LOG_FATAL, "Option '%s' has been removed, use the crop filter instead\n", opt); return AVERROR(EINVAL); } -static int opt_pad(const char *opt, const char *arg) +static int opt_pad(void *optctx, const char *opt, const char *arg) { av_log(NULL, AV_LOG_FATAL, "Option '%s' has been removed, use the pad filter instead\n", opt); return -1; } -static int opt_video_channel(const char *opt, const char *arg) +static int opt_video_channel(void *optctx, const char *opt, const char *arg) { av_log(NULL, AV_LOG_WARNING, "This option is deprecated, use -channel.\n"); - return opt_default("channel", arg); + return opt_default(optctx, "channel", arg); } -static int opt_video_standard(const char *opt, const char *arg) +static int opt_video_standard(void *optctx, const char *opt, const char *arg) { av_log(NULL, AV_LOG_WARNING, "This option is deprecated, use -standard.\n"); - return opt_default("standard", arg); + return opt_default(optctx, "standard", arg); } static int opt_audio_codec(void *optctx, const char *opt, const char *arg) @@ -1040,6 +1038,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in char *frame_aspect_ratio = NULL, *frame_pix_fmt = NULL; char *intra_matrix = NULL, *inter_matrix = NULL; const char *filters = "null"; + int do_pass = 0; int i; MATCH_PER_STREAM_OPT(frame_sizes, str, frame_size, oc, st); @@ -1125,6 +1124,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in video_enc->flags|= CODEC_FLAG_PSNR; /* two pass mode */ + MATCH_PER_STREAM_OPT(pass, i, do_pass, oc, st); if (do_pass) { if (do_pass & 1) { video_enc->flags |= CODEC_FLAG_PASS1; @@ -1134,6 +1134,11 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in } } + MATCH_PER_STREAM_OPT(passlogfiles, str, ost->logfile_prefix, oc, st); + if (ost->logfile_prefix && + !(ost->logfile_prefix = av_strdup(ost->logfile_prefix))) + exit_program(1); + MATCH_PER_STREAM_OPT(forced_key_frames, str, ost->forced_keyframes, oc, st); if (ost->forced_keyframes) ost->forced_keyframes = av_strdup(ost->forced_keyframes); @@ -1758,14 +1763,6 @@ loop_end: reset_options(o, 0); } -/* same option as mencoder */ -static int opt_pass(const char *opt, const char *arg) -{ - do_pass = parse_number_or_die(opt, arg, OPT_INT, 1, 3); - return 0; -} - - static int opt_target(void *optctx, const char *opt, const char *arg) { OptionsContext *o = optctx; @@ -1821,19 +1818,19 @@ static int opt_target(void *optctx, const char *opt, const char *arg) parse_option(o, "s", norm == PAL ? "352x288" : "352x240", options); parse_option(o, "r", frame_rates[norm], options); - opt_default("g", norm == PAL ? "15" : "18"); + opt_default(NULL, "g", norm == PAL ? "15" : "18"); - opt_default("b:v", "1150000"); - opt_default("maxrate", "1150000"); - opt_default("minrate", "1150000"); - opt_default("bufsize", "327680"); // 40*1024*8; + opt_default(NULL, "b:v", "1150000"); + opt_default(NULL, "maxrate", "1150000"); + opt_default(NULL, "minrate", "1150000"); + opt_default(NULL, "bufsize", "327680"); // 40*1024*8; - opt_default("b:a", "224000"); + opt_default(NULL, "b:a", "224000"); parse_option(o, "ar", "44100", options); parse_option(o, "ac", "2", options); - opt_default("packetsize", "2324"); - opt_default("muxrate", "1411200"); // 2352 * 75 * 8; + opt_default(NULL, "packetsize", "2324"); + opt_default(NULL, "muxrate", "1411200"); // 2352 * 75 * 8; /* We have to offset the PTS, so that it is consistent with the SCR. SCR starts at 36000, but the first two packs contain only padding @@ -1850,19 +1847,18 @@ static int opt_target(void *optctx, const char *opt, const char *arg) parse_option(o, "s", norm == PAL ? "480x576" : "480x480", options); parse_option(o, "r", frame_rates[norm], options); parse_option(o, "pix_fmt", "yuv420p", options); - opt_default("g", norm == PAL ? "15" : "18"); - - opt_default("b:v", "2040000"); - opt_default("maxrate", "2516000"); - opt_default("minrate", "0"); // 1145000; - opt_default("bufsize", "1835008"); // 224*1024*8; - opt_default("scan_offset", "1"); + opt_default(NULL, "g", norm == PAL ? "15" : "18"); + opt_default(NULL, "b:v", "2040000"); + opt_default(NULL, "maxrate", "2516000"); + opt_default(NULL, "minrate", "0"); // 1145000; + opt_default(NULL, "bufsize", "1835008"); // 224*1024*8; + opt_default(NULL, "scan_offset", "1"); - opt_default("b:a", "224000"); + opt_default(NULL, "b:a", "224000"); parse_option(o, "ar", "44100", options); - opt_default("packetsize", "2324"); + opt_default(NULL, "packetsize", "2324"); } else if (!strcmp(arg, "dvd")) { @@ -1873,17 +1869,17 @@ static int opt_target(void *optctx, const char *opt, const char *arg) parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options); parse_option(o, "r", frame_rates[norm], options); parse_option(o, "pix_fmt", "yuv420p", options); - opt_default("g", norm == PAL ? "15" : "18"); + opt_default(NULL, "g", norm == PAL ? "15" : "18"); - opt_default("b:v", "6000000"); - opt_default("maxrate", "9000000"); - opt_default("minrate", "0"); // 1500000; - opt_default("bufsize", "1835008"); // 224*1024*8; + opt_default(NULL, "b:v", "6000000"); + opt_default(NULL, "maxrate", "9000000"); + opt_default(NULL, "minrate", "0"); // 1500000; + opt_default(NULL, "bufsize", "1835008"); // 224*1024*8; - opt_default("packetsize", "2048"); // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack. - opt_default("muxrate", "10080000"); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8 + opt_default(NULL, "packetsize", "2048"); // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack. + opt_default(NULL, "muxrate", "10080000"); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8 - opt_default("b:a", "448000"); + opt_default(NULL, "b:a", "448000"); parse_option(o, "ar", "48000", options); } else if (!strncmp(arg, "dv", 2)) { @@ -1905,14 +1901,14 @@ static int opt_target(void *optctx, const char *opt, const char *arg) return 0; } -static int opt_vstats_file(const char *opt, const char *arg) +static int opt_vstats_file(void *optctx, const char *opt, const char *arg) { av_free (vstats_filename); vstats_filename = av_strdup (arg); return 0; } -static int opt_vstats(const char *opt, const char *arg) +static int opt_vstats(void *optctx, const char *opt, const char *arg) { char filename[40]; time_t today2 = time(NULL); @@ -1920,7 +1916,7 @@ static int opt_vstats(const char *opt, const char *arg) snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min, today->tm_sec); - return opt_vstats_file(opt, filename); + return opt_vstats_file(NULL, opt, filename); } static int opt_video_frames(void *optctx, const char *opt, const char *arg) @@ -1975,7 +1971,7 @@ static int opt_preset(void *optctx, const char *opt, const char *arg) else if (!strcmp(key, "vcodec")) opt_video_codec (o, key, value); else if (!strcmp(key, "scodec")) opt_subtitle_codec(o, key, value); else if (!strcmp(key, "dcodec")) opt_data_codec (o, key, value); - else if (opt_default(key, value) < 0) { + else if (opt_default(NULL, key, value) < 0) { av_log(NULL, AV_LOG_FATAL, "%s: Invalid option or argument: '%s', parsed as '%s' = '%s'\n", filename, line, key, value); exit_program(1); @@ -1987,16 +1983,6 @@ static int opt_preset(void *optctx, const char *opt, const char *arg) return 0; } -static int opt_passlogfile(const char *opt, const char *arg) -{ - pass_logfilename_prefix = arg; -#if CONFIG_LIBX264_ENCODER - return opt_default(opt, arg); -#else - return 0; -#endif -} - static int opt_old2new(void *optctx, const char *opt, const char *arg) { OptionsContext *o = optctx; @@ -2013,7 +1999,7 @@ static int opt_bitrate(void *optctx, const char *opt, const char *arg) av_log(NULL, AV_LOG_WARNING, "Please use -b:a or -b:v, -b is ambiguous\n"); return parse_option(o, "b:v", arg, options); } - return opt_default(opt, arg); + return opt_default(optctx, opt, arg); } static int opt_qscale(void *optctx, const char *opt, const char *arg) @@ -2038,7 +2024,7 @@ static int opt_profile(void *optctx, const char *opt, const char *arg) av_log(NULL, AV_LOG_WARNING, "Please use -profile:a or -profile:v, -profile is ambiguous\n"); return parse_option(o, "profile:v", arg, options); } - return opt_default(opt, arg); + return opt_default(optctx, opt, arg); } @@ -2054,7 +2040,7 @@ static int opt_audio_filters(void *optctx, const char *opt, const char *arg) return parse_option(o, "filter:a", arg, options); } -static int opt_vsync(const char *opt, const char *arg) +static int opt_vsync(void *optctx, const char *opt, const char *arg) { if (!av_strcasecmp(arg, "cfr")) video_sync_method = VSYNC_CFR; else if (!av_strcasecmp(arg, "vfr")) video_sync_method = VSYNC_VFR; @@ -2066,7 +2052,7 @@ static int opt_vsync(const char *opt, const char *arg) return 0; } -static int opt_deinterlace(const char *opt, const char *arg) +static int opt_deinterlace(void *optctx, const char *opt, const char *arg) { av_log(NULL, AV_LOG_WARNING, "-%s is deprecated, use -filter:v yadif instead\n", opt); do_deinterlace = 1; @@ -2079,7 +2065,7 @@ static int opt_timecode(void *optctx, const char *opt, const char *arg) char *tcr = av_asprintf("timecode=%s", arg); int ret = parse_option(o, "metadata:g", tcr, options); if (ret >= 0) - ret = opt_default("gop_timecode", arg); + ret = opt_default(optctx, "gop_timecode", arg); av_free(tcr); return ret; } @@ -2099,7 +2085,7 @@ static int opt_channel_layout(void *optctx, const char *opt, const char *arg) return AVERROR(EINVAL); } snprintf(layout_str, sizeof(layout_str), "%"PRIu64, layout); - ret = opt_default(opt, layout_str); + ret = opt_default(NULL, opt, layout_str); if (ret < 0) return ret; @@ -2126,7 +2112,7 @@ static int opt_audio_qscale(void *optctx, const char *opt, const char *arg) return parse_option(o, "q:a", arg, options); } -static int opt_filter_complex(const char *opt, const char *arg) +static int opt_filter_complex(void *optctx, const char *opt, const char *arg) { filtergraphs = grow_array(filtergraphs, sizeof(*filtergraphs), &nb_filtergraphs, nb_filtergraphs + 1); @@ -2140,7 +2126,7 @@ static int opt_filter_complex(const char *opt, const char *arg) void show_help_default(const char *opt, const char *arg) { /* per-file options have at least one of those set */ - const int per_file = OPT_SPEC | OPT_OFFSET | OPT_FUNC2; + const int per_file = OPT_SPEC | OPT_OFFSET | OPT_PERFILE; int show_advanced = 0, show_avoptions = 0; if (opt) { @@ -2211,7 +2197,7 @@ void show_usage(void) } -static int opt_progress(const char *opt, const char *arg) +static int opt_progress(void *optctx, const char *opt, const char *arg) { AVIOContext *avio = NULL; int ret; @@ -2234,7 +2220,7 @@ const OptionDef options[] = { #include "cmdutils_common_opts.h" { "f", HAS_ARG | OPT_STRING | OPT_OFFSET, { .off = OFFSET(format) }, "force format", "fmt" }, - { "i", HAS_ARG | OPT_FUNC2, { .func2_arg = opt_input_file }, + { "i", HAS_ARG | OPT_PERFILE, { .func_arg = opt_input_file }, "input file name", "filename" }, { "y", OPT_BOOL, { &file_overwrite }, "overwrite output files" }, @@ -2246,10 +2232,10 @@ const OptionDef options[] = { "codec name", "codec" }, { "pre", HAS_ARG | OPT_STRING | OPT_SPEC, { .off = OFFSET(presets) }, "preset name", "preset" }, - { "map", HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_map }, + { "map", HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_map }, "set input stream mapping", "[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]" }, - { "map_channel", HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_map_channel }, + { "map_channel", HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_map_channel }, "map an audio channel from one stream to another", "file.stream.channel[:syncfile.syncstream]" }, { "map_metadata", HAS_ARG | OPT_STRING | OPT_SPEC, { .off = OFFSET(metadata_map) }, "set metadata information of outfile from infile", @@ -2267,11 +2253,11 @@ const OptionDef options[] = { "set the input ts offset", "time_off" }, { "itsscale", HAS_ARG | OPT_DOUBLE | OPT_SPEC | OPT_EXPERT,{ .off = OFFSET(ts_scale) }, "set the input ts scale", "scale" }, - { "timestamp", HAS_ARG | OPT_FUNC2, { .func2_arg = opt_recording_timestamp }, + { "timestamp", HAS_ARG | OPT_PERFILE, { .func_arg = opt_recording_timestamp }, "set the recording timestamp ('now' to set the current time)", "time" }, { "metadata", HAS_ARG | OPT_STRING | OPT_SPEC, { .off = OFFSET(metadata) }, "add metadata", "string=string" }, - { "dframes", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, { .func2_arg = opt_data_frames }, + { "dframes", HAS_ARG | OPT_PERFILE | OPT_EXPERT, { .func_arg = opt_data_frames }, "set the number of data frames to record", "number" }, { "benchmark", OPT_BOOL | OPT_EXPERT, { &do_benchmark }, "add timings for benchmarking" }, @@ -2289,7 +2275,7 @@ const OptionDef options[] = { "when dumping packets, also dump the payload" }, { "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET, { .off = OFFSET(rate_emu) }, "read input at native frame rate", "" }, - { "target", HAS_ARG | OPT_FUNC2, { .func2_arg = opt_target }, + { "target", HAS_ARG | OPT_PERFILE, { .func_arg = opt_target }, "specify target file type (\"vcd\", \"svcd\", \"dvd\"," " \"dv\", \"dv50\", \"pal-vcd\", \"ntsc-svcd\", ...)", "type" }, { "vsync", HAS_ARG | OPT_EXPERT, { opt_vsync }, @@ -2318,9 +2304,9 @@ const OptionDef options[] = { "force codec tag/fourcc", "fourcc/tag" }, { "q", HAS_ARG | OPT_EXPERT | OPT_DOUBLE | OPT_SPEC,{ .off = OFFSET(qscale) }, "use fixed quality scale (VBR)", "q" }, - { "qscale", HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_qscale }, + { "qscale", HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_qscale }, "use fixed quality scale (VBR)", "q" }, - { "profile", HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_profile }, + { "profile", HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_profile }, "set profile", "profile" }, { "filter", HAS_ARG | OPT_STRING | OPT_SPEC, { .off = OFFSET(filters) }, "set stream filterchain", "filter_list" }, @@ -2328,7 +2314,7 @@ const OptionDef options[] = { "create a complex filtergraph", "graph_description" }, { "stats", OPT_BOOL, { &print_stats }, "print progress report during encoding", }, - { "attach", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, { .func2_arg = opt_attach }, + { "attach", HAS_ARG | OPT_PERFILE | OPT_EXPERT, { .func_arg = opt_attach }, "add an attachment to the output file", "filename" }, { "dump_attachment", HAS_ARG | OPT_STRING | OPT_SPEC |OPT_EXPERT,{ .off = OFFSET(dump_attachment) }, "extract an attachment into a file", "filename" }, @@ -2336,7 +2322,7 @@ const OptionDef options[] = { "print timestamp debugging info" }, /* video options */ - { "vframes", OPT_VIDEO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_video_frames }, + { "vframes", OPT_VIDEO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_video_frames }, "set the number of video frames to record", "number" }, { "r", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC, { .off = OFFSET(frame_rates) }, "set frame rate (Hz value, fraction or abbreviation)", "rate" }, @@ -2374,17 +2360,17 @@ const OptionDef options[] = { "discard threshold", "n" }, { "rc_override", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC, { .off = OFFSET(rc_overrides) }, "rate control override for specific intervals", "override" }, - { "vcodec", OPT_VIDEO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_video_codec }, + { "vcodec", OPT_VIDEO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_video_codec }, "force video codec ('copy' to copy stream)", "codec" }, { "sameq", OPT_VIDEO | OPT_BOOL | OPT_EXPERT , { &same_quant }, "use same quantizer as source (implies VBR)" }, { "same_quant", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &same_quant }, "use same quantizer as source (implies VBR)" }, - { "timecode", OPT_VIDEO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_timecode }, + { "timecode", OPT_VIDEO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_timecode }, "set initial TimeCode value.", "hh:mm:ss[:;.]ff" }, - { "pass", OPT_VIDEO | HAS_ARG , { opt_pass }, - "select the pass number (1 or 2)", "n" }, - { "passlogfile", OPT_VIDEO | HAS_ARG, { .func_arg = &opt_passlogfile }, + { "pass", OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT, { .off = OFFSET(pass) }, + "select the pass number (1 to 3)", "n" }, + { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(passlogfiles) }, "select two pass log file name prefix", "prefix" }, { "deinterlace", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_deinterlace }, "this option is deprecated, use the yadif filter instead" }, @@ -2394,7 +2380,7 @@ const OptionDef options[] = { "dump video coding statistics to file" }, { "vstats_file", OPT_VIDEO | HAS_ARG | OPT_EXPERT , { opt_vstats_file }, "dump video coding statistics to file", "file" }, - { "vf", OPT_VIDEO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_video_filters }, + { "vf", OPT_VIDEO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_video_filters }, "video filters", "filter list" }, { "intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC, { .off = OFFSET(intra_matrices) }, "specify intra matrix coeffs", "matrix" }, @@ -2404,24 +2390,24 @@ const OptionDef options[] = { "top=1/bottom=0/auto=-1 field first", "" }, { "dc", OPT_VIDEO | OPT_INT | HAS_ARG | OPT_EXPERT , { &intra_dc_precision }, "intra_dc_precision", "precision" }, - { "vtag", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_old2new }, + { "vtag", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_old2new }, "force video tag/fourcc", "fourcc/tag" }, { "qphist", OPT_VIDEO | OPT_BOOL | OPT_EXPERT , { &qp_hist }, "show QP histogram" }, { "force_fps", OPT_VIDEO | OPT_BOOL | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(force_fps) }, "force the selected framerate, disable the best supported framerate selection" }, - { "streamid", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_streamid }, + { "streamid", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_streamid }, "set the value of an outfile streamid", "streamIndex:value" }, { "force_key_frames", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(forced_key_frames) }, "force key frames at specified timestamps", "timestamps" }, - { "b", OPT_VIDEO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_bitrate }, + { "b", OPT_VIDEO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_bitrate }, "video bitrate (please use -b:v)", "bitrate" }, /* audio options */ - { "aframes", OPT_AUDIO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_audio_frames }, + { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_audio_frames }, "set the number of audio frames to record", "number" }, - { "aq", OPT_AUDIO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_audio_qscale }, + { "aq", OPT_AUDIO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_audio_qscale }, "set audio quality (codec-specific)", "quality", }, { "ar", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC, { .off = OFFSET(audio_sample_rate) }, "set audio sampling rate (in Hz)", "rate" }, @@ -2429,26 +2415,26 @@ const OptionDef options[] = { "set number of audio channels", "channels" }, { "an", OPT_AUDIO | OPT_BOOL | OPT_OFFSET, { .off = OFFSET(audio_disable) }, "disable audio" }, - { "acodec", OPT_AUDIO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_audio_codec }, + { "acodec", OPT_AUDIO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_audio_codec }, "force audio codec ('copy' to copy stream)", "codec" }, - { "atag", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_old2new }, + { "atag", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_old2new }, "force audio tag/fourcc", "fourcc/tag" }, { "vol", OPT_AUDIO | HAS_ARG | OPT_INT, { &audio_volume }, "change audio volume (256=normal)" , "volume" }, { "sample_fmt", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_SPEC | OPT_STRING, { .off = OFFSET(sample_fmts) }, "set sample format", "format" }, - { "channel_layout", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_FUNC2, { .func2_arg = opt_channel_layout }, + { "channel_layout", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_channel_layout }, "set channel layout", "layout" }, - { "af", OPT_AUDIO | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_audio_filters }, + { "af", OPT_AUDIO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_audio_filters }, "audio filters", "filter list" }, /* subtitle options */ { "sn", OPT_SUBTITLE | OPT_BOOL | OPT_OFFSET, { .off = OFFSET(subtitle_disable) }, "disable subtitle" }, - { "scodec", OPT_SUBTITLE | HAS_ARG | OPT_FUNC2, { .func2_arg = opt_subtitle_codec }, + { "scodec", OPT_SUBTITLE | HAS_ARG | OPT_PERFILE, { .func_arg = opt_subtitle_codec }, "force subtitle codec ('copy' to copy stream)", "codec" }, - { "stag", HAS_ARG | OPT_EXPERT | OPT_SUBTITLE | OPT_FUNC2, { .func2_arg = opt_old2new }, - "force subtitle tag/fourcc", "fourcc/tag" }, + { "stag", OPT_SUBTITLE | HAS_ARG | OPT_EXPERT | OPT_PERFILE, { .func_arg = opt_old2new } + , "force subtitle tag/fourcc", "fourcc/tag" }, { "fix_sub_duration", OPT_BOOL | OPT_EXPERT | OPT_SUBTITLE | OPT_SPEC, { .off = OFFSET(fix_sub_duration) }, "fix subtitles duration" }, @@ -2467,21 +2453,21 @@ const OptionDef options[] = { { "bsf", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_EXPERT, { .off = OFFSET(bitstream_filters) }, "A comma-separated list of bitstream filters", "bitstream_filters" }, - { "absf", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_old2new }, + { "absf", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE, { .func_arg = opt_old2new }, "deprecated", "audio bitstream_filters" }, - { "vbsf", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_old2new }, + { "vbsf", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE, { .func_arg = opt_old2new }, "deprecated", "video bitstream_filters" }, - { "apre", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_preset }, + { "apre", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE, { .func_arg = opt_preset }, "set the audio options to the indicated preset", "preset" }, - { "vpre", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_preset }, + { "vpre", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE, { .func_arg = opt_preset }, "set the video options to the indicated preset", "preset" }, - { "spre", HAS_ARG | OPT_SUBTITLE | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_preset }, + { "spre", HAS_ARG | OPT_SUBTITLE | OPT_EXPERT| OPT_PERFILE, { .func_arg = opt_preset }, "set the subtitle options to the indicated preset", "preset" }, - { "fpre", HAS_ARG | OPT_EXPERT| OPT_FUNC2, { .func2_arg = opt_preset }, + { "fpre", HAS_ARG | OPT_EXPERT| OPT_PERFILE, { .func_arg = opt_preset }, "set options from indicated preset file", "filename" }, /* data codec support */ - { "dcodec", HAS_ARG | OPT_DATA | OPT_FUNC2 | OPT_EXPERT, { .func2_arg = opt_data_codec }, + { "dcodec", HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT, { .func_arg = opt_data_codec }, "force data codec ('copy' to copy stream)", "codec" }, { "dn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET, { .off = OFFSET(data_disable) }, "disable data" }, @@ -2884,7 +2884,7 @@ static void event_loop(VideoState *cur_stream) static int opt_frame_size(const char *opt, const char *arg) { av_log(NULL, AV_LOG_WARNING, "Option -s is deprecated, use -video_size.\n"); - return opt_default("video_size", arg); + return opt_default(NULL, "video_size", arg); } static int opt_width(const char *opt, const char *arg) @@ -2912,7 +2912,7 @@ static int opt_format(const char *opt, const char *arg) static int opt_frame_pix_fmt(const char *opt, const char *arg) { av_log(NULL, AV_LOG_WARNING, "Option -pix_fmt is deprecated, use -pixel_format.\n"); - return opt_default("pixel_format", arg); + return opt_default(NULL, "pixel_format", arg); } static int opt_sync(const char *opt, const char *arg) @@ -2936,7 +2936,7 @@ static int opt_seek(const char *opt, const char *arg) return 0; } -static int opt_duration(const char *opt, const char *arg) +static int opt_duration(void *optctx, const char *opt, const char *arg) { duration = parse_time_or_die(opt, arg, 1); return 0; @@ -3018,7 +3018,7 @@ static const OptionDef options[] = { { "showmode", HAS_ARG, {(void*)opt_show_mode}, "select show mode (0 = video, 1 = waves, 2 = RDFT)", "mode" }, { "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, { (void*)opt_default }, "generic catch all option", "" }, { "i", OPT_BOOL, {(void *)&dummy}, "read specified file", "input_file"}, - { "codec", HAS_ARG | OPT_FUNC2, {(void*)opt_codec}, "force decoder", "decoder" }, + { "codec", HAS_ARG, { .func_arg = opt_codec}, "force decoder", "decoder" }, { NULL, }, }; @@ -2042,7 +2042,7 @@ static void ffprobe_show_library_versions(WriterContext *w) writer_print_chapter_footer(w, "library_versions"); } -static int opt_format(const char *opt, const char *arg) +static int opt_format(void *optctx, const char *opt, const char *arg) { iformat = av_find_input_format(arg); if (!iformat) { @@ -2052,7 +2052,7 @@ static int opt_format(const char *opt, const char *arg) return 0; } -static int opt_show_format_entry(const char *opt, const char *arg) +static int opt_show_format_entry(void *optctx, const char *opt, const char *arg) { do_show_format = 1; av_dict_set(&fmt_entries_to_show, arg, "", 0); @@ -2072,6 +2072,12 @@ static void opt_input_file(void *optctx, const char *arg) input_filename = arg; } +static int opt_input_file_i(void *optctx, const char *opt, const char *arg) +{ + opt_input_file(optctx, arg); + return 0; +} + void show_help_default(const char *opt, const char *arg) { av_log_set_callback(log_callback_help); @@ -2082,7 +2088,7 @@ void show_help_default(const char *opt, const char *arg) show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM); } -static int opt_pretty(const char *opt, const char *arg) +static int opt_pretty(void *optctx, const char *opt, const char *arg) { show_value_unit = 1; use_value_prefix = 1; @@ -2128,7 +2134,7 @@ static const OptionDef real_options[] = { { "show_private_data", OPT_BOOL, {(void*)&show_private_data}, "show private data" }, { "private", OPT_BOOL, {(void*)&show_private_data}, "same as show_private_data" }, { "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, {.func_arg = opt_default}, "generic catch all option", "" }, - { "i", HAS_ARG, {(void *)opt_input_file}, "read specified file", "input_file"}, + { "i", HAS_ARG, {.func_arg = opt_input_file_i}, "read specified file", "input_file"}, { NULL, }, }; diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 97d0ae6a8b..cea123ddd5 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -501,6 +501,16 @@ typedef struct AVCodecDescriptor { * Video codecs only. */ #define AV_CODEC_PROP_INTRA_ONLY (1 << 0) +/** + * Codec supports lossy compression. Audio and video codecs only. + * @note a codec may support both lossy and lossless + * compression modes + */ +#define AV_CODEC_PROP_LOSSY (1 << 1) +/** + * Codec supports lossless compression. Audio and video codecs only. + */ +#define AV_CODEC_PROP_LOSSLESS (1 << 2) #if FF_API_OLD_DECODE_AUDIO /* in bytes */ diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index c4bf433ec3..15701744b2 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -33,1069 +33,1177 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_VIDEO, .name = "mpeg1video", .long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MPEG2VIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "mpeg2video", .long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MPEG2VIDEO_XVMC, .type = AVMEDIA_TYPE_VIDEO, .name = "mpegvideo_xvmc", .long_name = NULL_IF_CONFIG_SMALL("MPEG-1/2 video XvMC (X-Video Motion Compensation)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_H261, .type = AVMEDIA_TYPE_VIDEO, .name = "h261", .long_name = NULL_IF_CONFIG_SMALL("H.261"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_H263, .type = AVMEDIA_TYPE_VIDEO, .name = "h263", .long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RV10, .type = AVMEDIA_TYPE_VIDEO, .name = "rv10", .long_name = NULL_IF_CONFIG_SMALL("RealVideo 1.0"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RV20, .type = AVMEDIA_TYPE_VIDEO, .name = "rv20", .long_name = NULL_IF_CONFIG_SMALL("RealVideo 1.0"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MJPEG, .type = AVMEDIA_TYPE_VIDEO, .name = "mjpeg", .long_name = NULL_IF_CONFIG_SMALL("Motion JPEG"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MJPEGB, .type = AVMEDIA_TYPE_VIDEO, .name = "mjpegb", .long_name = NULL_IF_CONFIG_SMALL("Apple MJPEG-B"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_LJPEG, .type = AVMEDIA_TYPE_VIDEO, .name = "ljpeg", .long_name = NULL_IF_CONFIG_SMALL("Lossless JPEG"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_SP5X, .type = AVMEDIA_TYPE_VIDEO, .name = "sp5x", .long_name = NULL_IF_CONFIG_SMALL("Sunplus JPEG (SP5X)"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_JPEGLS, .type = AVMEDIA_TYPE_VIDEO, .name = "jpegls", .long_name = NULL_IF_CONFIG_SMALL("JPEG-LS"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY | + AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MPEG4, .type = AVMEDIA_TYPE_VIDEO, .name = "mpeg4", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RAWVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "rawvideo", .long_name = NULL_IF_CONFIG_SMALL("raw video"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MSMPEG4V1, .type = AVMEDIA_TYPE_VIDEO, .name = "msmpeg4v1", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MSMPEG4V2, .type = AVMEDIA_TYPE_VIDEO, .name = "msmpeg4v2", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MSMPEG4V3, .type = AVMEDIA_TYPE_VIDEO, .name = "msmpeg4v3", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMV1, .type = AVMEDIA_TYPE_VIDEO, .name = "wmv1", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMV2, .type = AVMEDIA_TYPE_VIDEO, .name = "wmv2", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 8"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_H263P, .type = AVMEDIA_TYPE_VIDEO, .name = "h263p", .long_name = NULL_IF_CONFIG_SMALL("H.263+ / H.263-1998 / H.263 version 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_H263I, .type = AVMEDIA_TYPE_VIDEO, .name = "h263i", .long_name = NULL_IF_CONFIG_SMALL("Intel H.263"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_FLV1, .type = AVMEDIA_TYPE_VIDEO, .name = "flv1", .long_name = NULL_IF_CONFIG_SMALL("FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SVQ1, .type = AVMEDIA_TYPE_VIDEO, .name = "svq1", .long_name = NULL_IF_CONFIG_SMALL("Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SVQ3, .type = AVMEDIA_TYPE_VIDEO, .name = "svq3", .long_name = NULL_IF_CONFIG_SMALL("Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_DVVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "dvvideo", .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_HUFFYUV, .type = AVMEDIA_TYPE_VIDEO, .name = "huffyuv", .long_name = NULL_IF_CONFIG_SMALL("HuffYUV"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_CYUV, .type = AVMEDIA_TYPE_VIDEO, .name = "cyuv", .long_name = NULL_IF_CONFIG_SMALL("Creative YUV (CYUV)"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_H264, .type = AVMEDIA_TYPE_VIDEO, .name = "h264", .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"), + .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_INDEO3, .type = AVMEDIA_TYPE_VIDEO, .name = "indeo3", .long_name = NULL_IF_CONFIG_SMALL("Intel Indeo 3"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VP3, .type = AVMEDIA_TYPE_VIDEO, .name = "vp3", .long_name = NULL_IF_CONFIG_SMALL("On2 VP3"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_THEORA, .type = AVMEDIA_TYPE_VIDEO, .name = "theora", .long_name = NULL_IF_CONFIG_SMALL("Theora"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ASV1, .type = AVMEDIA_TYPE_VIDEO, .name = "asv1", .long_name = NULL_IF_CONFIG_SMALL("ASUS V1"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ASV2, .type = AVMEDIA_TYPE_VIDEO, .name = "asv2", .long_name = NULL_IF_CONFIG_SMALL("ASUS V2"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_FFV1, .type = AVMEDIA_TYPE_VIDEO, .name = "ffv1", .long_name = NULL_IF_CONFIG_SMALL("FFmpeg video codec #1"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_4XM, .type = AVMEDIA_TYPE_VIDEO, .name = "4xm", .long_name = NULL_IF_CONFIG_SMALL("4X Movie"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VCR1, .type = AVMEDIA_TYPE_VIDEO, .name = "vcr1", .long_name = NULL_IF_CONFIG_SMALL("ATI VCR1"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_CLJR, .type = AVMEDIA_TYPE_VIDEO, .name = "cljr", .long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MDEC, .type = AVMEDIA_TYPE_VIDEO, .name = "mdec", .long_name = NULL_IF_CONFIG_SMALL("Sony PlayStation MDEC (Motion DECoder)"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ROQ, .type = AVMEDIA_TYPE_VIDEO, .name = "roq", .long_name = NULL_IF_CONFIG_SMALL("id RoQ video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_INTERPLAY_VIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "interplayvideo", .long_name = NULL_IF_CONFIG_SMALL("Interplay MVE video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_XAN_WC3, .type = AVMEDIA_TYPE_VIDEO, .name = "xan_wc3", .long_name = NULL_IF_CONFIG_SMALL("Wing Commander III / Xan"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_XAN_WC4, .type = AVMEDIA_TYPE_VIDEO, .name = "xan_wc4", .long_name = NULL_IF_CONFIG_SMALL("Wing Commander IV / Xxan"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RPZA, .type = AVMEDIA_TYPE_VIDEO, .name = "rpza", .long_name = NULL_IF_CONFIG_SMALL("QuickTime video (RPZA)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_CINEPAK, .type = AVMEDIA_TYPE_VIDEO, .name = "cinepak", .long_name = NULL_IF_CONFIG_SMALL("Cinepak"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WS_VQA, .type = AVMEDIA_TYPE_VIDEO, .name = "ws_vqa", .long_name = NULL_IF_CONFIG_SMALL("Westwood Studios VQA (Vector Quantized Animation) video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MSRLE, .type = AVMEDIA_TYPE_VIDEO, .name = "msrle", .long_name = NULL_IF_CONFIG_SMALL("Microsoft RLE"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MSVIDEO1, .type = AVMEDIA_TYPE_VIDEO, .name = "msvideo1", .long_name = NULL_IF_CONFIG_SMALL("Microsoft Video 1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_IDCIN, .type = AVMEDIA_TYPE_VIDEO, .name = "idcin", .long_name = NULL_IF_CONFIG_SMALL("id Quake II CIN video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_8BPS, .type = AVMEDIA_TYPE_VIDEO, .name = "8bps", .long_name = NULL_IF_CONFIG_SMALL("QuickTime 8BPS video"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_SMC, .type = AVMEDIA_TYPE_VIDEO, .name = "smc", .long_name = NULL_IF_CONFIG_SMALL("QuickTime Graphics (SMC)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_FLIC, .type = AVMEDIA_TYPE_VIDEO, .name = "flic", .long_name = NULL_IF_CONFIG_SMALL("Autodesk Animator Flic video"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_TRUEMOTION1, .type = AVMEDIA_TYPE_VIDEO, .name = "truemotion1", .long_name = NULL_IF_CONFIG_SMALL("Duck TrueMotion 1.0"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VMDVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "vmdvideo", .long_name = NULL_IF_CONFIG_SMALL("Sierra VMD video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MSZH, .type = AVMEDIA_TYPE_VIDEO, .name = "mszh", .long_name = NULL_IF_CONFIG_SMALL("LCL (LossLess Codec Library) MSZH"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ZLIB, .type = AVMEDIA_TYPE_VIDEO, .name = "zlib", .long_name = NULL_IF_CONFIG_SMALL("LCL (LossLess Codec Library) ZLIB"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_QTRLE, .type = AVMEDIA_TYPE_VIDEO, .name = "qtrle", .long_name = NULL_IF_CONFIG_SMALL("QuickTime Animation (RLE) video"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_SNOW, .type = AVMEDIA_TYPE_VIDEO, .name = "snow", .long_name = NULL_IF_CONFIG_SMALL("Snow"), + .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_TSCC, .type = AVMEDIA_TYPE_VIDEO, .name = "tscc", .long_name = NULL_IF_CONFIG_SMALL("TechSmith Screen Capture Codec"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ULTI, .type = AVMEDIA_TYPE_VIDEO, .name = "ulti", .long_name = NULL_IF_CONFIG_SMALL("IBM UltiMotion"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_QDRAW, .type = AVMEDIA_TYPE_VIDEO, .name = "qdraw", .long_name = NULL_IF_CONFIG_SMALL("Apple QuickDraw"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_VIXL, .type = AVMEDIA_TYPE_VIDEO, .name = "vixl", .long_name = NULL_IF_CONFIG_SMALL("Miro VideoXL"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_QPEG, .type = AVMEDIA_TYPE_VIDEO, .name = "qpeg", .long_name = NULL_IF_CONFIG_SMALL("Q-team QPEG"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_PNG, .type = AVMEDIA_TYPE_VIDEO, .name = "png", .long_name = NULL_IF_CONFIG_SMALL("PNG (Portable Network Graphics) image"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PPM, .type = AVMEDIA_TYPE_VIDEO, .name = "ppm", .long_name = NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PBM, .type = AVMEDIA_TYPE_VIDEO, .name = "pbm", .long_name = NULL_IF_CONFIG_SMALL("PBM (Portable BitMap) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PGM, .type = AVMEDIA_TYPE_VIDEO, .name = "pgm", .long_name = NULL_IF_CONFIG_SMALL("PGM (Portable GrayMap) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PGMYUV, .type = AVMEDIA_TYPE_VIDEO, .name = "pgmyuv", .long_name = NULL_IF_CONFIG_SMALL("PGMYUV (Portable GrayMap YUV) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PAM, .type = AVMEDIA_TYPE_VIDEO, .name = "pam", .long_name = NULL_IF_CONFIG_SMALL("PAM (Portable AnyMap) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_FFVHUFF, .type = AVMEDIA_TYPE_VIDEO, .name = "ffvhuff", .long_name = NULL_IF_CONFIG_SMALL("Huffyuv FFmpeg variant"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_RV30, .type = AVMEDIA_TYPE_VIDEO, .name = "rv30", .long_name = NULL_IF_CONFIG_SMALL("RealVideo 3.0"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RV40, .type = AVMEDIA_TYPE_VIDEO, .name = "rv40", .long_name = NULL_IF_CONFIG_SMALL("RealVideo 4.0"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VC1, .type = AVMEDIA_TYPE_VIDEO, .name = "vc1", .long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMV3, .type = AVMEDIA_TYPE_VIDEO, .name = "wmv3", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_LOCO, .type = AVMEDIA_TYPE_VIDEO, .name = "loco", .long_name = NULL_IF_CONFIG_SMALL("LOCO"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_WNV1, .type = AVMEDIA_TYPE_VIDEO, .name = "wnv1", .long_name = NULL_IF_CONFIG_SMALL("Winnov WNV1"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AASC, .type = AVMEDIA_TYPE_VIDEO, .name = "aasc", .long_name = NULL_IF_CONFIG_SMALL("Autodesk RLE"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_INDEO2, .type = AVMEDIA_TYPE_VIDEO, .name = "indeo2", .long_name = NULL_IF_CONFIG_SMALL("Intel Indeo 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_FRAPS, .type = AVMEDIA_TYPE_VIDEO, .name = "fraps", .long_name = NULL_IF_CONFIG_SMALL("Fraps"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_TRUEMOTION2, .type = AVMEDIA_TYPE_VIDEO, .name = "truemotion2", .long_name = NULL_IF_CONFIG_SMALL("Duck TrueMotion 2.0"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_BMP, .type = AVMEDIA_TYPE_VIDEO, .name = "bmp", .long_name = NULL_IF_CONFIG_SMALL("BMP (Windows and OS/2 bitmap)"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_CSCD, .type = AVMEDIA_TYPE_VIDEO, .name = "cscd", .long_name = NULL_IF_CONFIG_SMALL("CamStudio"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MMVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "mmvideo", .long_name = NULL_IF_CONFIG_SMALL("American Laser Games MM Video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ZMBV, .type = AVMEDIA_TYPE_VIDEO, .name = "zmbv", .long_name = NULL_IF_CONFIG_SMALL("Zip Motion Blocks Video"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_AVS, .type = AVMEDIA_TYPE_VIDEO, .name = "avs", .long_name = NULL_IF_CONFIG_SMALL("AVS (Audio Video Standard) video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SMACKVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "smackvideo", .long_name = NULL_IF_CONFIG_SMALL("Smacker video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_NUV, .type = AVMEDIA_TYPE_VIDEO, .name = "nuv", .long_name = NULL_IF_CONFIG_SMALL("NuppelVideo/RTJPEG"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_KMVC, .type = AVMEDIA_TYPE_VIDEO, .name = "kmvc", .long_name = NULL_IF_CONFIG_SMALL("Karl Morton's video codec"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_FLASHSV, .type = AVMEDIA_TYPE_VIDEO, .name = "flashsv", .long_name = NULL_IF_CONFIG_SMALL("Flash Screen Video v1"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_CAVS, .type = AVMEDIA_TYPE_VIDEO, .name = "cavs", .long_name = NULL_IF_CONFIG_SMALL("Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_JPEG2000, .type = AVMEDIA_TYPE_VIDEO, .name = "jpeg2000", .long_name = NULL_IF_CONFIG_SMALL("JPEG 2000"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY | + AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_VMNC, .type = AVMEDIA_TYPE_VIDEO, .name = "vmnc", .long_name = NULL_IF_CONFIG_SMALL("VMware Screen Codec / VMware Video"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_VP5, .type = AVMEDIA_TYPE_VIDEO, .name = "vp5", .long_name = NULL_IF_CONFIG_SMALL("On2 VP5"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VP6, .type = AVMEDIA_TYPE_VIDEO, .name = "vp6", .long_name = NULL_IF_CONFIG_SMALL("On2 VP6"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VP6F, .type = AVMEDIA_TYPE_VIDEO, .name = "vp6f", .long_name = NULL_IF_CONFIG_SMALL("On2 VP6 (Flash version)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TARGA, .type = AVMEDIA_TYPE_VIDEO, .name = "targa", .long_name = NULL_IF_CONFIG_SMALL("Truevision Targa image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_DSICINVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "dsicinvideo", .long_name = NULL_IF_CONFIG_SMALL("Delphine Software International CIN video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TIERTEXSEQVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "tiertexseqvideo", .long_name = NULL_IF_CONFIG_SMALL("Tiertex Limited SEQ video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TIFF, .type = AVMEDIA_TYPE_VIDEO, .name = "tiff", .long_name = NULL_IF_CONFIG_SMALL("TIFF image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_GIF, .type = AVMEDIA_TYPE_VIDEO, .name = "gif", .long_name = NULL_IF_CONFIG_SMALL("GIF (Graphics Interchange Format)"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_DXA, .type = AVMEDIA_TYPE_VIDEO, .name = "dxa", .long_name = NULL_IF_CONFIG_SMALL("Feeble Files/ScummVM DXA"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_DNXHD, .type = AVMEDIA_TYPE_VIDEO, .name = "dnxhd", .long_name = NULL_IF_CONFIG_SMALL("VC3/DNxHD"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_THP, .type = AVMEDIA_TYPE_VIDEO, .name = "thp", .long_name = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SGI, .type = AVMEDIA_TYPE_VIDEO, .name = "sgi", .long_name = NULL_IF_CONFIG_SMALL("SGI image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_C93, .type = AVMEDIA_TYPE_VIDEO, .name = "c93", .long_name = NULL_IF_CONFIG_SMALL("Interplay C93"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_BETHSOFTVID, .type = AVMEDIA_TYPE_VIDEO, .name = "bethsoftvid", .long_name = NULL_IF_CONFIG_SMALL("Bethesda VID video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_PTX, .type = AVMEDIA_TYPE_VIDEO, .name = "ptx", .long_name = NULL_IF_CONFIG_SMALL("V.Flash PTX image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TXD, .type = AVMEDIA_TYPE_VIDEO, .name = "txd", .long_name = NULL_IF_CONFIG_SMALL("Renderware TXD (TeXture Dictionary) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VP6A, .type = AVMEDIA_TYPE_VIDEO, .name = "vp6a", .long_name = NULL_IF_CONFIG_SMALL("On2 VP6 (Flash version, with alpha channel)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AMV, .type = AVMEDIA_TYPE_VIDEO, .name = "amv", .long_name = NULL_IF_CONFIG_SMALL("AMV Video"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VB, .type = AVMEDIA_TYPE_VIDEO, .name = "vb", .long_name = NULL_IF_CONFIG_SMALL("Beam Software VB"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_PCX, .type = AVMEDIA_TYPE_VIDEO, .name = "pcx", .long_name = NULL_IF_CONFIG_SMALL("PC Paintbrush PCX image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_SUNRAST, .type = AVMEDIA_TYPE_VIDEO, .name = "sunrast", .long_name = NULL_IF_CONFIG_SMALL("Sun Rasterfile image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_INDEO4, .type = AVMEDIA_TYPE_VIDEO, .name = "indeo4", .long_name = NULL_IF_CONFIG_SMALL("Intel Indeo Video Interactive 4"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_INDEO5, .type = AVMEDIA_TYPE_VIDEO, .name = "indeo5", .long_name = NULL_IF_CONFIG_SMALL("Intel Indeo Video Interactive 5"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MIMIC, .type = AVMEDIA_TYPE_VIDEO, .name = "mimic", .long_name = NULL_IF_CONFIG_SMALL("Mimic"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RL2, .type = AVMEDIA_TYPE_VIDEO, .name = "rl2", .long_name = NULL_IF_CONFIG_SMALL("RL2 video"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ESCAPE124, .type = AVMEDIA_TYPE_VIDEO, .name = "escape124", .long_name = NULL_IF_CONFIG_SMALL("Escape 124"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_DIRAC, .type = AVMEDIA_TYPE_VIDEO, .name = "dirac", .long_name = NULL_IF_CONFIG_SMALL("Dirac"), + .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_BFI, .type = AVMEDIA_TYPE_VIDEO, .name = "bfi", .long_name = NULL_IF_CONFIG_SMALL("Brute Force & Ignorance"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_CMV, .type = AVMEDIA_TYPE_VIDEO, .name = "cmv", .long_name = NULL_IF_CONFIG_SMALL("Electronic Arts CMV video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MOTIONPIXELS, .type = AVMEDIA_TYPE_VIDEO, .name = "motionpixels", .long_name = NULL_IF_CONFIG_SMALL("Motion Pixels video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TGV, .type = AVMEDIA_TYPE_VIDEO, .name = "tgv", .long_name = NULL_IF_CONFIG_SMALL("Electronic Arts TGV video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TGQ, .type = AVMEDIA_TYPE_VIDEO, .name = "tgq", .long_name = NULL_IF_CONFIG_SMALL("Electronic Arts TGQ video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TQI, .type = AVMEDIA_TYPE_VIDEO, .name = "tqi", .long_name = NULL_IF_CONFIG_SMALL("Electronic Arts TQI video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AURA, .type = AVMEDIA_TYPE_VIDEO, .name = "aura", .long_name = NULL_IF_CONFIG_SMALL("Auravision AURA"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AURA2, .type = AVMEDIA_TYPE_VIDEO, .name = "aura2", .long_name = NULL_IF_CONFIG_SMALL("Auravision Aura 2"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_V210X, .type = AVMEDIA_TYPE_VIDEO, .name = "v210x", - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_TMV, .type = AVMEDIA_TYPE_VIDEO, .name = "tmv", .long_name = NULL_IF_CONFIG_SMALL("8088flex TMV"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_V210, .type = AVMEDIA_TYPE_VIDEO, .name = "v210", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed 4:2:2 10-bit"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_DPX, .type = AVMEDIA_TYPE_VIDEO, .name = "dpx", .long_name = NULL_IF_CONFIG_SMALL("DPX image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MAD, .type = AVMEDIA_TYPE_VIDEO, .name = "mad", - .long_name = NULL_IF_CONFIG_SMALL("Electronic Arts Madcow Video") + .long_name = NULL_IF_CONFIG_SMALL("Electronic Arts Madcow Video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_FRWU, .type = AVMEDIA_TYPE_VIDEO, .name = "frwu", .long_name = NULL_IF_CONFIG_SMALL("Forward Uncompressed"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_FLASHSV2, .type = AVMEDIA_TYPE_VIDEO, .name = "flashsv2", .long_name = NULL_IF_CONFIG_SMALL("Flash Screen Video v2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_CDGRAPHICS, .type = AVMEDIA_TYPE_VIDEO, .name = "cdgraphics", .long_name = NULL_IF_CONFIG_SMALL("CD Graphics video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_R210, .type = AVMEDIA_TYPE_VIDEO, .name = "r210", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed RGB 10-bit"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ANM, .type = AVMEDIA_TYPE_VIDEO, .name = "anm", .long_name = NULL_IF_CONFIG_SMALL("Deluxe Paint Animation"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_BINKVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "binkvideo", .long_name = NULL_IF_CONFIG_SMALL("Bink video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_IFF_ILBM, .type = AVMEDIA_TYPE_VIDEO, .name = "iff_ilbm", .long_name = NULL_IF_CONFIG_SMALL("IFF ILBM"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_IFF_BYTERUN1, .type = AVMEDIA_TYPE_VIDEO, .name = "iff_byterun1", .long_name = NULL_IF_CONFIG_SMALL("IFF ByteRun1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_KGV1, .type = AVMEDIA_TYPE_VIDEO, .name = "kgv1", .long_name = NULL_IF_CONFIG_SMALL("Kega Game Video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_YOP, .type = AVMEDIA_TYPE_VIDEO, .name = "yop", .long_name = NULL_IF_CONFIG_SMALL("Psygnosis YOP Video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VP8, .type = AVMEDIA_TYPE_VIDEO, .name = "vp8", .long_name = NULL_IF_CONFIG_SMALL("On2 VP8"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_PICTOR, .type = AVMEDIA_TYPE_VIDEO, .name = "pictor", .long_name = NULL_IF_CONFIG_SMALL("Pictor/PC Paint"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ANSI, .type = AVMEDIA_TYPE_VIDEO, .name = "ansi", .long_name = NULL_IF_CONFIG_SMALL("ASCII/ANSI art"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_A64_MULTI, .type = AVMEDIA_TYPE_VIDEO, .name = "a64_multi", .long_name = NULL_IF_CONFIG_SMALL("Multicolor charset for Commodore 64"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_A64_MULTI5, .type = AVMEDIA_TYPE_VIDEO, .name = "a64_multi5", .long_name = NULL_IF_CONFIG_SMALL("Multicolor charset for Commodore 64, extended with 5th color (colram)"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_R10K, .type = AVMEDIA_TYPE_VIDEO, .name = "r10k", .long_name = NULL_IF_CONFIG_SMALL("AJA Kona 10-bit RGB Codec"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MXPEG, .type = AVMEDIA_TYPE_VIDEO, .name = "mxpeg", .long_name = NULL_IF_CONFIG_SMALL("Mobotix MxPEG video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_LAGARITH, .type = AVMEDIA_TYPE_VIDEO, .name = "lagarith", .long_name = NULL_IF_CONFIG_SMALL("Lagarith lossless"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PRORES, .type = AVMEDIA_TYPE_VIDEO, .name = "prores", .long_name = NULL_IF_CONFIG_SMALL("Apple ProRes (iCodec Pro)"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_JV, .type = AVMEDIA_TYPE_VIDEO, .name = "jv", .long_name = NULL_IF_CONFIG_SMALL("Bitmap Brothers JV video"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_DFA, .type = AVMEDIA_TYPE_VIDEO, .name = "dfa", .long_name = NULL_IF_CONFIG_SMALL("Chronomaster DFA"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMV3IMAGE, .type = AVMEDIA_TYPE_VIDEO, .name = "wmv3image", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9 Image"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VC1IMAGE, .type = AVMEDIA_TYPE_VIDEO, .name = "vc1image", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9 Image v2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_UTVIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "utvideo", .long_name = NULL_IF_CONFIG_SMALL("Ut Video"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_BMV_VIDEO, .type = AVMEDIA_TYPE_VIDEO, .name = "bmv_video", .long_name = NULL_IF_CONFIG_SMALL("Discworld II BMV video"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_VBLE, .type = AVMEDIA_TYPE_VIDEO, .name = "vble", .long_name = NULL_IF_CONFIG_SMALL("VBLE Lossless Codec"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_DXTORY, .type = AVMEDIA_TYPE_VIDEO, .name = "dxtory", .long_name = NULL_IF_CONFIG_SMALL("Dxtory"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_V410, .type = AVMEDIA_TYPE_VIDEO, .name = "v410", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed 4:4:4 10-bit"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_XWD, .type = AVMEDIA_TYPE_VIDEO, .name = "xwd", .long_name = NULL_IF_CONFIG_SMALL("XWD (X Window Dump) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_CDXL, .type = AVMEDIA_TYPE_VIDEO, .name = "cdxl", .long_name = NULL_IF_CONFIG_SMALL("Commodore CDXL video"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_XBM, .type = AVMEDIA_TYPE_VIDEO, .name = "xbm", .long_name = NULL_IF_CONFIG_SMALL("XBM (X BitMap) image"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ZEROCODEC, .type = AVMEDIA_TYPE_VIDEO, .name = "zerocodec", .long_name = NULL_IF_CONFIG_SMALL("ZeroCodec Lossless Video"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MSS1, .type = AVMEDIA_TYPE_VIDEO, .name = "mss1", .long_name = NULL_IF_CONFIG_SMALL("MS Screen 1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MSA1, .type = AVMEDIA_TYPE_VIDEO, .name = "msa1", .long_name = NULL_IF_CONFIG_SMALL("MS ATC Screen"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TSCC2, .type = AVMEDIA_TYPE_VIDEO, .name = "tscc2", .long_name = NULL_IF_CONFIG_SMALL("TechSmith Screen Codec 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MTS2, .type = AVMEDIA_TYPE_VIDEO, .name = "mts2", .long_name = NULL_IF_CONFIG_SMALL("MS Expression Encoder Screen"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_CLLC, .type = AVMEDIA_TYPE_VIDEO, .name = "cllc", .long_name = NULL_IF_CONFIG_SMALL("Canopus Lossless Codec"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_Y41P, @@ -1196,36 +1304,42 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s16le", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 16-bit little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_S16BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s16be", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 16-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_U16LE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_u16le", .long_name = NULL_IF_CONFIG_SMALL("PCM unsigned 16-bit little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_U16BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_u16be", .long_name = NULL_IF_CONFIG_SMALL("PCM unsigned 16-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_S8, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s8", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 8-bit"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_U8, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_u8", .long_name = NULL_IF_CONFIG_SMALL("PCM unsigned 8-bit"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_MULAW, @@ -1244,120 +1358,140 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s32le", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 32-bit little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_S32BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s32be", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 32-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_U32LE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_u32le", .long_name = NULL_IF_CONFIG_SMALL("PCM unsigned 32-bit little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_U32BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_u32be", .long_name = NULL_IF_CONFIG_SMALL("PCM unsigned 32-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_S24LE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s24le", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 24-bit little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_S24BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s24be", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 24-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_U24LE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_u24le", .long_name = NULL_IF_CONFIG_SMALL("PCM unsigned 24-bit little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_U24BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_u24be", .long_name = NULL_IF_CONFIG_SMALL("PCM unsigned 24-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_S24DAUD, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s24daud", .long_name = NULL_IF_CONFIG_SMALL("PCM D-Cinema audio signed 24-bit"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_ZORK, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_zork", .long_name = NULL_IF_CONFIG_SMALL("PCM Zork"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_PCM_S16LE_PLANAR, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s16le_planar", .long_name = NULL_IF_CONFIG_SMALL("PCM 16-bit little-endian planar"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_DVD, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_dvd", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 20|24-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_F32BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_f32be", .long_name = NULL_IF_CONFIG_SMALL("PCM 32-bit floating point big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_F32LE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_f32le", .long_name = NULL_IF_CONFIG_SMALL("PCM 32-bit floating point little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_F64BE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_f64be", .long_name = NULL_IF_CONFIG_SMALL("PCM 64-bit floating point big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_F64LE, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_f64le", .long_name = NULL_IF_CONFIG_SMALL("PCM 64-bit floating point little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_BLURAY, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_bluray", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 16|20|24-bit big-endian for Blu-ray media"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_PCM_LXF, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_lxf", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 20-bit little-endian planar"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_S302M, .type = AVMEDIA_TYPE_AUDIO, .name = "s302m", .long_name = NULL_IF_CONFIG_SMALL("SMPTE 302M"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_PCM_S8_PLANAR, .type = AVMEDIA_TYPE_AUDIO, .name = "pcm_s8_planar", .long_name = NULL_IF_CONFIG_SMALL("PCM signed 8-bit planar"), + .props = AV_CODEC_PROP_LOSSLESS, }, /* various ADPCM codecs */ @@ -1366,180 +1500,210 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_qt", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA QuickTime"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_WAV, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_wav", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA WAV"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_DK3, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_dk3", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Duck DK3"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_DK4, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_dk4", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Duck DK4"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_WS, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_ws", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Westwood"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_SMJPEG, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_smjpeg", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Loki SDL MJPEG"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_MS, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ms", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Microsoft"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_4XM, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_4xm", .long_name = NULL_IF_CONFIG_SMALL("ADPCM 4X Movie"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_XA, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_xa", .long_name = NULL_IF_CONFIG_SMALL("ADPCM CDROM XA"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_ADX, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_adx", .long_name = NULL_IF_CONFIG_SMALL("SEGA CRI ADX ADPCM"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_EA, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ea", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Electronic Arts"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_G726, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_g726", .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_CT, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ct", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Creative Technology"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_SWF, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_swf", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Shockwave Flash"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_YAMAHA, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_yamaha", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Yamaha"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_SBPRO_4, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_sbpro_4", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Sound Blaster Pro 4-bit"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_SBPRO_3, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_sbpro_3", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Sound Blaster Pro 2.6-bit"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_SBPRO_2, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_sbpro_2", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Sound Blaster Pro 2-bit"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_THP, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_thp", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Nintendo Gamecube THP"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_AMV, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_amv", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA AMV"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_EA_R1, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ea_r1", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Electronic Arts R1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_EA_R3, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ea_r3", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Electronic Arts R3"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_EA_R2, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ea_r2", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Electronic Arts R2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_EA_SEAD, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_ea_sead", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Electronic Arts SEAD"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_EA_EACS, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_ea_eacs", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Electronic Arts EACS"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_EA_XAS, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ea_xas", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Electronic Arts XAS"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_EA_MAXIS_XA, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ea_maxis_xa", .long_name = NULL_IF_CONFIG_SMALL("ADPCM Electronic Arts Maxis CDROM XA"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_ISS, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_iss", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Funcom ISS"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_G722, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_g722", .long_name = NULL_IF_CONFIG_SMALL("G.722 ADPCM"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ADPCM_IMA_APC, .type = AVMEDIA_TYPE_AUDIO, .name = "adpcm_ima_apc", .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA CRYO APC"), + .props = AV_CODEC_PROP_LOSSY, }, /* AMR */ @@ -1548,12 +1712,14 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "amr_nb", .long_name = NULL_IF_CONFIG_SMALL("AMR-NB (Adaptive Multi-Rate NarrowBand)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AMR_WB, .type = AVMEDIA_TYPE_AUDIO, .name = "amr_wb", .long_name = NULL_IF_CONFIG_SMALL("AMR-WB (Adaptive Multi-Rate WideBand)"), + .props = AV_CODEC_PROP_LOSSY, }, /* RealAudio codecs*/ @@ -1562,12 +1728,14 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "ra_144", .long_name = NULL_IF_CONFIG_SMALL("RealAudio 1.0 (14.4K)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RA_288, .type = AVMEDIA_TYPE_AUDIO, .name = "ra_288", .long_name = NULL_IF_CONFIG_SMALL("RealAudio 2.0 (28.8K)"), + .props = AV_CODEC_PROP_LOSSY, }, /* various DPCM codecs */ @@ -1576,24 +1744,28 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "roq_dpcm", .long_name = NULL_IF_CONFIG_SMALL("DPCM id RoQ"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_INTERPLAY_DPCM, .type = AVMEDIA_TYPE_AUDIO, .name = "interplay_dpcm", .long_name = NULL_IF_CONFIG_SMALL("DPCM Interplay"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_XAN_DPCM, .type = AVMEDIA_TYPE_AUDIO, .name = "xan_dpcm", .long_name = NULL_IF_CONFIG_SMALL("DPCM Xan"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SOL_DPCM, .type = AVMEDIA_TYPE_AUDIO, .name = "sol_dpcm", .long_name = NULL_IF_CONFIG_SMALL("DPCM Sol"), + .props = AV_CODEC_PROP_LOSSY, }, /* audio codecs */ @@ -1602,365 +1774,426 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "mp2", .long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MP3, .type = AVMEDIA_TYPE_AUDIO, .name = "mp3", .long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AAC, .type = AVMEDIA_TYPE_AUDIO, .name = "aac", .long_name = NULL_IF_CONFIG_SMALL("AAC (Advanced Audio Coding)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AC3, .type = AVMEDIA_TYPE_AUDIO, .name = "ac3", .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_DTS, .type = AVMEDIA_TYPE_AUDIO, .name = "dts", .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"), + .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_VORBIS, .type = AVMEDIA_TYPE_AUDIO, .name = "vorbis", .long_name = NULL_IF_CONFIG_SMALL("Vorbis"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_DVAUDIO, .type = AVMEDIA_TYPE_AUDIO, .name = "dvaudio", + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMAV1, .type = AVMEDIA_TYPE_AUDIO, .name = "wmav1", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMAV2, .type = AVMEDIA_TYPE_AUDIO, .name = "wmav2", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MACE3, .type = AVMEDIA_TYPE_AUDIO, .name = "mace3", .long_name = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 3:1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MACE6, .type = AVMEDIA_TYPE_AUDIO, .name = "mace6", .long_name = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 6:1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VMDAUDIO, .type = AVMEDIA_TYPE_AUDIO, .name = "vmdaudio", .long_name = NULL_IF_CONFIG_SMALL("Sierra VMD audio"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_FLAC, .type = AVMEDIA_TYPE_AUDIO, .name = "flac", .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MP3ADU, .type = AVMEDIA_TYPE_AUDIO, .name = "mp3adu", .long_name = NULL_IF_CONFIG_SMALL("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MP3ON4, .type = AVMEDIA_TYPE_AUDIO, .name = "mp3on4", .long_name = NULL_IF_CONFIG_SMALL("MP3onMP4"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SHORTEN, .type = AVMEDIA_TYPE_AUDIO, .name = "shorten", .long_name = NULL_IF_CONFIG_SMALL("Shorten"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ALAC, .type = AVMEDIA_TYPE_AUDIO, .name = "alac", .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_WESTWOOD_SND1, .type = AVMEDIA_TYPE_AUDIO, .name = "westwood_snd1", .long_name = NULL_IF_CONFIG_SMALL("Westwood Audio (SND1)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_GSM, .type = AVMEDIA_TYPE_AUDIO, .name = "gsm", .long_name = NULL_IF_CONFIG_SMALL("GSM"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_QDM2, .type = AVMEDIA_TYPE_AUDIO, .name = "qdm2", .long_name = NULL_IF_CONFIG_SMALL("QDesign Music Codec 2"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_COOK, .type = AVMEDIA_TYPE_AUDIO, .name = "cook", .long_name = NULL_IF_CONFIG_SMALL("Cook / Cooker / Gecko (RealAudio G2)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TRUESPEECH, .type = AVMEDIA_TYPE_AUDIO, .name = "truespeech", .long_name = NULL_IF_CONFIG_SMALL("DSP Group TrueSpeech"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TTA, .type = AVMEDIA_TYPE_AUDIO, .name = "tta", .long_name = NULL_IF_CONFIG_SMALL("TTA (True Audio)"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_SMACKAUDIO, .type = AVMEDIA_TYPE_AUDIO, .name = "smackaudio", .long_name = NULL_IF_CONFIG_SMALL("Smacker audio"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_QCELP, .type = AVMEDIA_TYPE_AUDIO, .name = "qcelp", .long_name = NULL_IF_CONFIG_SMALL("QCELP / PureVoice"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WAVPACK, .type = AVMEDIA_TYPE_AUDIO, .name = "wavpack", .long_name = NULL_IF_CONFIG_SMALL("WavPack"), + .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_DSICINAUDIO, .type = AVMEDIA_TYPE_AUDIO, .name = "dsicinaudio", .long_name = NULL_IF_CONFIG_SMALL("Delphine Software International CIN audio"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_IMC, .type = AVMEDIA_TYPE_AUDIO, .name = "imc", .long_name = NULL_IF_CONFIG_SMALL("IMC (Intel Music Coder)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MUSEPACK7, .type = AVMEDIA_TYPE_AUDIO, .name = "musepack7", .long_name = NULL_IF_CONFIG_SMALL("Musepack SV7"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MLP, .type = AVMEDIA_TYPE_AUDIO, .name = "mlp", .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_GSM_MS, .type = AVMEDIA_TYPE_AUDIO, .name = "gsm_ms", .long_name = NULL_IF_CONFIG_SMALL("GSM Microsoft variant"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ATRAC3, .type = AVMEDIA_TYPE_AUDIO, .name = "atrac3", .long_name = NULL_IF_CONFIG_SMALL("Atrac 3 (Adaptive TRansform Acoustic Coding 3)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VOXWARE, .type = AVMEDIA_TYPE_AUDIO, .name = "voxware", .long_name = NULL_IF_CONFIG_SMALL("Voxware RT29 Metasound"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_APE, .type = AVMEDIA_TYPE_AUDIO, .name = "ape", .long_name = NULL_IF_CONFIG_SMALL("Monkey's Audio"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_NELLYMOSER, .type = AVMEDIA_TYPE_AUDIO, .name = "nellymoser", .long_name = NULL_IF_CONFIG_SMALL("Nellymoser Asao"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MUSEPACK8, .type = AVMEDIA_TYPE_AUDIO, .name = "musepack8", .long_name = NULL_IF_CONFIG_SMALL("Musepack SV8"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SPEEX, .type = AVMEDIA_TYPE_AUDIO, .name = "speex", .long_name = NULL_IF_CONFIG_SMALL("Speex"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMAVOICE, .type = AVMEDIA_TYPE_AUDIO, .name = "wmavoice", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio Voice"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMAPRO, .type = AVMEDIA_TYPE_AUDIO, .name = "wmapro", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio 9 Professional"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_WMALOSSLESS, .type = AVMEDIA_TYPE_AUDIO, .name = "wmalossless", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio Lossless"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ATRAC3P, .type = AVMEDIA_TYPE_AUDIO, .name = "atrac3p", .long_name = NULL_IF_CONFIG_SMALL("Sony ATRAC3+"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_EAC3, .type = AVMEDIA_TYPE_AUDIO, .name = "eac3", .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_SIPR, .type = AVMEDIA_TYPE_AUDIO, .name = "sipr", .long_name = NULL_IF_CONFIG_SMALL("RealAudio SIPR / ACELP.NET"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_MP1, .type = AVMEDIA_TYPE_AUDIO, .name = "mp1", .long_name = NULL_IF_CONFIG_SMALL("MP1 (MPEG audio layer 1)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TWINVQ, .type = AVMEDIA_TYPE_AUDIO, .name = "twinvq", .long_name = NULL_IF_CONFIG_SMALL("VQF TwinVQ"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_TRUEHD, .type = AVMEDIA_TYPE_AUDIO, .name = "truehd", .long_name = NULL_IF_CONFIG_SMALL("TrueHD"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MP4ALS, .type = AVMEDIA_TYPE_AUDIO, .name = "mp4als", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 Audio Lossless Coding (ALS)"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ATRAC1, .type = AVMEDIA_TYPE_AUDIO, .name = "atrac1", .long_name = NULL_IF_CONFIG_SMALL("Atrac 1 (Adaptive TRansform Acoustic Coding)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_BINKAUDIO_RDFT, .type = AVMEDIA_TYPE_AUDIO, .name = "binkaudio_rdft", - .long_name = NULL_IF_CONFIG_SMALL("Bink Audio (RDFT)") + .long_name = NULL_IF_CONFIG_SMALL("Bink Audio (RDFT)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_BINKAUDIO_DCT, .type = AVMEDIA_TYPE_AUDIO, .name = "binkaudio_dct", - .long_name = NULL_IF_CONFIG_SMALL("Bink Audio (DCT)") + .long_name = NULL_IF_CONFIG_SMALL("Bink Audio (DCT)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_AAC_LATM, .type = AVMEDIA_TYPE_AUDIO, .name = "aac_latm", .long_name = NULL_IF_CONFIG_SMALL("AAC LATM (Advanced Audio Coding LATM syntax)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_QDMC, .type = AVMEDIA_TYPE_AUDIO, .name = "qdmc", .long_name = NULL_IF_CONFIG_SMALL("QDesign Music"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_CELT, .type = AVMEDIA_TYPE_AUDIO, .name = "celt", .long_name = NULL_IF_CONFIG_SMALL("Constrained Energy Lapped Transform (CELT)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_G723_1, .type = AVMEDIA_TYPE_AUDIO, .name = "g723_1", .long_name = NULL_IF_CONFIG_SMALL("G.723.1"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_G729, .type = AVMEDIA_TYPE_AUDIO, .name = "g729", .long_name = NULL_IF_CONFIG_SMALL("G.729"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_8SVX_EXP, .type = AVMEDIA_TYPE_AUDIO, .name = "8svx_exp", .long_name = NULL_IF_CONFIG_SMALL("8SVX exponential"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_8SVX_FIB, .type = AVMEDIA_TYPE_AUDIO, .name = "8svx_fib", .long_name = NULL_IF_CONFIG_SMALL("8SVX fibonacci"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_BMV_AUDIO, .type = AVMEDIA_TYPE_AUDIO, .name = "bmv_audio", .long_name = NULL_IF_CONFIG_SMALL("Discworld II BMV audio"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_RALF, .type = AVMEDIA_TYPE_AUDIO, .name = "ralf", .long_name = NULL_IF_CONFIG_SMALL("RealAudio Lossless"), + .props = AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_IAC, .type = AVMEDIA_TYPE_AUDIO, .name = "iac", .long_name = NULL_IF_CONFIG_SMALL("IAC (Indeo Audio Coder)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_ILBC, .type = AVMEDIA_TYPE_AUDIO, .name = "ilbc", .long_name = NULL_IF_CONFIG_SMALL("iLBC (Internet Low Bitrate Codec)"), + .props = AV_CODEC_PROP_LOSSY, }, { .id = AV_CODEC_ID_VIMA, diff --git a/libavcodec/g723_1.c b/libavcodec/g723_1.c index 70c00d5f66..b93d5e98c3 100644 --- a/libavcodec/g723_1.c +++ b/libavcodec/g723_1.c @@ -37,6 +37,8 @@ #include "celp_math.h" #include "g723_1_data.h" +#define CNG_RANDOM_SEED 12345 + typedef struct g723_1_context { AVClass *class; AVFrame frame; @@ -50,6 +52,7 @@ typedef struct g723_1_context { int erased_frames; int16_t prev_lsp[LPC_ORDER]; + int16_t sid_lsp[LPC_ORDER]; int16_t prev_excitation[PITCH_MAX]; int16_t excitation[PITCH_MAX + FRAME_LEN + 4]; int16_t synth_mem[LPC_ORDER]; @@ -57,6 +60,7 @@ typedef struct g723_1_context { int iir_mem[LPC_ORDER]; int random_seed; + int cng_random_seed; int interp_index; int interp_gain; int sid_gain; @@ -65,7 +69,8 @@ typedef struct g723_1_context { int pf_gain; ///< formant postfilter ///< gain scaling unit memory int postfilter; - int16_t audio[FRAME_LEN + LPC_ORDER + PITCH_MAX]; + + int16_t audio[FRAME_LEN + LPC_ORDER + PITCH_MAX + 4]; int16_t prev_data[HALF_FRAME_LEN]; int16_t prev_weight_sig[PITCH_MAX]; @@ -91,6 +96,10 @@ static av_cold int g723_1_decode_init(AVCodecContext *avctx) avctx->coded_frame = &p->frame; memcpy(p->prev_lsp, dc_lsp, LPC_ORDER * sizeof(*p->prev_lsp)); + memcpy(p->sid_lsp, dc_lsp, LPC_ORDER * sizeof(*p->sid_lsp)); + + p->cng_random_seed = CNG_RANDOM_SEED; + p->past_frame_type = SID_FRAME; return 0; } @@ -947,6 +956,201 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, } } +static int sid_gain_to_lsp_index(int gain) +{ + if (gain < 0x10) + return gain << 6; + else if (gain < 0x20) + return gain - 8 << 7; + else + return gain - 20 << 8; +} + +static inline int cng_rand(int *state, int base) +{ + *state = (*state * 521 + 259) & 0xFFFF; + return (*state & 0x7FFF) * base >> 15; +} + +static int estimate_sid_gain(G723_1_Context *p) +{ + int i, shift, seg, seg2, t, val, val_add, x, y; + + shift = 16 - p->cur_gain * 2; + if (shift > 0) + t = p->sid_gain << shift; + else + t = p->sid_gain >> -shift; + x = t * cng_filt[0] >> 16; + + if (x >= cng_bseg[2]) + return 0x3F; + + if (x >= cng_bseg[1]) { + shift = 4; + seg = 3; + } else { + shift = 3; + seg = (x >= cng_bseg[0]); + } + seg2 = FFMIN(seg, 3); + + val = 1 << shift; + val_add = val >> 1; + for (i = 0; i < shift; i++) { + t = seg * 32 + (val << seg2); + t *= t; + if (x >= t) + val += val_add; + else + val -= val_add; + val_add >>= 1; + } + + t = seg * 32 + (val << seg2); + y = t * t - x; + if (y <= 0) { + t = seg * 32 + (val + 1 << seg2); + t = t * t - x; + val = (seg2 - 1 << 4) + val; + if (t >= y) + val++; + } else { + t = seg * 32 + (val - 1 << seg2); + t = t * t - x; + val = (seg2 - 1 << 4) + val; + if (t >= y) + val--; + } + + return val; +} + +static void generate_noise(G723_1_Context *p) +{ + int i, j, idx, t; + int off[SUBFRAMES]; + int signs[SUBFRAMES / 2 * 11], pos[SUBFRAMES / 2 * 11]; + int tmp[SUBFRAME_LEN * 2]; + int16_t *vector_ptr; + int64_t sum; + int b0, c, delta, x, shift; + + p->pitch_lag[0] = cng_rand(&p->cng_random_seed, 21) + 123; + p->pitch_lag[1] = cng_rand(&p->cng_random_seed, 19) + 123; + + for (i = 0; i < SUBFRAMES; i++) { + p->subframe[i].ad_cb_gain = cng_rand(&p->cng_random_seed, 50) + 1; + p->subframe[i].ad_cb_lag = cng_adaptive_cb_lag[i]; + } + + for (i = 0; i < SUBFRAMES / 2; i++) { + t = cng_rand(&p->cng_random_seed, 1 << 13); + off[i * 2] = t & 1; + off[i * 2 + 1] = ((t >> 1) & 1) + SUBFRAME_LEN; + t >>= 2; + for (j = 0; j < 11; j++) { + signs[i * 11 + j] = (t & 1) * 2 - 1 << 14; + t >>= 1; + } + } + + idx = 0; + for (i = 0; i < SUBFRAMES; i++) { + for (j = 0; j < SUBFRAME_LEN / 2; j++) + tmp[j] = j; + t = SUBFRAME_LEN / 2; + for (j = 0; j < pulses[i]; j++, idx++) { + int idx2 = cng_rand(&p->cng_random_seed, t); + + pos[idx] = tmp[idx2] * 2 + off[i]; + tmp[idx2] = tmp[--t]; + } + } + + vector_ptr = p->audio + LPC_ORDER; + memcpy(vector_ptr, p->prev_excitation, + PITCH_MAX * sizeof(*p->excitation)); + for (i = 0; i < SUBFRAMES; i += 2) { + gen_acb_excitation(vector_ptr, vector_ptr, + p->pitch_lag[i >> 1], &p->subframe[i], + p->cur_rate); + gen_acb_excitation(vector_ptr + SUBFRAME_LEN, + vector_ptr + SUBFRAME_LEN, + p->pitch_lag[i >> 1], &p->subframe[i + 1], + p->cur_rate); + + t = 0; + for (j = 0; j < SUBFRAME_LEN * 2; j++) + t |= FFABS(vector_ptr[j]); + t = FFMIN(t, 0x7FFF); + if (!t) { + shift = 0; + } else { + shift = -10 + av_log2(t); + if (shift < -2) + shift = -2; + } + sum = 0; + if (shift < 0) { + for (j = 0; j < SUBFRAME_LEN * 2; j++) { + t = vector_ptr[j] << -shift; + sum += t * t; + tmp[j] = t; + } + } else { + for (j = 0; j < SUBFRAME_LEN * 2; j++) { + t = vector_ptr[j] >> shift; + sum += t * t; + tmp[j] = t; + } + } + + b0 = 0; + for (j = 0; j < 11; j++) + b0 += tmp[pos[(i / 2) * 11 + j]] * signs[(i / 2) * 11 + j]; + b0 = b0 * 2 * 2979LL + (1 << 29) >> 30; // approximated division by 11 + + c = p->cur_gain * (p->cur_gain * SUBFRAME_LEN >> 5); + if (shift * 2 + 3 >= 0) + c >>= shift * 2 + 3; + else + c <<= -(shift * 2 + 3); + c = (av_clipl_int32(sum << 1) - c) * 2979LL >> 15; + + delta = b0 * b0 * 2 - c; + if (delta <= 0) { + x = -b0; + } else { + delta = square_root(delta); + x = delta - b0; + t = delta + b0; + if (FFABS(t) < FFABS(x)) + x = -t; + } + shift++; + if (shift < 0) + x >>= -shift; + else + x <<= shift; + x = av_clip(x, -10000, 10000); + + for (j = 0; j < 11; j++) { + idx = (i / 2) * 11 + j; + vector_ptr[pos[idx]] = av_clip_int16(vector_ptr[pos[idx]] + + (x * signs[idx] >> 15)); + } + + /* copy decoded data to serve as a history for the next decoded subframes */ + memcpy(vector_ptr + PITCH_MAX, vector_ptr, + sizeof(*vector_ptr) * SUBFRAME_LEN * 2); + vector_ptr += SUBFRAME_LEN * 2; + } + /* Save the excitation for the next frame */ + memcpy(p->prev_excitation, p->audio + LPC_ORDER + FRAME_LEN, + PITCH_MAX * sizeof(*p->excitation)); +} + static int g723_1_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) { @@ -1071,14 +1275,23 @@ static int g723_1_decode_frame(AVCodecContext *avctx, void *data, PITCH_MAX * sizeof(*p->excitation)); } } + p->cng_random_seed = CNG_RANDOM_SEED; } else { - memset(out, 0, FRAME_LEN * 2); - av_log(avctx, AV_LOG_WARNING, - "G.723.1: Comfort noise generation not supported yet\n"); + if (p->cur_frame_type == SID_FRAME) { + p->sid_gain = sid_gain_to_lsp_index(p->subframe[0].amp_index); + inverse_quant(p->sid_lsp, p->prev_lsp, p->lsp_index, 0); + } else if (p->past_frame_type == ACTIVE_FRAME) { + p->sid_gain = estimate_sid_gain(p); + } - *got_frame_ptr = 1; - *(AVFrame *)data = p->frame; - return frame_size[dec_mode]; + if (p->past_frame_type == ACTIVE_FRAME) + p->cur_gain = p->sid_gain; + else + p->cur_gain = (p->cur_gain * 7 + p->sid_gain) >> 3; + generate_noise(p); + lsp_interpolate(lpc, p->sid_lsp, p->prev_lsp); + /* Save the lsp_vector for the next frame */ + memcpy(p->prev_lsp, p->sid_lsp, LPC_ORDER * sizeof(*p->prev_lsp)); } p->past_frame_type = p->cur_frame_type; diff --git a/libavcodec/g723_1_data.h b/libavcodec/g723_1_data.h index b62f207b23..8ee4a91841 100644 --- a/libavcodec/g723_1_data.h +++ b/libavcodec/g723_1_data.h @@ -1319,4 +1319,10 @@ static const int16_t percept_flt_tbl[2][LPC_ORDER] = { {16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32} }; +static const int cng_adaptive_cb_lag[4] = { 1, 0, 1, 3 }; + +static const int cng_filt[4] = { 273, 998, 499, 333 }; + +static const int cng_bseg[3] = { 2048, 18432, 231233 }; + #endif /* AVCODEC_G723_1_DATA_H */ diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c index de7be310bc..17e4b29888 100644 --- a/libavcodec/utvideoenc.c +++ b/libavcodec/utvideoenc.c @@ -62,6 +62,7 @@ static av_cold int utvideo_encode_init(AVCodecContext *avctx) c->avctx = avctx; c->frame_info_size = 4; + c->slice_stride = FFALIGN(avctx->width, 32); switch (avctx->pix_fmt) { case PIX_FMT_RGB24: @@ -145,7 +146,6 @@ static av_cold int utvideo_encode_init(AVCodecContext *avctx) } for (i = 0; i < c->planes; i++) { - c->slice_stride = FFALIGN(avctx->width, 32); c->slice_buffer[i] = av_malloc(c->slice_stride * (avctx->height + 2) + FF_INPUT_BUFFER_PADDING_SIZE); if (!c->slice_buffer[i]) { @@ -202,14 +202,14 @@ static void mangle_rgb_planes(uint8_t *dst[4], int dst_stride, uint8_t *src, { int i, j; int k = 2 * dst_stride; - unsigned g; + unsigned int g; for (j = 0; j < height; j++) { if (step == 3) { for (i = 0; i < width * step; i += step) { g = src[i + 1]; dst[0][k] = g; - g += 0x80; + g += 0x80; dst[1][k] = src[i + 2] - g; dst[2][k] = src[i + 0] - g; k++; @@ -218,7 +218,7 @@ static void mangle_rgb_planes(uint8_t *dst[4], int dst_stride, uint8_t *src, for (i = 0; i < width * step; i += step) { g = src[i + 1]; dst[0][k] = g; - g += 0x80; + g += 0x80; dst[1][k] = src[i + 2] - g; dst[2][k] = src[i + 0] - g; dst[3][k] = src[i + 3]; @@ -266,7 +266,7 @@ static void median_predict(UtvideoContext *c, uint8_t *src, uint8_t *dst, int st int width, int height) { int i, j; - int A, C; + int A, B; uint8_t prev; /* First line uses left neighbour prediction */ @@ -285,11 +285,11 @@ static void median_predict(UtvideoContext *c, uint8_t *src, uint8_t *dst, int st * Second line uses top prediction for the first sample, * and median for the rest. */ - A = C = 0; + A = B = 0; /* Rest of the coded part uses median prediction */ for (j = 1; j < height; j++) { - c->dsp.sub_hfyu_median_prediction(dst, src - stride, src, width, &A, &C); + c->dsp.sub_hfyu_median_prediction(dst, src - stride, src, width, &A, &B); dst += width; src += stride; } diff --git a/libavcodec/version.h b/libavcodec/version.h index bf741020fa..32a61f55ed 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #define LIBAVCODEC_VERSION_MAJOR 54 #define LIBAVCODEC_VERSION_MINOR 54 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index db3c78dff3..5997adcb3a 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -2822,7 +2822,7 @@ static void dsputil_init_mmx2(DSPContext *c, AVCodecContext *avctx, #endif SET_QPEL_FUNCS(put_h264_qpel, 2, 4, 10_mmxext, ff_); SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, 10_mmxext, ff_); -#endif +#endif /* HAVE_YASM */ } #if HAVE_INLINE_ASM @@ -2857,7 +2857,7 @@ static void dsputil_init_mmx2(DSPContext *c, AVCodecContext *avctx, } else { c->apply_window_int16 = ff_apply_window_int16_mmxext; } -#endif +#endif /* HAVE_YASM */ } static void dsputil_init_3dnow(DSPContext *c, AVCodecContext *avctx, @@ -2936,7 +2936,7 @@ static void dsputil_init_3dnow(DSPContext *c, AVCodecContext *avctx, c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_3dnow_rnd; c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_3dnow; } -#endif +#endif /* HAVE_YASM */ } static void dsputil_init_3dnowext(DSPContext *c, AVCodecContext *avctx, @@ -2982,7 +2982,7 @@ static void dsputil_init_sse(DSPContext *c, AVCodecContext *avctx, int mm_flags) #if HAVE_INLINE_ASM c->gmc = gmc_sse; #endif -#endif +#endif /* HAVE_YASM */ } static void dsputil_init_sse2(DSPContext *c, AVCodecContext *avctx, @@ -3050,7 +3050,7 @@ static void dsputil_init_sse2(DSPContext *c, AVCodecContext *avctx, c->apply_window_int16 = ff_apply_window_int16_sse2; } c->bswap_buf = ff_bswap32_buf_sse2; -#endif +#endif /* HAVE_YASM */ } static void dsputil_init_ssse3(DSPContext *c, AVCodecContext *avctx, diff --git a/libavcodec/x86/fmtconvert_init.c b/libavcodec/x86/fmtconvert_init.c index 361ac85faf..2aa23ba780 100644 --- a/libavcodec/x86/fmtconvert_init.c +++ b/libavcodec/x86/fmtconvert_init.c @@ -110,7 +110,7 @@ static void float_interleave_sse(float *dst, const float **src, else ff_float_interleave_c(dst, src, len, channels); } -#endif +#endif /* HAVE_YASM */ void ff_fmt_convert_init_x86(FmtConvertContext *c, AVCodecContext *avctx) { @@ -143,5 +143,5 @@ void ff_fmt_convert_init_x86(FmtConvertContext *c, AVCodecContext *avctx) c->float_to_int16_interleave = float_to_int16_interleave_sse2; } } -#endif +#endif /* HAVE_YASM */ } diff --git a/libavcodec/x86/mpegaudiodec.c b/libavcodec/x86/mpegaudiodec.c index 7bc0c30c4f..8da3e02b78 100644 --- a/libavcodec/x86/mpegaudiodec.c +++ b/libavcodec/x86/mpegaudiodec.c @@ -182,6 +182,7 @@ static void apply_window_mp3(float *in, float *win, int *unused, float *out, #endif /* HAVE_INLINE_ASM */ +#if HAVE_YASM #define DECL_IMDCT_BLOCKS(CPU1, CPU2) \ static void imdct36_blocks_ ## CPU1(float *out, float *buf, float *in, \ int count, int switch_point, int block_type) \ @@ -214,7 +215,6 @@ static void imdct36_blocks_ ## CPU1(float *out, float *buf, float *in, \ } \ } -#if HAVE_YASM #if HAVE_SSE DECL_IMDCT_BLOCKS(sse,sse) DECL_IMDCT_BLOCKS(sse2,sse) @@ -224,7 +224,7 @@ DECL_IMDCT_BLOCKS(ssse3,sse) #if HAVE_AVX DECL_IMDCT_BLOCKS(avx,avx) #endif -#endif +#endif /* HAVE_YASM */ void ff_mpadsp_init_mmx(MPADSPContext *s) { diff --git a/libavcodec/x86/mpegvideoenc.c b/libavcodec/x86/mpegvideoenc.c index 3d75919ba2..93ca54aff9 100644 --- a/libavcodec/x86/mpegvideoenc.c +++ b/libavcodec/x86/mpegvideoenc.c @@ -30,13 +30,16 @@ extern uint16_t ff_inv_zigzag_direct16[64]; +#if HAVE_MMX #define COMPILE_TEMPLATE_MMXEXT 0 #define COMPILE_TEMPLATE_SSE2 0 #define COMPILE_TEMPLATE_SSSE3 0 #define RENAME(a) a ## _MMX #define RENAMEl(a) a ## _mmx #include "mpegvideoenc_template.c" +#endif /* HAVE_MMX */ +#if HAVE_MMXEXT #undef COMPILE_TEMPLATE_SSSE3 #undef COMPILE_TEMPLATE_SSE2 #undef COMPILE_TEMPLATE_MMXEXT @@ -48,7 +51,9 @@ extern uint16_t ff_inv_zigzag_direct16[64]; #define RENAME(a) a ## _MMX2 #define RENAMEl(a) a ## _mmx2 #include "mpegvideoenc_template.c" +#endif /* HAVE_MMXEXT */ +#if HAVE_SSE2 #undef COMPILE_TEMPLATE_MMXEXT #undef COMPILE_TEMPLATE_SSE2 #undef COMPILE_TEMPLATE_SSSE3 @@ -60,6 +65,7 @@ extern uint16_t ff_inv_zigzag_direct16[64]; #define RENAME(a) a ## _SSE2 #define RENAMEl(a) a ## _sse2 #include "mpegvideoenc_template.c" +#endif /* HAVE_SSE2 */ #if HAVE_SSSE3 #undef COMPILE_TEMPLATE_MMXEXT @@ -73,7 +79,7 @@ extern uint16_t ff_inv_zigzag_direct16[64]; #define RENAME(a) a ## _SSSE3 #define RENAMEl(a) a ## _sse2 #include "mpegvideoenc_template.c" -#endif +#endif /* HAVE_SSSE3 */ #endif /* HAVE_INLINE_ASM */ @@ -84,18 +90,22 @@ void ff_MPV_encode_init_x86(MpegEncContext *s) const int dct_algo = s->avctx->dct_algo; if (dct_algo == FF_DCT_AUTO || dct_algo == FF_DCT_MMX) { +#if HAVE_MMX + if (mm_flags & AV_CPU_FLAG_MMX && HAVE_MMX) + s->dct_quantize = dct_quantize_MMX; +#endif +#if HAVE_MMXEXT + if (mm_flags & AV_CPU_FLAG_MMXEXT && HAVE_MMXEXT) + s->dct_quantize = dct_quantize_MMX2; +#endif +#if HAVE_SSE2 + if (mm_flags & AV_CPU_FLAG_SSE2 && HAVE_SSE2) + s->dct_quantize = dct_quantize_SSE2; +#endif #if HAVE_SSSE3 - if (mm_flags & AV_CPU_FLAG_SSSE3) { + if (mm_flags & AV_CPU_FLAG_SSSE3) s->dct_quantize = dct_quantize_SSSE3; - } else #endif - if (mm_flags & AV_CPU_FLAG_SSE2 && HAVE_SSE) { - s->dct_quantize = dct_quantize_SSE2; - } else if (mm_flags & AV_CPU_FLAG_MMXEXT && HAVE_MMXEXT) { - s->dct_quantize = dct_quantize_MMX2; - } else if (mm_flags & AV_CPU_FLAG_MMX && HAVE_MMX) { - s->dct_quantize = dct_quantize_MMX; - } } #endif /* HAVE_INLINE_ASM */ } diff --git a/libavcodec/x86/rv34dsp_init.c b/libavcodec/x86/rv34dsp_init.c index b07ad89f0e..de323e9c3c 100644 --- a/libavcodec/x86/rv34dsp_init.c +++ b/libavcodec/x86/rv34dsp_init.c @@ -43,5 +43,5 @@ av_cold void ff_rv34dsp_init_x86(RV34DSPContext* c, DSPContext *dsp) } if (mm_flags & AV_CPU_FLAG_SSE4) c->rv34_idct_dc_add = ff_rv34_idct_dc_add_sse4; -#endif +#endif /* HAVE_YASM */ } diff --git a/libavcodec/x86/rv40dsp_init.c b/libavcodec/x86/rv40dsp_init.c index 1c193076b0..50aaa24b43 100644 --- a/libavcodec/x86/rv40dsp_init.c +++ b/libavcodec/x86/rv40dsp_init.c @@ -2,20 +2,20 @@ * RV40 decoder motion compensation functions x86-optimised * Copyright (c) 2008 Konstantin Shishkov * - * This file is part of Libav. + * This file is part of FFmpeg. * - * Libav is free software; you can redistribute it and/or + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * Libav is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with Libav; if not, write to the Free Software + * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -30,6 +30,7 @@ #include "libavutil/mem.h" #include "dsputil_mmx.h" +#if HAVE_YASM void ff_put_rv40_chroma_mc8_mmx (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y); void ff_avg_rv40_chroma_mc8_mmx2 (uint8_t *dst, uint8_t *src, @@ -57,8 +58,6 @@ DECLARE_WEIGHT(mmx2) DECLARE_WEIGHT(sse2) DECLARE_WEIGHT(ssse3) -#if HAVE_YASM - /** @{ */ /** * Define one qpel function. @@ -185,7 +184,7 @@ QPEL_FUNCS_SET (OP, 3, 1, OPT) \ QPEL_FUNCS_SET (OP, 3, 2, OPT) /** @} */ -#endif //HAVE_YASM +#endif /* HAVE_YASM */ void ff_rv40dsp_init_x86(RV34DSPContext *c, DSPContext *dsp) { @@ -238,5 +237,5 @@ void ff_rv40dsp_init_x86(RV34DSPContext *c, DSPContext *dsp) QPEL_MC_SET(put_, _ssse3) QPEL_MC_SET(avg_, _ssse3) } -#endif +#endif /* HAVE_YASM */ } diff --git a/libavcodec/x86/vc1dsp_mmx.c b/libavcodec/x86/vc1dsp_mmx.c index 454be97f36..66251d0b15 100644 --- a/libavcodec/x86/vc1dsp_mmx.c +++ b/libavcodec/x86/vc1dsp_mmx.c @@ -717,8 +717,7 @@ static void vc1_h_loop_filter16_sse4(uint8_t *src, int stride, int pq) ff_vc1_h_loop_filter8_sse4(src, stride, pq); ff_vc1_h_loop_filter8_sse4(src+8*stride, stride, pq); } - -#endif +#endif /* HAVE_YASM */ void ff_put_vc1_chroma_mc8_mmx_nornd (uint8_t *dst, uint8_t *src, int stride, int h, int x, int y); @@ -828,5 +827,5 @@ void ff_vc1dsp_init_mmx(VC1DSPContext *dsp) dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_sse4; dsp->vc1_h_loop_filter16 = vc1_h_loop_filter16_sse4; } -#endif +#endif /* HAVE_YASM */ } diff --git a/libavcodec/x86/vp8dsp_init.c b/libavcodec/x86/vp8dsp_init.c index a7e351ad9a..a9f2740f76 100644 --- a/libavcodec/x86/vp8dsp_init.c +++ b/libavcodec/x86/vp8dsp_init.c @@ -289,7 +289,7 @@ DECLARE_LOOP_FILTER(sse2) DECLARE_LOOP_FILTER(ssse3) DECLARE_LOOP_FILTER(sse4) -#endif +#endif /* HAVE_YASM */ #define VP8_LUMA_MC_FUNC(IDX, SIZE, OPT) \ c->put_vp8_epel_pixels_tab[IDX][0][2] = ff_put_vp8_epel ## SIZE ## _h6_ ## OPT; \ @@ -446,5 +446,5 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext* c) c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_sse4; #endif } -#endif +#endif /* HAVE_YASM */ } diff --git a/libavfilter/x86/yadif.c b/libavfilter/x86/yadif.c index 4fb101c691..07790d9c3e 100644 --- a/libavfilter/x86/yadif.c +++ b/libavfilter/x86/yadif.c @@ -31,7 +31,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pb_1) = {0x0101010101010101ULL, 0x010101010 DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 0x0001000100010001ULL}; #if HAVE_SSSE3 -#define COMPILE_TEMPLATE_SSE 1 +#define COMPILE_TEMPLATE_SSE2 1 #define COMPILE_TEMPLATE_SSSE3 1 #undef RENAME #define RENAME(a) a ## _ssse3 @@ -43,7 +43,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 0x000100010 #undef RENAME #define RENAME(a) a ## _sse2 #include "yadif_template.c" -#undef COMPILE_TEMPLATE_SSE +#undef COMPILE_TEMPLATE_SSE2 #endif #if HAVE_MMXEXT diff --git a/libavfilter/x86/yadif_template.c b/libavfilter/x86/yadif_template.c index e2d450e288..674c088471 100644 --- a/libavfilter/x86/yadif_template.c +++ b/libavfilter/x86/yadif_template.c @@ -18,7 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifdef COMPILE_TEMPLATE_SSE +#ifdef COMPILE_TEMPLATE_SSE2 #define MM "%%xmm" #define MOV "movq" #define MOVQ "movdqa" diff --git a/libavresample/x86/audio_mix_init.c b/libavresample/x86/audio_mix_init.c index de4c148170..1b472afc2f 100644 --- a/libavresample/x86/audio_mix_init.c +++ b/libavresample/x86/audio_mix_init.c @@ -210,5 +210,5 @@ av_cold void ff_audio_mix_init_x86(AudioMix *am) SET_MIX_3_8_TO_1_2(6) SET_MIX_3_8_TO_1_2(7) SET_MIX_3_8_TO_1_2(8) -#endif +#endif /* HAVE_YASM */ } diff --git a/libavutil/x86/cpu.c b/libavutil/x86/cpu.c index 65fa8d5366..994e30dfe1 100644 --- a/libavutil/x86/cpu.c +++ b/libavutil/x86/cpu.c @@ -144,8 +144,8 @@ int ff_get_cpu_flags_x86(void) if ((eax & 0x6) == 0x6) rval |= AV_CPU_FLAG_AVX; } -#endif -#endif +#endif /* HAVE_AVX */ +#endif /* HAVE_SSE */ } cpuid(0x80000000, max_ext_level, ebx, ecx, edx); diff --git a/libswscale/x86/swscale.c b/libswscale/x86/swscale.c index b2e06e3b47..3d17c328c7 100644 --- a/libswscale/x86/swscale.c +++ b/libswscale/x86/swscale.c @@ -474,7 +474,7 @@ switch(c->dstBpc){ \ if (cpu_flags & AV_CPU_FLAG_MMXEXT) { ASSIGN_VSCALEX_FUNC(c->yuv2planeX, mmx2, , 1); } -#endif +#endif /* ARCH_X86_32 */ #define ASSIGN_SSE_SCALE_FUNC(hscalefn, filtersize, opt1, opt2) \ switch (filtersize) { \ case 4: ASSIGN_SCALE_FUNC2(hscalefn, 4, opt1, opt2); break; \ diff --git a/tests/fate/voice.mak b/tests/fate/voice.mak index d24ec0f9a2..6d80b7ff42 100644 --- a/tests/fate/voice.mak +++ b/tests/fate/voice.mak @@ -27,6 +27,12 @@ fate-g723_1-dec-5: CMD = framecrc -postfilter 1 -i $(SAMPLES)/g723_1/pathd63p.tc FATE_G723_1 += fate-g723_1-dec-6 fate-g723_1-dec-6: CMD = framecrc -postfilter 1 -i $(SAMPLES)/g723_1/tamed63p.tco +FATE_G723_1 += fate-g723_1-dec-7 +fate-g723_1-dec-7: CMD = framecrc -postfilter 1 -i $(SAMPLES)/g723_1/dtx63b.tco + +FATE_G723_1 += fate-g723_1-dec-8 +fate-g723_1-dec-8: CMD = framecrc -postfilter 1 -i $(SAMPLES)/g723_1/dtx63e.tco + FATE_SAMPLES_AVCONV += $(FATE_G723_1) fate-g723_1: $(FATE_G723_1) diff --git a/tests/ref/fate/g723_1-dec-7 b/tests/ref/fate/g723_1-dec-7 new file mode 100644 index 0000000000..cc301873cb --- /dev/null +++ b/tests/ref/fate/g723_1-dec-7 @@ -0,0 +1,12 @@ +#tb 0: 1/8000 +0, 0, 0, 240, 480, 0x35e4a1fd +0, 240, 240, 240, 480, 0x2f7bdd60 +0, 480, 480, 240, 480, 0x0407e499 +0, 720, 720, 240, 480, 0x5f5ef209 +0, 960, 960, 240, 480, 0xe936e8d1 +0, 1200, 1200, 240, 480, 0x0896ddba +0, 1440, 1440, 240, 480, 0xa885ea94 +0, 1680, 1680, 240, 480, 0x40bff3d0 +0, 1920, 1920, 240, 480, 0xe05ce4c3 +0, 2160, 2160, 240, 480, 0x80c4f790 +0, 2400, 2400, 240, 480, 0x65d5e8f9 diff --git a/tests/ref/fate/g723_1-dec-8 b/tests/ref/fate/g723_1-dec-8 new file mode 100644 index 0000000000..fc4d9f3977 --- /dev/null +++ b/tests/ref/fate/g723_1-dec-8 @@ -0,0 +1,121 @@ +#tb 0: 1/8000 +0, 0, 0, 240, 480, 0x17930e0f +0, 240, 240, 240, 480, 0x7c7f4247 +0, 480, 480, 240, 480, 0xbf3489e5 +0, 720, 720, 240, 480, 0x24319fc9 +0, 960, 960, 240, 480, 0xb327eec0 +0, 1200, 1200, 240, 480, 0xc2ddcbca +0, 1440, 1440, 240, 480, 0xeebad740 +0, 1680, 1680, 240, 480, 0x77fcb933 +0, 1920, 1920, 240, 480, 0x9677c5b7 +0, 2160, 2160, 240, 480, 0xb49dcb9e +0, 2400, 2400, 240, 480, 0x0e78d7e6 +0, 2640, 2640, 240, 480, 0xf752dc3e +0, 2880, 2880, 240, 480, 0xc95af091 +0, 3120, 3120, 240, 480, 0xa25de399 +0, 3360, 3360, 240, 480, 0x34e7e0da +0, 3600, 3600, 240, 480, 0x6c84e3f4 +0, 3840, 3840, 240, 480, 0x2c7dda20 +0, 4080, 4080, 240, 480, 0x00a5f112 +0, 4320, 4320, 240, 480, 0x943ddd89 +0, 4560, 4560, 240, 480, 0x4ad4ebac +0, 4800, 4800, 240, 480, 0xa4ff0aa8 +0, 5040, 5040, 240, 480, 0xc0f805f2 +0, 5280, 5280, 240, 480, 0x859ce987 +0, 5520, 5520, 240, 480, 0x9ebcd0de +0, 5760, 5760, 240, 480, 0x3de2db0b +0, 6000, 6000, 240, 480, 0x0affea9c +0, 6240, 6240, 240, 480, 0xcb1bf81e +0, 6480, 6480, 240, 480, 0x8a72d71d +0, 6720, 6720, 240, 480, 0x583cd5cd +0, 6960, 6960, 240, 480, 0x4be7dc7b +0, 7200, 7200, 240, 480, 0xb08108c0 +0, 7440, 7440, 240, 480, 0xd0b3ed59 +0, 7680, 7680, 240, 480, 0x7d33f822 +0, 7920, 7920, 240, 480, 0x199c0111 +0, 8160, 8160, 240, 480, 0x7d29f2a8 +0, 8400, 8400, 240, 480, 0x424dec5e +0, 8640, 8640, 240, 480, 0x946cf258 +0, 8880, 8880, 240, 480, 0xd429da7a +0, 9120, 9120, 240, 480, 0x0f11df46 +0, 9360, 9360, 240, 480, 0xf4dce502 +0, 9600, 9600, 240, 480, 0x01c1de78 +0, 9840, 9840, 240, 480, 0xd1d3da59 +0, 10080, 10080, 240, 480, 0x5822f3ec +0, 10320, 10320, 240, 480, 0xadd5fe67 +0, 10560, 10560, 240, 480, 0xdcf5f2c3 +0, 10800, 10800, 240, 480, 0x5176e39b +0, 11040, 11040, 240, 480, 0xf947e0b1 +0, 11280, 11280, 240, 480, 0x33b1eb36 +0, 11520, 11520, 240, 480, 0x57bce9bd +0, 11760, 11760, 240, 480, 0x806eec1f +0, 12000, 12000, 240, 480, 0x0a60f94a +0, 12240, 12240, 240, 480, 0x9eddf27d +0, 12480, 12480, 240, 480, 0x3d28ef2f +0, 12720, 12720, 240, 480, 0x52f0e562 +0, 12960, 12960, 240, 480, 0xf2d6c8a0 +0, 13200, 13200, 240, 480, 0xfa0df4a1 +0, 13440, 13440, 240, 480, 0x9cccfda9 +0, 13680, 13680, 240, 480, 0xa7c1e528 +0, 13920, 13920, 240, 480, 0xe130e8f9 +0, 14160, 14160, 240, 480, 0x80f6eabe +0, 14400, 14400, 240, 480, 0x9bbb027e +0, 14640, 14640, 240, 480, 0x33cdea7f +0, 14880, 14880, 240, 480, 0x84d8e761 +0, 15120, 15120, 240, 480, 0xb99ce457 +0, 15360, 15360, 240, 480, 0x5dc1e324 +0, 15600, 15600, 240, 480, 0xc914e6c3 +0, 15840, 15840, 240, 480, 0x8e77f5c2 +0, 16080, 16080, 240, 480, 0x3997034d +0, 16320, 16320, 240, 480, 0x820cfd49 +0, 16560, 16560, 240, 480, 0x8ad5f24c +0, 16800, 16800, 240, 480, 0xe21be71c +0, 17040, 17040, 240, 480, 0x516ae8c8 +0, 17280, 17280, 240, 480, 0x595bdc3d +0, 17520, 17520, 240, 480, 0x8a4bee79 +0, 17760, 17760, 240, 480, 0x307fed64 +0, 18000, 18000, 240, 480, 0xe71cf219 +0, 18240, 18240, 240, 480, 0xdb0be1a1 +0, 18480, 18480, 240, 480, 0x7947dfbd +0, 18720, 18720, 240, 480, 0x5d90fbf0 +0, 18960, 18960, 240, 480, 0xa449fc55 +0, 19200, 19200, 240, 480, 0x45b2f979 +0, 19440, 19440, 240, 480, 0x2b2be378 +0, 19680, 19680, 240, 480, 0x2d2edf42 +0, 19920, 19920, 240, 480, 0x568ee04f +0, 20160, 20160, 240, 480, 0x66f0debe +0, 20400, 20400, 240, 480, 0xc943eab7 +0, 20640, 20640, 240, 480, 0xc9ade3c9 +0, 20880, 20880, 240, 480, 0x6971f92d +0, 21120, 21120, 240, 480, 0x48d0ecbc +0, 21360, 21360, 240, 480, 0xf641dc98 +0, 21600, 21600, 240, 480, 0xbb18e167 +0, 21840, 21840, 240, 480, 0x72ce0968 +0, 22080, 22080, 240, 480, 0x15bee6f6 +0, 22320, 22320, 240, 480, 0x93d5e91f +0, 22560, 22560, 240, 480, 0x7aee010b +0, 22800, 22800, 240, 480, 0x9e82dc87 +0, 23040, 23040, 240, 480, 0x4ee6f547 +0, 23280, 23280, 240, 480, 0x3072d102 +0, 23520, 23520, 240, 480, 0x74d4fb04 +0, 23760, 23760, 240, 480, 0xc670f958 +0, 24000, 24000, 240, 480, 0x3965c41f +0, 24240, 24240, 240, 480, 0x6a2de869 +0, 24480, 24480, 240, 480, 0xa757f44b +0, 24720, 24720, 240, 480, 0x94a5168c +0, 24960, 24960, 240, 480, 0xef0f0c28 +0, 25200, 25200, 240, 480, 0x3770ebb3 +0, 25440, 25440, 240, 480, 0x4343de6f +0, 25680, 25680, 240, 480, 0x3ec8d816 +0, 25920, 25920, 240, 480, 0x1661e3d3 +0, 26160, 26160, 240, 480, 0x077cd9fd +0, 26400, 26400, 240, 480, 0xb5ece07e +0, 26640, 26640, 240, 480, 0xf303e151 +0, 26880, 26880, 240, 480, 0x95e4d019 +0, 27120, 27120, 240, 480, 0x4bd0ddc0 +0, 27360, 27360, 240, 480, 0x6cebd341 +0, 27600, 27600, 240, 480, 0xea3fea9e +0, 27840, 27840, 240, 480, 0x5ad30c3f +0, 28080, 28080, 240, 480, 0x218c02a5 +0, 28320, 28320, 240, 480, 0x662decd0 +0, 28560, 28560, 240, 480, 0x6865e2f2 |