mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
decoder: maintain caps for interlaced streams.
Extend GstVaapiDecoder base object to maintain caps with "interlaced" property. Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
This commit is contained in:
parent
8593fb619c
commit
82f11ffb30
2 changed files with 27 additions and 0 deletions
|
@ -162,6 +162,7 @@ set_caps(GstVaapiDecoder *decoder, GstCaps *caps)
|
||||||
GstVaapiProfile profile;
|
GstVaapiProfile profile;
|
||||||
const GValue *v_codec_data;
|
const GValue *v_codec_data;
|
||||||
gint v1, v2;
|
gint v1, v2;
|
||||||
|
gboolean b;
|
||||||
|
|
||||||
profile = gst_vaapi_profile_from_caps(caps);
|
profile = gst_vaapi_profile_from_caps(caps);
|
||||||
if (!profile)
|
if (!profile)
|
||||||
|
@ -188,6 +189,9 @@ set_caps(GstVaapiDecoder *decoder, GstCaps *caps)
|
||||||
priv->par_d = v2;
|
priv->par_d = v2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gst_structure_get_boolean(structure, "interlaced", &b))
|
||||||
|
priv->is_interlaced = b;
|
||||||
|
|
||||||
v_codec_data = gst_structure_get_value(structure, "codec_data");
|
v_codec_data = gst_structure_get_value(structure, "codec_data");
|
||||||
if (v_codec_data)
|
if (v_codec_data)
|
||||||
set_codec_data(decoder, gst_value_get_buffer(v_codec_data));
|
set_codec_data(decoder, gst_value_get_buffer(v_codec_data));
|
||||||
|
@ -346,6 +350,7 @@ gst_vaapi_decoder_init(GstVaapiDecoder *decoder)
|
||||||
priv->par_d = 0;
|
priv->par_d = 0;
|
||||||
priv->buffers = g_queue_new();
|
priv->buffers = g_queue_new();
|
||||||
priv->surfaces = g_queue_new();
|
priv->surfaces = g_queue_new();
|
||||||
|
priv->is_interlaced = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -503,6 +508,23 @@ gst_vaapi_decoder_set_pixel_aspect_ratio(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_vaapi_decoder_set_interlaced(GstVaapiDecoder *decoder, gboolean interlaced)
|
||||||
|
{
|
||||||
|
GstVaapiDecoderPrivate * const priv = decoder->priv;
|
||||||
|
|
||||||
|
if (priv->is_interlaced != interlaced) {
|
||||||
|
GST_DEBUG("interlaced changed to %s", interlaced ? "true" : "false");
|
||||||
|
priv->is_interlaced = interlaced;
|
||||||
|
gst_caps_set_simple(
|
||||||
|
priv->caps,
|
||||||
|
"interlaced", G_TYPE_BOOLEAN, interlaced,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
g_object_notify(G_OBJECT(decoder), "caps");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gst_vaapi_decoder_ensure_context(
|
gst_vaapi_decoder_ensure_context(
|
||||||
GstVaapiDecoder *decoder,
|
GstVaapiDecoder *decoder,
|
||||||
|
|
|
@ -125,6 +125,7 @@ struct _GstVaapiDecoderPrivate {
|
||||||
guint par_d;
|
guint par_d;
|
||||||
GQueue *buffers;
|
GQueue *buffers;
|
||||||
GQueue *surfaces;
|
GQueue *surfaces;
|
||||||
|
guint is_interlaced : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -148,6 +149,10 @@ gst_vaapi_decoder_set_pixel_aspect_ratio(
|
||||||
guint par_d
|
guint par_d
|
||||||
) attribute_hidden;
|
) attribute_hidden;
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_vaapi_decoder_set_interlaced(GstVaapiDecoder *decoder, gboolean interlaced)
|
||||||
|
attribute_hidden;
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gst_vaapi_decoder_ensure_context(
|
gst_vaapi_decoder_ensure_context(
|
||||||
GstVaapiDecoder *decoder,
|
GstVaapiDecoder *decoder,
|
||||||
|
|
Loading…
Reference in a new issue