]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/dsputil.h
Put halfpel_interpol under the same #ifdef as its usage, fixes the warning:
[ffmpeg] / libavcodec / dsputil.h
index 63e1c474a973854d05178041c70792bed67f1f07..273069c1e8732c47e1b15bf9eb429b6f638267c7 100644 (file)
@@ -27,8 +27,8 @@
  * absolutely necessary to call emms_c() between dsp & float/double code
  */
 
-#ifndef DSPUTIL_H
-#define DSPUTIL_H
+#ifndef FFMPEG_DSPUTIL_H
+#define FFMPEG_DSPUTIL_H
 
 #include "avcodec.h"
 
@@ -37,6 +37,7 @@
 /* dct code */
 typedef short DCTELEM;
 typedef int DWTELEM;
+typedef short IDWTELEM;
 
 void fdct_ifast (DCTELEM *data);
 void fdct_ifast248 (DCTELEM *data);
@@ -47,6 +48,7 @@ void j_rev_dct (DCTELEM *data);
 void j_rev_dct4 (DCTELEM *data);
 void j_rev_dct2 (DCTELEM *data);
 void j_rev_dct1 (DCTELEM *data);
+void ff_wmv2_idct_c(DCTELEM *data);
 
 void ff_fdct_mmx(DCTELEM *block);
 void ff_fdct_mmx2(DCTELEM *block);
@@ -144,7 +146,7 @@ static void a(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
 
 /* motion estimation */
 // h is limited to {width/2, width, 2*width} but never larger than 16 and never smaller then 2
-// allthough currently h<4 is not used as functions with width <8 are not used and neither implemented
+// although currently h<4 is not used as functions with width <8 are neither used nor implemented
 typedef int (*me_cmp_func)(void /*MpegEncContext*/ *s, uint8_t *blk1/*align width (8 or 16)*/, uint8_t *blk2/*align 1*/, int line_size, int h)/* __attribute__ ((const))*/;
 
 
@@ -200,7 +202,8 @@ typedef struct DSPContext {
     me_cmp_func ildct_cmp[5]; //only width 16 used
     me_cmp_func frame_skip_cmp[5]; //only width 8 used
 
-    int (*ssd_int8_vs_int16)(int8_t *pix1, int16_t *pix2, int size);
+    int (*ssd_int8_vs_int16)(const int8_t *pix1, const int16_t *pix2,
+                             int size);
 
     /**
      * Halfpel motion compensation with rounding (a+b+1)>>1.
@@ -324,8 +327,13 @@ typedef struct DSPContext {
 
     void (*h261_loop_filter)(uint8_t *src, int stride);
 
+    void (*x8_v_loop_filter)(uint8_t *src, int stride, int qscale);
+    void (*x8_h_loop_filter)(uint8_t *src, int stride, int qscale);
+
     /* assume len is a multiple of 4, and arrays are 16-byte aligned */
     void (*vorbis_inverse_coupling)(float *mag, float *ang, int blocksize);
+    /* no alignment needed */
+    void (*flac_compute_autocorr)(const int32_t *data, int len, int lag, double *autoc);
     /* assume len is a multiple of 8, and arrays are 16-byte aligned */
     void (*vector_fmul)(float *dst, const float *src, int len);
     void (*vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len);
@@ -346,13 +354,13 @@ typedef struct DSPContext {
     /**
      * block -> idct -> clip to unsigned 8 bit -> dest.
      * (-1392, 0, 0, ...) -> idct -> (-174, -174, ...) -> put -> (0, 0, ...)
-     * @param line_size size in bytes of a horizotal line of dest
+     * @param line_size size in bytes of a horizontal line of dest
      */
     void (*idct_put)(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/);
 
     /**
      * block -> idct -> add dest -> clip to unsigned 8 bit -> dest.
-     * @param line_size size in bytes of a horizotal line of dest
+     * @param line_size size in bytes of a horizontal line of dest
      */
     void (*idct_add)(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/);
 
@@ -389,8 +397,8 @@ typedef struct DSPContext {
     void (*h264_dct)(DCTELEM block[4][4]);
 
     /* snow wavelet */
-    void (*vertical_compose97i)(DWTELEM *b0, DWTELEM *b1, DWTELEM *b2, DWTELEM *b3, DWTELEM *b4, DWTELEM *b5, int width);
-    void (*horizontal_compose97i)(DWTELEM *b, int width);
+    void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
+    void (*horizontal_compose97i)(IDWTELEM *b, int width);
     void (*inner_add_yblock)(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
 
     void (*prefetch)(void *mem, int stride, int h);
@@ -408,6 +416,12 @@ typedef struct DSPContext {
      * last argument is actually round value instead of height
      */
     op_pixels_func put_vc1_mspel_pixels_tab[16];
+
+    /* intrax8 functions */
+    void (*x8_spatial_compensation[12])(uint8_t *src , uint8_t *dst, int linesize);
+    void (*x8_setup_spatial_compensation)(uint8_t *src, uint8_t *dst, int linesize,
+           int * range, int * sum,  int edges);
+
 } DSPContext;
 
 void dsputil_static_init(void);
@@ -470,6 +484,16 @@ static inline int get_penalty_factor(int lambda, int lambda2, int type){
    one or more MultiMedia extension */
 int mm_support(void);
 
+void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx);
+
 #define DECLARE_ALIGNED_16(t, v) DECLARE_ALIGNED(16, t, v)
 
 #if defined(HAVE_MMX)
@@ -507,7 +531,6 @@ static inline void emms(void)
 
 #define STRIDE_ALIGN 8
 
-void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx);
 void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx);
 
 #elif defined(ARCH_ARMV4L)
@@ -521,68 +544,47 @@ void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx);
 
 extern int mm_flags;
 
-void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx);
-
 #elif defined(HAVE_MLIB)
 
 /* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v)
 #define STRIDE_ALIGN 8
 
-void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx);
-
-#elif defined(ARCH_SPARC)
+#elif defined(HAVE_VIS)
 
 /* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v)
 #define STRIDE_ALIGN 8
-void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx);
 
 #elif defined(ARCH_ALPHA)
 
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v)
 #define STRIDE_ALIGN 8
 
-void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx);
-
 #elif defined(ARCH_POWERPC)
 
 #define MM_ALTIVEC    0x0001 /* standard AltiVec */
 
 extern int mm_flags;
 
-#if defined(HAVE_ALTIVEC) && !defined(CONFIG_DARWIN)
-#define pixel altivec_pixel
-#include <altivec.h>
-#undef pixel
-#endif
-
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(16, t, v)
 #define STRIDE_ALIGN 16
 
-void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx);
-
 #elif defined(HAVE_MMI)
 
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(16, t, v)
 #define STRIDE_ALIGN 16
 
-void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx);
-
 #elif defined(ARCH_SH4)
 
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v)
 #define STRIDE_ALIGN 8
 
-void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx);
-
 #elif defined(ARCH_BFIN)
 
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v)
 #define STRIDE_ALIGN 8
 
-void dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx);
-
 #else
 
 #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v)
@@ -680,7 +682,7 @@ static inline void copy_block2(uint8_t *dst, uint8_t *src, int dstStride, int sr
     int i;
     for(i=0; i<h; i++)
     {
-        ST16(dst   , LD16(src   ));
+        AV_WN16(dst   , AV_RN16(src   ));
         dst+=dstStride;
         src+=srcStride;
     }
@@ -691,7 +693,7 @@ static inline void copy_block4(uint8_t *dst, uint8_t *src, int dstStride, int sr
     int i;
     for(i=0; i<h; i++)
     {
-        ST32(dst   , LD32(src   ));
+        AV_WN32(dst   , AV_RN32(src   ));
         dst+=dstStride;
         src+=srcStride;
     }
@@ -702,8 +704,8 @@ static inline void copy_block8(uint8_t *dst, uint8_t *src, int dstStride, int sr
     int i;
     for(i=0; i<h; i++)
     {
-        ST32(dst   , LD32(src   ));
-        ST32(dst+4 , LD32(src+4 ));
+        AV_WN32(dst   , AV_RN32(src   ));
+        AV_WN32(dst+4 , AV_RN32(src+4 ));
         dst+=dstStride;
         src+=srcStride;
     }
@@ -714,8 +716,8 @@ static inline void copy_block9(uint8_t *dst, uint8_t *src, int dstStride, int sr
     int i;
     for(i=0; i<h; i++)
     {
-        ST32(dst   , LD32(src   ));
-        ST32(dst+4 , LD32(src+4 ));
+        AV_WN32(dst   , AV_RN32(src   ));
+        AV_WN32(dst+4 , AV_RN32(src+4 ));
         dst[8]= src[8];
         dst+=dstStride;
         src+=srcStride;
@@ -727,10 +729,10 @@ static inline void copy_block16(uint8_t *dst, uint8_t *src, int dstStride, int s
     int i;
     for(i=0; i<h; i++)
     {
-        ST32(dst   , LD32(src   ));
-        ST32(dst+4 , LD32(src+4 ));
-        ST32(dst+8 , LD32(src+8 ));
-        ST32(dst+12, LD32(src+12));
+        AV_WN32(dst   , AV_RN32(src   ));
+        AV_WN32(dst+4 , AV_RN32(src+4 ));
+        AV_WN32(dst+8 , AV_RN32(src+8 ));
+        AV_WN32(dst+12, AV_RN32(src+12));
         dst+=dstStride;
         src+=srcStride;
     }
@@ -741,14 +743,14 @@ static inline void copy_block17(uint8_t *dst, uint8_t *src, int dstStride, int s
     int i;
     for(i=0; i<h; i++)
     {
-        ST32(dst   , LD32(src   ));
-        ST32(dst+4 , LD32(src+4 ));
-        ST32(dst+8 , LD32(src+8 ));
-        ST32(dst+12, LD32(src+12));
+        AV_WN32(dst   , AV_RN32(src   ));
+        AV_WN32(dst+4 , AV_RN32(src+4 ));
+        AV_WN32(dst+8 , AV_RN32(src+8 ));
+        AV_WN32(dst+12, AV_RN32(src+12));
         dst[16]= src[16];
         dst+=dstStride;
         src+=srcStride;
     }
 }
 
-#endif
+#endif /* FFMPEG_DSPUTIL_H */