libs: decoder: H265: Add MAIN_422_12 profile supporting.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-vaapi/-/merge_requests/390>
This commit is contained in:
He Junyan 2020-07-17 18:00:30 +08:00 committed by Víctor Manuel Jáquez Leal
parent ec68ec518b
commit d94b864428
6 changed files with 17 additions and 2 deletions

View file

@ -534,7 +534,8 @@ is_range_extension_profile (GstVaapiProfile profile)
|| profile == GST_VAAPI_PROFILE_H265_MAIN_444 || profile == GST_VAAPI_PROFILE_H265_MAIN_444
|| profile == GST_VAAPI_PROFILE_H265_MAIN_444_10 || profile == GST_VAAPI_PROFILE_H265_MAIN_444_10
|| profile == GST_VAAPI_PROFILE_H265_MAIN12 || profile == GST_VAAPI_PROFILE_H265_MAIN12
|| profile == GST_VAAPI_PROFILE_H265_MAIN_444_12) || profile == GST_VAAPI_PROFILE_H265_MAIN_444_12
|| profile == GST_VAAPI_PROFILE_H265_MAIN_422_12)
return TRUE; return TRUE;
return FALSE; return FALSE;
} }

View file

@ -132,6 +132,8 @@ static const GstVaapiProfileMap gst_vaapi_profiles[] = {
"video/x-h265", "main-12"}, "video/x-h265", "main-12"},
{GST_VAAPI_PROFILE_H265_MAIN_444_12, VAProfileHEVCMain444_12, {GST_VAAPI_PROFILE_H265_MAIN_444_12, VAProfileHEVCMain444_12,
"video/x-h265", "main-444-12"}, "video/x-h265", "main-444-12"},
{GST_VAAPI_PROFILE_H265_MAIN_422_12, VAProfileHEVCMain422_12,
"video/x-h265", "main-422-12"},
{GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN, VAProfileHEVCSccMain, {GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN, VAProfileHEVCSccMain,
"video/x-h265", "screen-extended-main"}, "video/x-h265", "screen-extended-main"},
{GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN_10, VAProfileHEVCSccMain10, {GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN_10, VAProfileHEVCSccMain10,

View file

@ -191,6 +191,7 @@ typedef enum {
GST_VAAPI_MAKE_PROFILE(H265,10), GST_VAAPI_MAKE_PROFILE(H265,10),
GST_VAAPI_PROFILE_H265_MAIN12 = GST_VAAPI_MAKE_PROFILE(H265,11), GST_VAAPI_PROFILE_H265_MAIN12 = GST_VAAPI_MAKE_PROFILE(H265,11),
GST_VAAPI_PROFILE_H265_MAIN_444_12 = GST_VAAPI_MAKE_PROFILE(H265,12), GST_VAAPI_PROFILE_H265_MAIN_444_12 = GST_VAAPI_MAKE_PROFILE(H265,12),
GST_VAAPI_PROFILE_H265_MAIN_422_12 = GST_VAAPI_MAKE_PROFILE(H265,13),
GST_VAAPI_PROFILE_VP9_0 = GST_VAAPI_MAKE_PROFILE(VP9,1), GST_VAAPI_PROFILE_VP9_0 = GST_VAAPI_MAKE_PROFILE(VP9,1),
GST_VAAPI_PROFILE_VP9_1 = GST_VAAPI_MAKE_PROFILE(VP9,2), GST_VAAPI_PROFILE_VP9_1 = GST_VAAPI_MAKE_PROFILE(VP9,2),
GST_VAAPI_PROFILE_VP9_2 = GST_VAAPI_MAKE_PROFILE(VP9,3), GST_VAAPI_PROFILE_VP9_2 = GST_VAAPI_MAKE_PROFILE(VP9,3),

View file

@ -171,6 +171,11 @@ gst_vaapi_utils_h265_get_profile (GstH265SPS * sps)
case GST_H265_PROFILE_MAIN_422_10_INTRA: case GST_H265_PROFILE_MAIN_422_10_INTRA:
vaapi_profile = GST_VAAPI_PROFILE_H265_MAIN_422_10; vaapi_profile = GST_VAAPI_PROFILE_H265_MAIN_422_10;
break; break;
case GST_H265_PROFILE_MAIN_422_12:
/* Main 422_12 Intra, recognize it as MAIN_422_12 */
case GST_H265_PROFILE_MAIN_422_12_INTRA:
vaapi_profile = GST_VAAPI_PROFILE_H265_MAIN_422_12;
break;
case GST_H265_PROFILE_MAIN_444: case GST_H265_PROFILE_MAIN_444:
/* Main 444 Intra, recognize it as MAIN_444 */ /* Main 444 Intra, recognize it as MAIN_444 */
case GST_H265_PROFILE_MAIN_444_INTRA: case GST_H265_PROFILE_MAIN_444_INTRA:
@ -374,6 +379,8 @@ gst_vaapi_utils_h265_get_chroma_type (guint chroma_format_idc,
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422; chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422;
else if (depth > 8 && depth <= 10) else if (depth > 8 && depth <= 10)
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422_10BPP; chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422_10BPP;
else if (depth > 10 && depth <= 12)
chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422_12BPP;
break; break;
case 3: case 3:
if (depth == 8) if (depth == 8)
@ -410,6 +417,7 @@ gst_vaapi_utils_h265_get_chroma_format_idc (GstVaapiChromaType chroma_type)
break; break;
case GST_VAAPI_CHROMA_TYPE_YUV422: case GST_VAAPI_CHROMA_TYPE_YUV422:
case GST_VAAPI_CHROMA_TYPE_YUV422_10BPP: case GST_VAAPI_CHROMA_TYPE_YUV422_10BPP:
case GST_VAAPI_CHROMA_TYPE_YUV422_12BPP:
chroma_format_idc = 2; chroma_format_idc = 2;
break; break;
case GST_VAAPI_CHROMA_TYPE_YUV444: case GST_VAAPI_CHROMA_TYPE_YUV444:

View file

@ -470,6 +470,8 @@ gst_vaapi_video_format_from_chroma (guint chroma_type)
return GST_VIDEO_FORMAT_Y410; return GST_VIDEO_FORMAT_Y410;
case GST_VAAPI_CHROMA_TYPE_YUV444_12BPP: case GST_VAAPI_CHROMA_TYPE_YUV444_12BPP:
return GST_VIDEO_FORMAT_Y412_LE; return GST_VIDEO_FORMAT_Y412_LE;
case GST_VAAPI_CHROMA_TYPE_YUV422_12BPP:
return GST_VIDEO_FORMAT_Y212_LE;
default: default:
return GST_VIDEO_FORMAT_UNKNOWN; return GST_VIDEO_FORMAT_UNKNOWN;
} }

View file

@ -1303,7 +1303,8 @@ gst_vaapidecode_ensure_allowed_sinkpad_caps (GstVaapiDecode * decode)
|| profile == GST_VAAPI_PROFILE_H265_MAIN_444 || profile == GST_VAAPI_PROFILE_H265_MAIN_444
|| profile == GST_VAAPI_PROFILE_H265_MAIN_444_10 || profile == GST_VAAPI_PROFILE_H265_MAIN_444_10
|| profile == GST_VAAPI_PROFILE_H265_MAIN12 || profile == GST_VAAPI_PROFILE_H265_MAIN12
|| profile == GST_VAAPI_PROFILE_H265_MAIN_444_12) { || profile == GST_VAAPI_PROFILE_H265_MAIN_444_12
|| profile == GST_VAAPI_PROFILE_H265_MAIN_422_12) {
gchar *profiles[3], *intra_name; gchar *profiles[3], *intra_name;
intra_name = g_strdup_printf ("%s-intra", profile_name); intra_name = g_strdup_printf ("%s-intra", profile_name);