mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Support 48-bit RGB PPM image.
Originally committed as revision 17511 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
88c21a6f14
commit
001821904e
@ -138,8 +138,11 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s){
|
|||||||
avctx->pix_fmt = PIX_FMT_GRAY16BE;
|
avctx->pix_fmt = PIX_FMT_GRAY16BE;
|
||||||
if (s->maxval != 65535)
|
if (s->maxval != 65535)
|
||||||
avctx->pix_fmt = PIX_FMT_GRAY16;
|
avctx->pix_fmt = PIX_FMT_GRAY16;
|
||||||
|
} if (avctx->pix_fmt == PIX_FMT_RGB24) {
|
||||||
|
if (s->maxval > 255)
|
||||||
|
avctx->pix_fmt = PIX_FMT_RGB48BE;
|
||||||
} else {
|
} 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;
|
avctx->pix_fmt = PIX_FMT_NONE;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,9 @@ static int pnm_decode_frame(AVCodecContext *avctx,
|
|||||||
switch(avctx->pix_fmt) {
|
switch(avctx->pix_fmt) {
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
|
case PIX_FMT_RGB48BE:
|
||||||
|
n = avctx->width * 6;
|
||||||
|
goto do_read;
|
||||||
case PIX_FMT_RGB24:
|
case PIX_FMT_RGB24:
|
||||||
n = avctx->width * 3;
|
n = avctx->width * 3;
|
||||||
goto do_read;
|
goto do_read;
|
||||||
@ -195,6 +198,10 @@ static int pnm_encode_frame(AVCodecContext *avctx, unsigned char *outbuf, int bu
|
|||||||
c = '6';
|
c = '6';
|
||||||
n = avctx->width * 3;
|
n = avctx->width * 3;
|
||||||
break;
|
break;
|
||||||
|
case PIX_FMT_RGB48BE:
|
||||||
|
c = '6';
|
||||||
|
n = avctx->width * 6;
|
||||||
|
break;
|
||||||
case PIX_FMT_YUV420P:
|
case PIX_FMT_YUV420P:
|
||||||
c = '5';
|
c = '5';
|
||||||
n = avctx->width;
|
n = avctx->width;
|
||||||
@ -209,7 +216,7 @@ static int pnm_encode_frame(AVCodecContext *avctx, unsigned char *outbuf, int bu
|
|||||||
s->bytestream += strlen(s->bytestream);
|
s->bytestream += strlen(s->bytestream);
|
||||||
if (avctx->pix_fmt != PIX_FMT_MONOWHITE) {
|
if (avctx->pix_fmt != PIX_FMT_MONOWHITE) {
|
||||||
snprintf(s->bytestream, s->bytestream_end - s->bytestream,
|
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);
|
s->bytestream += strlen(s->bytestream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,7 +401,7 @@ AVCodec ppm_encoder = {
|
|||||||
pnm_encode_frame,
|
pnm_encode_frame,
|
||||||
NULL, //encode_end,
|
NULL, //encode_end,
|
||||||
pnm_decode_frame,
|
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"),
|
.long_name= NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"),
|
||||||
};
|
};
|
||||||
#endif // CONFIG_PPM_ENCODER
|
#endif // CONFIG_PPM_ENCODER
|
||||||
|
Loading…
Reference in New Issue
Block a user