[SCM] libav/experimental: dr1

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:34:12 UTC 2013


The following commit has been merged in the experimental branch:
commit 22f3e8bea70cfaaf823c582e40c856d79af43308
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Fri Nov 15 00:07:06 2002 +0000

    dr1
    
    Originally committed as revision 1216 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/huffyuv.c b/libavcodec/huffyuv.c
index 9737926..b64a544 100644
--- a/libavcodec/huffyuv.c
+++ b/libavcodec/huffyuv.c
@@ -412,16 +412,18 @@ s->bgr32=1;
     
     y_size= height*stride;
     
-    s->linesize[0]= stride;
-    s->picture[0]= av_mallocz(y_size);
+    if(!(avctx->flags&CODEC_FLAG_DR1)){
+        s->linesize[0]= stride;
+        s->picture[0]= av_mallocz(y_size);
  
-    if(c_size){
-        s->picture[1]= av_mallocz(c_size);
-        s->picture[2]= av_mallocz(c_size);
-        s->linesize[1]= s->linesize[2]= stride/2;
+        if(c_size){
+            s->picture[1]= av_mallocz(c_size);
+            s->picture[2]= av_mallocz(c_size);
+            s->linesize[1]= s->linesize[2]= stride/2;
         
-        memset(s->picture[1], 128, c_size);
-        memset(s->picture[2], 128, c_size);
+            memset(s->picture[1], 128, c_size);
+            memset(s->picture[2], 128, c_size);
+        }
     }
     
 //    printf("pred:%d bpp:%d hbpp:%d il:%d\n", s->predictor, s->bitstream_bpp, avctx->bits_per_sample, s->interlaced);
@@ -651,9 +653,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8
     const int width= s->width;
     const int width2= s->width>>1;
     const int height= s->height;
-    const int fake_ystride= s->interlaced ? s->linesize[0]*2  : s->linesize[0];
-    const int fake_ustride= s->interlaced ? s->linesize[1]*2  : s->linesize[1];
-    const int fake_vstride= s->interlaced ? s->linesize[2]*2  : s->linesize[2];
+    int fake_ystride, fake_ustride, fake_vstride;
     int i;
 
     AVPicture *picture = data;
@@ -667,7 +667,24 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8
     bswap_buf((uint32_t*)s->bitstream_buffer, (uint32_t*)buf, buf_size/4);
     
     init_get_bits(&s->gb, s->bitstream_buffer, buf_size);
-    
+
+    if(avctx->flags&CODEC_FLAG_DR1){
+        if(avctx->get_buffer_callback(avctx, s->width, s->height, I_TYPE) < 0){
+            fprintf(stderr, "get_buffer() failed\n");
+            return -1;
+        }
+
+        s->linesize[0]= avctx->dr_stride;
+        s->linesize[1]=
+        s->linesize[2]= avctx->dr_uvstride;
+
+        for(i=0; i<3;i++)
+            s->picture[i]= avctx->dr_buffer[i];
+    }
+    fake_ystride= s->interlaced ? s->linesize[0]*2  : s->linesize[0];
+    fake_ustride= s->interlaced ? s->linesize[1]*2  : s->linesize[1];
+    fake_vstride= s->interlaced ? s->linesize[2]*2  : s->linesize[2];
+        
     if(s->bitstream_bpp<24){
         int y, cy;
         int lefty, leftu, leftv;
@@ -870,7 +887,9 @@ static int decode_end(AVCodecContext *avctx)
     int i;
     
     for(i=0; i<3; i++){
-        av_freep(&s->picture[i]);
+        if(!(avctx->flags&CODEC_FLAG_DR1))
+            av_freep(&s->picture[i]);
+
         free_vlc(&s->vlc[i]);
     }
 
@@ -1050,7 +1069,7 @@ AVCodec huffyuv_decoder = {
     NULL,
     decode_end,
     decode_frame,
-    0,
+    CODEC_CAP_DR1,
     NULL
 };
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list