mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-04 05:22:30 +00:00
ges: Fix typo by renaming positionner to positioner
It's fortunately private API
This commit is contained in:
parent
3741d5ce19
commit
abfe2c5949
8 changed files with 141 additions and 144 deletions
|
@ -77,7 +77,7 @@ libges_@GST_API_VERSION@_la_SOURCES = \
|
|||
ges-validate.c \
|
||||
ges-structured-interface.c \
|
||||
ges-structure-parser.c \
|
||||
gstframepositionner.c
|
||||
gstframepositioner.c
|
||||
|
||||
libges_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/ges/
|
||||
libges_@GST_API_VERSION@include_HEADERS = \
|
||||
|
@ -149,7 +149,7 @@ noinst_HEADERS = \
|
|||
ges-structured-interface.h \
|
||||
ges-structure-parser.h \
|
||||
ges-smart-video-mixer.h \
|
||||
gstframepositionner.h
|
||||
gstframepositioner.h
|
||||
|
||||
libges_@GST_API_VERSION@_la_CFLAGS = -I$(top_srcdir) $(GST_PBUTILS_CFLAGS) \
|
||||
$(GST_VIDEO_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.";
|
||||
*/
|
||||
|
||||
#include "gstframepositionner.h"
|
||||
#include "gstframepositioner.h"
|
||||
#include "ges-types.h"
|
||||
#include "ges-internal.h"
|
||||
#include "ges-smart-video-mixer.h"
|
||||
|
@ -84,20 +84,20 @@ ges_smart_mixer_get_mixer_pad (GESSmartMixer * self, GstPad ** mixerpad)
|
|||
return sinkpad;
|
||||
}
|
||||
|
||||
/* These metadata will get set by the upstream framepositionner element,
|
||||
/* These metadata will get set by the upstream framepositioner element,
|
||||
added in the video sources' bin */
|
||||
static GstPadProbeReturn
|
||||
parse_metadata (GstPad * mixer_pad, GstPadProbeInfo * info,
|
||||
GESSmartMixer * self)
|
||||
{
|
||||
GstFramePositionnerMeta *meta;
|
||||
GstFramePositionerMeta *meta;
|
||||
|
||||
meta =
|
||||
(GstFramePositionnerMeta *) gst_buffer_get_meta ((GstBuffer *) info->data,
|
||||
gst_frame_positionner_meta_api_get_type ());
|
||||
(GstFramePositionerMeta *) gst_buffer_get_meta ((GstBuffer *) info->data,
|
||||
gst_frame_positioner_meta_api_get_type ());
|
||||
|
||||
if (!meta) {
|
||||
GST_WARNING ("The current source should use a framepositionner");
|
||||
GST_WARNING ("The current source should use a framepositioner");
|
||||
return GST_PAD_PROBE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,14 +28,14 @@
|
|||
#include "ges-track-element.h"
|
||||
#include "ges-source.h"
|
||||
#include "ges-layer.h"
|
||||
#include "gstframepositionner.h"
|
||||
#include "gstframepositioner.h"
|
||||
|
||||
G_DEFINE_TYPE (GESSource, ges_source, GES_TYPE_TRACK_ELEMENT);
|
||||
|
||||
struct _GESSourcePrivate
|
||||
{
|
||||
/* Dummy variable */
|
||||
GstFramePositionner *positionner;
|
||||
GstFramePositioner *positioner;
|
||||
};
|
||||
|
||||
/******************************
|
||||
|
|
|
@ -75,14 +75,14 @@
|
|||
#include "ges-track-element.h"
|
||||
#include "ges-video-source.h"
|
||||
#include "ges-layer.h"
|
||||
#include "gstframepositionner.h"
|
||||
#include "gstframepositioner.h"
|
||||
|
||||
#define parent_class ges_video_source_parent_class
|
||||
G_DEFINE_ABSTRACT_TYPE (GESVideoSource, ges_video_source, GES_TYPE_SOURCE);
|
||||
|
||||
struct _GESVideoSourcePrivate
|
||||
{
|
||||
GstFramePositionner *positionner;
|
||||
GstFramePositioner *positioner;
|
||||
GstElement *capsfilter;
|
||||
};
|
||||
|
||||
|
@ -97,9 +97,8 @@ _set_priority (GESTimelineElement * element, guint32 priority)
|
|||
res = GES_TIMELINE_ELEMENT_CLASS (parent_class)->set_priority (element,
|
||||
priority);
|
||||
|
||||
if (res && self->priv->positionner)
|
||||
g_object_set (self->priv->positionner, "zorder",
|
||||
G_MAXUINT - priority, NULL);
|
||||
if (res && self->priv->positioner)
|
||||
g_object_set (self->priv->positioner, "zorder", G_MAXUINT - priority, NULL);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -121,7 +120,7 @@ ges_video_source_create_element (GESTrackElement * trksrc)
|
|||
GstElement *queue = gst_element_factory_make ("queue", NULL);
|
||||
GESVideoSourceClass *source_class = GES_VIDEO_SOURCE_GET_CLASS (trksrc);
|
||||
GESVideoSource *self;
|
||||
GstElement *positionner, *videoscale, *videorate, *capsfilter, *videoconvert,
|
||||
GstElement *positioner, *videoscale, *videorate, *capsfilter, *videoconvert,
|
||||
*deinterlace;
|
||||
const gchar *props[] = { "alpha", "posx", "posy", "width", "height", NULL };
|
||||
|
||||
|
@ -132,10 +131,10 @@ ges_video_source_create_element (GESTrackElement * trksrc)
|
|||
|
||||
self = (GESVideoSource *) trksrc;
|
||||
|
||||
/* That positionner will add metadata to buffers according to its
|
||||
/* That positioner will add metadata to buffers according to its
|
||||
properties, acting like a proxy for our smart-mixer dynamic pads. */
|
||||
positionner = gst_element_factory_make ("framepositionner", "frame_tagger");
|
||||
g_object_set (positionner, "zorder",
|
||||
positioner = gst_element_factory_make ("framepositioner", "frame_tagger");
|
||||
g_object_set (positioner, "zorder",
|
||||
G_MAXUINT - GES_TIMELINE_ELEMENT_PRIORITY (self), NULL);
|
||||
|
||||
videoscale =
|
||||
|
@ -150,10 +149,10 @@ ges_video_source_create_element (GESTrackElement * trksrc)
|
|||
capsfilter =
|
||||
gst_element_factory_make ("capsfilter", "track-element-capsfilter");
|
||||
|
||||
ges_frame_positionner_set_source_and_filter (GST_FRAME_POSITIONNER
|
||||
(positionner), trksrc, capsfilter);
|
||||
ges_frame_positioner_set_source_and_filter (GST_FRAME_POSITIONNER
|
||||
(positioner), trksrc, capsfilter);
|
||||
|
||||
ges_track_element_add_children_props (trksrc, positionner, NULL, NULL, props);
|
||||
ges_track_element_add_children_props (trksrc, positioner, NULL, NULL, props);
|
||||
|
||||
if (deinterlace == NULL) {
|
||||
post_missing_element_message (sub_element, "deinterlace");
|
||||
|
@ -163,15 +162,15 @@ ges_video_source_create_element (GESTrackElement * trksrc)
|
|||
"deinterlace"), ("deinterlacing won't work"));
|
||||
topbin =
|
||||
ges_source_create_topbin ("videosrcbin", sub_element, queue,
|
||||
videoconvert, positionner, videoscale, videorate, capsfilter, NULL);
|
||||
videoconvert, positioner, videoscale, videorate, capsfilter, NULL);
|
||||
} else {
|
||||
topbin =
|
||||
ges_source_create_topbin ("videosrcbin", sub_element, queue,
|
||||
videoconvert, deinterlace, positionner, videoscale, videorate,
|
||||
videoconvert, deinterlace, positioner, videoscale, videorate,
|
||||
capsfilter, NULL);
|
||||
}
|
||||
|
||||
self->priv->positionner = GST_FRAME_POSITIONNER (positionner);
|
||||
self->priv->positioner = GST_FRAME_POSITIONNER (positioner);
|
||||
self->priv->capsfilter = capsfilter;
|
||||
|
||||
return topbin;
|
||||
|
@ -198,6 +197,6 @@ ges_video_source_init (GESVideoSource * self)
|
|||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
||||
GES_TYPE_VIDEO_SOURCE, GESVideoSourcePrivate);
|
||||
self->priv->positionner = NULL;
|
||||
self->priv->positioner = NULL;
|
||||
self->priv->capsfilter = NULL;
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ struct _GESVideoTransitionPrivate
|
|||
gint pending_border_value;
|
||||
gboolean pending_inverted;
|
||||
|
||||
GstElement *positionner;
|
||||
GstElement *positioner;
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -117,9 +117,8 @@ _set_priority (GESTimelineElement * element, guint32 priority)
|
|||
res = GES_TIMELINE_ELEMENT_CLASS (parent_class)->set_priority (element,
|
||||
priority);
|
||||
|
||||
if (res && self->priv->positionner)
|
||||
g_object_set (self->priv->positionner, "zorder",
|
||||
G_MAXUINT - priority, NULL);
|
||||
if (res && self->priv->positioner)
|
||||
g_object_set (self->priv->positioner, "zorder", G_MAXUINT - priority, NULL);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -330,13 +329,13 @@ ges_video_transition_create_element (GESTrackElement * object)
|
|||
|
||||
iconva = gst_element_factory_make ("videoconvert", "tr-csp-a");
|
||||
iconvb = gst_element_factory_make ("videoconvert", "tr-csp-b");
|
||||
priv->positionner =
|
||||
gst_element_factory_make ("framepositionner", "frame_tagger");
|
||||
g_object_set (priv->positionner, "zorder",
|
||||
priv->positioner =
|
||||
gst_element_factory_make ("framepositioner", "frame_tagger");
|
||||
g_object_set (priv->positioner, "zorder",
|
||||
G_MAXUINT - GES_TIMELINE_ELEMENT_PRIORITY (self), NULL);
|
||||
oconv = gst_element_factory_make ("videoconvert", "tr-csp-output");
|
||||
|
||||
gst_bin_add_many (GST_BIN (topbin), iconva, iconvb, priv->positionner,
|
||||
gst_bin_add_many (GST_BIN (topbin), iconva, iconvb, priv->positioner,
|
||||
oconv, NULL);
|
||||
|
||||
mixer = ges_smart_mixer_new (NULL);
|
||||
|
@ -354,8 +353,8 @@ ges_video_transition_create_element (GESTrackElement * object)
|
|||
g_object_set (priv->mixer_sinka, "zorder", 0, NULL);
|
||||
g_object_set (priv->mixer_sinkb, "zorder", 1, NULL);
|
||||
|
||||
fast_element_link (mixer, priv->positionner);
|
||||
fast_element_link (priv->positionner, oconv);
|
||||
fast_element_link (mixer, priv->positioner);
|
||||
fast_element_link (priv->positioner, oconv);
|
||||
|
||||
sinka_target = gst_element_get_static_pad (iconva, "sink");
|
||||
sinkb_target = gst_element_get_static_pad (iconvb, "sink");
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <ges/ges.h>
|
||||
#include "ges/gstframepositionner.h"
|
||||
#include "ges/gstframepositioner.h"
|
||||
#include "ges-internal.h"
|
||||
|
||||
#define GES_GNONLIN_VERSION_NEEDED_MAJOR 1
|
||||
|
@ -89,8 +89,7 @@ ges_init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
|
|||
|
||||
ges_asset_cache_init ();
|
||||
|
||||
gst_element_register (NULL, "framepositionner", 0,
|
||||
GST_TYPE_FRAME_POSITIONNER);
|
||||
gst_element_register (NULL, "framepositioner", 0, GST_TYPE_FRAME_POSITIONNER);
|
||||
gst_element_register (NULL, "gespipeline", 0, GES_TYPE_PIPELINE);
|
||||
|
||||
/* TODO: user-defined types? */
|
||||
|
|
|
@ -24,23 +24,23 @@
|
|||
#include <gst/gst.h>
|
||||
#include <gst/video/video.h>
|
||||
|
||||
#include "gstframepositionner.h"
|
||||
#include "gstframepositioner.h"
|
||||
|
||||
/* We need to define a max number of pixel so we can interpolate them */
|
||||
#define MAX_PIXELS 100000
|
||||
#define MIN_PIXELS -100000
|
||||
|
||||
static void gst_frame_positionner_set_property (GObject * object,
|
||||
static void gst_frame_positioner_set_property (GObject * object,
|
||||
guint property_id, const GValue * value, GParamSpec * pspec);
|
||||
static void gst_frame_positionner_get_property (GObject * object,
|
||||
static void gst_frame_positioner_get_property (GObject * object,
|
||||
guint property_id, GValue * value, GParamSpec * pspec);
|
||||
static GstFlowReturn gst_frame_positionner_transform_ip (GstBaseTransform *
|
||||
static GstFlowReturn gst_frame_positioner_transform_ip (GstBaseTransform *
|
||||
trans, GstBuffer * buf);
|
||||
|
||||
static gboolean
|
||||
gst_frame_positionner_meta_init (GstMeta * meta, gpointer params,
|
||||
gst_frame_positioner_meta_init (GstMeta * meta, gpointer params,
|
||||
GstBuffer * buffer);
|
||||
static gboolean gst_frame_positionner_meta_transform (GstBuffer * dest,
|
||||
static gboolean gst_frame_positioner_meta_transform (GstBuffer * dest,
|
||||
GstMeta * meta, GstBuffer * buffer, GQuark type, gpointer data);
|
||||
|
||||
enum
|
||||
|
@ -54,31 +54,31 @@ enum
|
|||
PROP_HEIGHT
|
||||
};
|
||||
|
||||
static GstStaticPadTemplate gst_frame_positionner_src_template =
|
||||
static GstStaticPadTemplate gst_frame_positioner_src_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("video/x-raw")
|
||||
);
|
||||
|
||||
static GstStaticPadTemplate gst_frame_positionner_sink_template =
|
||||
static GstStaticPadTemplate gst_frame_positioner_sink_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("video/x-raw")
|
||||
);
|
||||
|
||||
G_DEFINE_TYPE (GstFramePositionner, gst_frame_positionner,
|
||||
G_DEFINE_TYPE (GstFramePositioner, gst_frame_positioner,
|
||||
GST_TYPE_BASE_TRANSFORM);
|
||||
|
||||
static void
|
||||
_weak_notify_cb (GstFramePositionner * pos, GObject * old)
|
||||
_weak_notify_cb (GstFramePositioner * pos, GObject * old)
|
||||
{
|
||||
pos->current_track = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_frame_positionner_update_properties (GstFramePositionner * pos,
|
||||
gst_frame_positioner_update_properties (GstFramePositioner * pos,
|
||||
gint old_track_width, gint old_track_height)
|
||||
{
|
||||
GstCaps *caps;
|
||||
|
@ -117,7 +117,7 @@ gst_frame_positionner_update_properties (GstFramePositionner * pos,
|
|||
}
|
||||
|
||||
static void
|
||||
sync_properties_from_caps (GstFramePositionner * pos, GstCaps * caps)
|
||||
sync_properties_from_caps (GstFramePositioner * pos, GstCaps * caps)
|
||||
{
|
||||
gint width, height;
|
||||
gint old_track_width, old_track_height;
|
||||
|
@ -146,12 +146,12 @@ sync_properties_from_caps (GstFramePositionner * pos, GstCaps * caps)
|
|||
GST_DEBUG_OBJECT (pos, "syncing framerate from caps : %d/%d", pos->fps_n,
|
||||
pos->fps_d);
|
||||
|
||||
gst_frame_positionner_update_properties (pos, old_track_width,
|
||||
gst_frame_positioner_update_properties (pos, old_track_width,
|
||||
old_track_height);
|
||||
}
|
||||
|
||||
static void
|
||||
sync_properties_with_track (GstFramePositionner * pos, GESTrack * track)
|
||||
sync_properties_with_track (GstFramePositioner * pos, GESTrack * track)
|
||||
{
|
||||
GstCaps *caps;
|
||||
|
||||
|
@ -161,13 +161,13 @@ sync_properties_with_track (GstFramePositionner * pos, GESTrack * track)
|
|||
|
||||
static void
|
||||
_track_restriction_changed_cb (GESTrack * track, GParamSpec * arg G_GNUC_UNUSED,
|
||||
GstFramePositionner * pos)
|
||||
GstFramePositioner * pos)
|
||||
{
|
||||
sync_properties_with_track (pos, track);
|
||||
}
|
||||
|
||||
static void
|
||||
set_track (GstFramePositionner * pos)
|
||||
set_track (GstFramePositioner * pos)
|
||||
{
|
||||
GESTrack *new_track;
|
||||
|
||||
|
@ -195,13 +195,13 @@ set_track (GstFramePositionner * pos)
|
|||
|
||||
static void
|
||||
_track_changed_cb (GESTrackElement * trksrc, GParamSpec * arg G_GNUC_UNUSED,
|
||||
GstFramePositionner * pos)
|
||||
GstFramePositioner * pos)
|
||||
{
|
||||
set_track (pos);
|
||||
}
|
||||
|
||||
void
|
||||
ges_frame_positionner_set_source_and_filter (GstFramePositionner * pos,
|
||||
ges_frame_positioner_set_source_and_filter (GstFramePositioner * pos,
|
||||
GESTrackElement * trksrc, GstElement * capsfilter)
|
||||
{
|
||||
pos->track_source = trksrc;
|
||||
|
@ -214,9 +214,9 @@ ges_frame_positionner_set_source_and_filter (GstFramePositionner * pos,
|
|||
}
|
||||
|
||||
static void
|
||||
gst_frame_positionner_dispose (GObject * object)
|
||||
gst_frame_positioner_dispose (GObject * object)
|
||||
{
|
||||
GstFramePositionner *pos = GST_FRAME_POSITIONNER (object);
|
||||
GstFramePositioner *pos = GST_FRAME_POSITIONNER (object);
|
||||
|
||||
if (pos->track_source) {
|
||||
g_signal_handlers_disconnect_by_func (pos->track_source, _track_changed_cb,
|
||||
|
@ -232,29 +232,29 @@ gst_frame_positionner_dispose (GObject * object)
|
|||
pos->current_track = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (gst_frame_positionner_parent_class)->dispose (object);
|
||||
G_OBJECT_CLASS (gst_frame_positioner_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_frame_positionner_class_init (GstFramePositionnerClass * klass)
|
||||
gst_frame_positioner_class_init (GstFramePositionerClass * klass)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
GstBaseTransformClass *base_transform_class =
|
||||
GST_BASE_TRANSFORM_CLASS (klass);
|
||||
|
||||
gst_element_class_add_static_pad_template (GST_ELEMENT_CLASS (klass),
|
||||
&gst_frame_positionner_src_template);
|
||||
&gst_frame_positioner_src_template);
|
||||
gst_element_class_add_static_pad_template (GST_ELEMENT_CLASS (klass),
|
||||
&gst_frame_positionner_sink_template);
|
||||
&gst_frame_positioner_sink_template);
|
||||
|
||||
gobject_class->set_property = gst_frame_positionner_set_property;
|
||||
gobject_class->get_property = gst_frame_positionner_get_property;
|
||||
gobject_class->dispose = gst_frame_positionner_dispose;
|
||||
gobject_class->set_property = gst_frame_positioner_set_property;
|
||||
gobject_class->get_property = gst_frame_positioner_get_property;
|
||||
gobject_class->dispose = gst_frame_positioner_dispose;
|
||||
base_transform_class->transform_ip =
|
||||
GST_DEBUG_FUNCPTR (gst_frame_positionner_transform_ip);
|
||||
GST_DEBUG_FUNCPTR (gst_frame_positioner_transform_ip);
|
||||
|
||||
/**
|
||||
* gstframepositionner:alpha:
|
||||
* gstframepositioner:alpha:
|
||||
*
|
||||
* The desired alpha for the stream.
|
||||
*/
|
||||
|
@ -263,7 +263,7 @@ gst_frame_positionner_class_init (GstFramePositionnerClass * klass)
|
|||
0.0, 1.0, 1.0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
|
||||
|
||||
/**
|
||||
* gstframepositionner:posx:
|
||||
* gstframepositioner:posx:
|
||||
*
|
||||
* The desired x position for the stream.
|
||||
*/
|
||||
|
@ -274,7 +274,7 @@ gst_frame_positionner_class_init (GstFramePositionnerClass * klass)
|
|||
|
||||
|
||||
/**
|
||||
* gstframepositionner:posy:
|
||||
* gstframepositioner:posy:
|
||||
*
|
||||
* The desired y position for the stream.
|
||||
*/
|
||||
|
@ -284,7 +284,7 @@ gst_frame_positionner_class_init (GstFramePositionnerClass * klass)
|
|||
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
|
||||
|
||||
/**
|
||||
* gstframepositionner:zorder:
|
||||
* gstframepositioner:zorder:
|
||||
*
|
||||
* The desired z order for the stream.
|
||||
*/
|
||||
|
@ -293,7 +293,7 @@ gst_frame_positionner_class_init (GstFramePositionnerClass * klass)
|
|||
0, G_MAXUINT, 0, G_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* gesframepositionner:width:
|
||||
* gesframepositioner:width:
|
||||
*
|
||||
* The desired width for that source.
|
||||
* Set to 0 if size is not mandatory, will be set to width of the current track.
|
||||
|
@ -303,7 +303,7 @@ gst_frame_positionner_class_init (GstFramePositionnerClass * klass)
|
|||
0, MAX_PIXELS, 0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
|
||||
|
||||
/**
|
||||
* gesframepositionner:height:
|
||||
* gesframepositioner:height:
|
||||
*
|
||||
* The desired height for that source.
|
||||
* Set to 0 if size is not mandatory, will be set to height of the current track.
|
||||
|
@ -313,70 +313,70 @@ gst_frame_positionner_class_init (GstFramePositionnerClass * klass)
|
|||
0, MAX_PIXELS, 0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE));
|
||||
|
||||
gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
|
||||
"frame positionner", "Metadata",
|
||||
"frame positioner", "Metadata",
|
||||
"This element provides with tagging facilities",
|
||||
"mduponchelle1@gmail.com");
|
||||
}
|
||||
|
||||
static void
|
||||
gst_frame_positionner_init (GstFramePositionner * framepositionner)
|
||||
gst_frame_positioner_init (GstFramePositioner * framepositioner)
|
||||
{
|
||||
framepositionner->alpha = 1.0;
|
||||
framepositionner->posx = 0.0;
|
||||
framepositionner->posy = 0.0;
|
||||
framepositionner->zorder = 0;
|
||||
framepositionner->width = 0;
|
||||
framepositionner->height = 0;
|
||||
framepositionner->fps_n = -1;
|
||||
framepositionner->fps_d = -1;
|
||||
framepositionner->track_width = 0;
|
||||
framepositionner->track_height = 0;
|
||||
framepositionner->capsfilter = NULL;
|
||||
framepositionner->track_source = NULL;
|
||||
framepositionner->current_track = NULL;
|
||||
framepositioner->alpha = 1.0;
|
||||
framepositioner->posx = 0.0;
|
||||
framepositioner->posy = 0.0;
|
||||
framepositioner->zorder = 0;
|
||||
framepositioner->width = 0;
|
||||
framepositioner->height = 0;
|
||||
framepositioner->fps_n = -1;
|
||||
framepositioner->fps_d = -1;
|
||||
framepositioner->track_width = 0;
|
||||
framepositioner->track_height = 0;
|
||||
framepositioner->capsfilter = NULL;
|
||||
framepositioner->track_source = NULL;
|
||||
framepositioner->current_track = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
gst_frame_positionner_set_property (GObject * object, guint property_id,
|
||||
gst_frame_positioner_set_property (GObject * object, guint property_id,
|
||||
const GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
GstFramePositionner *framepositionner = GST_FRAME_POSITIONNER (object);
|
||||
GstFramePositioner *framepositioner = GST_FRAME_POSITIONNER (object);
|
||||
|
||||
|
||||
GST_OBJECT_LOCK (framepositionner);
|
||||
GST_OBJECT_LOCK (framepositioner);
|
||||
switch (property_id) {
|
||||
case PROP_ALPHA:
|
||||
framepositionner->alpha = g_value_get_double (value);
|
||||
framepositioner->alpha = g_value_get_double (value);
|
||||
break;
|
||||
case PROP_POSX:
|
||||
framepositionner->posx = g_value_get_int (value);
|
||||
framepositioner->posx = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_POSY:
|
||||
framepositionner->posy = g_value_get_int (value);
|
||||
framepositioner->posy = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_ZORDER:
|
||||
framepositionner->zorder = g_value_get_uint (value);
|
||||
framepositioner->zorder = g_value_get_uint (value);
|
||||
break;
|
||||
case PROP_WIDTH:
|
||||
framepositionner->width = g_value_get_int (value);
|
||||
gst_frame_positionner_update_properties (framepositionner, 0, 0);
|
||||
framepositioner->width = g_value_get_int (value);
|
||||
gst_frame_positioner_update_properties (framepositioner, 0, 0);
|
||||
break;
|
||||
case PROP_HEIGHT:
|
||||
framepositionner->height = g_value_get_int (value);
|
||||
gst_frame_positionner_update_properties (framepositionner, 0, 0);
|
||||
framepositioner->height = g_value_get_int (value);
|
||||
gst_frame_positioner_update_properties (framepositioner, 0, 0);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
break;
|
||||
}
|
||||
GST_OBJECT_UNLOCK (framepositionner);
|
||||
GST_OBJECT_UNLOCK (framepositioner);
|
||||
}
|
||||
|
||||
void
|
||||
gst_frame_positionner_get_property (GObject * object, guint property_id,
|
||||
gst_frame_positioner_get_property (GObject * object, guint property_id,
|
||||
GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
GstFramePositionner *pos = GST_FRAME_POSITIONNER (object);
|
||||
GstFramePositioner *pos = GST_FRAME_POSITIONNER (object);
|
||||
gint real_width, real_height;
|
||||
|
||||
GST_DEBUG_OBJECT (pos, "get_property");
|
||||
|
@ -409,42 +409,42 @@ gst_frame_positionner_get_property (GObject * object, guint property_id,
|
|||
}
|
||||
|
||||
GType
|
||||
gst_frame_positionner_meta_api_get_type (void)
|
||||
gst_frame_positioner_meta_api_get_type (void)
|
||||
{
|
||||
static volatile GType type;
|
||||
static const gchar *tags[] = { "video", NULL };
|
||||
|
||||
if (g_once_init_enter (&type)) {
|
||||
GType _type = gst_meta_api_type_register ("GstFramePositionnerApi", tags);
|
||||
GType _type = gst_meta_api_type_register ("GstFramePositionerApi", tags);
|
||||
g_once_init_leave (&type, _type);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
static const GstMetaInfo *
|
||||
gst_frame_positionner_get_info (void)
|
||||
gst_frame_positioner_get_info (void)
|
||||
{
|
||||
static const GstMetaInfo *meta_info = NULL;
|
||||
|
||||
if (g_once_init_enter (&meta_info)) {
|
||||
const GstMetaInfo *meta =
|
||||
gst_meta_register (gst_frame_positionner_meta_api_get_type (),
|
||||
"GstFramePositionnerMeta",
|
||||
sizeof (GstFramePositionnerMeta), gst_frame_positionner_meta_init,
|
||||
gst_meta_register (gst_frame_positioner_meta_api_get_type (),
|
||||
"GstFramePositionerMeta",
|
||||
sizeof (GstFramePositionerMeta), gst_frame_positioner_meta_init,
|
||||
NULL,
|
||||
gst_frame_positionner_meta_transform);
|
||||
gst_frame_positioner_meta_transform);
|
||||
g_once_init_leave (&meta_info, meta);
|
||||
}
|
||||
return meta_info;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_frame_positionner_meta_init (GstMeta * meta, gpointer params,
|
||||
gst_frame_positioner_meta_init (GstMeta * meta, gpointer params,
|
||||
GstBuffer * buffer)
|
||||
{
|
||||
GstFramePositionnerMeta *smeta;
|
||||
GstFramePositionerMeta *smeta;
|
||||
|
||||
smeta = (GstFramePositionnerMeta *) meta;
|
||||
smeta = (GstFramePositionerMeta *) meta;
|
||||
|
||||
smeta->alpha = 0.0;
|
||||
smeta->posx = smeta->posy = smeta->height = smeta->width = 0;
|
||||
|
@ -454,18 +454,18 @@ gst_frame_positionner_meta_init (GstMeta * meta, gpointer params,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gst_frame_positionner_meta_transform (GstBuffer * dest, GstMeta * meta,
|
||||
gst_frame_positioner_meta_transform (GstBuffer * dest, GstMeta * meta,
|
||||
GstBuffer * buffer, GQuark type, gpointer data)
|
||||
{
|
||||
GstFramePositionnerMeta *dmeta, *smeta;
|
||||
GstFramePositionerMeta *dmeta, *smeta;
|
||||
|
||||
smeta = (GstFramePositionnerMeta *) meta;
|
||||
smeta = (GstFramePositionerMeta *) meta;
|
||||
|
||||
if (GST_META_TRANSFORM_IS_COPY (type)) {
|
||||
/* only copy if the complete data is copied as well */
|
||||
dmeta =
|
||||
(GstFramePositionnerMeta *) gst_buffer_add_meta (dest,
|
||||
gst_frame_positionner_get_info (), NULL);
|
||||
(GstFramePositionerMeta *) gst_buffer_add_meta (dest,
|
||||
gst_frame_positioner_get_info (), NULL);
|
||||
dmeta->alpha = smeta->alpha;
|
||||
dmeta->posx = smeta->posx;
|
||||
dmeta->posy = smeta->posy;
|
||||
|
@ -478,10 +478,10 @@ gst_frame_positionner_meta_transform (GstBuffer * dest, GstMeta * meta,
|
|||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_frame_positionner_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
|
||||
gst_frame_positioner_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
|
||||
{
|
||||
GstFramePositionnerMeta *meta;
|
||||
GstFramePositionner *framepositionner = GST_FRAME_POSITIONNER (trans);
|
||||
GstFramePositionerMeta *meta;
|
||||
GstFramePositioner *framepositioner = GST_FRAME_POSITIONNER (trans);
|
||||
GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buf);
|
||||
|
||||
if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
|
||||
|
@ -489,17 +489,17 @@ gst_frame_positionner_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
|
|||
}
|
||||
|
||||
meta =
|
||||
(GstFramePositionnerMeta *) gst_buffer_add_meta (buf,
|
||||
gst_frame_positionner_get_info (), NULL);
|
||||
(GstFramePositionerMeta *) gst_buffer_add_meta (buf,
|
||||
gst_frame_positioner_get_info (), NULL);
|
||||
|
||||
GST_OBJECT_LOCK (framepositionner);
|
||||
meta->alpha = framepositionner->alpha;
|
||||
meta->posx = framepositionner->posx;
|
||||
meta->posy = framepositionner->posy;
|
||||
meta->width = framepositionner->width;
|
||||
meta->height = framepositionner->height;
|
||||
meta->zorder = framepositionner->zorder;
|
||||
GST_OBJECT_UNLOCK (framepositionner);
|
||||
GST_OBJECT_LOCK (framepositioner);
|
||||
meta->alpha = framepositioner->alpha;
|
||||
meta->posx = framepositioner->posx;
|
||||
meta->posy = framepositioner->posy;
|
||||
meta->width = framepositioner->width;
|
||||
meta->height = framepositioner->height;
|
||||
meta->zorder = framepositioner->zorder;
|
||||
GST_OBJECT_UNLOCK (framepositioner);
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
|
@ -26,19 +26,19 @@
|
|||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_FRAME_POSITIONNER (gst_frame_positionner_get_type())
|
||||
#define GST_FRAME_POSITIONNER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FRAME_POSITIONNER,GstFramePositionner))
|
||||
#define GST_FRAME_POSITIONNER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FRAME_POSITIONNER,GstFramePositionnerClass))
|
||||
#define GST_TYPE_FRAME_POSITIONNER (gst_frame_positioner_get_type())
|
||||
#define GST_FRAME_POSITIONNER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FRAME_POSITIONNER,GstFramePositioner))
|
||||
#define GST_FRAME_POSITIONNER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FRAME_POSITIONNER,GstFramePositionerClass))
|
||||
#define GST_IS_FRAME_POSITIONNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FRAME_POSITIONNER))
|
||||
#define GST_IS_FRAME_POSITIONNER_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FRAME_POSITIONNER))
|
||||
|
||||
typedef struct _GstFramePositionner GstFramePositionner;
|
||||
typedef struct _GstFramePositionnerClass GstFramePositionnerClass;
|
||||
typedef struct _GstFramePositionnerMeta GstFramePositionnerMeta;
|
||||
typedef struct _GstFramePositioner GstFramePositioner;
|
||||
typedef struct _GstFramePositionerClass GstFramePositionerClass;
|
||||
typedef struct _GstFramePositionerMeta GstFramePositionerMeta;
|
||||
|
||||
struct _GstFramePositionner
|
||||
struct _GstFramePositioner
|
||||
{
|
||||
GstBaseTransform base_framepositionner;
|
||||
GstBaseTransform base_framepositioner;
|
||||
|
||||
GstElement *capsfilter;
|
||||
|
||||
|
@ -59,12 +59,12 @@ struct _GstFramePositionner
|
|||
/* This should never be made public, no padding needed */
|
||||
};
|
||||
|
||||
struct _GstFramePositionnerClass
|
||||
struct _GstFramePositionerClass
|
||||
{
|
||||
GstBaseTransformClass base_framepositionner_class;
|
||||
GstBaseTransformClass base_framepositioner_class;
|
||||
};
|
||||
|
||||
struct _GstFramePositionnerMeta {
|
||||
struct _GstFramePositionerMeta {
|
||||
GstMeta meta;
|
||||
|
||||
gdouble alpha;
|
||||
|
@ -75,12 +75,12 @@ struct _GstFramePositionnerMeta {
|
|||
guint zorder;
|
||||
};
|
||||
|
||||
G_GNUC_INTERNAL void ges_frame_positionner_set_source_and_filter (GstFramePositionner *pos,
|
||||
G_GNUC_INTERNAL void ges_frame_positioner_set_source_and_filter (GstFramePositioner *pos,
|
||||
GESTrackElement *trksrc,
|
||||
GstElement *capsfilter);
|
||||
G_GNUC_INTERNAL GType gst_frame_positionner_get_type (void);
|
||||
G_GNUC_INTERNAL GType gst_frame_positioner_get_type (void);
|
||||
G_GNUC_INTERNAL GType
|
||||
gst_frame_positionner_meta_api_get_type (void);
|
||||
gst_frame_positioner_meta_api_get_type (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
Loading…
Reference in a new issue