You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
h264: add support for decoding planar RGB images.
This commit is contained in:
@@ -2727,23 +2727,32 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
|
|||||||
|
|
||||||
switch (h->sps.bit_depth_luma) {
|
switch (h->sps.bit_depth_luma) {
|
||||||
case 9 :
|
case 9 :
|
||||||
if (CHROMA444)
|
if (CHROMA444) {
|
||||||
|
if (s->avctx->colorspace == AVCOL_SPC_RGB) {
|
||||||
|
s->avctx->pix_fmt = PIX_FMT_GBRP9;
|
||||||
|
} else
|
||||||
s->avctx->pix_fmt = PIX_FMT_YUV444P9;
|
s->avctx->pix_fmt = PIX_FMT_YUV444P9;
|
||||||
else if (CHROMA422)
|
} else if (CHROMA422)
|
||||||
s->avctx->pix_fmt = PIX_FMT_YUV422P9;
|
s->avctx->pix_fmt = PIX_FMT_YUV422P9;
|
||||||
else
|
else
|
||||||
s->avctx->pix_fmt = PIX_FMT_YUV420P9;
|
s->avctx->pix_fmt = PIX_FMT_YUV420P9;
|
||||||
break;
|
break;
|
||||||
case 10 :
|
case 10 :
|
||||||
if (CHROMA444)
|
if (CHROMA444) {
|
||||||
|
if (s->avctx->colorspace == AVCOL_SPC_RGB) {
|
||||||
|
s->avctx->pix_fmt = PIX_FMT_GBRP10;
|
||||||
|
} else
|
||||||
s->avctx->pix_fmt = PIX_FMT_YUV444P10;
|
s->avctx->pix_fmt = PIX_FMT_YUV444P10;
|
||||||
else if (CHROMA422)
|
} else if (CHROMA422)
|
||||||
s->avctx->pix_fmt = PIX_FMT_YUV422P10;
|
s->avctx->pix_fmt = PIX_FMT_YUV422P10;
|
||||||
else
|
else
|
||||||
s->avctx->pix_fmt = PIX_FMT_YUV420P10;
|
s->avctx->pix_fmt = PIX_FMT_YUV420P10;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (CHROMA444){
|
if (CHROMA444){
|
||||||
|
if (s->avctx->colorspace == AVCOL_SPC_RGB) {
|
||||||
|
s->avctx->pix_fmt = PIX_FMT_GBRP;
|
||||||
|
} else
|
||||||
s->avctx->pix_fmt = s->avctx->color_range == AVCOL_RANGE_JPEG ? PIX_FMT_YUVJ444P : PIX_FMT_YUV444P;
|
s->avctx->pix_fmt = s->avctx->color_range == AVCOL_RANGE_JPEG ? PIX_FMT_YUVJ444P : PIX_FMT_YUV444P;
|
||||||
} else if (CHROMA422) {
|
} else if (CHROMA422) {
|
||||||
s->avctx->pix_fmt = s->avctx->color_range == AVCOL_RANGE_JPEG ? PIX_FMT_YUVJ422P : PIX_FMT_YUV422P;
|
s->avctx->pix_fmt = s->avctx->color_range == AVCOL_RANGE_JPEG ? PIX_FMT_YUVJ422P : PIX_FMT_YUV422P;
|
||||||
|
@@ -138,6 +138,7 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int l
|
|||||||
case PIX_FMT_YUV422P:
|
case PIX_FMT_YUV422P:
|
||||||
case PIX_FMT_YUV440P:
|
case PIX_FMT_YUV440P:
|
||||||
case PIX_FMT_YUV444P:
|
case PIX_FMT_YUV444P:
|
||||||
|
case PIX_FMT_GBRP:
|
||||||
case PIX_FMT_GRAY8:
|
case PIX_FMT_GRAY8:
|
||||||
case PIX_FMT_GRAY16BE:
|
case PIX_FMT_GRAY16BE:
|
||||||
case PIX_FMT_GRAY16LE:
|
case PIX_FMT_GRAY16LE:
|
||||||
@@ -158,6 +159,10 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int l
|
|||||||
case PIX_FMT_YUV444P9BE:
|
case PIX_FMT_YUV444P9BE:
|
||||||
case PIX_FMT_YUV444P10LE:
|
case PIX_FMT_YUV444P10LE:
|
||||||
case PIX_FMT_YUV444P10BE:
|
case PIX_FMT_YUV444P10BE:
|
||||||
|
case PIX_FMT_GBRP9LE:
|
||||||
|
case PIX_FMT_GBRP9BE:
|
||||||
|
case PIX_FMT_GBRP10LE:
|
||||||
|
case PIX_FMT_GBRP10BE:
|
||||||
w_align= 16; //FIXME check for non mpeg style codecs and use less alignment
|
w_align= 16; //FIXME check for non mpeg style codecs and use less alignment
|
||||||
h_align= 16;
|
h_align= 16;
|
||||||
if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP || s->codec_id == CODEC_ID_H264)
|
if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP || s->codec_id == CODEC_ID_H264)
|
||||||
|
Reference in New Issue
Block a user