Mercurial > libavcodec.hg
changeset 4068:186e51891c8c libavcodec
PGM 16-bit gray support
author | kostya |
---|---|
date | Tue, 24 Oct 2006 05:00:14 +0000 |
parents | 8ab58b7bc06b |
children | 0df780a93aa8 |
files | pnm.c |
diffstat | 1 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/pnm.c Tue Oct 24 04:59:46 2006 +0000 +++ b/pnm.c Tue Oct 24 05:00:14 2006 +0000 @@ -70,7 +70,7 @@ static int pnm_decode_header(AVCodecContext *avctx, PNMContext * const s){ char buf1[32], tuple_type[32]; - int h, w, depth, maxval;; + int h, w, depth, maxval; pnm_get(s, buf1, sizeof(buf1)); if (!strcmp(buf1, "P4")) { @@ -142,8 +142,9 @@ return -1; if (avctx->pix_fmt != PIX_FMT_MONOWHITE) { pnm_get(s, buf1, sizeof(buf1)); + if(atoi(buf1) == 65535 && avctx->pix_fmt == PIX_FMT_GRAY8) + avctx->pix_fmt = PIX_FMT_GRAY16BE; } - /* more check if YUV420 */ if (avctx->pix_fmt == PIX_FMT_YUV420P) { if ((avctx->width & 1) != 0) @@ -194,6 +195,9 @@ case PIX_FMT_GRAY8: n = avctx->width; goto do_read; + case PIX_FMT_GRAY16BE: + n = avctx->width * 2; + goto do_read; case PIX_FMT_MONOWHITE: case PIX_FMT_MONOBLACK: n = (avctx->width + 7) >> 3; @@ -292,6 +296,10 @@ c = '5'; n = avctx->width; break; + case PIX_FMT_GRAY16BE: + c = '5'; + n = avctx->width * 2; + break; case PIX_FMT_RGB24: c = '6'; n = avctx->width * 3; @@ -310,7 +318,7 @@ s->bytestream += strlen(s->bytestream); if (avctx->pix_fmt != PIX_FMT_MONOWHITE) { snprintf(s->bytestream, s->bytestream_end - s->bytestream, - "%d\n", 255); + "%d\n", (avctx->pix_fmt != PIX_FMT_GRAY16BE) ? 255 : 65535); s->bytestream += strlen(s->bytestream); } @@ -537,7 +545,7 @@ pnm_encode_frame, NULL, //encode_end, pnm_decode_frame, - .pix_fmts= (enum PixelFormat[]){PIX_FMT_GRAY8, -1}, + .pix_fmts= (enum PixelFormat[]){PIX_FMT_GRAY8, PIX_FMT_GRAY16BE, -1}, }; #endif // CONFIG_PGM_ENCODER