You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	cmdutils/avutil: Move cpu caps parse code into av_parse_cpu_caps()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							
								
								
									
										40
									
								
								cmdutils.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								cmdutils.c
									
									
									
									
									
								
							| @@ -547,46 +547,10 @@ int opt_max_alloc(const char *opt, const char *arg) | ||||
|  | ||||
| int opt_cpuflags(const char *opt, const char *arg) | ||||
| { | ||||
|     static const AVOption cpuflags_opts[] = { | ||||
|         { "flags"   , NULL, 0, AV_OPT_TYPE_FLAGS, { 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, | ||||
|         { "altivec" , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ALTIVEC  },    .unit = "flags" }, | ||||
|         { "mmx"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_MMX      },    .unit = "flags" }, | ||||
|         { "mmx2"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_MMX2     },    .unit = "flags" }, | ||||
|         { "sse"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE      },    .unit = "flags" }, | ||||
|         { "sse2"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE2     },    .unit = "flags" }, | ||||
|         { "sse2slow", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE2SLOW },    .unit = "flags" }, | ||||
|         { "sse3"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE3     },    .unit = "flags" }, | ||||
|         { "sse3slow", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE3SLOW },    .unit = "flags" }, | ||||
|         { "ssse3"   , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSSE3    },    .unit = "flags" }, | ||||
|         { "atom"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ATOM     },    .unit = "flags" }, | ||||
|         { "sse4.1"  , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE4     },    .unit = "flags" }, | ||||
|         { "sse4.2"  , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE42    },    .unit = "flags" }, | ||||
|         { "avx"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_AVX      },    .unit = "flags" }, | ||||
|         { "xop"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_XOP      },    .unit = "flags" }, | ||||
|         { "fma4"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_FMA4     },    .unit = "flags" }, | ||||
|         { "3dnow"   , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_3DNOW    },    .unit = "flags" }, | ||||
|         { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_3DNOWEXT },    .unit = "flags" }, | ||||
|  | ||||
|         { "armv5te",  NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV5TE  },    .unit = "flags" }, | ||||
|         { "armv6",    NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6    },    .unit = "flags" }, | ||||
|         { "armv6t2",  NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6T2  },    .unit = "flags" }, | ||||
|         { "vfp",      NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFP      },    .unit = "flags" }, | ||||
|         { "vfpv3",    NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFPV3    },    .unit = "flags" }, | ||||
|         { "neon",     NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_NEON     },    .unit = "flags" }, | ||||
|  | ||||
|         { NULL }, | ||||
|     }; | ||||
|     static const AVClass class = { | ||||
|         .class_name = "cpuflags", | ||||
|         .item_name  = av_default_item_name, | ||||
|         .option     = cpuflags_opts, | ||||
|         .version    = LIBAVUTIL_VERSION_INT, | ||||
|     }; | ||||
|     int flags = av_get_cpu_flags(); | ||||
|     int ret; | ||||
|     const AVClass *pclass = &class; | ||||
|     unsigned flags = av_get_cpu_flags(); | ||||
|  | ||||
|     if ((ret = av_opt_eval_flags(&pclass, &cpuflags_opts[0], arg, &flags)) < 0) | ||||
|     if ((ret = av_parse_cpu_caps(&flags, arg)) < 0) | ||||
|         return ret; | ||||
|  | ||||
|     av_force_cpu_flags(flags); | ||||
|   | ||||
| @@ -153,7 +153,7 @@ | ||||
|  */ | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_MAJOR 51 | ||||
| #define LIBAVUTIL_VERSION_MINOR 48 | ||||
| #define LIBAVUTIL_VERSION_MINOR 49 | ||||
| #define LIBAVUTIL_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
|   | ||||
| @@ -110,6 +110,49 @@ int av_parse_cpu_flags(const char *s) | ||||
|     return flags & INT_MAX; | ||||
| } | ||||
|  | ||||
| int av_parse_cpu_caps(unsigned *flags, const char *s) | ||||
| { | ||||
|         static const AVOption cpuflags_opts[] = { | ||||
|         { "flags"   , NULL, 0, AV_OPT_TYPE_FLAGS, { 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, | ||||
| #if   ARCH_PPC | ||||
|         { "altivec" , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ALTIVEC  },    .unit = "flags" }, | ||||
| #elif ARCH_X86 | ||||
|         { "mmx"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_MMX      },    .unit = "flags" }, | ||||
|         { "mmx2"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_MMX2     },    .unit = "flags" }, | ||||
|         { "sse"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE      },    .unit = "flags" }, | ||||
|         { "sse2"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE2     },    .unit = "flags" }, | ||||
|         { "sse2slow", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE2SLOW },    .unit = "flags" }, | ||||
|         { "sse3"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE3     },    .unit = "flags" }, | ||||
|         { "sse3slow", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE3SLOW },    .unit = "flags" }, | ||||
|         { "ssse3"   , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSSE3    },    .unit = "flags" }, | ||||
|         { "atom"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ATOM     },    .unit = "flags" }, | ||||
|         { "sse4.1"  , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE4     },    .unit = "flags" }, | ||||
|         { "sse4.2"  , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_SSE42    },    .unit = "flags" }, | ||||
|         { "avx"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_AVX      },    .unit = "flags" }, | ||||
|         { "xop"     , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_XOP      },    .unit = "flags" }, | ||||
|         { "fma4"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_FMA4     },    .unit = "flags" }, | ||||
|         { "3dnow"   , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_3DNOW    },    .unit = "flags" }, | ||||
|         { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_3DNOWEXT },    .unit = "flags" }, | ||||
| #elif ARCH_ARM | ||||
|         { "armv5te",  NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV5TE  },    .unit = "flags" }, | ||||
|         { "armv6",    NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6    },    .unit = "flags" }, | ||||
|         { "armv6t2",  NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6T2  },    .unit = "flags" }, | ||||
|         { "vfp",      NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFP      },    .unit = "flags" }, | ||||
|         { "vfpv3",    NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFPV3    },    .unit = "flags" }, | ||||
|         { "neon",     NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_NEON     },    .unit = "flags" }, | ||||
| #endif | ||||
|         { NULL }, | ||||
|     }; | ||||
|     static const AVClass class = { | ||||
|         .class_name = "cpuflags", | ||||
|         .item_name  = av_default_item_name, | ||||
|         .option     = cpuflags_opts, | ||||
|         .version    = LIBAVUTIL_VERSION_INT, | ||||
|     }; | ||||
|     const AVClass *pclass = &class; | ||||
|  | ||||
|     return av_opt_eval_flags(&pclass, &cpuflags_opts[0], s, flags); | ||||
| } | ||||
| #ifdef TEST | ||||
|  | ||||
| #undef printf | ||||
|   | ||||
| @@ -79,6 +79,13 @@ attribute_deprecated void av_set_cpu_flags_mask(int mask); | ||||
|  */ | ||||
| int av_parse_cpu_flags(const char *s); | ||||
|  | ||||
| /** | ||||
|  * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. | ||||
|  * | ||||
|  * @return negative on error. | ||||
|  */ | ||||
| int av_parse_cpu_caps(unsigned *flags, const char *s); | ||||
|  | ||||
| /* The following CPU-specific functions shall not be called directly. */ | ||||
| int ff_get_cpu_flags_arm(void); | ||||
| int ff_get_cpu_flags_ppc(void); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user