You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	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>
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
							
								
								
									
										63
									
								
								cmdutils.c
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								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); | ||||
|   | ||||
							
								
								
									
										44
									
								
								cmdutils.h
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								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 | ||||
|   | ||||
							
								
								
									
										41
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -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" | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										6
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @@ -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) | ||||
|   | ||||
							
								
								
									
										6
									
								
								ffmpeg.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								ffmpeg.h
									
									
									
									
									
								
							| @@ -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; | ||||
|   | ||||
							
								
								
									
										184
									
								
								ffmpeg_opt.c
									
									
									
									
									
								
							
							
						
						
									
										184
									
								
								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(NULL, "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, "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" }, | ||||
|   | ||||
							
								
								
									
										8
									
								
								ffplay.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								ffplay.c
									
									
									
									
									
								
							| @@ -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, }, | ||||
| }; | ||||
|  | ||||
|   | ||||
							
								
								
									
										14
									
								
								ffprobe.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								ffprobe.c
									
									
									
									
									
								
							| @@ -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, }, | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -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 */ | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -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; | ||||
|   | ||||
| @@ -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 */ | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
|   | ||||
| @@ -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, \ | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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 */ | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| { | ||||
|   | ||||
| @@ -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_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) { | ||||
| #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) | ||||
|             s->dct_quantize = dct_quantize_SSSE3; | ||||
| #endif | ||||
|     } | ||||
| #endif /* HAVE_INLINE_ASM */ | ||||
| } | ||||
|   | ||||
| @@ -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 */ | ||||
| } | ||||
|   | ||||
| @@ -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 */ | ||||
| } | ||||
|   | ||||
| @@ -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 */ | ||||
| } | ||||
|   | ||||
| @@ -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 */ | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
| @@ -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 */ | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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; \ | ||||
|   | ||||
| @@ -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) | ||||
|  | ||||
|   | ||||
							
								
								
									
										12
									
								
								tests/ref/fate/g723_1-dec-7
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								tests/ref/fate/g723_1-dec-7
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										121
									
								
								tests/ref/fate/g723_1-dec-8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								tests/ref/fate/g723_1-dec-8
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
		Reference in New Issue
	
	Block a user