[FFmpeg-devel] [PATCH]Support SOLID_GRAY lagarith frames

Carl Eugen Hoyos cehoyos at ag.or.at
Tue Jan 22 16:18:05 CET 2013


On Tuesday 22 January 2013 03:53:24 pm Michael Niedermayer wrote:
> > +        } else {
> > +            for (j = 0; j < avctx->height; j++)
> > +                memset(dst, buf[1], avctx->width * planes);
>
> this repeatly memsets dst without advancing the pointer

New patch attached.

Thank you, Carl Eugen
-------------- next part --------------
diff --git a/libavcodec/lagarith.c b/libavcodec/lagarith.c
index 486e326..d5470a5 100644
--- a/libavcodec/lagarith.c
+++ b/libavcodec/lagarith.c
@@ -535,6 +535,14 @@ static int lag_decode_frame(AVCodecContext *avctx,
     switch (frametype) {
     case FRAME_SOLID_RGBA:
         avctx->pix_fmt = AV_PIX_FMT_RGB32;
+    case FRAME_SOLID_GRAY:
+        if (frametype == FRAME_SOLID_GRAY)
+            if (avctx->bits_per_coded_sample == 24) {
+                avctx->pix_fmt = AV_PIX_FMT_RGB24;
+            } else {
+                avctx->pix_fmt = AV_PIX_FMT_0RGB32;
+                planes = 4;
+            }
 
         if (ff_thread_get_buffer(avctx, p) < 0) {
             av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
@@ -542,11 +550,18 @@ static int lag_decode_frame(AVCodecContext *avctx,
         }
 
         dst = p->data[0];
+        if (frametype == FRAME_SOLID_RGBA) {
         for (j = 0; j < avctx->height; j++) {
             for (i = 0; i < avctx->width; i++)
                 AV_WN32(dst + i * 4, offset_gu);
             dst += p->linesize[0];
         }
+        } else {
+            for (j = 0; j < avctx->height; j++) {
+                memset(dst, buf[1], avctx->width * planes);
+                dst += p->linesize[0];
+            }
+        }
         break;
     case FRAME_ARITH_RGBA:
         avctx->pix_fmt = AV_PIX_FMT_RGB32;


More information about the ffmpeg-devel mailing list