Merge commit '0338c396987c82b41d322630ea9712fe5f9561d6'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 8 Nov 2013 16:25:13 +0000 (17:25 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 8 Nov 2013 16:42:56 +0000 (17:42 +0100)
* commit '0338c396987c82b41d322630ea9712fe5f9561d6':
  dsputil: Split off H.263 bits into their own H263DSPContext

Conflicts:
configure
libavcodec/mpegvideo.h
libavcodec/mpegvideo_enc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
15 files changed:
1  2 
configure
libavcodec/Makefile
libavcodec/dsputil.c
libavcodec/dsputil.h
libavcodec/h263.c
libavcodec/h263data.h
libavcodec/h263dec.c
libavcodec/h263dsp.c
libavcodec/h263dsp.h
libavcodec/mpegvideo.h
libavcodec/mpegvideo_enc.c
libavcodec/rv10.c
libavcodec/x86/Makefile
libavcodec/x86/dsputil_init.c
libavcodec/x86/h263dsp_init.c

diff --cc configure
+++ b/configure
@@@ -1807,12 -1595,12 +1808,12 @@@ flv_decoder_select="h263_decoder
  flv_encoder_select="h263_encoder"
  fourxm_decoder_select="dsputil"
  fraps_decoder_select="dsputil huffman"
 -g2m_decoder_deps="zlib"
 -g2m_decoder_select="dsputil"
 +g2m_decoder_select="dsputil zlib"
 +g729_decoder_select="dsputil"
  h261_decoder_select="error_resilience mpegvideo"
  h261_encoder_select="aandcttables mpegvideoenc"
- h263_decoder_select="error_resilience h263_parser mpegvideo"
- h263_encoder_select="aandcttables mpegvideoenc"
+ h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
+ h263_encoder_select="aandcttables h263dsp mpegvideoenc"
  h263i_decoder_select="h263_decoder"
  h263p_encoder_select="h263_encoder"
  h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
@@@ -1876,10 -1666,9 +1877,10 @@@ qcelp_decoder_select="lsp
  qdm2_decoder_select="mdct rdft mpegaudiodsp"
  ra_144_encoder_select="audio_frame_queue lpc"
  ralf_decoder_select="golomb"
- rv10_decoder_select="error_resilience h263_decoder"
 +rtjpeg_decoder_select="dsputil"
+ rv10_decoder_select="error_resilience h263_decoder h263dsp"
  rv10_encoder_select="h263_encoder"
- rv20_decoder_select="error_resilience h263_decoder"
+ rv20_decoder_select="error_resilience h263_decoder h263dsp"
  rv20_encoder_select="h263_encoder"
  rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
  rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
@@@ -44,12 -37,11 +44,13 @@@ OBJS-$(CONFIG_DSPUTIL)                 
                                            simple_idct.o jrevdct.o
  OBJS-$(CONFIG_ENCODERS)                += faandct.o jfdctfst.o jfdctint.o
  OBJS-$(CONFIG_ERROR_RESILIENCE)        += error_resilience.o
 +OBJS-$(CONFIG_EXIF)                    += exif.o tiff_common.o
  FFT-OBJS-$(CONFIG_HARDCODED_TABLES)    += cos_tables.o cos_fixed_tables.o
  OBJS-$(CONFIG_FFT)                     += avfft.o fft_fixed.o fft_float.o \
 +                                          fft_fixed_32.o fft_init_table.o \
                                            $(FFT-OBJS-yes)
  OBJS-$(CONFIG_GOLOMB)                  += golomb.o
+ OBJS-$(CONFIG_H263DSP)                 += h263dsp.o
  OBJS-$(CONFIG_H264CHROMA)              += h264chroma.o
  OBJS-$(CONFIG_H264DSP)                 += h264dsp.o h264idct.o
  OBJS-$(CONFIG_H264PRED)                += h264pred.o
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,e1da6b8..a6a9347
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,108 +1,108 @@@
 - * 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/common.h"
+ #include "config.h"
+ #include "h263dsp.h"
+ const uint8_t ff_h263_loop_filter_strength[32]={
+ //  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+     0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11,11,12,12,12
+ };
+ static void h263_h_loop_filter_c(uint8_t *src, int stride, int qscale){
+     int y;
+     const int strength= ff_h263_loop_filter_strength[qscale];
+     for(y=0; y<8; y++){
+         int d1, d2, ad1;
+         int p0= src[y*stride-2];
+         int p1= src[y*stride-1];
+         int p2= src[y*stride+0];
+         int p3= src[y*stride+1];
+         int d = (p0 - p3 + 4*(p2 - p1)) / 8;
+         if     (d<-2*strength) d1= 0;
+         else if(d<-  strength) d1=-2*strength - d;
+         else if(d<   strength) d1= d;
+         else if(d< 2*strength) d1= 2*strength - d;
+         else                   d1= 0;
+         p1 += d1;
+         p2 -= d1;
+         if(p1&256) p1= ~(p1>>31);
+         if(p2&256) p2= ~(p2>>31);
+         src[y*stride-1] = p1;
+         src[y*stride+0] = p2;
+         ad1= FFABS(d1)>>1;
+         d2= av_clip((p0-p3)/4, -ad1, ad1);
+         src[y*stride-2] = p0 - d2;
+         src[y*stride+1] = p3 + d2;
+     }
+ }
+ static void h263_v_loop_filter_c(uint8_t *src, int stride, int qscale){
+     int x;
+     const int strength= ff_h263_loop_filter_strength[qscale];
+     for(x=0; x<8; x++){
+         int d1, d2, ad1;
+         int p0= src[x-2*stride];
+         int p1= src[x-1*stride];
+         int p2= src[x+0*stride];
+         int p3= src[x+1*stride];
+         int d = (p0 - p3 + 4*(p2 - p1)) / 8;
+         if     (d<-2*strength) d1= 0;
+         else if(d<-  strength) d1=-2*strength - d;
+         else if(d<   strength) d1= d;
+         else if(d< 2*strength) d1= 2*strength - d;
+         else                   d1= 0;
+         p1 += d1;
+         p2 -= d1;
+         if(p1&256) p1= ~(p1>>31);
+         if(p2&256) p2= ~(p2>>31);
+         src[x-1*stride] = p1;
+         src[x+0*stride] = p2;
+         ad1= FFABS(d1)>>1;
+         d2= av_clip((p0-p3)/4, -ad1, ad1);
+         src[x-2*stride] = p0 - d2;
+         src[x+  stride] = p3 + d2;
+     }
+ }
+ av_cold void ff_h263dsp_init(H263DSPContext *ctx)
+ {
+     ctx->h263_h_loop_filter = h263_h_loop_filter_c;
+     ctx->h263_v_loop_filter = h263_v_loop_filter_c;
+     if (ARCH_X86)
+         ff_h263dsp_init_x86(ctx);
+ }
index 0000000,40f041c..d2cc2ff
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,34 +1,34 @@@
 - * 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_H263DSP_H
+ #define AVCODEC_H263DSP_H
+ #include <stdint.h>
+ extern const uint8_t ff_h263_loop_filter_strength[32];
+ typedef struct H263DSPContext {
+     void (*h263_h_loop_filter)(uint8_t *src, int stride, int qscale);
+     void (*h263_v_loop_filter)(uint8_t *src, int stride, int qscale);
+ } H263DSPContext;
+ void ff_h263dsp_init(H263DSPContext *ctx);
+ void ff_h263dsp_init_x86(H263DSPContext *ctx);
+ #endif /* AVCODEC_H263DSP_H */
@@@ -32,7 -32,7 +32,8 @@@
  #include "dsputil.h"
  #include "error_resilience.h"
  #include "get_bits.h"
 +#include "h264chroma.h"
+ #include "h263dsp.h"
  #include "hpeldsp.h"
  #include "put_bits.h"
  #include "ratecontrol.h"
@@@ -393,9 -383,9 +394,10 @@@ typedef struct MpegEncContext 
      int h263_long_vectors;      ///< use horrible h263v1 long vector mode
  
      DSPContext dsp;             ///< pointers for accelerated dsp functions
 +    H264ChromaContext h264chroma;
      HpelDSPContext hdsp;
      VideoDSPContext vdsp;
+     H263DSPContext h263dsp;
      int f_code;                 ///< forward MV resolution
      int b_code;                 ///< backward MV resolution for B Frames (mpeg4)
      int16_t (*p_mv_table_base)[2];
@@@ -217,21 -217,6 +217,22 @@@ static void MPV_encode_defaults(MpegEnc
      s->fcode_tab     = default_fcode_tab;
  }
  
 +av_cold int ff_dct_encode_init(MpegEncContext *s) {
 +    if (ARCH_X86)
 +        ff_dct_encode_init_x86(s);
 +
++    ff_h263dsp_init(&s->h263dsp);
 +    if (!s->dct_quantize)
 +        s->dct_quantize = ff_dct_quantize_c;
 +    if (!s->denoise_dct)
 +        s->denoise_dct  = denoise_dct_c;
 +    s->fast_dct_quantize = s->dct_quantize;
 +    if (s->avctx->trellis)
 +        s->dct_quantize  = dct_quantize_trellis_c;
 +
 +    return 0;
 +}
 +
  /* init video encoder */
  av_cold int ff_MPV_encode_init(AVCodecContext *avctx)
  {
Simple merge
Simple merge
Simple merge
index 0000000,d4fab98..ab81063
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,39 +1,39 @@@
 - * This file is part of Libav.
+ /*
+  * Copyright (c) 2013 Diego Biurrun <diego@biurrun.de>
+  *
 - * 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/x86/cpu.h"
+ #include "libavcodec/h263dsp.h"
+ void ff_h263_h_loop_filter_mmx(uint8_t *src, int stride, int qscale);
+ void ff_h263_v_loop_filter_mmx(uint8_t *src, int stride, int qscale);
+ av_cold void ff_h263dsp_init_x86(H263DSPContext *c)
+ {
+     int cpu_flags = av_get_cpu_flags();
+     if (EXTERNAL_MMX(cpu_flags)) {
+         c->h263_h_loop_filter = ff_h263_h_loop_filter_mmx;
+         c->h263_v_loop_filter = ff_h263_v_loop_filter_mmx;
+     }
+ }