diff --git a/gst-libs/gst/video/gstvideosink.c b/gst-libs/gst/video/gstvideosink.c index 7679bb58e4..34e3c9d1ae 100644 --- a/gst-libs/gst/video/gstvideosink.c +++ b/gst-libs/gst/video/gstvideosink.c @@ -36,7 +36,6 @@ #endif #include "gstvideosink.h" -#include "video-info.h" enum { @@ -199,7 +198,7 @@ gst_video_sink_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: - memset (&vsink->priv->info, 0, sizeof (vsink->priv->info)); + gst_video_info_init (&vsink->priv->info); break; default: break; @@ -212,9 +211,11 @@ static gboolean gst_video_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) { GstVideoSink *vsink; + GstVideoSinkClass *klass; GstVideoInfo info; vsink = GST_VIDEO_SINK_CAST (bsink); + klass = GST_VIDEO_SINK_GET_CLASS (vsink); if (!gst_video_info_from_caps (&info, caps)) { GST_ERROR_OBJECT (bsink, "Failed to parse caps %" GST_PTR_FORMAT, caps); @@ -224,6 +225,9 @@ gst_video_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) GST_DEBUG_OBJECT (bsink, "Setting caps %" GST_PTR_FORMAT, caps); vsink->priv->info = info; + if (klass->set_info) + return klass->set_info (vsink, caps, &vsink->priv->info); + return TRUE; } diff --git a/gst-libs/gst/video/gstvideosink.h b/gst-libs/gst/video/gstvideosink.h index d28ef042ad..329b5d2c26 100644 --- a/gst-libs/gst/video/gstvideosink.h +++ b/gst-libs/gst/video/gstvideosink.h @@ -26,6 +26,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -117,8 +118,19 @@ struct _GstVideoSinkClass { GstFlowReturn (*show_frame) (GstVideoSink *video_sink, GstBuffer *buf); + /** + * GstVideoSinkClass::set_info: + * @caps: A #GstCaps. + * @info: A #GstVideoInfo corresponding to @caps. + * + * Notifies the subclass of changed #GstVideoInfo. + * + * Since: 1.20 + */ + gboolean (*set_info) (GstVideoSink *video_sink, GstCaps *caps, const GstVideoInfo *info); + /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; + gpointer _gst_reserved[GST_PADDING-1]; }; GST_VIDEO_API