# HG changeset patch # User kostya # Date 1161666014 0 # Node ID 186e51891c8cc97ce129ab8c1d348e400901a748 # Parent 8ab58b7bc06b551df8581f2eababbc98b2b7f5e5 PGM 16-bit gray support diff -r 8ab58b7bc06b -r 186e51891c8c pnm.c --- 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