diff options
author | Paul B Mahol <onemda@gmail.com> | 2013-09-09 10:28:20 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2013-09-09 19:49:37 +0000 |
commit | d1a16564a23703ce63f9d875d50eb0ef48bddf19 (patch) | |
tree | e268e5a59a82f44fae66f645e3b431569028aa21 /libavcodec/ffv1dec.c | |
parent | a27227d401adf12534dc7a26d72e43e2f35f8944 (diff) | |
download | ffmpeg-d1a16564a23703ce63f9d875d50eb0ef48bddf19.tar.gz |
avcodec/ffv1: YUVA(444,422,420) 9, 10 and 16 bit support
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/ffv1dec.c')
-rw-r--r-- | libavcodec/ffv1dec.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index 39e3f8697a..87cc2ca450 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -668,6 +668,13 @@ static int read_header(FFV1Context *f) case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUV422P9; break; case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUV420P9; break; } + } else if (f->avctx->bits_per_raw_sample == 9 && f->transparency) { + f->packed_at_lsb = 1; + switch(16 * f->chroma_h_shift + f->chroma_v_shift) { + case 0x00: f->avctx->pix_fmt = AV_PIX_FMT_YUVA444P9; break; + case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUVA422P9; break; + case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUVA420P9; break; + } } else if (f->avctx->bits_per_raw_sample == 10 && !f->transparency) { f->packed_at_lsb = 1; switch(16 * f->chroma_h_shift + f->chroma_v_shift) { @@ -675,12 +682,25 @@ static int read_header(FFV1Context *f) case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUV422P10; break; case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUV420P10; break; } + } else if (f->avctx->bits_per_raw_sample == 10 && f->transparency) { + f->packed_at_lsb = 1; + switch(16 * f->chroma_h_shift + f->chroma_v_shift) { + case 0x00: f->avctx->pix_fmt = AV_PIX_FMT_YUVA444P10; break; + case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUVA422P10; break; + case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUVA420P10; break; + } } else if (f->avctx->bits_per_raw_sample == 16 && !f->transparency){ switch(16 * f->chroma_h_shift + f->chroma_v_shift) { case 0x00: f->avctx->pix_fmt = AV_PIX_FMT_YUV444P16; break; case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUV422P16; break; case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUV420P16; break; } + } else if (f->avctx->bits_per_raw_sample == 16 && f->transparency){ + switch(16 * f->chroma_h_shift + f->chroma_v_shift) { + case 0x00: f->avctx->pix_fmt = AV_PIX_FMT_YUVA444P16; break; + case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUVA422P16; break; + case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUVA420P16; break; + } } } else if (f->colorspace == 1) { if (f->chroma_h_shift || f->chroma_v_shift) { |