]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/bfin/dsputil_bfin.c
Move colmult() function to the beginning of file to group DSP-related functions.
[ffmpeg] / libavcodec / bfin / dsputil_bfin.c
index 9615dcd326095bbd1c7429147d49fdfedf0b8693..4737b15218b914be2e35a12e1182144fbbec5b26 100644 (file)
@@ -22,8 +22,8 @@
  */
 
 #include <unistd.h>
-#include "avcodec.h"
-#include "dsputil.h"
+#include "libavcodec/avcodec.h"
+#include "libavcodec/dsputil.h"
 #include "dsputil_bfin.h"
 
 int off;
@@ -31,6 +31,9 @@ int off;
 
 extern void ff_bfin_idct (DCTELEM *block) attribute_l1_text;
 extern void ff_bfin_fdct (DCTELEM *block) attribute_l1_text;
+extern void ff_bfin_vp3_idct (DCTELEM *block);
+extern void ff_bfin_vp3_idct_put (uint8_t *dest, int line_size, DCTELEM *block);
+extern void ff_bfin_vp3_idct_add (uint8_t *dest, int line_size, DCTELEM *block);
 extern void ff_bfin_add_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
 extern void ff_bfin_put_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
 extern void ff_bfin_diff_pixels (DCTELEM *block, uint8_t *s1, uint8_t *s2, int stride)  attribute_l1_text;
@@ -161,7 +164,16 @@ static int bfin_pix_abs16 (void *c, uint8_t *blk1, uint8_t *blk2, int line_size,
     return ff_bfin_z_sad16x16 (blk1,blk2,line_size,line_size,h);
 }
 
-static uint8_t vtmp_blk[256] __attribute__((l1_data_B));
+static int bfin_vsad_intra16 (void *c, uint8_t *blk1, uint8_t *dummy, int stride, int h) {
+    return ff_bfin_z_sad16x16 (blk1,blk1+stride,stride<<1,stride<<1,h);
+}
+
+static int bfin_vsad (void *c, uint8_t *blk1, uint8_t *blk2, int stride, int h) {
+    return ff_bfin_z_sad16x16 (blk1,blk1+stride,stride<<1,stride<<1,h)
+        + ff_bfin_z_sad16x16 (blk2,blk2+stride,stride<<1,stride<<1,h);
+}
+
+static uint8_t vtmp_blk[256] attribute_l1_data_b;
 
 static int bfin_pix_abs16_x2 (void *c, uint8_t *blk1, uint8_t *blk2, int line_size, int h)
 {
@@ -230,6 +242,9 @@ void dsputil_init_bfin( DSPContext* c, AVCodecContext *avctx )
     c->sad[0]             = bfin_pix_abs16;
     c->sad[1]             = bfin_pix_abs8;
 
+    c->vsad[0]            = bfin_vsad;
+    c->vsad[4]            = bfin_vsad_intra16;
+
     /* TODO [0] 16  [1] 8 */
     c->pix_abs[0][0] = bfin_pix_abs16;
     c->pix_abs[0][1] = bfin_pix_abs16_x2;
@@ -280,7 +295,11 @@ void dsputil_init_bfin( DSPContext* c, AVCodecContext *avctx )
 
     c->idct_permutation_type = FF_NO_IDCT_PERM;
     c->fdct                  = ff_bfin_fdct;
-    if (avctx->idct_algo!=FF_IDCT_VP3) {
+    if (avctx->idct_algo==FF_IDCT_VP3) {
+        c->idct               = ff_bfin_vp3_idct;
+        c->idct_add           = ff_bfin_vp3_idct_add;
+        c->idct_put           = ff_bfin_vp3_idct_put;
+    } else {
         c->idct               = ff_bfin_idct;
         c->idct_add           = bfin_idct_add;
         c->idct_put           = bfin_idct_put;