mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
ges: Implement GESAudioTrack and GESVideoTrack, subclasses of GESTrack
This commit is contained in:
parent
ea95cb1ee3
commit
9b14c001b0
33 changed files with 431 additions and 131 deletions
|
@ -111,6 +111,12 @@ platform as well as Windows. It is released under the GNU Library General Public
|
|||
<xi:include href="xml/ges-project.xml"/>
|
||||
</chapter>
|
||||
|
||||
<chapter>
|
||||
<title>Tracks</title>
|
||||
<xi:include href="xml/ges-video-track.xml"/>
|
||||
<xi:include href="xml/ges-audio-track.xml"/>
|
||||
</chapter>
|
||||
|
||||
<chapter id="ges-hierarchy">
|
||||
<title>Object Hierarchy</title>
|
||||
<xi:include href="xml/tree_index.sgml"/>
|
||||
|
|
|
@ -69,8 +69,6 @@ ges_track_type_name
|
|||
<TITLE>GESTrack</TITLE>
|
||||
GESTrack
|
||||
GESCreateElementForGapFunc
|
||||
ges_track_audio_raw_new
|
||||
ges_track_video_raw_new
|
||||
ges_track_new
|
||||
ges_track_add_element
|
||||
ges_track_remove_element
|
||||
|
@ -79,7 +77,6 @@ ges_track_get_caps
|
|||
ges_track_enable_update
|
||||
ges_track_get_elements
|
||||
ges_track_is_updating
|
||||
ges_track_set_create_element_for_gap_func
|
||||
<SUBSECTION Standard>
|
||||
GESTrackClass
|
||||
GESTrackPrivate
|
||||
|
@ -94,6 +91,38 @@ GES_TRACK_GET_CLASS
|
|||
GES_TYPE_TRACK
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>ges-audio-track</FILE>
|
||||
<TITLE>GESAudioTrack</TITLE>
|
||||
GESAudioTrack
|
||||
ges_audio_track_new
|
||||
<SUBSECTION Standard>
|
||||
GESAudioTrackClass
|
||||
GESAudioTrackPrivate
|
||||
GES_IS_AUDIO_TRACK
|
||||
GES_IS_AUDIO_TRACK_CLASS
|
||||
GES_AUDIO_TRACK
|
||||
GES_AUDIO_TRACK_CLASS
|
||||
GES_AUDIO_TRACK_GET_CLASS
|
||||
GES_TYPE_AUDIO_TRACK
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>ges-video-track</FILE>
|
||||
<TITLE>GESVideoTrack</TITLE>
|
||||
GESVideoTrack
|
||||
ges_video_track_new
|
||||
<SUBSECTION Standard>
|
||||
GESVideoTrackClass
|
||||
GESVideoTrackPrivate
|
||||
GES_IS_VIDEO_TRACK
|
||||
GES_IS_VIDEO_TRACK_CLASS
|
||||
GES_VIDEO_TRACK
|
||||
GES_VIDEO_TRACK_CLASS
|
||||
GES_VIDEO_TRACK_GET_CLASS
|
||||
GES_TYPE_VIDEO_TRACK
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>ges-track-element</FILE>
|
||||
<TITLE>GESTrackElement</TITLE>
|
||||
|
|
|
@ -30,6 +30,8 @@ libges_@GST_API_VERSION@_la_SOURCES = \
|
|||
ges-overlay-clip.c \
|
||||
ges-text-overlay-clip.c \
|
||||
ges-track.c \
|
||||
ges-audio-track.c \
|
||||
ges-video-track.c \
|
||||
ges-track-element.c \
|
||||
ges-source.c \
|
||||
ges-operation.c \
|
||||
|
@ -89,6 +91,8 @@ libges_@GST_API_VERSION@include_HEADERS = \
|
|||
ges-base-effect.h \
|
||||
ges-effect.h \
|
||||
ges-track.h \
|
||||
ges-audio-track.h \
|
||||
ges-video-track.h \
|
||||
ges-track-element.h \
|
||||
ges-source.h \
|
||||
ges-operation.h \
|
||||
|
|
106
ges/ges-audio-track.c
Normal file
106
ges/ges-audio-track.c
Normal file
|
@ -0,0 +1,106 @@
|
|||
/* GStreamer Editing Services
|
||||
* Copyright (C) <2013> Thibault Saunier <thibault.saunier@collabora.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION: ges-audio-track:
|
||||
* @short_description: A standard GESTrack for raw audio
|
||||
*/
|
||||
|
||||
#include "ges-audio-track.h"
|
||||
|
||||
#define DEFAULT_CAPS "audio/x-raw"
|
||||
|
||||
struct _GESAudioTrackPrivate
|
||||
{
|
||||
gpointer nothing;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GESAudioTrack, ges_audio_track, GES_TYPE_TRACK);
|
||||
|
||||
/****************************************************
|
||||
* Private methods and utils *
|
||||
****************************************************/
|
||||
static GstElement *
|
||||
create_element_for_raw_audio_gap (GESTrack * track)
|
||||
{
|
||||
GstElement *elem;
|
||||
|
||||
elem = gst_element_factory_make ("audiotestsrc", NULL);
|
||||
g_object_set (elem, "wave", 4, NULL);
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************
|
||||
* GObject vmethods implementations *
|
||||
****************************************************/
|
||||
|
||||
static void
|
||||
ges_audio_track_init (GESAudioTrack * self)
|
||||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self), GES_TYPE_AUDIO_TRACK,
|
||||
GESAudioTrackPrivate);
|
||||
}
|
||||
|
||||
static void
|
||||
ges_audio_track_finalize (GObject * object)
|
||||
{
|
||||
/* TODO: Add deinitalization code here */
|
||||
|
||||
G_OBJECT_CLASS (ges_audio_track_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
ges_audio_track_class_init (GESAudioTrackClass * klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
/* GESTrackClass *parent_class = GES_TRACK_CLASS (klass);
|
||||
*/
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GESAudioTrackPrivate));
|
||||
|
||||
object_class->finalize = ges_audio_track_finalize;
|
||||
}
|
||||
|
||||
/****************************************************
|
||||
* API implementation *
|
||||
****************************************************/
|
||||
/**
|
||||
* ges_audio_track_new:
|
||||
*
|
||||
* Creates a new #GESAudioTrack of type #GES_TRACK_TYPE_AUDIO and with generic
|
||||
* raw audio caps ("audio/x-raw");
|
||||
*
|
||||
* Returns: A new #GESTrack
|
||||
*/
|
||||
GESVideoTrack *
|
||||
ges_audio_track_new (void)
|
||||
{
|
||||
GESVideoTrack *ret;
|
||||
GstCaps *caps = gst_caps_from_string (DEFAULT_CAPS);
|
||||
|
||||
ret = g_object_new (GES_TYPE_AUDIO_TRACK, "caps", caps,
|
||||
"track-type", GES_TRACK_TYPE_AUDIO, NULL);
|
||||
|
||||
ges_track_set_create_element_for_gap_func (GES_TRACK (ret),
|
||||
create_element_for_raw_audio_gap);
|
||||
|
||||
return ret;
|
||||
}
|
55
ges/ges-audio-track.h
Normal file
55
ges/ges-audio-track.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
/* GStreamer Editing Services
|
||||
* Copyright (C) <2013> Thibault Saunier <thibault.saunier@collabora.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef _GES_AUDIO_TRACK_H_
|
||||
#define _GES_AUDIO_TRACK_H_
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include "ges-track.h"
|
||||
#include "ges-types.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GES_TYPE_AUDIO_TRACK (ges_audio_track_get_type ())
|
||||
#define GES_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_AUDIO_TRACK, GESAudioTrack))
|
||||
#define GES_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_AUDIO_TRACK, GESAudioTrackClass))
|
||||
#define GES_IS_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_AUDIO_TRACK))
|
||||
#define GES_IS_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_AUDIO_TRACK))
|
||||
#define GES_AUDIO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_AUDIO_TRACK, GESAudioTrackClass))
|
||||
|
||||
typedef struct _GESAudioTrackPrivate GESAudioTrackPrivate;
|
||||
|
||||
struct _GESAudioTrackClass
|
||||
{
|
||||
GESTrackClass parent_class;
|
||||
};
|
||||
|
||||
struct _GESAudioTrack
|
||||
{
|
||||
GESTrack parent_instance;
|
||||
|
||||
GESAudioTrackPrivate *priv;
|
||||
};
|
||||
|
||||
GType ges_audio_track_get_type (void) G_GNUC_CONST;
|
||||
GESVideoTrack* ges_audio_track_new (void);
|
||||
|
||||
G_END_DECLS
|
||||
#endif /* _GES_AUDIO_TRACK_H_ */
|
|
@ -184,8 +184,8 @@ create_tracks (GESFormatter * self)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
priv->tracka = ges_track_audio_raw_new ();
|
||||
priv->trackv = ges_track_video_raw_new ();
|
||||
priv->tracka = GES_TRACK (ges_audio_track_new ());
|
||||
priv->trackv = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
if (!ges_timeline_add_track (self->timeline, priv->trackv)) {
|
||||
return FALSE;
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
#include "ges-track.h"
|
||||
#include "ges-track-element.h"
|
||||
#include "ges-meta-container.h"
|
||||
#include "ges-video-track.h"
|
||||
#include "ges-audio-track.h"
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (GESTrack, ges_track, GST_TYPE_BIN,
|
||||
G_IMPLEMENT_INTERFACE (GES_TYPE_META_CONTAINER, NULL));
|
||||
|
@ -307,26 +309,6 @@ composition_duration_cb (GstElement * composition,
|
|||
}
|
||||
}
|
||||
|
||||
/* GESCreateElementForGapFunc Gaps filler for raw tracks */
|
||||
static GstElement *
|
||||
create_element_for_raw_audio_gap (GESTrack * track)
|
||||
{
|
||||
GstElement *elem;
|
||||
|
||||
elem = gst_element_factory_make ("audiotestsrc", NULL);
|
||||
g_object_set (elem, "wave", 4, NULL);
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
static GstElement *
|
||||
create_element_for_raw_video_gap (GESTrack * track)
|
||||
{
|
||||
return gst_parse_bin_from_description
|
||||
("videotestsrc pattern=2 name=src ! capsfilter caps=video/x-raw", TRUE,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* FIXME: Find out how to avoid doing this "hack" using the GDestroyNotify
|
||||
* function pointer in the trackelements_by_start GSequence
|
||||
*
|
||||
|
@ -580,74 +562,38 @@ ges_track_new (GESTrackType type, GstCaps * caps)
|
|||
GESTrack *track;
|
||||
GstCaps *tmpcaps;
|
||||
|
||||
track = g_object_new (GES_TYPE_TRACK, "caps", caps, "track-type", type, NULL);
|
||||
/* TODO Be smarter with well known track types */
|
||||
if (type == GES_TRACK_TYPE_VIDEO) {
|
||||
tmpcaps = gst_caps_new_empty_simple ("video/x-raw");
|
||||
|
||||
if (gst_caps_is_equal (caps, tmpcaps))
|
||||
ges_track_set_create_element_for_gap_func (track,
|
||||
create_element_for_raw_video_gap);
|
||||
if (gst_caps_is_subset (caps, tmpcaps)) {
|
||||
track = GES_TRACK (ges_video_track_new ());
|
||||
ges_track_set_caps (track, caps);
|
||||
|
||||
gst_caps_unref (tmpcaps);
|
||||
return track;
|
||||
}
|
||||
gst_caps_unref (tmpcaps);
|
||||
} else if (type == GES_TRACK_TYPE_AUDIO) {
|
||||
tmpcaps = gst_caps_new_empty_simple ("audio/x-raw");
|
||||
|
||||
if (gst_caps_is_equal (caps, tmpcaps))
|
||||
ges_track_set_create_element_for_gap_func (track,
|
||||
create_element_for_raw_audio_gap);
|
||||
if (gst_caps_is_subset (caps, tmpcaps)) {
|
||||
track = GES_TRACK (ges_audio_track_new ());
|
||||
ges_track_set_caps (track, caps);
|
||||
|
||||
gst_caps_unref (tmpcaps);
|
||||
return track;
|
||||
}
|
||||
|
||||
gst_caps_unref (tmpcaps);
|
||||
}
|
||||
|
||||
track = g_object_new (GES_TYPE_TRACK, "caps", caps, "track-type", type, NULL);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
return track;
|
||||
}
|
||||
|
||||
/**
|
||||
* ges_track_video_raw_new:
|
||||
*
|
||||
* Creates a new #GESTrack of type #GES_TRACK_TYPE_VIDEO and with generic
|
||||
* raw video caps ("video/x-raw");
|
||||
*
|
||||
* Returns: A new #GESTrack.
|
||||
*/
|
||||
GESTrack *
|
||||
ges_track_video_raw_new (void)
|
||||
{
|
||||
GESTrack *track;
|
||||
GstCaps *caps = gst_caps_new_empty_simple ("video/x-raw");
|
||||
|
||||
track = ges_track_new (GES_TRACK_TYPE_VIDEO, caps);
|
||||
ges_track_set_create_element_for_gap_func (track,
|
||||
create_element_for_raw_video_gap);
|
||||
|
||||
GST_DEBUG_OBJECT (track, "New raw video track");
|
||||
|
||||
return track;
|
||||
}
|
||||
|
||||
/**
|
||||
* ges_track_audio_raw_new:
|
||||
*
|
||||
* Creates a new #GESTrack of type #GES_TRACK_TYPE_AUDIO and with generic
|
||||
* raw audio caps ("audio/x-raw");
|
||||
*
|
||||
* Returns: A new #GESTrack.
|
||||
*/
|
||||
GESTrack *
|
||||
ges_track_audio_raw_new (void)
|
||||
{
|
||||
GESTrack *track;
|
||||
GstCaps *caps = gst_caps_new_empty_simple ("audio/x-raw");
|
||||
|
||||
track = ges_track_new (GES_TRACK_TYPE_AUDIO, caps);
|
||||
ges_track_set_create_element_for_gap_func (track,
|
||||
create_element_for_raw_audio_gap);
|
||||
|
||||
GST_DEBUG_OBJECT (track, "New raw audio track %p",
|
||||
track->priv->create_element_for_gaps);
|
||||
return track;
|
||||
}
|
||||
|
||||
/**
|
||||
* ges_track_set_timeline:
|
||||
|
@ -895,7 +841,7 @@ ges_track_commit (GESTrack * track)
|
|||
*
|
||||
* Sets the function that should be used to create the GstElement used to fill gaps.
|
||||
* To avoid to provide such a function we advice you to use the
|
||||
* #ges_track_audio_raw_new and #ges_track_video_raw_new constructor when possible.
|
||||
* #ges_audio_track_new and #ges_video_track_new constructor when possible.
|
||||
*/
|
||||
void
|
||||
ges_track_set_create_element_for_gap_func (GESTrack * track,
|
||||
|
|
|
@ -91,8 +91,6 @@ void ges_track_set_create_element_for_gap_func (GESTrack *track, G
|
|||
|
||||
/* standard methods */
|
||||
GType ges_track_get_type (void);
|
||||
GESTrack* ges_track_video_raw_new (void);
|
||||
GESTrack* ges_track_audio_raw_new (void);
|
||||
GESTrack* ges_track_new (GESTrackType type, GstCaps * caps);
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -164,4 +164,10 @@ typedef struct _GESProjectClass GESProjectClass;
|
|||
typedef struct _GESExtractable GESExtractable;
|
||||
typedef struct _GESExtractableInterface GESExtractableInterface;
|
||||
|
||||
typedef struct _GESVideoTrackClass GESVideoTrackClass;
|
||||
typedef struct _GESVideoTrack GESVideoTrack;
|
||||
|
||||
typedef struct _GESAudioTrackClass GESAudioTrackClass;
|
||||
typedef struct _GESAudioTrack GESAudioTrack;
|
||||
|
||||
#endif /* __GES_TYPES_H__ */
|
||||
|
|
|
@ -47,8 +47,8 @@ ges_timeline_new_audio_video (void)
|
|||
/* This is our main GESTimeline */
|
||||
timeline = ges_timeline_new ();
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
trackv = ges_track_video_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
trackv = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
if (!ges_timeline_add_track (timeline, trackv) ||
|
||||
!ges_timeline_add_track (timeline, tracka)) {
|
||||
|
|
94
ges/ges-video-track.c
Normal file
94
ges/ges-video-track.c
Normal file
|
@ -0,0 +1,94 @@
|
|||
/* GStreamer Editing Services
|
||||
* Copyright (C) <2013> Thibault Saunier <thibault.saunier@collabora.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION: ges-video-track:
|
||||
* @short_description: A standard GESTrack for raw video
|
||||
*/
|
||||
|
||||
#include "ges-video-track.h"
|
||||
|
||||
struct _GESVideoTrackPrivate
|
||||
{
|
||||
gpointer nothing;
|
||||
};
|
||||
|
||||
#define GES_VIDEO_TRACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_VIDEO_TRACK, GESVideoTrackPrivate))
|
||||
|
||||
G_DEFINE_TYPE (GESVideoTrack, ges_video_track, GES_TYPE_TRACK);
|
||||
|
||||
static GstElement *
|
||||
create_element_for_raw_video_gap (GESTrack * track)
|
||||
{
|
||||
return gst_parse_bin_from_description
|
||||
("videotestsrc pattern=2 name=src ! capsfilter caps=video/x-raw", TRUE,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
ges_video_track_init (GESVideoTrack * ges_video_track)
|
||||
{
|
||||
/* GESVideoTrackPrivate *priv = GES_VIDEO_TRACK_GET_PRIVATE (ges_video_track);
|
||||
*/
|
||||
|
||||
/* TODO: Add initialization code here */
|
||||
}
|
||||
|
||||
static void
|
||||
ges_video_track_finalize (GObject * object)
|
||||
{
|
||||
/* TODO: Add deinitalization code here */
|
||||
|
||||
G_OBJECT_CLASS (ges_video_track_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
ges_video_track_class_init (GESVideoTrackClass * klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
/* GESTrackClass *parent_class = GES_TRACK_CLASS (klass);
|
||||
*/
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GESVideoTrackPrivate));
|
||||
|
||||
object_class->finalize = ges_video_track_finalize;
|
||||
}
|
||||
|
||||
/**
|
||||
* ges_video_track_new:
|
||||
*
|
||||
* Creates a new #GESVideoTrack of type #GES_TRACK_TYPE_VIDEO and with generic
|
||||
* raw video caps ("video/x-raw");
|
||||
*
|
||||
* Returns: A new #GESTrack.
|
||||
*/
|
||||
GESVideoTrack *
|
||||
ges_video_track_new (void)
|
||||
{
|
||||
GESVideoTrack *ret;
|
||||
GstCaps *caps = gst_caps_new_empty_simple ("video/x-raw");
|
||||
|
||||
ret = g_object_new (GES_TYPE_VIDEO_TRACK, "track-type", GES_TRACK_TYPE_VIDEO,
|
||||
"caps", caps, NULL);
|
||||
|
||||
ges_track_set_create_element_for_gap_func (GES_TRACK (ret),
|
||||
create_element_for_raw_video_gap);
|
||||
|
||||
return ret;
|
||||
}
|
54
ges/ges-video-track.h
Normal file
54
ges/ges-video-track.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/* GStreamer Editing Services
|
||||
* Copyright (C) <2013> Thibault Saunier <thibault.saunier@collabora.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef _GES_VIDEO_TRACK_H_
|
||||
#define _GES_VIDEO_TRACK_H_
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include "ges-track.h"
|
||||
#include "ges-types.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
#define GES_TYPE_VIDEO_TRACK (ges_video_track_get_type ())
|
||||
#define GES_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_VIDEO_TRACK, GESVideoTrack))
|
||||
#define GES_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_VIDEO_TRACK, GESVideoTrackClass))
|
||||
#define GES_IS_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_VIDEO_TRACK))
|
||||
#define GES_IS_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_VIDEO_TRACK))
|
||||
#define GES_VIDEO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_VIDEO_TRACK, GESVideoTrackClass))
|
||||
|
||||
typedef struct _GESVideoTrackPrivate GESVideoTrackPrivate;
|
||||
|
||||
struct _GESVideoTrackClass
|
||||
{
|
||||
GESTrackClass parent_class;
|
||||
};
|
||||
|
||||
struct _GESVideoTrack
|
||||
{
|
||||
GESTrack parent_instance;
|
||||
|
||||
GESVideoTrackPrivate *priv;
|
||||
};
|
||||
|
||||
GType ges_video_track_get_type (void) G_GNUC_CONST;
|
||||
GESVideoTrack * ges_video_track_new (void);
|
||||
|
||||
G_END_DECLS
|
||||
#endif /* _GES_VIDEO_TRACK_H_ */
|
|
@ -76,6 +76,8 @@
|
|||
#include <ges/ges-utils.h>
|
||||
#include <ges/ges-meta-container.h>
|
||||
#include <ges/ges-gerror.h>
|
||||
#include <ges/ges-audio-track.h>
|
||||
#include <ges/ges-video-track.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
|
|
@ -133,8 +133,8 @@ GST_START_TEST (test_test_source_in_layer)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
a = ges_track_audio_raw_new ();
|
||||
v = ges_track_video_raw_new ();
|
||||
a = GES_TRACK (ges_audio_track_new ());
|
||||
v = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, a);
|
||||
ges_timeline_add_track (timeline, v);
|
||||
|
@ -258,7 +258,7 @@ GST_START_TEST (test_gap_filling_basic)
|
|||
|
||||
ges_init ();
|
||||
|
||||
track = ges_track_audio_raw_new ();
|
||||
track = GES_TRACK (ges_audio_track_new ());
|
||||
fail_unless (track != NULL);
|
||||
|
||||
composition = find_composition (track);
|
||||
|
@ -358,14 +358,14 @@ GST_START_TEST (test_gap_filling_empty_track)
|
|||
|
||||
ges_init ();
|
||||
|
||||
track = ges_track_audio_raw_new ();
|
||||
track = GES_TRACK(ges_audio_track_new ());
|
||||
|
||||
layer = ges_layer_new ();
|
||||
timeline = ges_timeline_new ();
|
||||
fail_unless (timeline != NULL);
|
||||
fail_unless (ges_timeline_add_layer (timeline, layer));
|
||||
fail_unless (ges_timeline_add_track (timeline, track));
|
||||
fail_unless (ges_timeline_add_track (timeline, ges_track_video_raw_new ()));
|
||||
fail_unless (ges_timeline_add_track (timeline, GES_TRACK(ges_video_track_new ())));
|
||||
|
||||
/* Set some properties */
|
||||
asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
|
||||
|
|
|
@ -225,8 +225,8 @@ GST_START_TEST (test_clip_group_ungroup)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = ges_layer_new ();
|
||||
audio_track = ges_track_audio_raw_new ();
|
||||
video_track = ges_track_video_raw_new ();
|
||||
audio_track = GES_TRACK (ges_audio_track_new ());
|
||||
video_track = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
fail_unless (ges_timeline_add_track (timeline, audio_track));
|
||||
fail_unless (ges_timeline_add_track (timeline, video_track));
|
||||
|
@ -349,7 +349,7 @@ GST_START_TEST (test_clip_refcount_remove_child)
|
|||
ges_init ();
|
||||
|
||||
clip = GES_CLIP (ges_test_clip_new ());
|
||||
track = ges_track_audio_raw_new ();
|
||||
track = GES_TRACK (ges_audio_track_new ());
|
||||
effect = GES_TRACK_ELEMENT (ges_effect_new ("identity"));
|
||||
|
||||
fail_unless (ges_track_add_element (track, effect));
|
||||
|
|
|
@ -50,8 +50,8 @@ GST_START_TEST (test_add_effect_to_clip)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
track_audio = ges_track_audio_raw_new ();
|
||||
track_video = ges_track_video_raw_new ();
|
||||
track_audio = GES_TRACK (ges_audio_track_new ());
|
||||
track_video = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, track_audio);
|
||||
ges_timeline_add_track (timeline, track_video);
|
||||
|
@ -97,7 +97,7 @@ GST_START_TEST (test_get_effects_from_tl)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
track_video = ges_track_video_raw_new ();
|
||||
track_video = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, track_video);
|
||||
ges_timeline_add_layer (timeline, layer);
|
||||
|
@ -175,8 +175,8 @@ GST_START_TEST (test_effect_clip)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
track_audio = ges_track_audio_raw_new ();
|
||||
track_video = ges_track_video_raw_new ();
|
||||
track_audio = GES_TRACK (ges_audio_track_new ());
|
||||
track_video = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, track_audio);
|
||||
ges_timeline_add_track (timeline, track_video);
|
||||
|
@ -245,8 +245,8 @@ GST_START_TEST (test_priorities_clip)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
track_audio = ges_track_audio_raw_new ();
|
||||
track_video = ges_track_video_raw_new ();
|
||||
track_audio = GES_TRACK (ges_audio_track_new ());
|
||||
track_video = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, track_audio);
|
||||
ges_timeline_add_track (timeline, track_video);
|
||||
|
@ -341,7 +341,7 @@ GST_START_TEST (test_effect_set_properties)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
track_video = ges_track_video_raw_new ();
|
||||
track_video = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, track_video);
|
||||
ges_timeline_add_layer (timeline, layer);
|
||||
|
@ -429,7 +429,7 @@ GST_START_TEST (test_clip_signals)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
track_video = ges_track_video_raw_new ();
|
||||
track_video = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, track_video);
|
||||
ges_timeline_add_layer (timeline, layer);
|
||||
|
|
|
@ -158,7 +158,7 @@ GST_START_TEST (test_layer_priorities)
|
|||
fail_unless_equals_int (ges_layer_get_priority (layer2), 1);
|
||||
fail_unless_equals_int (ges_layer_get_priority (layer3), 2);
|
||||
|
||||
track = ges_track_video_raw_new ();
|
||||
track = GES_TRACK (ges_video_track_new ());
|
||||
fail_unless (track != NULL);
|
||||
fail_unless (ges_timeline_add_track (timeline, track));
|
||||
|
||||
|
|
|
@ -122,8 +122,8 @@ GST_START_TEST (test_overlay_in_layer)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
a = ges_track_audio_raw_new ();
|
||||
v = ges_track_video_raw_new ();
|
||||
a = GES_TRACK (ges_audio_track_new ());
|
||||
v = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, a);
|
||||
ges_timeline_add_track (timeline, v);
|
||||
|
|
|
@ -35,8 +35,8 @@ GST_START_TEST (test_text_properties_in_layer)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
a = ges_track_audio_raw_new ();
|
||||
v = ges_track_video_raw_new ();
|
||||
a = GES_TRACK (ges_audio_track_new ());
|
||||
v = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, a);
|
||||
ges_timeline_add_track (timeline, v);
|
||||
|
|
|
@ -63,7 +63,7 @@ GST_START_TEST (test_basic_timeline_edition)
|
|||
|
||||
ges_init ();
|
||||
|
||||
track = ges_track_audio_raw_new ();
|
||||
track = GES_TRACK (ges_audio_track_new ());
|
||||
fail_unless (track != NULL);
|
||||
|
||||
timeline = ges_timeline_new ();
|
||||
|
|
|
@ -45,7 +45,7 @@ GST_START_TEST (test_title_source_properties)
|
|||
|
||||
ges_init ();
|
||||
|
||||
track = ges_track_video_raw_new ();
|
||||
track = GES_TRACK (ges_video_track_new ());
|
||||
fail_unless (track != NULL);
|
||||
layer = ges_layer_new ();
|
||||
fail_unless (layer != NULL);
|
||||
|
@ -122,8 +122,8 @@ GST_START_TEST (test_title_source_in_layer)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
a = ges_track_audio_raw_new ();
|
||||
v = ges_track_video_raw_new ();
|
||||
a = GES_TRACK (ges_audio_track_new ());
|
||||
v = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
ges_timeline_add_track (timeline, a);
|
||||
ges_timeline_add_track (timeline, v);
|
||||
|
|
|
@ -35,7 +35,7 @@ GST_START_TEST (test_transition_basic)
|
|||
|
||||
ges_init ();
|
||||
|
||||
track = ges_track_video_raw_new ();
|
||||
track = GES_TRACK (ges_video_track_new ());
|
||||
layer = ges_layer_new ();
|
||||
timeline = ges_timeline_new ();
|
||||
fail_unless (track != NULL);
|
||||
|
@ -79,7 +79,7 @@ GST_START_TEST (test_transition_properties)
|
|||
clip = GES_CLIP (ges_transition_clip_new
|
||||
(GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE));
|
||||
|
||||
track = ges_track_video_raw_new ();
|
||||
track = GES_TRACK (ges_video_track_new ());
|
||||
layer = ges_layer_new ();
|
||||
timeline = ges_timeline_new ();
|
||||
fail_unless (track != NULL);
|
||||
|
|
|
@ -214,8 +214,8 @@ GST_START_TEST (test_filesource_images)
|
|||
|
||||
ges_init ();
|
||||
|
||||
a = ges_track_audio_raw_new ();
|
||||
v = ges_track_video_raw_new ();
|
||||
a = GES_TRACK (ges_audio_track_new ());
|
||||
v = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
layer = ges_layer_new ();
|
||||
fail_unless (layer != NULL);
|
||||
|
|
|
@ -1228,7 +1228,7 @@ app_add_audio_track (App * app)
|
|||
if (app->audio_tracks)
|
||||
return;
|
||||
|
||||
app->audio_track = ges_track_audio_raw_new ();
|
||||
app->audio_track = GES_TRACK (ges_audio_track_new ());
|
||||
ges_timeline_add_track (app->timeline, app->audio_track);
|
||||
}
|
||||
|
||||
|
@ -1248,7 +1248,7 @@ app_add_video_track (App * app)
|
|||
if (app->video_tracks)
|
||||
return;
|
||||
|
||||
app->video_track = ges_track_video_raw_new ();
|
||||
app->video_track = GES_TRACK (ges_video_track_new ());
|
||||
ges_timeline_add_track (app->timeline, app->video_track);
|
||||
}
|
||||
|
||||
|
@ -1322,13 +1322,13 @@ app_new (void)
|
|||
|
||||
/* add base audio and video track */
|
||||
|
||||
if (!(a = ges_track_audio_raw_new ()))
|
||||
if (!(a = GES_TRACK (ges_audio_track_new ())))
|
||||
goto fail;
|
||||
|
||||
if (!(ges_timeline_add_track (ret->timeline, a)))
|
||||
goto fail;
|
||||
|
||||
if (!(v = ges_track_video_raw_new ()))
|
||||
if (!(v = GES_TRACK (ges_video_track_new ())))
|
||||
goto fail;
|
||||
|
||||
if (!(ges_timeline_add_track (ret->timeline, v)))
|
||||
|
|
|
@ -94,10 +94,10 @@ make_timeline (char *path, float duration, char *text, guint32 color,
|
|||
timeline = ges_timeline_new ();
|
||||
ges_timeline_pipeline_add_timeline (pipeline, timeline);
|
||||
|
||||
trackv = ges_track_video_raw_new ();
|
||||
trackv = GES_TRACK (ges_video_track_new ());
|
||||
ges_timeline_add_track (timeline, trackv);
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
ges_timeline_add_track (timeline, tracka);
|
||||
|
||||
layer1 = GES_LAYER (ges_layer_new ());
|
||||
|
|
|
@ -73,8 +73,8 @@ main (int argc, gchar ** argv)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
trackv = ges_track_video_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
trackv = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
layer1 = (GESLayer *) ges_simple_layer_new ();
|
||||
layer2 = (GESLayer *) ges_simple_layer_new ();
|
||||
|
|
|
@ -47,7 +47,7 @@ main (int argc, gchar ** argv)
|
|||
/* This is our main GESTimeline */
|
||||
timeline = ges_timeline_new ();
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
|
||||
/* We are only going to be doing one layer of clips */
|
||||
layer = ges_layer_new ();
|
||||
|
|
|
@ -46,7 +46,7 @@ main (int argc, gchar ** argv)
|
|||
/* This is our main GESTimeline */
|
||||
timeline = ges_timeline_new ();
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
|
||||
/* We are only going to be doing one layer of clips */
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
|
|
|
@ -101,7 +101,7 @@ main (int argc, gchar ** argv)
|
|||
/* This is our main GESTimeline */
|
||||
timeline = ges_timeline_new ();
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
|
||||
/* We are only going to be doing one layer of clips */
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
|
|
|
@ -67,10 +67,10 @@ make_timeline (char *path, float duration, char *text)
|
|||
timeline = ges_timeline_new ();
|
||||
ges_timeline_pipeline_add_timeline (pipeline, timeline);
|
||||
|
||||
trackv = ges_track_video_raw_new ();
|
||||
trackv = GES_TRACK (ges_video_track_new ());
|
||||
ges_timeline_add_track (timeline, trackv);
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
ges_timeline_add_track (timeline, tracka);
|
||||
|
||||
layer1 = GES_LAYER (ges_layer_new ());
|
||||
|
|
|
@ -80,8 +80,8 @@ create_timeline (void)
|
|||
|
||||
timeline = ges_timeline_new ();
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
trackv = ges_track_video_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
trackv = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
|
||||
|
|
|
@ -102,10 +102,10 @@ make_timeline (gchar * nick, gdouble tdur, gchar * patha, gfloat adur,
|
|||
timeline = ges_timeline_new ();
|
||||
ges_timeline_pipeline_add_timeline (pipeline, timeline);
|
||||
|
||||
trackv = ges_track_video_raw_new ();
|
||||
trackv = GES_TRACK (ges_video_track_new ());
|
||||
ges_timeline_add_track (timeline, trackv);
|
||||
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
ges_timeline_add_track (timeline, tracka);
|
||||
|
||||
layer1 = GES_LAYER (ges_layer_new ());
|
||||
|
|
|
@ -135,9 +135,9 @@ create_timeline (int nbargs, gchar ** argv, gchar * audio, gchar * video)
|
|||
timeline = GES_TIMELINE (ges_asset_extract (GES_ASSET (project), NULL));
|
||||
|
||||
if (audio)
|
||||
tracka = ges_track_audio_raw_new ();
|
||||
tracka = GES_TRACK (ges_audio_track_new ());
|
||||
if (video)
|
||||
trackv = ges_track_video_raw_new ();
|
||||
trackv = GES_TRACK (ges_video_track_new ());
|
||||
|
||||
/* We are only going to be doing one layer of clips */
|
||||
layer = (GESLayer *) ges_simple_layer_new ();
|
||||
|
|
Loading…
Reference in a new issue