[SCM] libav/experimental: 1/4 resolution decoding

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:41:38 UTC 2013


The following commit has been merged in the experimental branch:
commit 9ca358b9511a412a4b45880ce78cd7479087ad92
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Sun Sep 26 00:18:12 2004 +0000

    1/4 resolution decoding
    
    Originally committed as revision 3509 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 87bfa02..f5b8995 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -17,7 +17,7 @@ extern "C" {
 
 #define FFMPEG_VERSION_INT     0x000409
 #define FFMPEG_VERSION         "0.4.9-pre1"
-#define LIBAVCODEC_BUILD       4722
+#define LIBAVCODEC_BUILD       4723
 
 #define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
 #define LIBAVCODEC_VERSION     FFMPEG_VERSION
@@ -1111,7 +1111,6 @@ typedef struct AVCodecContext {
 #define FF_IDCT_ALTIVEC      8
 #define FF_IDCT_SH4          9
 #define FF_IDCT_SIMPLEARM    10
-#define FF_IDCT_INT4         11
 
     /**
      * slice count.
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 8b95ff2..9bf409d 100644
--- a/libavcodec/dsputil.c
+++ b/libavcodec/dsputil.c
@@ -464,6 +464,22 @@ static void put_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels
     }
 }
 
+static void put_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels,
+				 int line_size)
+{
+    int i;
+    uint8_t *cm = cropTbl + MAX_NEG_CROP;
+    
+    /* read the pixels */
+    for(i=0;i<2;i++) {
+        pixels[0] = cm[block[0]];
+        pixels[1] = cm[block[1]];
+
+        pixels += line_size;
+        block += 8;
+    }
+}
+
 static void put_signed_pixels_clamped_c(const DCTELEM *block, 
                                         uint8_t *restrict pixels,
                                         int line_size)
@@ -522,6 +538,21 @@ static void add_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels
         block += 8;
     }
 }
+
+static void add_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels,
+                          int line_size)
+{
+    int i;
+    uint8_t *cm = cropTbl + MAX_NEG_CROP;
+    
+    /* read the pixels */
+    for(i=0;i<2;i++) {
+        pixels[0] = cm[pixels[0] + block[0]];
+        pixels[1] = cm[pixels[1] + block[1]];
+        pixels += line_size;
+        block += 8;
+    }
+}
 #if 0
 
 #define PIXOP2(OPNAME, OP) \
@@ -3340,6 +3371,17 @@ static void ff_jref_idct4_add(uint8_t *dest, int line_size, DCTELEM *block)
     add_pixels_clamped4_c(block, dest, line_size);
 }
 
+static void ff_jref_idct2_put(uint8_t *dest, int line_size, DCTELEM *block)
+{
+    j_rev_dct2 (block);
+    put_pixels_clamped2_c(block, dest, line_size);
+}
+static void ff_jref_idct2_add(uint8_t *dest, int line_size, DCTELEM *block)
+{
+    j_rev_dct2 (block);
+    add_pixels_clamped2_c(block, dest, line_size);
+}
+
 /* init static data */
 void dsputil_static_init(void)
 {
@@ -3383,6 +3425,11 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
         c->idct_add= ff_jref_idct4_add;
         c->idct    = j_rev_dct4;
         c->idct_permutation_type= FF_NO_IDCT_PERM;
+    }else if(avctx->lowres==2){
+        c->idct_put= ff_jref_idct2_put;
+        c->idct_add= ff_jref_idct2_add;
+        c->idct    = j_rev_dct2;
+        c->idct_permutation_type= FF_NO_IDCT_PERM;
     }else{
         if(avctx->idct_algo==FF_IDCT_INT){
             c->idct_put= ff_jref_idct_put;
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index 8dcc5d9..15f0b6e 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -43,6 +43,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 ff_fdct_mmx(DCTELEM *block);
 void ff_fdct_mmx2(DCTELEM *block);
diff --git a/libavcodec/jrevdct.c b/libavcodec/jrevdct.c
index 1c253fe..8bc0d16 100644
--- a/libavcodec/jrevdct.c
+++ b/libavcodec/jrevdct.c
@@ -1203,8 +1203,6 @@ void j_rev_dct4(DCTBLOCK data)
 
     register int *idataptr = (int*)dataptr;
 
-    /* WARNING: we do the same permutation as MMX idct to simplify the
-       video core */
     d0 = dataptr[0];
     d2 = dataptr[1];
     d4 = dataptr[2];
@@ -1627,6 +1625,20 @@ void j_rev_dct4(DCTBLOCK data)
   }
 }
 
+void j_rev_dct2(DCTBLOCK data){
+  int d00, d01, d10, d11;
+
+  data[0] += 4;
+  d00 = data[0+0*DCTSTRIDE] + data[1+0*DCTSTRIDE];
+  d01 = data[0+0*DCTSTRIDE] - data[1+0*DCTSTRIDE];
+  d10 = data[0+1*DCTSTRIDE] + data[1+1*DCTSTRIDE];
+  d11 = data[0+1*DCTSTRIDE] - data[1+1*DCTSTRIDE];
+ 
+  data[0+0*DCTSTRIDE]= (d00 + d10)>>3;
+  data[1+0*DCTSTRIDE]= (d01 + d11)>>3;
+  data[0+1*DCTSTRIDE]= (d00 - d10)>>3;
+  data[1+1*DCTSTRIDE]= (d01 - d11)>>3;
+}
 
 #undef FIX
 #undef CONST_BITS

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list