1/8 resolution decoding
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 26 Sep 2004 10:01:40 +0000 (10:01 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 26 Sep 2004 10:01:40 +0000 (10:01 +0000)
Originally committed as revision 3511 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/dsputil.c
libavcodec/dsputil.h
libavcodec/jrevdct.c

index 9bf409d..3db04c0 100644 (file)
@@ -3382,6 +3382,19 @@ static void ff_jref_idct2_add(uint8_t *dest, int line_size, DCTELEM *block)
     add_pixels_clamped2_c(block, dest, line_size);
 }
 
+static void ff_jref_idct1_put(uint8_t *dest, int line_size, DCTELEM *block)
+{
+    uint8_t *cm = cropTbl + MAX_NEG_CROP;
+
+    dest[0] = cm[(block[0] + 4)>>3];
+}
+static void ff_jref_idct1_add(uint8_t *dest, int line_size, DCTELEM *block)
+{
+    uint8_t *cm = cropTbl + MAX_NEG_CROP;
+
+    dest[0] = cm[dest[0] + ((block[0] + 4)>>3)];
+}
+
 /* init static data */
 void dsputil_static_init(void)
 {
@@ -3430,6 +3443,11 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
         c->idct_add= ff_jref_idct2_add;
         c->idct    = j_rev_dct2;
         c->idct_permutation_type= FF_NO_IDCT_PERM;
+    }else if(avctx->lowres==3){
+        c->idct_put= ff_jref_idct1_put;
+        c->idct_add= ff_jref_idct1_add;
+        c->idct    = j_rev_dct1;
+        c->idct_permutation_type= FF_NO_IDCT_PERM;
     }else{
         if(avctx->idct_algo==FF_IDCT_INT){
             c->idct_put= ff_jref_idct_put;
index 15f0b6e..fd02e4e 100644 (file)
@@ -44,6 +44,7 @@ void ff_fdct248_islow (DCTELEM *data);
 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_fdct_mmx(DCTELEM *block);
 void ff_fdct_mmx2(DCTELEM *block);
index 8bc0d16..72412fd 100644 (file)
@@ -1640,5 +1640,9 @@ void j_rev_dct2(DCTBLOCK data){
   data[1+1*DCTSTRIDE]= (d01 - d11)>>3;
 }
 
+void j_rev_dct1(DCTBLOCK data){
+  data[0] = (data[0] + 4)>>3;
+}
+
 #undef FIX
 #undef CONST_BITS