mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-10 03:19:40 +00:00
plugins: expose I420 format for interop with SW elements.
Always expose I420 format by default when the VA surface could be mapped for interoperability with non harware accelerated elements. However, the default behaviour remains the auto-plugging of vaapi elements, down to the sink. Side effect: "direct-rendering" mode is also disabled most of the times as plain memcpy() from uncached speculative write combining memory is not going to be efficient enough.
This commit is contained in:
parent
dc6d529830
commit
dac20cecb4
3 changed files with 6 additions and 14 deletions
|
@ -77,10 +77,10 @@ static const char gst_vaapidecode_sink_caps_str[] =
|
|||
static const char gst_vaapidecode_src_caps_str[] =
|
||||
#if GST_CHECK_VERSION(1,1,0)
|
||||
GST_VIDEO_CAPS_MAKE_WITH_FEATURES(
|
||||
GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, NV12, I420, YV12 }") ";"
|
||||
GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, I420, YV12, NV12 }") ";"
|
||||
GST_VIDEO_CAPS_MAKE_WITH_FEATURES(
|
||||
GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, "RGBA") ";"
|
||||
GST_VIDEO_CAPS_MAKE("{ NV12, I420, YV12 }");
|
||||
GST_VIDEO_CAPS_MAKE("{ I420, YV12, NV12 }");
|
||||
#else
|
||||
GST_VAAPI_SURFACE_CAPS;
|
||||
#endif
|
||||
|
@ -176,15 +176,7 @@ gst_vaapidecode_update_src_caps(GstVaapiDecode *decode,
|
|||
vi = &state->info;
|
||||
out_format = format;
|
||||
if (format == GST_VIDEO_FORMAT_ENCODED) {
|
||||
#if GST_CHECK_VERSION(1,1,0)
|
||||
out_format = GST_VIDEO_FORMAT_NV12;
|
||||
if (feature == GST_VAAPI_CAPS_FEATURE_SYSTEM_MEMORY) {
|
||||
/* XXX: intercept with the preferred output format.
|
||||
Anyway, I420 is the minimum format that drivers
|
||||
should support to be useful */
|
||||
out_format = GST_VIDEO_FORMAT_I420;
|
||||
}
|
||||
#endif
|
||||
out_format = GST_VIDEO_FORMAT_I420;
|
||||
gst_video_info_init(&vis);
|
||||
gst_video_info_set_format(&vis, out_format,
|
||||
GST_VIDEO_INFO_WIDTH(vi), GST_VIDEO_INFO_HEIGHT(vi));
|
||||
|
@ -571,7 +563,7 @@ gst_vaapidecode_decide_allocation(GstVideoDecoder *vdec, GstQuery *query)
|
|||
gst_video_info_init(&vi);
|
||||
gst_video_info_from_caps(&vi, caps);
|
||||
if (GST_VIDEO_INFO_FORMAT(&vi) == GST_VIDEO_FORMAT_ENCODED)
|
||||
gst_video_info_set_format(&vi, GST_VIDEO_FORMAT_NV12,
|
||||
gst_video_info_set_format(&vi, GST_VIDEO_FORMAT_I420,
|
||||
GST_VIDEO_INFO_WIDTH(&vi), GST_VIDEO_INFO_HEIGHT(&vi));
|
||||
|
||||
g_return_val_if_fail(GST_VAAPI_PLUGIN_BASE_DISPLAY(decode) != NULL, FALSE);
|
||||
|
|
|
@ -521,7 +521,7 @@ gst_vaapi_find_preferred_caps_feature (GstPad * pad, GstVideoFormat format)
|
|||
goto cleanup;
|
||||
|
||||
if (format == GST_VIDEO_FORMAT_ENCODED)
|
||||
format = GST_VIDEO_FORMAT_NV12;
|
||||
format = GST_VIDEO_FORMAT_I420;
|
||||
|
||||
vaapi_caps =
|
||||
gst_vaapi_video_format_new_template_caps_with_features (format,
|
||||
|
|
|
@ -540,7 +540,7 @@ gst_vaapi_video_allocator_new(GstVaapiDisplay *display, const GstVideoInfo *vip)
|
|||
|
||||
allocator->image_info = *vip;
|
||||
if (GST_VIDEO_INFO_FORMAT(vip) == GST_VIDEO_FORMAT_ENCODED)
|
||||
gst_video_info_set_format(&allocator->image_info, GST_VIDEO_FORMAT_NV12,
|
||||
gst_video_info_set_format(&allocator->image_info, GST_VIDEO_FORMAT_I420,
|
||||
GST_VIDEO_INFO_WIDTH(vip), GST_VIDEO_INFO_HEIGHT(vip));
|
||||
|
||||
if (allocator->has_direct_rendering)
|
||||
|
|
Loading…
Reference in a new issue