diff --git a/gst-libs/gst/vaapi/gstvaapiimage.c b/gst-libs/gst/vaapi/gstvaapiimage.c index 98bedcb3b6..b1f530112d 100644 --- a/gst-libs/gst/vaapi/gstvaapiimage.c +++ b/gst-libs/gst/vaapi/gstvaapiimage.c @@ -94,6 +94,9 @@ vaapi_image_is_linear (const VAImage * va_image) case VA_FOURCC ('B', 'G', 'R', 'X'): data_size = 4 * width * height; break; + case VA_FOURCC ('P', '0', '1', '0'): + data_size = 2 * (width * height + 2 * width2 * height2); + break; default: g_error ("FIXME: incomplete formats %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (va_image->format.fourcc)); diff --git a/gst-libs/gst/vaapi/video-format.c b/gst-libs/gst/vaapi/video-format.c index 9a6edd47a1..265df5a1b5 100644 --- a/gst-libs/gst/vaapi/video-format.c +++ b/gst-libs/gst/vaapi/video-format.c @@ -50,7 +50,9 @@ typedef struct { VA_FOURCC FOURCC, VA_##ENDIAN##_FIRST, BPP, DEPTH, R,G,B,A }, } /* Image formats, listed in HW order preference */ +/* *INDENT-OFF* */ static const GstVideoFormatMap gst_vaapi_video_formats[] = { + DEF_YUV (P010_10LE, ('P', '0', '1', '0'), LSB, 24, 420_10BPP), DEF_YUV (NV12, ('N', 'V', '1', '2'), LSB, 12, 420), DEF_YUV (YV12, ('Y', 'V', '1', '2'), LSB, 12, 420), DEF_YUV (I420, ('I', '4', '2', '0'), LSB, 12, 420), @@ -79,6 +81,7 @@ static const GstVideoFormatMap gst_vaapi_video_formats[] = { DEF_YUV (GRAY8, ('Y', '8', '0', '0'), LSB, 8, 400), {0,} }; +/* *INDENT-ON* */ #undef DEF_RGB #undef DEF_YUV @@ -298,6 +301,8 @@ gst_vaapi_video_format_get_best_native (GstVideoFormat format) case GST_VAAPI_CHROMA_TYPE_YUV420: case GST_VAAPI_CHROMA_TYPE_RGB32: /* GstVideoGLTextureUploadMeta */ return GST_VIDEO_FORMAT_NV12; + case GST_VAAPI_CHROMA_TYPE_YUV420_10BPP: + return GST_VIDEO_FORMAT_P010_10LE; default: return GST_VIDEO_FORMAT_UNKNOWN; }; diff --git a/gst/vaapi/gstvaapidecode.c b/gst/vaapi/gstvaapidecode.c index 1dbabe1926..f060e8bdef 100644 --- a/gst/vaapi/gstvaapidecode.c +++ b/gst/vaapi/gstvaapidecode.c @@ -105,7 +105,7 @@ static const char gst_vaapidecode_sink_caps_str[] = static const char gst_vaapidecode_src_caps_str[] = GST_VAAPI_MAKE_SURFACE_CAPS ";" GST_VAAPI_MAKE_GLTEXUPLOAD_CAPS ";" - GST_VIDEO_CAPS_MAKE("{ I420, YV12, NV12 }"); + GST_VIDEO_CAPS_MAKE("{ I420, YV12, NV12, P010_10LE }"); static GstStaticPadTemplate gst_vaapidecode_src_factory = GST_STATIC_PAD_TEMPLATE( diff --git a/gst/vaapi/gstvaapipluginutil.h b/gst/vaapi/gstvaapipluginutil.h index d46f2dbb7b..4b1968097f 100644 --- a/gst/vaapi/gstvaapipluginutil.h +++ b/gst/vaapi/gstvaapipluginutil.h @@ -104,11 +104,11 @@ gst_vaapi_caps_feature_contains (const GstCaps * caps, #define GST_VAAPI_MAKE_SURFACE_CAPS \ GST_VIDEO_CAPS_MAKE_WITH_FEATURES( \ - GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, I420, YV12, NV12 }") + GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, I420, YV12, NV12, P010_10LE }") #define GST_VAAPI_MAKE_ENC_SURFACE_CAPS \ GST_VIDEO_CAPS_MAKE_WITH_FEATURES( \ - GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, NV12, I420, YV12 }") + GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, NV12, I420, YV12, P010_10LE }") #define GST_VAAPI_MAKE_GLTEXUPLOAD_CAPS \ GST_VIDEO_CAPS_MAKE_WITH_FEATURES( \ diff --git a/gst/vaapi/gstvaapisink.c b/gst/vaapi/gstvaapisink.c index 6663065d41..638c8d82e1 100644 --- a/gst/vaapi/gstvaapisink.c +++ b/gst/vaapi/gstvaapisink.c @@ -68,7 +68,7 @@ static const char gst_vaapisink_sink_caps_str[] = GST_VIDEO_CAPS_MAKE_WITH_FEATURES ( GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE "," GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, - "{ ENCODED, NV12, I420, YV12 }") ";" + "{ ENCODED, NV12, I420, YV12, P010_10LE }") ";" GST_VIDEO_CAPS_MAKE_WITH_FEATURES ( GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, GST_VIDEO_FORMATS_ALL) ";"