mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-10 03:19:40 +00:00
vaapidecode: do not discard video info props when the format changed.
gst_video_info_set_format() does not preserve video info properties. In order to keep important information in the caps such as interlace mode, framerate, pixel aspect ratio, ... we need to manually copy back those properties after setting the new video format. https://bugzilla.gnome.org/show_bug.cgi?id=722276
This commit is contained in:
parent
3fbef25e13
commit
ead38a4d77
1 changed files with 19 additions and 2 deletions
|
@ -129,6 +129,23 @@ gst_vaapidecode_update_sink_caps(GstVaapiDecode *decode, GstCaps *caps)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_vaapidecode_video_info_change_format(GstVideoInfo *info,
|
||||
GstVideoFormat format, guint width, guint height)
|
||||
{
|
||||
GstVideoInfo vi = *info;
|
||||
|
||||
gst_video_info_set_format (info, format, width, height);
|
||||
|
||||
info->interlace_mode = vi.interlace_mode;
|
||||
info->flags = vi.flags;
|
||||
info->views = vi.views;
|
||||
info->par_n = vi.par_n;
|
||||
info->par_d = vi.par_d;
|
||||
info->fps_n = vi.fps_n;
|
||||
info->fps_d = vi.fps_d;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_vaapidecode_update_src_caps(GstVaapiDecode *decode,
|
||||
const GstVideoCodecState *ref_state)
|
||||
|
@ -165,7 +182,7 @@ gst_vaapidecode_update_src_caps(GstVaapiDecode *decode,
|
|||
vis = *vi;
|
||||
switch (feature) {
|
||||
case GST_VAAPI_CAPS_FEATURE_GL_TEXTURE_UPLOAD_META:
|
||||
gst_video_info_set_format(&vis, GST_VIDEO_FORMAT_RGBA,
|
||||
gst_vaapidecode_video_info_change_format(&vis, GST_VIDEO_FORMAT_RGBA,
|
||||
GST_VIDEO_INFO_WIDTH(vi), GST_VIDEO_INFO_HEIGHT(vi));
|
||||
features = gst_caps_features_new(
|
||||
GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, NULL);
|
||||
|
@ -176,7 +193,7 @@ gst_vaapidecode_update_src_caps(GstVaapiDecode *decode,
|
|||
format=ENCODED + memory:VASurface caps feature are provided.
|
||||
Meanwhile, providing a random format here works but this is
|
||||
a terribly wrong thing per se. */
|
||||
gst_video_info_set_format(&vis, GST_VIDEO_FORMAT_NV12,
|
||||
gst_vaapidecode_video_info_change_format(&vis, GST_VIDEO_FORMAT_NV12,
|
||||
GST_VIDEO_INFO_WIDTH(vi), GST_VIDEO_INFO_HEIGHT(vi));
|
||||
#if GST_CHECK_VERSION(1,3,0)
|
||||
if (feature == GST_VAAPI_CAPS_FEATURE_VAAPI_SURFACE)
|
||||
|
|
Loading…
Reference in a new issue