summaryrefslogtreecommitdiff
path: root/cogl-gst/cogl-gst-video-sink.h
diff options
context:
space:
mode:
Diffstat (limited to 'cogl-gst/cogl-gst-video-sink.h')
-rw-r--r--cogl-gst/cogl-gst-video-sink.h533
1 files changed, 0 insertions, 533 deletions
diff --git a/cogl-gst/cogl-gst-video-sink.h b/cogl-gst/cogl-gst-video-sink.h
deleted file mode 100644
index 12a6480d..00000000
--- a/cogl-gst/cogl-gst-video-sink.h
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2007, 2008 OpenedHand
- * Copyright (C) 2009, 2010, 2013 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef __COGL_GST_VIDEO_SINK_H__
-#define __COGL_GST_VIDEO_SINK_H__
-#include <glib-object.h>
-#include <gst/base/gstbasesink.h>
-
-/* We just need the public Cogl api for cogl-gst but we first need to
- * undef COGL_COMPILATION to avoid getting an error that normally
- * checks cogl.h isn't used internally. */
-#ifdef COGL_COMPILATION
-#undef COGL_COMPILATION
-#endif
-
-#include <cogl/cogl.h>
-
-#include <cogl/cogl.h>
-
-/**
- * SECTION:cogl-gst-video-sink
- * @short_description: A video sink for integrating a GStreamer
- * pipeline with a Cogl pipeline.
- *
- * #CoglGstVideoSink is a subclass of #GstBaseSink which can be used to
- * create a #CoglPipeline for rendering the frames of the video.
- *
- * To create a basic video player, an application can create a
- * #GstPipeline as normal using gst_pipeline_new() and set the
- * sink on it to one created with cogl_gst_video_sink_new(). The
- * application can then listen for the #CoglGstVideoSink::new-frame
- * signal which will be emitted whenever there are new textures ready
- * for rendering. For simple rendering, the application can just call
- * cogl_gst_video_sink_get_pipeline() in the signal handler and use
- * the returned pipeline to paint the new frame.
- *
- * An application is also free to do more advanced rendering by
- * customizing the pipeline. In that case it should listen for the
- * #CoglGstVideoSink::pipeline-ready signal which will be emitted as
- * soon as the sink has determined enough information about the video
- * to know how it should be rendered. In the handler for this signal,
- * the application can either make modifications to a copy of the
- * pipeline returned by cogl_gst_video_sink_get_pipeline() or it can
- * create its own pipeline from scratch and ask the sink to configure
- * it with cogl_gst_video_sink_setup_pipeline(). If a custom pipeline
- * is created using one of these methods then the application should
- * call cogl_gst_video_sink_attach_frame() on the pipeline before
- * rendering in order to update the textures on the pipeline's layers.
- *
- * If the %COGL_FEATURE_ID_GLSL feature is available then the pipeline
- * used by the sink will have a shader snippet with a function in it
- * called cogl_gst_sample_video0 which takes a single vec2 argument.
- * This can be used by custom snippets set the by the application to
- * sample from the video. The vec2 argument represents the normalised
- * coordinates within the video. The function returns a vec4
- * containing a pre-multiplied RGBA color of the pixel within the
- * video.
- *
- * Since: 1.16
- */
-
-G_BEGIN_DECLS
-
-#define COGL_GST_GTYPE_DECLARE_TYPE(name) \
- GType cogl_gst_ ## name ## _get_gtype (void)
-
-
-#define COGL_GST_TYPE_VIDEO_SINK cogl_gst_video_sink_get_type()
-
-#define COGL_GST_VIDEO_SINK(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- COGL_GST_TYPE_VIDEO_SINK, CoglGstVideoSink))
-
-#define COGL_GST_VIDEO_SINK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- COGL_GST_TYPE_VIDEO_SINK, CoglGstVideoSinkClass))
-
-#define COGL_GST_IS_VIDEO_SINK(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- COGL_GST_TYPE_VIDEO_SINK))
-
-#define COGL_GST_IS_VIDEO_SINK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- COGL_GST_TYPE_VIDEO_SINK))
-
-#define COGL_GST_VIDEO_SINK_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- COGL_GST_TYPE_VIDEO_SINK, CoglGstVideoSinkClass))
-
-typedef struct _CoglGstVideoSink CoglGstVideoSink;
-typedef struct _CoglGstVideoSinkClass CoglGstVideoSinkClass;
-typedef struct _CoglGstVideoSinkPrivate CoglGstVideoSinkPrivate;
-
-/**
- * CoglGstVideoSink:
- *
- * The #CoglGstVideoSink structure contains only private data and
- * should be accessed using the provided API.
- *
- * Since: 1.16
- */
-struct _CoglGstVideoSink
-{
- /*< private >*/
- GstBaseSink parent;
- CoglGstVideoSinkPrivate *priv;
-};
-
-/**
- * CoglGstVideoSinkClass:
- * @new_frame: handler for the #CoglGstVideoSink::new-frame signal
- * @pipeline_ready: handler for the #CoglGstVideoSink::pipeline-ready signal
- *
- * Since: 1.16
- */
-
-/**
- * CoglGstVideoSink::new-frame:
- * @sink: the #CoglGstVideoSink
- *
- * The sink will emit this signal whenever there are new textures
- * available for a new frame of the video. After this signal is
- * emitted, an application can call cogl_gst_video_sink_get_pipeline()
- * to get a pipeline suitable for rendering the frame. If the
- * application is using a custom pipeline it can alternatively call
- * cogl_gst_video_sink_attach_frame() to attach the textures.
- *
- * Since: 1.16
- */
-
-/**
- * CoglGstVideoSink::pipeline-ready:
- * @sink: the #CoglGstVideoSink
- *
- * The sink will emit this signal as soon as it has gathered enough
- * information from the video to configure a pipeline. If the
- * application wants to do some customized rendering, it can setup its
- * pipeline after this signal is emitted. The application's pipeline
- * will typically either be a copy of the one returned by
- * cogl_gst_video_sink_get_pipeline() or it can be a completely custom
- * pipeline which is setup using cogl_gst_video_sink_setup_pipeline().
- *
- * Note that it is an error to call either of those functions before
- * this signal is emitted. The #CoglGstVideoSink::new-frame signal
- * will only be emitted after the pipeline is ready so the application
- * could also create its pipeline in the handler for that.
- *
- * Since: 1.16
- */
-
-struct _CoglGstVideoSinkClass
-{
- /*< private >*/
- GstBaseSinkClass parent_class;
-
- /*< public >*/
- void (* new_frame) (CoglGstVideoSink *sink);
- void (* pipeline_ready) (CoglGstVideoSink *sink);
-
- /*< private >*/
- void *_padding_dummy[8];
-};
-
-GType
-cogl_gst_video_sink_get_type (void) G_GNUC_CONST;
-
-/**
- * cogl_gst_video_sink_new:
- * @ctx: The #CoglContext
- *
- * Creates a new #CoglGstVideoSink which will create resources for use
- * with the given context.
- *
- * Return value: (transfer full): a new #CoglGstVideoSink
- * Since: 1.16
- */
-CoglGstVideoSink *
-cogl_gst_video_sink_new (CoglContext *ctx);
-
-/**
- * cogl_gst_video_sink_is_ready:
- * @sink: The #CoglGstVideoSink
- *
- * Returns whether the pipeline is ready and so
- * cogl_gst_video_sink_get_pipeline() and
- * cogl_gst_video_sink_setup_pipeline() can be called without causing error.
- *
- * Note: Normally an application will wait until the
- * #CoglGstVideoSink::pipeline-ready signal is emitted instead of
- * polling the ready status with this api, but sometimes when a sink
- * is passed between components that didn't have an opportunity to
- * connect a signal handler this can be useful.
- *
- * Return value: %TRUE if the sink is ready, else %FALSE
- * Since: 1.16
- */
-CoglBool
-cogl_gst_video_sink_is_ready (CoglGstVideoSink *sink);
-
-/**
- * cogl_gst_video_sink_get_pipeline:
- * @vt: The #CoglGstVideoSink
- *
- * Returns a pipeline suitable for rendering the current frame of the
- * given video sink. The pipeline will already have the textures for
- * the frame attached. For simple rendering, an application will
- * typically call this function immediately before it paints the
- * video. It can then just paint a rectangle using the returned
- * pipeline.
- *
- * An application is free to make a copy of this
- * pipeline and modify it for custom rendering.
- *
- * Note: it is considered an error to call this function before the
- * #CoglGstVideoSink::pipeline-ready signal is emitted.
- *
- * Return value: (transfer none): the pipeline for rendering the
- * current frame
- * Since: 1.16
- */
-CoglPipeline *
-cogl_gst_video_sink_get_pipeline (CoglGstVideoSink *vt);
-
-/**
- * cogl_gst_video_sink_set_context:
- * @vt: The #CoglGstVideoSink
- * @ctx: The #CoglContext for the sink to use
- *
- * Sets the #CoglContext that the video sink should use for creating
- * any resources. This function would normally only be used if the
- * sink was constructed via gst_element_factory_make() instead of
- * cogl_gst_video_sink_new().
- *
- * Since: 1.16
- */
-void
-cogl_gst_video_sink_set_context (CoglGstVideoSink *vt,
- CoglContext *ctx);
-
-/**
- * cogl_gst_video_sink_get_free_layer:
- * @sink: The #CoglGstVideoSink
- *
- * This can be used when doing specialised rendering of the video by
- * customizing the pipeline. #CoglGstVideoSink may use up to three
- * private layers on the pipeline in order to attach the textures of
- * the video frame. This function will return the index of the next
- * available unused layer after the sink's internal layers. This can
- * be used by the application to add additional layers, for example to
- * blend in another color in the fragment processing.
- *
- * Return value: the index of the next available layer after the
- * sink's internal layers.
- * Since: 1.16
- */
-int
-cogl_gst_video_sink_get_free_layer (CoglGstVideoSink *sink);
-
-/**
- * cogl_gst_video_sink_attach_frame:
- * @sink: The #CoglGstVideoSink
- * @pln: A #CoglPipeline
- *
- * Updates the given pipeline with the textures for the current frame.
- * This can be used if the application wants to customize the
- * rendering using its own pipeline. Typically this would be called in
- * response to the #CoglGstVideoSink::new-frame signal which is
- * emitted whenever the new textures are available. The application
- * would then make a copy of its template pipeline and call this to
- * set the textures.
- *
- * Since: 1.16
- */
-void
-cogl_gst_video_sink_attach_frame (CoglGstVideoSink *sink,
- CoglPipeline *pln);
-
-/**
- * cogl_gst_video_sink_set_first_layer:
- * @sink: The #CoglGstVideoSink
- * @first_layer: The new first layer
- *
- * Sets the index of the first layer that the sink will use for its
- * rendering. This is useful if the application wants to have custom
- * layers that appear before the layers added by the sink. In that
- * case by default the sink's layers will be modulated with the result
- * of the application's layers that come before @first_layer.
- *
- * Note that if this function is called then the name of the function
- * to call in the shader snippets to sample the video will also
- * change. For example, if @first_layer is three then the function
- * will be cogl_gst_sample_video3.
- *
- * Since: 1.16
- */
-void
-cogl_gst_video_sink_set_first_layer (CoglGstVideoSink *sink,
- int first_layer);
-
-/**
- * cogl_gst_video_sink_set_default_sample:
- * @sink: The #CoglGstVideoSink
- * @default_sample: Whether to add the default sampling
- *
- * By default the pipeline generated by
- * cogl_gst_video_sink_setup_pipeline() and
- * cogl_gst_video_sink_get_pipeline() will have a layer with a shader
- * snippet that automatically samples the video. If the application
- * wants to sample the video in a completely custom way using its own
- * shader snippet it can set @default_sample to %FALSE to avoid this
- * default snippet being added. In that case the application's snippet
- * can call cogl_gst_sample_video0 to sample the texture itself.
- *
- * Since: 1.16
- */
-void
-cogl_gst_video_sink_set_default_sample (CoglGstVideoSink *sink,
- CoglBool default_sample);
-
-/**
- * cogl_gst_video_sink_setup_pipeline:
- * @sink: The #CoglGstVideoSink
- * @pipeline: A #CoglPipeline
- *
- * Configures the given pipeline so that will be able to render the
- * video for the @sink. This should only be used if the application
- * wants to perform some custom rendering using its own pipeline.
- * Typically an application will call this in response to the
- * #CoglGstVideoSink::pipeline-ready signal.
- *
- * Note: it is considered an error to call this function before the
- * #CoglGstVideoSink::pipeline-ready signal is emitted.
- *
- * Since: 1.16
- */
-void
-cogl_gst_video_sink_setup_pipeline (CoglGstVideoSink *sink,
- CoglPipeline *pipeline);
-
-/**
- * cogl_gst_video_sink_get_aspect:
- * @sink: A #CoglGstVideoSink
- *
- * Returns a width-for-height aspect ratio that lets you calculate a
- * suitable width for displaying your video based on a given height by
- * multiplying your chosen height by the returned aspect ratio.
- *
- * This aspect ratio is calculated based on the underlying size of the
- * video buffers and the current pixel-aspect-ratio.
- *
- * Return value: a width-for-height aspect ratio
- *
- * Since: 1.16
- * Stability: unstable
- */
-float
-cogl_gst_video_sink_get_aspect (CoglGstVideoSink *sink);
-
-/**
- * cogl_gst_video_sink_get_width_for_height:
- * @sink: A #CoglGstVideoSink
- * @height: A specific output @height
- *
- * Calculates a suitable output width for a specific output @height
- * that will maintain the video's aspect ratio.
- *
- * Return value: An output width for the given output @height.
- *
- * Since: 1.16
- * Stability: unstable
- */
-float
-cogl_gst_video_sink_get_width_for_height (CoglGstVideoSink *sink,
- float height);
-
-/**
- * cogl_gst_video_sink_get_height_for_width:
- * @sink: A #CoglGstVideoSink
- * @width: A specific output @width
- *
- * Calculates a suitable output height for a specific output @width
- * that will maintain the video's aspect ratio.
- *
- * Return value: An output height for the given output @width.
- *
- * Since: 1.16
- * Stability: unstable
- */
-float
-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
- * @width: The width of the rectangle
- * @height: The height of the rectangle
- *
- * Describes a rectangle that can be used for video output.
- */
-typedef struct _CoglGstRectangle
-{
- float x;
- float y;
- float width;
- float height;
-} CoglGstRectangle;
-
-COGL_GST_GTYPE_DECLARE_TYPE (rectangle);
-
-/**
- * cogl_gst_video_sink_fit_size:
- * @sink: A #CoglGstVideoSink
- * @available: (in): The space available for video output
- * @output: (inout): The return location for the calculated output position
- *
- * Calculates a suitable @output rectangle that can fit inside the
- * @available space while maintaining the aspect ratio of the current
- * video.
- *
- * Applications would typically use this api for "letterboxing" by
- * using this api to position a video inside a fixed screen space and
- * filling the remaining space with black borders.
- *
- * Since: 1.16
- * Stability: unstable
- */
-void
-cogl_gst_video_sink_fit_size (CoglGstVideoSink *sink,
- const CoglGstRectangle *available,
- CoglGstRectangle *output);
-
-G_END_DECLS
-
-#endif