Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 18 Jul 2012 20:27:46 +0000 (22:27 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 18 Jul 2012 20:34:48 +0000 (22:34 +0200)
* qatar/master:
  ppc: fix build with altivec disabled
  vp3: move idct and loop filter pointers to new vp3dsp context
  build: add CONFIG_VP3DSP, reduce repetition in OBJS lists
  tscc2: do not add/subtract 128 bias during DCT
  tscc2: fix typo in DCT
  configure: clarify external library section of help output
  configure: mark libfdk-aac as nonfree
  configure: cosmetics: drop some unnecessary backslashes
  os_support: K&R formatting cosmetics

Conflicts:
configure
libavcodec/vp3.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
21 files changed:
1  2 
configure
libavcodec/Makefile
libavcodec/arm/dsputil_init_neon.c
libavcodec/arm/vp3dsp_init_arm.c
libavcodec/arm/vp3dsp_neon.S
libavcodec/dsputil.c
libavcodec/dsputil.h
libavcodec/ppc/dsputil_altivec.h
libavcodec/ppc/dsputil_ppc.c
libavcodec/ppc/vp3dsp_altivec.c
libavcodec/tscc2.c
libavcodec/vp3.c
libavcodec/vp3dsp.c
libavcodec/vp3dsp.h
libavcodec/vp56.c
libavcodec/vp56.h
libavcodec/x86/Makefile
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/vp3dsp.asm
libavcodec/x86/vp3dsp_init.c
libavformat/os_support.c

diff --cc configure
+++ b/configure
@@@ -177,33 -169,25 +177,33 @@@ External library support
    --enable-libcdio         enable audio CD grabbing with libcdio
    --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                             and libraw1394 [no]
-   --enable-libfaac         enable FAAC support via libfaac [no]
-   --enable-libfdk-aac      enable AAC support via libfdk-aac [no]
+   --enable-libfaac         enable AAC encoding via libfaac [no]
+   --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
    --enable-libfreetype     enable libfreetype [no]
-   --enable-libgsm          enable GSM support via libgsm [no]
+   --enable-libgsm          enable GSM de/encoding via libgsm [no]
 +  --enable-libiec61883     enable iec61883 via libiec61883 [no]
    --enable-libilbc         enable iLBC de/encoding via libilbc [no]
 +  --enable-libmodplug      enable ModPlug via libmodplug [no]
    --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
 +  --enable-libnut          enable NUT (de)muxing via libnut,
 +                           native (de)muxer exists [no]
    --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
    --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
    --enable-libopencv       enable video filtering via libopencv [no]
    --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
    --enable-libpulse        enable Pulseaudio input via libpulse [no]
    --enable-librtmp         enable RTMP[E] support via librtmp [no]
-   --enable-libschroedinger enable Dirac support via libschroedinger [no]
-   --enable-libspeex        enable Speex support via libspeex [no]
+   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
+   --enable-libspeex        enable Speex de/encoding via libspeex [no]
 +  --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
    --enable-libtheora       enable Theora encoding via libtheora [no]
 +  --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
 +  --enable-libv4l2         enable libv4l2/v4l-utils [no]
    --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
    --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
 -  --enable-libvorbis       enable Vorbis encoding via libvorbis [no]
 +  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
 +                           native implementation exists [no]
-   --enable-libvpx          enable VP8 support via libvpx [no]
+   --enable-libvpx          enable VP8 de/encoding via libvpx [no]
    --enable-libx264         enable H.264 encoding via x264 [no]
    --enable-libxavs         enable AVS encoding via xavs [no]
    --enable-libxvid         enable Xvid encoding via xvidcore,
@@@ -2931,10 -2627,9 +2934,10 @@@ die_license_disabled gpl libxav
  die_license_disabled gpl libxvid
  die_license_disabled gpl x11grab
  
 +die_license_disabled nonfree libaacplus
  die_license_disabled nonfree libfaac
- enabled gpl && die_license_disabled_gpl nonfree openssl
 -die_license_disabled nonfree libfdk_aac
 -die_license_disabled nonfree openssl
 +enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
++enabled gpl && die_license_disabled_gpl nonfree openssl
  
  die_license_disabled version3 libopencore_amrnb
  die_license_disabled version3 libopencore_amrwb
@@@ -3482,10 -3102,10 +3485,10 @@@ enabled extra_warnings && check_cflags 
  
  # add some linker flags
  check_ldflags -Wl,--warn-common
 -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 &&                             \
+ enabled xmm_clobber_test &&
      check_ldflags -Wl,--wrap,avcodec_open2              \
                    -Wl,--wrap,avcodec_decode_audio4      \
                    -Wl,--wrap,avcodec_decode_video2      \
Simple merge
Simple merge
index 0000000,ea99bfd..90fc34b
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,45 +1,45 @@@
 - * This file is part of Libav.
+ /*
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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 FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #include <stdint.h>
+ #include "libavutil/attributes.h"
+ #include "libavutil/cpu.h"
+ #include "libavutil/arm/cpu.h"
+ #include "libavcodec/vp3dsp.h"
+ void ff_vp3_idct_put_neon(uint8_t *dest, int line_size, DCTELEM *data);
+ void ff_vp3_idct_add_neon(uint8_t *dest, int line_size, DCTELEM *data);
+ void ff_vp3_idct_dc_add_neon(uint8_t *dest, int line_size, const DCTELEM *data);
+ void ff_vp3_v_loop_filter_neon(uint8_t *, int, int *);
+ void ff_vp3_h_loop_filter_neon(uint8_t *, int, int *);
+ av_cold void ff_vp3dsp_init_arm(VP3DSPContext *c, int flags)
+ {
+     int cpu_flags = av_get_cpu_flags();
+     if (have_neon(cpu_flags)) {
+         c->idct_put      = ff_vp3_idct_put_neon;
+         c->idct_add      = ff_vp3_idct_add_neon;
+         c->idct_dc_add   = ff_vp3_idct_dc_add_neon;
+         c->v_loop_filter = ff_vp3_v_loop_filter_neon;
+         c->h_loop_filter = ff_vp3_h_loop_filter_neon;
+         c->idct_perm     = FF_TRANSPOSE_IDCT_PERM;
+     }
+ }
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1573,16 -1575,20 +1575,14 @@@ static void render_slice(Vp3DecodeConte
                      /* invert DCT and place (or add) in final output */
  
                      if (s->all_fragments[i].coding_method == MODE_INTRA) {
 -                        int index;
 -                        index = vp3_dequant(s, s->all_fragments + i, plane, 0, block);
 -                        if (index > 63)
 -                            continue;
 +                        vp3_dequant(s, s->all_fragments + i, plane, 0, block);
-                         if(s->avctx->idct_algo!=FF_IDCT_VP3)
-                             block[0] += 128<<3;
-                         s->dsp.idct_put(
+                         s->vp3dsp.idct_put(
                              output_plane + first_pixel,
                              stride,
                              block);
                      } else {
 -                        int index = vp3_dequant(s, s->all_fragments + i, plane, 1, block);
 -                        if (index > 63)
 -                            continue;
 -                        if (index > 0) {
 +                        if (vp3_dequant(s, s->all_fragments + i, plane, 1, block)) {
-                         s->dsp.idct_add(
+                         s->vp3dsp.idct_add(
                              output_plane + first_pixel,
                              stride,
                              block);
@@@ -1667,13 -1673,13 +1667,13 @@@ static av_cold int vp3_decode_init(AVCo
      s->avctx = avctx;
      s->width = FFALIGN(avctx->width, 16);
      s->height = FFALIGN(avctx->height, 16);
 -    if (avctx->pix_fmt == PIX_FMT_NONE)
 +    if (avctx->codec_id != CODEC_ID_THEORA)
          avctx->pix_fmt = PIX_FMT_YUV420P;
      avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
-     if(avctx->idct_algo==FF_IDCT_AUTO)
-         avctx->idct_algo=FF_IDCT_VP3;
      ff_dsputil_init(&s->dsp, avctx);
+     ff_vp3dsp_init(&s->vp3dsp, avctx->flags);
  
+     ff_init_scantable_permutation(s->dsp.idct_permutation, s->vp3dsp.idct_perm);
      ff_init_scantable(s->dsp.idct_permutation, &s->scantable, ff_zigzag_direct);
  
      /* initialize to an impossible value which will force a recalculation
Simple merge
index 0000000,3781bbf..a14dec1
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,40 +1,40 @@@
 - * This file is part of Libav.
+ /*
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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 FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #ifndef AVCODEC_VP3DSP_H
+ #define AVCODEC_VP3DSP_H
+ #include <stdint.h>
+ #include "dsputil.h"
+ typedef struct VP3DSPContext {
+     void (*idct_put)(uint8_t *dest, int line_size, DCTELEM *block);
+     void (*idct_add)(uint8_t *dest, int line_size, DCTELEM *block);
+     void (*idct_dc_add)(uint8_t *dest, int line_size, const DCTELEM *block);
+     void (*v_loop_filter)(uint8_t *src, int stride, int *bounding_values);
+     void (*h_loop_filter)(uint8_t *src, int stride, int *bounding_values);
+     int idct_perm;
+ } VP3DSPContext;
+ void ff_vp3dsp_init(VP3DSPContext *c, int flags);
+ void ff_vp3dsp_init_arm(VP3DSPContext *c, int flags);
+ void ff_vp3dsp_init_ppc(VP3DSPContext *c, int flags);
+ void ff_vp3dsp_init_x86(VP3DSPContext *c, int flags);
+ #endif /* AVCODEC_VP3DSP_H */
@@@ -666,16 -666,14 +666,16 @@@ av_cold void ff_vp56_init(AVCodecContex
      s->avctx = avctx;
      avctx->pix_fmt = has_alpha ? PIX_FMT_YUVA420P : PIX_FMT_YUV420P;
  
-     if (avctx->idct_algo == FF_IDCT_AUTO)
-         avctx->idct_algo = FF_IDCT_VP3;
      ff_dsputil_init(&s->dsp, avctx);
+     ff_vp3dsp_init(&s->vp3dsp, avctx->flags);
      ff_vp56dsp_init(&s->vp56dsp, avctx->codec->id);
+     ff_init_scantable_permutation(s->dsp.idct_permutation, s->vp3dsp.idct_perm);
      ff_init_scantable(s->dsp.idct_permutation, &s->scantable,ff_zigzag_direct);
  
 -    for (i=0; i<4; i++)
 +    for (i=0; i<4; i++) {
          s->framep[i] = &s->frames[i];
 +        avcodec_get_frame_defaults(&s->frames[i]);
 +    }
      s->framep[VP56_FRAME_UNUSED] = s->framep[VP56_FRAME_GOLDEN];
      s->framep[VP56_FRAME_UNUSED2] = s->framep[VP56_FRAME_GOLDEN2];
      s->edge_emu_buffer_alloc = NULL;
Simple merge
@@@ -65,12 -59,9 +66,10 @@@ YASM-OBJS-$(CONFIG_PRORES_LGPL_DECODER
  YASM-OBJS-$(CONFIG_RV30_DECODER)       += x86/rv34dsp.o
  YASM-OBJS-$(CONFIG_RV40_DECODER)       += x86/rv34dsp.o                 \
                                            x86/rv40dsp.o
 +YASM-OBJS-$(CONFIG_V210_DECODER)       += x86/v210.o
  YASM-OBJS-$(CONFIG_VC1_DECODER)        += x86/vc1dsp_yasm.o
- YASM-OBJS-$(CONFIG_VP3_DECODER)        += x86/vp3dsp.o
- YASM-OBJS-$(CONFIG_VP5_DECODER)        += x86/vp3dsp.o
- YASM-OBJS-$(CONFIG_VP6_DECODER)        += x86/vp3dsp.o                  \
-                                           x86/vp56dsp.o
+ YASM-OBJS-$(CONFIG_VP3DSP)             += x86/vp3dsp.o
+ YASM-OBJS-$(CONFIG_VP6_DECODER)        += x86/vp56dsp.o
  YASM-OBJS-$(CONFIG_VP8_DECODER)        += x86/vp8dsp.o
  
  YASM-OBJS                              += x86/dsputil_yasm.o            \
Simple merge
Simple merge
index 0000000,cd8e206..3ae2a90
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,65 +1,65 @@@
 - * This file is part of Libav.
+ /*
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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 FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #include <stdint.h>
+ #include "libavutil/attributes.h"
+ #include "libavutil/cpu.h"
+ #include "libavcodec/avcodec.h"
+ #include "libavcodec/vp3dsp.h"
+ #include "config.h"
+ void ff_vp3_idct_put_mmx(uint8_t *dest, int line_size, DCTELEM *block);
+ void ff_vp3_idct_add_mmx(uint8_t *dest, int line_size, DCTELEM *block);
+ void ff_vp3_idct_put_sse2(uint8_t *dest, int line_size, DCTELEM *block);
+ void ff_vp3_idct_add_sse2(uint8_t *dest, int line_size, DCTELEM *block);
+ void ff_vp3_idct_dc_add_mmx2(uint8_t *dest, int line_size,
+                              const DCTELEM *block);
+ void ff_vp3_v_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
+ void ff_vp3_h_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
+ av_cold void ff_vp3dsp_init_x86(VP3DSPContext *c, int flags)
+ {
+ #if HAVE_YASM
+     int cpuflags = av_get_cpu_flags();
+     if (HAVE_MMX && cpuflags & AV_CPU_FLAG_MMX) {
+         c->idct_put  = ff_vp3_idct_put_mmx;
+         c->idct_add  = ff_vp3_idct_add_mmx;
+         c->idct_perm = FF_PARTTRANS_IDCT_PERM;
+     }
+     if (HAVE_MMX2 && cpuflags & AV_CPU_FLAG_MMX2) {
+         c->idct_dc_add = ff_vp3_idct_dc_add_mmx2;
+         if (!(flags & CODEC_FLAG_BITEXACT)) {
+             c->v_loop_filter = ff_vp3_v_loop_filter_mmx2;
+             c->h_loop_filter = ff_vp3_h_loop_filter_mmx2;
+         }
+     }
+     if (cpuflags & AV_CPU_FLAG_SSE2) {
+         c->idct_put  = ff_vp3_idct_put_sse2;
+         c->idct_add  = ff_vp3_idct_add_sse2;
+         c->idct_perm = FF_TRANSPOSE_IDCT_PERM;
+     }
+ #endif
+ }
Simple merge