[SCM] libav/experimental: Support 48-bit RGB PPM image.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:39:10 UTC 2013


The following commit has been merged in the experimental branch:
commit 001821904e316b68c42d1671dcf963e5f7c648f7
Author: Peter Ross <pross at xvid.org>
Date:   Sun Feb 22 00:56:55 2009 +0000

    Support 48-bit RGB PPM image.
    
    Originally committed as revision 17511 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/pnm.c b/libavcodec/pnm.c
index ba169d1..4843d14 100644
--- a/libavcodec/pnm.c
+++ b/libavcodec/pnm.c
@@ -138,8 +138,11 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s){
                 avctx->pix_fmt = PIX_FMT_GRAY16BE;
                 if (s->maxval != 65535)
                     avctx->pix_fmt = PIX_FMT_GRAY16;
+            } if (avctx->pix_fmt == PIX_FMT_RGB24) {
+                if (s->maxval > 255)
+                    avctx->pix_fmt = PIX_FMT_RGB48BE;
             } else {
-                av_log(avctx, AV_LOG_ERROR, "16-bit components are only supported for grayscale\n");
+                av_log(avctx, AV_LOG_ERROR, "Unsupported pixel format\n");
                 avctx->pix_fmt = PIX_FMT_NONE;
                 return -1;
             }
diff --git a/libavcodec/pnmenc.c b/libavcodec/pnmenc.c
index c3316ea..46afbab 100644
--- a/libavcodec/pnmenc.c
+++ b/libavcodec/pnmenc.c
@@ -63,6 +63,9 @@ static int pnm_decode_frame(AVCodecContext *avctx,
     switch(avctx->pix_fmt) {
     default:
         return -1;
+    case PIX_FMT_RGB48BE:
+        n = avctx->width * 6;
+        goto do_read;
     case PIX_FMT_RGB24:
         n = avctx->width * 3;
         goto do_read;
@@ -195,6 +198,10 @@ static int pnm_encode_frame(AVCodecContext *avctx, unsigned char *outbuf, int bu
         c = '6';
         n = avctx->width * 3;
         break;
+    case PIX_FMT_RGB48BE:
+        c = '6';
+        n = avctx->width * 6;
+        break;
     case PIX_FMT_YUV420P:
         c = '5';
         n = avctx->width;
@@ -209,7 +216,7 @@ static int pnm_encode_frame(AVCodecContext *avctx, unsigned char *outbuf, int bu
     s->bytestream += strlen(s->bytestream);
     if (avctx->pix_fmt != PIX_FMT_MONOWHITE) {
         snprintf(s->bytestream, s->bytestream_end - s->bytestream,
-                 "%d\n", (avctx->pix_fmt != PIX_FMT_GRAY16BE) ? 255 : 65535);
+                 "%d\n", (avctx->pix_fmt != PIX_FMT_GRAY16BE && avctx->pix_fmt != PIX_FMT_RGB48BE) ? 255 : 65535);
         s->bytestream += strlen(s->bytestream);
     }
 
@@ -394,7 +401,7 @@ AVCodec ppm_encoder = {
     pnm_encode_frame,
     NULL, //encode_end,
     pnm_decode_frame,
-    .pix_fmts= (enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_NONE},
+    .pix_fmts= (enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGB48BE, PIX_FMT_NONE},
     .long_name= NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"),
 };
 #endif // CONFIG_PPM_ENCODER

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list