Mercurial > mplayer.hg
diff libmpcodecs/img_format.c @ 30110:19414a605695
Add support for 16-bit per component YUV formats.
author | reimar |
---|---|
date | Thu, 31 Dec 2009 22:53:25 +0000 |
parents | 834af9d1e3e9 |
children | ad61464d02a7 |
line wrap: on
line diff
--- a/libmpcodecs/img_format.c Thu Dec 31 19:59:58 2009 +0000 +++ b/libmpcodecs/img_format.c Thu Dec 31 22:53:25 2009 +0000 @@ -37,6 +37,12 @@ case IMGFMT_CLPL: return "Planar CLPL"; case IMGFMT_Y800: return "Planar Y800"; case IMGFMT_Y8: return "Planar Y8"; + case IMGFMT_420P16_LE: return "Planar 420P 16-bit little-endian"; + case IMGFMT_420P16_BE: return "Planar 420P 16-bit big-endian"; + case IMGFMT_422P16_LE: return "Planar 422P 16-bit little-endian"; + case IMGFMT_422P16_BE: return "Planar 422P 16-bit big-endian"; + case IMGFMT_444P16_LE: return "Planar 444P 16-bit little-endian"; + case IMGFMT_444P16_BE: return "Planar 444P 16-bit big-endian"; case IMGFMT_444P: return "Planar 444P"; case IMGFMT_422P: return "Planar 422P"; case IMGFMT_411P: return "Planar 411P"; @@ -83,8 +89,13 @@ int mp_get_chroma_shift(int format, int *x_shift, int *y_shift) { int xs = 0, ys = 0; + int bpp; + int bpp_factor = 1; int err = 0; switch (format) { + case IMGFMT_420P16_LE: + case IMGFMT_420P16_BE: + bpp_factor = 2; case IMGFMT_I420: case IMGFMT_IYUV: case IMGFMT_YV12: @@ -96,10 +107,16 @@ xs = 2; ys = 2; break; + case IMGFMT_444P16_LE: + case IMGFMT_444P16_BE: + bpp_factor = 2; case IMGFMT_444P: xs = 0; ys = 0; break; + case IMGFMT_422P16_LE: + case IMGFMT_422P16_BE: + bpp_factor = 2; case IMGFMT_422P: xs = 1; ys = 0; @@ -118,5 +135,7 @@ } if (x_shift) *x_shift = xs; if (y_shift) *y_shift = ys; - return err ? 0 : 8 + (16 >> (xs + ys)); + bpp = 8 + (16 >> (xs + ys)); + bpp *= bpp_factor; + return err ? 0 : bpp; }