mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-24 19:59:46 +00:00
avcodec/ffv1: support of more pix_fmt
Without direct support of such pix_fmt, content is padded to 16-bit and it is not possible to know that the source file was with a smaller bit depth so framemd5 is different Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
ea6973a573
commit
b6fc09cdb4
@ -591,7 +591,10 @@ static int read_header(FFV1Context *f)
|
||||
if (!f->transparency && !f->chroma_planes) {
|
||||
if (f->avctx->bits_per_raw_sample <= 8)
|
||||
f->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
|
||||
else if (f->avctx->bits_per_raw_sample == 10) {
|
||||
else if (f->avctx->bits_per_raw_sample == 9) {
|
||||
f->packed_at_lsb = 1;
|
||||
f->avctx->pix_fmt = AV_PIX_FMT_GRAY9;
|
||||
} else if (f->avctx->bits_per_raw_sample == 10) {
|
||||
f->packed_at_lsb = 1;
|
||||
f->avctx->pix_fmt = AV_PIX_FMT_GRAY10;
|
||||
} else if (f->avctx->bits_per_raw_sample == 12) {
|
||||
@ -642,6 +645,7 @@ static int read_header(FFV1Context *f)
|
||||
f->packed_at_lsb = 1;
|
||||
switch(16 * f->chroma_h_shift + f->chroma_v_shift) {
|
||||
case 0x00: f->avctx->pix_fmt = AV_PIX_FMT_YUV444P10; break;
|
||||
case 0x01: f->avctx->pix_fmt = AV_PIX_FMT_YUV440P10; break;
|
||||
case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUV422P10; break;
|
||||
case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUV420P10; break;
|
||||
}
|
||||
@ -656,9 +660,17 @@ static int read_header(FFV1Context *f)
|
||||
f->packed_at_lsb = 1;
|
||||
switch(16 * f->chroma_h_shift + f->chroma_v_shift) {
|
||||
case 0x00: f->avctx->pix_fmt = AV_PIX_FMT_YUV444P12; break;
|
||||
case 0x01: f->avctx->pix_fmt = AV_PIX_FMT_YUV440P12; break;
|
||||
case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUV422P12; break;
|
||||
case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUV420P12; break;
|
||||
}
|
||||
} else if (f->avctx->bits_per_raw_sample == 14 && !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_YUV444P14; break;
|
||||
case 0x10: f->avctx->pix_fmt = AV_PIX_FMT_YUV422P14; break;
|
||||
case 0x11: f->avctx->pix_fmt = AV_PIX_FMT_YUV420P14; break;
|
||||
}
|
||||
} else if (f->avctx->bits_per_raw_sample == 16 && !f->transparency){
|
||||
f->packed_at_lsb = 1;
|
||||
switch(16 * f->chroma_h_shift + f->chroma_v_shift) {
|
||||
|
@ -558,6 +558,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
|
||||
s->plane_count = 3;
|
||||
switch(avctx->pix_fmt) {
|
||||
case AV_PIX_FMT_GRAY9:
|
||||
case AV_PIX_FMT_YUV444P9:
|
||||
case AV_PIX_FMT_YUV422P9:
|
||||
case AV_PIX_FMT_YUV420P9:
|
||||
@ -568,6 +569,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
s->bits_per_raw_sample = 9;
|
||||
case AV_PIX_FMT_GRAY10:
|
||||
case AV_PIX_FMT_YUV444P10:
|
||||
case AV_PIX_FMT_YUV440P10:
|
||||
case AV_PIX_FMT_YUV420P10:
|
||||
case AV_PIX_FMT_YUV422P10:
|
||||
case AV_PIX_FMT_YUVA444P10:
|
||||
@ -577,11 +579,17 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
s->bits_per_raw_sample = 10;
|
||||
case AV_PIX_FMT_GRAY12:
|
||||
case AV_PIX_FMT_YUV444P12:
|
||||
case AV_PIX_FMT_YUV440P12:
|
||||
case AV_PIX_FMT_YUV420P12:
|
||||
case AV_PIX_FMT_YUV422P12:
|
||||
s->packed_at_lsb = 1;
|
||||
if (!avctx->bits_per_raw_sample && !s->bits_per_raw_sample)
|
||||
s->bits_per_raw_sample = 12;
|
||||
case AV_PIX_FMT_YUV444P14:
|
||||
case AV_PIX_FMT_YUV420P14:
|
||||
case AV_PIX_FMT_YUV422P14:
|
||||
if (!avctx->bits_per_raw_sample && !s->bits_per_raw_sample)
|
||||
s->bits_per_raw_sample = 14;
|
||||
s->packed_at_lsb = 1;
|
||||
case AV_PIX_FMT_GRAY16:
|
||||
case AV_PIX_FMT_YUV444P16:
|
||||
case AV_PIX_FMT_YUV422P16:
|
||||
@ -1330,6 +1338,9 @@ AVCodec ff_ffv1_encoder = {
|
||||
AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12,
|
||||
AV_PIX_FMT_GBRP16, AV_PIX_FMT_RGB48,
|
||||
AV_PIX_FMT_GBRAP16, AV_PIX_FMT_RGBA64,
|
||||
AV_PIX_FMT_GRAY9,
|
||||
AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV444P14,
|
||||
AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV440P12,
|
||||
AV_PIX_FMT_NONE
|
||||
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user