summaryrefslogtreecommitdiffstats
path: root/gst-libs
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/video/video.c41
-rw-r--r--gst-libs/gst/video/video.h5
2 files changed, 41 insertions, 5 deletions
diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
index 7b63d819..7c8b4852 100644
--- a/gst-libs/gst/video/video.c
+++ b/gst-libs/gst/video/video.c
@@ -33,22 +33,55 @@ gst_video_frame_rate (GstPad *pad)
/* do a convert request on the source pad */
if (!gst_pad_convert(pad,
- GST_FORMAT_TIME, GST_SECOND * NUM_UNITS,
- &dest_format, &dest_value))
+ GST_FORMAT_TIME, GST_SECOND * NUM_UNITS,
+ &dest_format, &dest_value))
{
g_warning("gstvideo: pad %s:%s failed to convert time to unit!\n",
- GST_ELEMENT_NAME(gst_pad_get_parent (pad)), GST_PAD_NAME(pad));
+ GST_ELEMENT_NAME(gst_pad_get_parent (pad)), GST_PAD_NAME(pad));
return 0.;
}
fps = ((gdouble) dest_value) / NUM_UNITS;
GST_DEBUG(GST_CAT_ELEMENT_PADS, "Framerate request on pad %s:%s - %f fps",
- GST_ELEMENT_NAME(gst_pad_get_parent (pad)), GST_PAD_NAME(pad), fps);
+ GST_ELEMENT_NAME(gst_pad_get_parent (pad)), GST_PAD_NAME(pad), fps);
return fps;
}
+gboolean
+gst_video_get_size (GstPad *pad,
+ gint *width,
+ gint *height)
+{
+ GstCaps *caps;
+
+ g_return_val_if_fail(pad != NULL, FALSE);
+
+ caps = GST_PAD_CAPS(pad);
+ if (!caps) {
+ g_warning("gstvideo: failed to get caps of pad %s:%s",
+ GST_ELEMENT_NAME(gst_pad_get_parent (pad)), GST_PAD_NAME(pad));
+ return FALSE;
+ }
+ if (!gst_caps_has_property(caps, "width") ||
+ !gst_caps_has_property(caps, "height")) {
+ g_warning("gstvideo: resulting caps doesn't have width/height properties");
+ return FALSE;
+ }
+
+ if (width)
+ gst_caps_get_int(caps, "width", width);
+ if (height)
+ gst_caps_get_int(caps, "height", height);
+
+ GST_DEBUG(GST_CAT_ELEMENT_PADS, "size request on pad %s:%s: %dx%d",
+ GST_ELEMENT_NAME(gst_pad_get_parent (pad)), GST_PAD_NAME(pad),
+ width?*width:0, height?*height:0);
+
+ return TRUE;
+}
+
static gboolean
plugin_init (GModule *module, GstPlugin *plugin)
{
diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h
index 6062b92d..802520da 100644
--- a/gst-libs/gst/video/video.h
+++ b/gst-libs/gst/video/video.h
@@ -23,6 +23,9 @@
#include <gst/gst.h>
-gdouble gst_video_frame_rate (GstPad *pad);
+gdouble gst_video_frame_rate (GstPad *pad);
+gboolean gst_video_get_size (GstPad *pad,
+ gint *width,
+ gint *height);
#endif /* __GST_VIDEO_H__ */