[SCM] libav/experimental: Move idct block array variable onto rtjpeg_decode_frame_yuv420 stack since it is only used there and is only 128 byte large. Also make it aligned to fix playback with altivec.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:52:59 UTC 2013


The following commit has been merged in the experimental branch:
commit c9ec7564f0f37e0b672d1f61ee8175acd44c1b00
Author: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
Date:   Sun Nov 5 16:18:37 2006 +0000

    Move idct block array variable onto rtjpeg_decode_frame_yuv420 stack since
    it is only used there and is only 128 byte large.
    Also make it aligned to fix playback with altivec.
    
    Originally committed as revision 6902 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/rtjpeg.c b/libavcodec/rtjpeg.c
index 56bafd7..8e50820 100644
--- a/libavcodec/rtjpeg.c
+++ b/libavcodec/rtjpeg.c
@@ -98,6 +98,7 @@ static inline int get_block(GetBitContext *gb, DCTELEM *block, uint8_t *scan,
  */
 int rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f,
                                uint8_t *buf, int buf_size) {
+    DECLARE_ALIGNED_16(DCTELEM, block[64]);
     GetBitContext gb;
     int w = c->w / 16, h = c->h / 16;
     int x, y;
@@ -106,23 +107,23 @@ int rtjpeg_decode_frame_yuv420(RTJpegContext *c, AVFrame *f,
     init_get_bits(&gb, buf, buf_size * 8);
     for (y = 0; y < h; y++) {
         for (x = 0; x < w; x++) {
-            if (get_block(&gb, c->block, c->scan, c->lquant))
-                c->dsp->idct_put(y1, f->linesize[0], c->block);
+            if (get_block(&gb, block, c->scan, c->lquant))
+                c->dsp->idct_put(y1, f->linesize[0], block);
             y1 += 8;
-            if (get_block(&gb, c->block, c->scan, c->lquant))
-                c->dsp->idct_put(y1, f->linesize[0], c->block);
+            if (get_block(&gb, block, c->scan, c->lquant))
+                c->dsp->idct_put(y1, f->linesize[0], block);
             y1 += 8;
-            if (get_block(&gb, c->block, c->scan, c->lquant))
-                c->dsp->idct_put(y2, f->linesize[0], c->block);
+            if (get_block(&gb, block, c->scan, c->lquant))
+                c->dsp->idct_put(y2, f->linesize[0], block);
             y2 += 8;
-            if (get_block(&gb, c->block, c->scan, c->lquant))
-                c->dsp->idct_put(y2, f->linesize[0], c->block);
+            if (get_block(&gb, block, c->scan, c->lquant))
+                c->dsp->idct_put(y2, f->linesize[0], block);
             y2 += 8;
-            if (get_block(&gb, c->block, c->scan, c->cquant))
-                c->dsp->idct_put(u, f->linesize[1], c->block);
+            if (get_block(&gb, block, c->scan, c->cquant))
+                c->dsp->idct_put(u, f->linesize[1], block);
             u += 8;
-            if (get_block(&gb, c->block, c->scan, c->cquant))
-                c->dsp->idct_put(v, f->linesize[2], c->block);
+            if (get_block(&gb, block, c->scan, c->cquant))
+                c->dsp->idct_put(v, f->linesize[2], block);
             v += 8;
         }
         y1 += 2 * 8 * (f->linesize[0] - w);
diff --git a/libavcodec/rtjpeg.h b/libavcodec/rtjpeg.h
index f592e08..daecc8a 100644
--- a/libavcodec/rtjpeg.h
+++ b/libavcodec/rtjpeg.h
@@ -25,7 +25,6 @@
 typedef struct {
     int w, h;
     DSPContext *dsp;
-    DCTELEM block[64];
     uint8_t scan[64];
     uint32_t lquant[64];
     uint32_t cquant[64];

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list