Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 26 Apr 2012 20:24:58 +0000 (22:24 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 26 Apr 2012 20:24:58 +0000 (22:24 +0200)
* qatar/master:
  dsputil: fix invalid array indexing
  configure: add libavresample to rpath
  build: icc: silence some warnings
  fft-test: add option to set cpuflag mask
  cpu: recognise only cpu flag names pertinent to the architecture
  avutil: add av_parse_cpu_flags() function
  vp8: armv6: fix non-armv6t2 build
  vp8: armv6 optimisations
  vp8: arm: separate ARMv6 functions from NEON
  ARM: add some compatibility macros
  mov: support eac3 audio
  avf: fix faulty check in has_duration

Conflicts:
configure
doc/APIchanges
ffmpeg.c
libavcodec/arm/Makefile
libavcodec/arm/asm.S
libavcodec/arm/vp8dsp_armv6.S
libavcodec/arm/vp8dsp_init_arm.c
libavutil/avutil.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
configure
doc/APIchanges
libavcodec/arm/asm.S
libavcodec/arm/vp8dsp_init_arm.c
libavcodec/dsputil.c
libavcodec/fft-test.c
libavformat/isom.c
libavformat/utils.c
libavutil/avutil.h
libavutil/cpu.c
libavutil/cpu.h

diff --cc configure
+++ b/configure
@@@ -3358,7 -3084,7 +3358,7 @@@ enabled extra_warnings && check_cflags 
  
  # add some linker flags
  check_ldflags -Wl,--warn-common
- check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
 -check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
++check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
  test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
  
  enabled xmm_clobber_test &&                             \
diff --cc doc/APIchanges
@@@ -14,15 -13,9 +14,18 @@@ libavutil:   2011-04-1
  
  API changes, most recent first:
  
 +2012-04-20 - xxxxxxx - lavfi 2.70.100
 +  Add avfilter_unref_bufferp() to avfilter.h.
 +
 +2012-04-12 - xxxxxxx - lavfi 2.68.100
 +  Install libavfilter/asrc_abuffer.h public header.
 +
 +2012-03-26 - a67d9cf - lavfi 2.66.100
 +  Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions.
 +
+ 2012-04-25 - xxxxxxx - lavu 51.29.0 - cpu.h
+   Add av_parse_cpu_flags()
  2012-xx-xx - xxxxxxx - lavr 0.0.0
    Add libavresample audio conversion library
  
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -249,9 -240,9 +249,10 @@@ const AVCodecTag ff_codec_movaudio_tags
      { CODEC_ID_DTS,             MKTAG('d', 't', 's', 'h') }, /* DTS-HD audio formats */
      { CODEC_ID_DTS,             MKTAG('d', 't', 's', 'l') }, /* DTS-HD Lossless formats */
      { CODEC_ID_DTS,             MKTAG('D', 'T', 'S', ' ') }, /* non-standard */
+     { CODEC_ID_EAC3,            MKTAG('e', 'c', '-', '3') }, /* ETSI TS 102 366 Annex F (only valid in ISOBMFF) */
      { CODEC_ID_DVAUDIO,         MKTAG('v', 'd', 'v', 'a') },
      { CODEC_ID_DVAUDIO,         MKTAG('d', 'v', 'c', 'a') },
 +    { CODEC_ID_EAC3,            MKTAG('e', 'c', '-', '3') }, /* ETSI TS 102 366 Annex F */
      { CODEC_ID_GSM,             MKTAG('a', 'g', 's', 'm') },
      { CODEC_ID_MACE3,           MKTAG('M', 'A', 'C', '3') },
      { CODEC_ID_MACE6,           MKTAG('M', 'A', 'C', '6') },
Simple merge
   */
  
  #define LIBAVUTIL_VERSION_MAJOR 51
- #define LIBAVUTIL_VERSION_MINOR 47
 -#define LIBAVUTIL_VERSION_MINOR 29
 -#define LIBAVUTIL_VERSION_MICRO  0
++#define LIBAVUTIL_VERSION_MINOR 48
 +#define LIBAVUTIL_VERSION_MICRO 100
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \
diff --cc libavutil/cpu.c
  
  #include "cpu.h"
  #include "config.h"
+ #include "opt.h"
  
 -static int cpuflags_mask = -1, checked;
 +static int flags, checked;
 +
 +void av_force_cpu_flags(int arg){
 +    flags   = arg;
 +    checked = arg != -1;
 +}
  
  int av_get_cpu_flags(void)
  {
  
  void av_set_cpu_flags_mask(int mask)
  {
 -    cpuflags_mask = mask;
      checked       = 0;
 +    flags         = av_get_cpu_flags() & mask;
 +    checked       = 1;
  }
  
+ int av_parse_cpu_flags(const char *s)
+ {
+ #define CPUFLAG_MMX2     (AV_CPU_FLAG_MMX      | AV_CPU_FLAG_MMX2)
+ #define CPUFLAG_3DNOW    (AV_CPU_FLAG_3DNOW    | AV_CPU_FLAG_MMX)
+ #define CPUFLAG_3DNOWEXT (AV_CPU_FLAG_3DNOWEXT | CPUFLAG_3DNOW)
+ #define CPUFLAG_SSE      (AV_CPU_FLAG_SSE      | CPUFLAG_MMX2)
+ #define CPUFLAG_SSE2     (AV_CPU_FLAG_SSE2     | CPUFLAG_SSE)
+ #define CPUFLAG_SSE2SLOW (AV_CPU_FLAG_SSE2SLOW | CPUFLAG_SSE2)
+ #define CPUFLAG_SSE3     (AV_CPU_FLAG_SSE3     | CPUFLAG_SSE2)
+ #define CPUFLAG_SSE3SLOW (AV_CPU_FLAG_SSE3SLOW | CPUFLAG_SSE3)
+ #define CPUFLAG_SSSE3    (AV_CPU_FLAG_SSSE3    | CPUFLAG_SSE3)
+ #define CPUFLAG_SSE4     (AV_CPU_FLAG_SSE4     | CPUFLAG_SSSE3)
+ #define CPUFLAG_SSE42    (AV_CPU_FLAG_SSE42    | CPUFLAG_SSE4)
+ #define CPUFLAG_AVX      (AV_CPU_FLAG_AVX      | CPUFLAG_SSE42)
+ #define CPUFLAG_XOP      (AV_CPU_FLAG_XOP      | CPUFLAG_AVX)
+ #define CPUFLAG_FMA4     (AV_CPU_FLAG_FMA4     | CPUFLAG_AVX)
+     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, { CPUFLAG_MMX2         },    .unit = "flags" },
+         { "sse"     , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE          },    .unit = "flags" },
+         { "sse2"    , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE2         },    .unit = "flags" },
+         { "sse2slow", NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE2SLOW     },    .unit = "flags" },
+         { "sse3"    , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE3         },    .unit = "flags" },
+         { "sse3slow", NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE3SLOW     },    .unit = "flags" },
+         { "ssse3"   , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSSE3        },    .unit = "flags" },
+         { "atom"    , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ATOM     },    .unit = "flags" },
+         { "sse4.1"  , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE4         },    .unit = "flags" },
+         { "sse4.2"  , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_SSE42        },    .unit = "flags" },
+         { "avx"     , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_AVX          },    .unit = "flags" },
+         { "xop"     , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_XOP          },    .unit = "flags" },
+         { "fma4"    , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_FMA4         },    .unit = "flags" },
+         { "3dnow"   , NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_3DNOW        },    .unit = "flags" },
+         { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { CPUFLAG_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,
+     };
+     int flags = 0, ret;
+     const AVClass *pclass = &class;
+     if ((ret = av_opt_eval_flags(&pclass, &cpuflags_opts[0], s, &flags)) < 0)
+         return ret;
+     return flags & INT_MAX;
+ }
  #ifdef TEST
  
  #undef printf
diff --cc libavutil/cpu.h
@@@ -70,8 -60,15 +70,15 @@@ void av_force_cpu_flags(int flags)
   *
   * @warning this function is not thread safe.
   */
 -void av_set_cpu_flags_mask(int mask);
 +attribute_deprecated void av_set_cpu_flags_mask(int mask);
  
+ /**
+  * Parse CPU flags from a string.
+  *
+  * @return a combination of AV_CPU_* flags, negative on error.
+  */
+ int av_parse_cpu_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);