mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge commit '4cfbeef31d4e6096c0596359d212f5d99a7ba4b5'
* commit '4cfbeef31d4e6096c0596359d212f5d99a7ba4b5': h264: factor hwaccel pixel formats list Conflicts: libavcodec/h264_slice.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
57089084ba
@ -147,42 +147,6 @@ static const uint8_t dequant8_coeff_init[6][6] = {
|
|||||||
{ 36, 32, 58, 34, 46, 43 },
|
{ 36, 32, 58, 34, 46, 43 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const enum AVPixelFormat h264_hwaccel_pixfmt_list_420[] = {
|
|
||||||
#if CONFIG_H264_DXVA2_HWACCEL
|
|
||||||
AV_PIX_FMT_DXVA2_VLD,
|
|
||||||
#endif
|
|
||||||
#if CONFIG_H264_VAAPI_HWACCEL
|
|
||||||
AV_PIX_FMT_VAAPI_VLD,
|
|
||||||
#endif
|
|
||||||
#if CONFIG_H264_VDA_HWACCEL
|
|
||||||
AV_PIX_FMT_VDA_VLD,
|
|
||||||
AV_PIX_FMT_VDA,
|
|
||||||
#endif
|
|
||||||
#if CONFIG_H264_VDPAU_HWACCEL
|
|
||||||
AV_PIX_FMT_VDPAU,
|
|
||||||
#endif
|
|
||||||
AV_PIX_FMT_YUV420P,
|
|
||||||
AV_PIX_FMT_NONE
|
|
||||||
};
|
|
||||||
|
|
||||||
static const enum AVPixelFormat h264_hwaccel_pixfmt_list_jpeg_420[] = {
|
|
||||||
#if CONFIG_H264_DXVA2_HWACCEL
|
|
||||||
AV_PIX_FMT_DXVA2_VLD,
|
|
||||||
#endif
|
|
||||||
#if CONFIG_H264_VAAPI_HWACCEL
|
|
||||||
AV_PIX_FMT_VAAPI_VLD,
|
|
||||||
#endif
|
|
||||||
#if CONFIG_H264_VDA_HWACCEL
|
|
||||||
AV_PIX_FMT_VDA_VLD,
|
|
||||||
AV_PIX_FMT_VDA,
|
|
||||||
#endif
|
|
||||||
#if CONFIG_H264_VDPAU_HWACCEL
|
|
||||||
AV_PIX_FMT_VDPAU,
|
|
||||||
#endif
|
|
||||||
AV_PIX_FMT_YUVJ420P,
|
|
||||||
AV_PIX_FMT_NONE
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static void release_unused_pictures(H264Context *h, int remove_current)
|
static void release_unused_pictures(H264Context *h, int remove_current)
|
||||||
{
|
{
|
||||||
@ -1036,79 +1000,94 @@ static int clone_slice(H264Context *dst, H264Context *src)
|
|||||||
|
|
||||||
static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
|
static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
|
||||||
{
|
{
|
||||||
enum AVPixelFormat pix_fmts[2];
|
#define HWACCEL_MAX (CONFIG_H264_DXVA2_HWACCEL + \
|
||||||
|
CONFIG_H264_VAAPI_HWACCEL + \
|
||||||
|
(CONFIG_H264_VDA_HWACCEL * 2) + \
|
||||||
|
CONFIG_H264_VDPAU_HWACCEL)
|
||||||
|
enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmt = pix_fmts;
|
||||||
const enum AVPixelFormat *choices = pix_fmts;
|
const enum AVPixelFormat *choices = pix_fmts;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
pix_fmts[1] = AV_PIX_FMT_NONE;
|
|
||||||
|
|
||||||
switch (h->sps.bit_depth_luma) {
|
switch (h->sps.bit_depth_luma) {
|
||||||
case 9:
|
case 9:
|
||||||
if (CHROMA444(h)) {
|
if (CHROMA444(h)) {
|
||||||
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
||||||
pix_fmts[0] = AV_PIX_FMT_GBRP9;
|
*fmt++ = AV_PIX_FMT_GBRP9;
|
||||||
} else
|
} else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV444P9;
|
*fmt++ = AV_PIX_FMT_YUV444P9;
|
||||||
} else if (CHROMA422(h))
|
} else if (CHROMA422(h))
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV422P9;
|
*fmt++ = AV_PIX_FMT_YUV422P9;
|
||||||
else
|
else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV420P9;
|
*fmt++ = AV_PIX_FMT_YUV420P9;
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
if (CHROMA444(h)) {
|
if (CHROMA444(h)) {
|
||||||
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
||||||
pix_fmts[0] = AV_PIX_FMT_GBRP10;
|
*fmt++ = AV_PIX_FMT_GBRP10;
|
||||||
} else
|
} else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV444P10;
|
*fmt++ = AV_PIX_FMT_YUV444P10;
|
||||||
} else if (CHROMA422(h))
|
} else if (CHROMA422(h))
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV422P10;
|
*fmt++ = AV_PIX_FMT_YUV422P10;
|
||||||
else
|
else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV420P10;
|
*fmt++ = AV_PIX_FMT_YUV420P10;
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
if (CHROMA444(h)) {
|
if (CHROMA444(h)) {
|
||||||
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
||||||
pix_fmts[0] = AV_PIX_FMT_GBRP12;
|
*fmt++ = AV_PIX_FMT_GBRP12;
|
||||||
} else
|
} else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV444P12;
|
*fmt++ = AV_PIX_FMT_YUV444P12;
|
||||||
} else if (CHROMA422(h))
|
} else if (CHROMA422(h))
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV422P12;
|
*fmt++ = AV_PIX_FMT_YUV422P12;
|
||||||
else
|
else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV420P12;
|
*fmt++ = AV_PIX_FMT_YUV420P12;
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
if (CHROMA444(h)) {
|
if (CHROMA444(h)) {
|
||||||
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
if (h->avctx->colorspace == AVCOL_SPC_RGB) {
|
||||||
pix_fmts[0] = AV_PIX_FMT_GBRP14;
|
*fmt++ = AV_PIX_FMT_GBRP14;
|
||||||
} else
|
} else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV444P14;
|
*fmt++ = AV_PIX_FMT_YUV444P14;
|
||||||
} else if (CHROMA422(h))
|
} else if (CHROMA422(h))
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV422P14;
|
*fmt++ = AV_PIX_FMT_YUV422P14;
|
||||||
else
|
else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV420P14;
|
*fmt++ = AV_PIX_FMT_YUV420P14;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
if (CHROMA444(h)) {
|
if (CHROMA444(h)) {
|
||||||
if (h->avctx->colorspace == AVCOL_SPC_YCGCO)
|
if (h->avctx->colorspace == AVCOL_SPC_YCGCO)
|
||||||
av_log(h->avctx, AV_LOG_WARNING, "Detected unsupported YCgCo colorspace.\n");
|
av_log(h->avctx, AV_LOG_WARNING, "Detected unsupported YCgCo colorspace.\n");
|
||||||
if (h->avctx->colorspace == AVCOL_SPC_RGB)
|
if (h->avctx->colorspace == AVCOL_SPC_RGB)
|
||||||
pix_fmts[0] = AV_PIX_FMT_GBRP;
|
*fmt++ = AV_PIX_FMT_GBRP;
|
||||||
else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
|
else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUVJ444P;
|
*fmt++ = AV_PIX_FMT_YUVJ444P;
|
||||||
else
|
else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV444P;
|
*fmt++ = AV_PIX_FMT_YUV444P;
|
||||||
} else if (CHROMA422(h)) {
|
} else if (CHROMA422(h)) {
|
||||||
if (h->avctx->color_range == AVCOL_RANGE_JPEG)
|
if (h->avctx->color_range == AVCOL_RANGE_JPEG)
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUVJ422P;
|
*fmt++ = AV_PIX_FMT_YUVJ422P;
|
||||||
else
|
else
|
||||||
pix_fmts[0] = AV_PIX_FMT_YUV422P;
|
*fmt++ = AV_PIX_FMT_YUV422P;
|
||||||
} else {
|
} else {
|
||||||
|
#if CONFIG_H264_DXVA2_HWACCEL
|
||||||
|
*fmt++ = AV_PIX_FMT_DXVA2_VLD;
|
||||||
|
#endif
|
||||||
|
#if CONFIG_H264_VAAPI_HWACCEL
|
||||||
|
*fmt++ = AV_PIX_FMT_VAAPI_VLD;
|
||||||
|
#endif
|
||||||
|
#if CONFIG_H264_VDA_HWACCEL
|
||||||
|
*fmt++ = AV_PIX_FMT_VDA_VLD;
|
||||||
|
*fmt++ = AV_PIX_FMT_VDA;
|
||||||
|
#endif
|
||||||
|
#if CONFIG_H264_VDPAU_HWACCEL
|
||||||
|
*fmt++ = AV_PIX_FMT_VDPAU;
|
||||||
|
#endif
|
||||||
if (h->avctx->codec->pix_fmts)
|
if (h->avctx->codec->pix_fmts)
|
||||||
choices = h->avctx->codec->pix_fmts;
|
choices = h->avctx->codec->pix_fmts;
|
||||||
else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
|
else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
|
||||||
choices = h264_hwaccel_pixfmt_list_jpeg_420;
|
*fmt++ = AV_PIX_FMT_YUVJ420P;
|
||||||
else
|
else
|
||||||
choices = h264_hwaccel_pixfmt_list_420;
|
*fmt++ = AV_PIX_FMT_YUV420P;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1117,6 +1096,8 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
|
|||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*fmt = AV_PIX_FMT_NONE;
|
||||||
|
|
||||||
for (i=0; choices[i] != AV_PIX_FMT_NONE; i++)
|
for (i=0; choices[i] != AV_PIX_FMT_NONE; i++)
|
||||||
if (choices[i] == h->avctx->pix_fmt && !force_callback)
|
if (choices[i] == h->avctx->pix_fmt && !force_callback)
|
||||||
return choices[i];
|
return choices[i];
|
||||||
|
Loading…
Reference in New Issue
Block a user