]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/h264pred.c
Alpha: move dsputil prototypes to a header file
[ffmpeg] / libavcodec / h264pred.c
index 8980d9d2c8959b5e5fbaec91b09e6fc529f7d008..74085b929c5dba97f760a7809f1936cb727436da 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * @file h264pred.c
+ * @file libavcodec/h264pred.c
  * H.264 / AVC / MPEG4 part10 prediction functions.
  * @author Michael Niedermayer <michaelni@gmx.at>
  */
@@ -989,23 +989,26 @@ static void pred8x8l_horizontal_up_c(uint8_t *src, int has_topleft, int has_topr
 
 static void pred4x4_vertical_add_c(uint8_t *pix, const DCTELEM *block, int stride){
     int i;
+    pix -= stride;
     for(i=0; i<4; i++){
-        pix[0]= pix[0-stride] + block[0];
-        pix[1]= pix[1-stride] + block[1];
-        pix[2]= pix[2-stride] + block[2];
-        pix[3]= pix[3-stride] + block[3];
-        pix+= stride;
-        block+= 4;
+        uint8_t v = pix[0];
+        pix[1*stride]= v += block[0];
+        pix[2*stride]= v += block[4];
+        pix[3*stride]= v += block[8];
+        pix[4*stride]= v +  block[12];
+        pix++;
+        block++;
     }
 }
 
 static void pred4x4_horizontal_add_c(uint8_t *pix, const DCTELEM *block, int stride){
     int i;
     for(i=0; i<4; i++){
-        pix[0]= pix[-1] + block[0];
-        pix[1]= pix[ 0] + block[1];
-        pix[2]= pix[ 1] + block[2];
-        pix[3]= pix[ 2] + block[3];
+        uint8_t v = pix[-1];
+        pix[0]= v += block[0];
+        pix[1]= v += block[1];
+        pix[2]= v += block[2];
+        pix[3]= v +  block[3];
         pix+= stride;
         block+= 4;
     }
@@ -1013,31 +1016,34 @@ static void pred4x4_horizontal_add_c(uint8_t *pix, const DCTELEM *block, int str
 
 static void pred8x8l_vertical_add_c(uint8_t *pix, const DCTELEM *block, int stride){
     int i;
+    pix -= stride;
     for(i=0; i<8; i++){
-        pix[0]= pix[0-stride] + block[0];
-        pix[1]= pix[1-stride] + block[1];
-        pix[2]= pix[2-stride] + block[2];
-        pix[3]= pix[3-stride] + block[3];
-        pix[4]= pix[4-stride] + block[4];
-        pix[5]= pix[5-stride] + block[5];
-        pix[6]= pix[6-stride] + block[6];
-        pix[7]= pix[7-stride] + block[7];
-        pix+= stride;
-        block+= 8;
+        uint8_t v = pix[0];
+        pix[1*stride]= v += block[0];
+        pix[2*stride]= v += block[8];
+        pix[3*stride]= v += block[16];
+        pix[4*stride]= v += block[24];
+        pix[5*stride]= v += block[32];
+        pix[6*stride]= v += block[40];
+        pix[7*stride]= v += block[48];
+        pix[8*stride]= v +  block[56];
+        pix++;
+        block++;
     }
 }
 
 static void pred8x8l_horizontal_add_c(uint8_t *pix, const DCTELEM *block, int stride){
     int i;
     for(i=0; i<8; i++){
-        pix[0]= pix[-1] + block[0];
-        pix[1]= pix[ 0] + block[1];
-        pix[2]= pix[ 1] + block[2];
-        pix[3]= pix[ 2] + block[3];
-        pix[4]= pix[ 3] + block[4];
-        pix[5]= pix[ 4] + block[5];
-        pix[6]= pix[ 5] + block[6];
-        pix[7]= pix[ 6] + block[7];
+        uint8_t v = pix[-1];
+        pix[0]= v += block[0];
+        pix[1]= v += block[1];
+        pix[2]= v += block[2];
+        pix[3]= v += block[3];
+        pix[4]= v += block[4];
+        pix[5]= v += block[5];
+        pix[6]= v += block[6];
+        pix[7]= v +  block[7];
         pix+= stride;
         block+= 8;
     }
@@ -1166,4 +1172,6 @@ void ff_h264_pred_init(H264PredContext *h, int codec_id){
     h->pred8x8_add  [ HOR_PRED8x8]= pred8x8_horizontal_add_c;
     h->pred16x16_add[VERT_PRED8x8]= pred16x16_vertical_add_c;
     h->pred16x16_add[ HOR_PRED8x8]= pred16x16_horizontal_add_c;
+
+    if (ARCH_ARM) ff_h264_pred_init_arm(h, codec_id);
 }