[cogl/wip/rig: 8/33] cogl-gst: add cogl_gst_video_sink_get_natural_size() api
- From: Robert Bragg <rbragg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl/wip/rig: 8/33] cogl-gst: add cogl_gst_video_sink_get_natural_size() api
- Date: Mon, 23 Feb 2015 21:34:58 +0000 (UTC)
commit 5db4166e2a6b1feffaf103bda2c19a57ba861c3a
Author: Robert Bragg <robert linux intel com>
Date: Thu Mar 13 01:20:52 2014 +0000
cogl-gst: add cogl_gst_video_sink_get_natural_size() api
This adds api for querying a "natural" width and height for a video
which has the correct aspect ratio for displaying on square, 1:1 pixels.
The natural size is the minimum size where downscaling is not required.
cogl-gst/cogl-gst-video-sink.c | 48 +++++++++++++++++++++++++++
cogl-gst/cogl-gst-video-sink.h | 71 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 119 insertions(+), 0 deletions(-)
---
diff --git a/cogl-gst/cogl-gst-video-sink.c b/cogl-gst/cogl-gst-video-sink.c
index 9dd48e2..84f03c8 100644
--- a/cogl-gst/cogl-gst-video-sink.c
+++ b/cogl-gst/cogl-gst-video-sink.c
@@ -1660,6 +1660,54 @@ cogl_gst_video_sink_fit_size (CoglGstVideoSink *vt,
}
}
+void
+cogl_gst_video_sink_get_natural_size (CoglGstVideoSink *vt,
+ float *width,
+ float *height)
+{
+ GstVideoInfo *info;
+
+ g_return_val_if_fail (COGL_GST_IS_VIDEO_SINK (vt), 0.);
+
+ info = &vt->priv->info;
+
+ if (info->par_n > info->par_d)
+ {
+ /* To display the video at the right aspect ratio then in this
+ * case the pixels need to be stretched horizontally and so we
+ * use the unscaled height as our reference.
+ */
+
+ if (height)
+ *height = info->height;
+ if (width)
+ *width = cogl_gst_video_sink_get_width_for_height (vt, info->height);
+ }
+ else
+ {
+ if (width)
+ *width = info->width;
+ if (height)
+ *height = cogl_gst_video_sink_get_height_for_width (vt, info->width);
+ }
+}
+
+float
+cogl_gst_video_sink_get_natural_width (CoglGstVideoSink *vt)
+{
+ float width;
+ cogl_gst_video_sink_get_natural_size (vt, &width, NULL);
+ return width;
+}
+
+float
+cogl_gst_video_sink_get_natural_height (CoglGstVideoSink *vt)
+{
+ float height;
+ cogl_gst_video_sink_get_natural_size (vt, NULL, &height);
+ return height;
+}
+
CoglBool
cogl_gst_video_sink_is_ready (CoglGstVideoSink *sink)
{
diff --git a/cogl-gst/cogl-gst-video-sink.h b/cogl-gst/cogl-gst-video-sink.h
index 3c11be7..ad0663e 100644
--- a/cogl-gst/cogl-gst-video-sink.h
+++ b/cogl-gst/cogl-gst-video-sink.h
@@ -413,6 +413,77 @@ cogl_gst_video_sink_get_height_for_width (CoglGstVideoSink *sink,
float width);
/**
+ * cogl_gst_video_sink_get_natural_size:
+ * @sink: A #CoglGstVideoSink
+ * @width: (out): return location for the video's natural width
+ * @height: (out): return location for the video's natural height
+ *
+ * Considering the real resolution of the video as well as the aspect
+ * ratio of pixel data that may need to be stretched when being displayed;
+ * this function calculates what the natural size of the underlying
+ * video source is.
+ *
+ * The natural size has the correct aspect ratio for displaying the
+ * video and is the minimum size where downscaling is not required.
+ *
+ * <note>This natural size is calculated assuming that the video will
+ * be displayed on square pixels.</note>
+ *
+ * Since: 1.18
+ * Stability: unstable
+ */
+void
+cogl_gst_video_sink_get_natural_size (CoglGstVideoSink *sink,
+ float *width,
+ float *height);
+
+/**
+ * cogl_gst_video_sink_get_natural_width:
+ * @sink: A #CoglGstVideoSink
+ *
+ * Considering the real resolution of the video as well as the aspect
+ * ratio of pixel data that may need to be stretched when being displayed;
+ * this function calculates what the natural size of the underlying
+ * video source is, and returns its width.
+ *
+ * The natural size has the correct aspect ratio for displaying the
+ * video and is the minimum size where downscaling is not required.
+ *
+ * <note>This natural size is calculated assuming that the video will
+ * be displayed on square pixels.</note>
+ *
+ * Return value: The video's natural width
+ *
+ * Since: 1.18
+ * Stability: unstable
+ */
+float
+cogl_gst_video_sink_get_natural_width (CoglGstVideoSink *sink);
+
+/**
+ * cogl_gst_video_sink_get_natural_height:
+ * @sink: A #CoglGstVideoSink
+ *
+ * Considering the real resolution of the video as well as the aspect
+ * ratio of pixel data that may need to be stretched when being displayed;
+ * this function calculates what the natural size of the underlying
+ * video source is, and returns its height.
+ *
+ * The natural size has the correct aspect ratio for displaying the
+ * video and is the minimum size where downscaling is not required.
+ *
+ * <note>This natural size is calculated assuming that the video will
+ * be displayed on square pixels.</note>
+ *
+ * Return value: The video's natural height
+ *
+ * Since: 1.18
+ * Stability: unstable
+ */
+float
+cogl_gst_video_sink_get_natural_height (CoglGstVideoSink *sink);
+
+/**
* CoglGstRectangle:
* @x: The X coordinate of the top left of the rectangle
* @y: The Y coordinate of the top left of the rectangle
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]