[FFmpeg-cvslog] r17511 - in trunk/libavcodec: pnm.c pnmenc.c
pross
subversion
Sun Feb 22 01:56:55 CET 2009
Author: pross
Date: Sun Feb 22 01:56:55 2009
New Revision: 17511
Log:
Support 48-bit RGB PPM image.
Modified:
trunk/libavcodec/pnm.c
trunk/libavcodec/pnmenc.c
Modified: trunk/libavcodec/pnm.c
==============================================================================
--- trunk/libavcodec/pnm.c Sun Feb 22 01:55:49 2009 (r17510)
+++ trunk/libavcodec/pnm.c Sun Feb 22 01:56:55 2009 (r17511)
@@ -138,8 +138,11 @@ int ff_pnm_decode_header(AVCodecContext
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;
}
Modified: trunk/libavcodec/pnmenc.c
==============================================================================
--- trunk/libavcodec/pnmenc.c Sun Feb 22 01:55:49 2009 (r17510)
+++ trunk/libavcodec/pnmenc.c Sun Feb 22 01:56:55 2009 (r17511)
@@ -63,6 +63,9 @@ static int pnm_decode_frame(AVCodecConte
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(AVCodecConte
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(AVCodecConte
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
More information about the ffmpeg-cvslog
mailing list