From ee8bf88ebf131cf7c7161356540efc20bf411e14 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Tue, 4 Aug 2009 17:13:11 +0200 Subject: [PATCH 1/1] Initial code drop --- .gitmodules | 3 + Makefile.am | 39 +++++ README | 67 +++++++++ autogen.sh | 120 +++++++++++++++ configure.ac | 254 ++++++++++++++++++++++++++++++++ src/ges-simple-timeline-layer.c | 88 +++++++++++ src/ges-simple-timeline-layer.h | 60 ++++++++ src/ges-timeline-layer.c | 94 ++++++++++++ src/ges-timeline-layer.h | 59 ++++++++ src/ges-timeline-object.c | 97 ++++++++++++ src/ges-timeline-object.h | 59 ++++++++ src/ges-timeline-pipeline.c | 92 ++++++++++++ src/ges-timeline-pipeline.h | 59 ++++++++ src/ges-timeline-source.c | 88 +++++++++++ src/ges-timeline-source.h | 59 ++++++++ src/ges-timeline-transition.c | 88 +++++++++++ src/ges-timeline-transition.h | 58 ++++++++ src/ges-timeline.c | 154 +++++++++++++++++++ src/ges-timeline.h | 74 ++++++++++ src/ges-track.c | 96 ++++++++++++ src/ges-track.h | 61 ++++++++ 21 files changed, 1769 insertions(+) create mode 100644 .gitmodules create mode 100644 Makefile.am create mode 100644 README create mode 100755 autogen.sh create mode 100644 configure.ac create mode 100644 src/ges-simple-timeline-layer.c create mode 100644 src/ges-simple-timeline-layer.h create mode 100644 src/ges-timeline-layer.c create mode 100644 src/ges-timeline-layer.h create mode 100644 src/ges-timeline-object.c create mode 100644 src/ges-timeline-object.h create mode 100644 src/ges-timeline-pipeline.c create mode 100644 src/ges-timeline-pipeline.h create mode 100644 src/ges-timeline-source.c create mode 100644 src/ges-timeline-source.h create mode 100644 src/ges-timeline-transition.c create mode 100644 src/ges-timeline-transition.h create mode 100644 src/ges-timeline.c create mode 100644 src/ges-timeline.h create mode 100644 src/ges-track.c create mode 100644 src/ges-track.h diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..1ba590b440 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "common"] + path = common + url = git://anongit.freedesktop.org/gstreamer/common diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000000..94bca7a282 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,39 @@ +DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc + +SUBDIRS = \ + gst-libs gst sys ext \ + m4 common docs tests po + +DIST_SUBDIRS = \ + gst gst-libs sys ext \ + m4 common docs tests po + +# include before EXTRA_DIST for win32 assignment +include $(top_srcdir)/common/win32.mak + +EXTRA_DIST = \ + gst-plugins-bad.spec depcomp \ + AUTHORS COPYING NEWS README RELEASE REQUIREMENTS \ + ChangeLog gst-plugins-bad.doap autogen.sh \ + $(win32) + +DISTCLEANFILES = _stdint.h + +ACLOCAL_AMFLAGS = -I m4 -I common/m4 + +include $(top_srcdir)/common/release.mak +include $(top_srcdir)/common/po.mak + +check-valgrind: + cd tests/check && make check-valgrind + +if HAVE_GST_CHECK +check-torture: + cd tests/check && make torture +else +check-torture: + true +endif + +include $(top_srcdir)/common/coverage/lcov.mak + diff --git a/README b/README new file mode 100644 index 0000000000..40c8a7969a --- /dev/null +++ b/README @@ -0,0 +1,67 @@ +GStreamer Editing Services +-------------------------- + + This is a high-level library for facilitating the creation of audio/video +non-linear editors. + + +Dependencies: +------------- + + * GStreamer core + * gst-plugins-base + * gnonlin + +Classes: +-------- + + + TimelinePipeline : GstPipeline for Timeline playback/rendering + => Add methods to save/load to/from files + ?? Do we need undo/redo support ? + Timeline : Top-level container (is also a GstBin) + SimpleAVTimeline : Convenience A+V Timeline + TimelineObject : Base-class for objects you can put in a TimelineLayer + TimelineSource : Source objects to use in a TimelineLayer + => _from_uri(const gchar *uri): automatically creates a TimelineSource + TimelineTransition : Transitions + (TimelineEffect) + TimelineLayer : Layer of TimelineObject + SimpleTimelineLayer : Simpler API (contiguous objects, list API) + + + Track : High-level single-media Composition (is a GstBin). Represents a 'stream'. + TrackObject : Base-class for objects you can put in a Track + TrackSource + TrackOperation + +Usage: +------ + + Create a TimelinePipeline... + + pipeline = ges_timeline_pipeline_new(); + + ... with one layer + + layer1 = ges_simple_timeline_layer_new(); + ges_timeline_pipeline_add_layer (layer1); + + Add a video source to the end + + src1 = ges_timeline_source_from_uri("/my/cool/file.avi"); + ges_simple_timeline_layer_add(src1, -1); + + Set video output XID and play back the timeline + + ges_timeline_pipeline_set_xid(1234567); + ges_timeline_pipeline_play(); + + Save Timeline to a file + + ges_timeline_save ("/my/project.ges"); + + Stop output and render to a file + + ges_timeline_pipeline_stop(); + ges_timeline_pipeline_render_to_file("/my/output.mov", OUTPUT_SETTINGS); diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000000..85bd1ed704 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,120 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +DIE=0 +package=gst-editing-services +srcfile=src/ges-timeline.c + +# Make sure we have common +if test ! -f common/gst-autogen.sh; +then + echo "+ Setting up common submodule" + git submodule init +fi +git submodule update + +# source helper functions +if test ! -f common/gst-autogen.sh; +then + echo There is something wrong with your source tree. + echo You are missing common/gst-autogen.sh + exit 1 +fi +. common/gst-autogen.sh + +# install pre-commit hook for doing clean commits +if test ! \( -x .git/hooks/pre-commit -a -L .git/hooks/pre-commit \); +then + rm -f .git/hooks/pre-commit + ln -s ../../common/hooks/pre-commit.hook .git/hooks/pre-commit +fi + +CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-gtk-doc' + +autogen_options $@ + +printf "+ check for build tools" +if test ! -z "$NOCHECK"; then echo " skipped"; else echo; fi +version_check "autoconf" "$AUTOCONF autoconf autoconf-2.54 autoconf-2.53 autoconf-2.52" \ + "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 52 || DIE=1 +version_check "automake" "$AUTOMAKE automake automake-1.11 automake-1.10 automake-1.9 automake-1.7 automake-1.6 automake-1.5" \ + "ftp://ftp.gnu.org/pub/gnu/automake/" 1 7 || DIE=1 +version_check "autopoint" "autopoint" \ + "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 17 || DIE=1 +version_check "libtoolize" "$LIBTOOLIZE libtoolize glibtoolize" \ + "ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1 +version_check "pkg-config" "" \ + "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1 + +die_check $DIE + +autoconf_2_52d_check || DIE=1 +aclocal_check || DIE=1 +autoheader_check || DIE=1 + +die_check $DIE + +# if no arguments specified then this will be printed +if test -z "$*"; then + echo "+ checking for autogen.sh options" + echo " This autogen script will automatically run ./configure as:" + echo " ./configure $CONFIGURE_DEF_OPT" + echo " To pass any additional options, please specify them on the $0" + echo " command line." +fi + +toplevel_check $srcfile + +# autopoint +# older autopoint (< 0.12) has a tendency to complain about mkinstalldirs +if test -x mkinstalldirs; then rm mkinstalldirs; fi +# first remove patch if necessary, then run autopoint, then reapply +if test -f po/Makefile.in.in; +then + patch -p0 -R < common/gettext.patch +fi +tool_run "$autopoint --force" +patch -p0 < common/gettext.patch + +tool_run "$libtoolize" "--copy --force" +tool_run "$aclocal" "-I m4 -I common/m4 $ACLOCAL_FLAGS" +tool_run "$autoheader" + +# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -- wingo +echo timestamp > stamp-h.in 2> /dev/null + +tool_run "$autoconf" +tool_run "$automake" "-a -c" + +# if enable exists, add an -enable option for each of the lines in that file +if test -f enable; then + for a in `cat enable`; do + CONFIGURE_FILE_OPT="--enable-$a" + done +fi + +# if disable exists, add an -disable option for each of the lines in that file +if test -f disable; then + for a in `cat disable`; do + CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a" + done +fi + +test -n "$NOCONFIGURE" && { + echo "+ skipping configure stage for package $package, as requested." + echo "+ autogen.sh done." + exit 0 +} + +echo "+ running configure ... " +test ! -z "$CONFIGURE_DEF_OPT" && echo " ./configure default flags: $CONFIGURE_DEF_OPT" +test ! -z "$CONFIGURE_EXT_OPT" && echo " ./configure external flags: $CONFIGURE_EXT_OPT" +test ! -z "$CONFIGURE_FILE_OPT" && echo " ./configure enable/disable flags: $CONFIGURE_FILE_OPT" +echo + +./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || { + echo " configure failed" + exit 1 +} + +echo "Now type 'make' to compile $package." diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000000..572e140b36 --- /dev/null +++ b/configure.ac @@ -0,0 +1,254 @@ +AC_PREREQ(2.52) + +dnl initialize autoconf +dnl when going to/from release please set the nano (fourth number) right ! +dnl releases only do Wall, cvs and prerelease does Werror too +AC_INIT(GStreamer Editing Services, 0.10.0.0, + http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, + gstreamer-editing-services) + +AG_GST_INIT + +dnl initialize automake +AM_INIT_AUTOMAKE([-Wno-portability]) + +dnl define PACKAGE_VERSION_* variables +AS_VERSION + +dnl check if this is a release version +AS_NANO(GST_CVS="no", GST_CVS="yes") + +dnl can autoconf find the source ? +AC_CONFIG_SRCDIR([src/ges-timeline.c]) + +dnl define the output header for config +AM_CONFIG_HEADER([config.h]) + +dnl AM_MAINTAINER_MODE only provides the option to configure to enable it +AM_MAINTAINER_MODE + +dnl sets host_* variables +AC_CANONICAL_HOST + +dnl our libraries and install dirs use major.minor as a version +GST_MAJORMINOR=$GST_EDITING_SERVICES_VERSION_MAJOR.$GST_EDITING_SERVICES_VERSION_MINOR +dnl we override it here if we need to for the release candidate of new series +GST_MAJORMINOR=0.10 +AC_SUBST(GST_MAJORMINOR) + +dnl FIXME: this macro doesn't actually work; +dnl the generated libtool script has no support for the listed tags. +dnl So this needs to be fixed first if we want to use this +dnl AS_LIBTOOL_TAGS([CXX]) + +AC_LIBTOOL_WIN32_DLL +AM_PROG_LIBTOOL + +dnl *** required versions of GStreamer stuff *** +GST_REQ=0.10.23.1 +GSTPB_REQ=0.10.23.1 + +dnl *** autotools stuff **** + +dnl allow for different autotools +AS_AUTOTOOLS_ALTERNATE + +dnl Add parameters for aclocal +AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4") + +dnl set up gettext +dnl the version check needs to stay here because autopoint greps for it +AM_GNU_GETTEXT_VERSION([0.17]) +AM_GNU_GETTEXT([external]) +AG_GST_GETTEXT([gst-editing-services-$GST_MAJORMINOR]) + +dnl *** check for arguments to configure *** + +AG_GST_ARG_DEBUG +AG_GST_ARG_PROFILING +AG_GST_ARG_VALGRIND +AG_GST_ARG_GCOV + +AG_GST_ARG_EXAMPLES + +AG_GST_ARG_WITH_PKG_CONFIG_PATH +AG_GST_ARG_WITH_PACKAGE_NAME +AG_GST_ARG_WITH_PACKAGE_ORIGIN + +dnl *** checks for platform *** + +dnl * hardware/architecture * + +dnl common/m4/gst-arch.m4 +dnl check CPU type +AG_GST_ARCH + +dnl Determine endianness +AC_C_BIGENDIAN + +dnl *** checks for programs *** + +dnl find a compiler +AC_PROG_CC + +dnl determine c++ compiler +AC_PROG_CXX +dnl determine if c++ is available on this system +AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no) + +AS_PROG_OBJC + +dnl check if the compiler supports '-c' and '-o' options +AM_PROG_CC_C_O + +dnl check if the compiler supports do while(0) macros +AG_GST_CHECK_DOWHILE_MACROS + +AC_PATH_PROG(VALGRIND_PATH, valgrind, no) +AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno") + +dnl check for documentation tools +GTK_DOC_CHECK([1.3]) +AS_PATH_PYTHON([2.1]) +AG_GST_PLUGIN_DOCS([1.3],[2.1]) + +dnl *** checks for libraries *** + +dnl check for libm, for sin() etc. +# AC_CHECK_LIBM +# AC_SUBST(LIBM) + +dnl *** checks for header files *** + +AC_CHECK_HEADERS([unistd.h], HAVE_UNISTD_H=yes) +AM_CONDITIONAL(HAVE_UNISTD_H, test "x$HAVE_UNISTD_H" = "xyes") + +if test "x$HAVE_UNISTD_H" != "xyes"; then + GST_PLUGINS_SELECTED=`echo $GST_PLUGINS_SELECTED | $SED -e s/festival//` +fi + +dnl *** checks for types/defines *** + +dnl *** checks for structures *** + +dnl *** checks for compiler characteristics *** + +dnl *** checks for library functions *** + +dnl *** checks for headers *** + +dnl *** checks for dependency libraries *** + +dnl GLib is required +AG_GST_GLIB_CHECK([2.6]) + +dnl checks for gstreamer +dnl uninstalled is selected preferentially -- see pkg-config(1) +AG_GST_CHECK_GST($GST_MAJORMINOR, [$GST_REQ], yes) +AG_GST_CHECK_GST_BASE($GST_MAJORMINOR, [$GST_REQ], yes) +#AG_GST_CHECK_GST_GDP($GST_MAJORMINOR, [$GST_REQ], yes) +AG_GST_CHECK_GST_CHECK($GST_MAJORMINOR, [$GST_REQ], no) +#AG_GST_CHECK_GST_CONTROLLER($GST_MAJORMINOR, [$GST_REQ], yes) +AG_GST_CHECK_GST_PLUGINS_BASE($GST_MAJORMINOR, [$GSTPB_REQ], yes) +AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes") + +GSTPB_PLUGINS_DIR=`$PKG_CONFIG gstreamer-plugins-base-$GST_MAJORMINOR --variable pluginsdir` +AC_SUBST(GSTPB_PLUGINS_DIR) +AC_MSG_NOTICE(Using GStreamer Base Plugins in $GSTPB_PLUGINS_DIR) + +dnl Check for documentation xrefs +GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`" +GST_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-$GST_MAJORMINOR`" +GSTPB_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-plugins-base-$GST_MAJORMINOR`" +AC_SUBST(GLIB_PREFIX) +AC_SUBST(GST_PREFIX) +AC_SUBST(GSTPB_PREFIX) + +dnl set license and copyright notice +GST_LICENSE="LGPL" +AC_DEFINE_UNQUOTED(GST_LICENSE, "$GST_LICENSE", [GStreamer license]) +AC_SUBST(GST_LICENSE) + +dnl define LIBDIR so we can inform people where we live +AS_AC_EXPAND(LIBDIR, $libdir) +AC_DEFINE_UNQUOTED(LIBDIR, "$LIBDIR", [library dir]) + +dnl set location of plugin directory +AG_GST_SET_PLUGINDIR + +dnl define an ERROR_CFLAGS Makefile variable +AG_GST_SET_ERROR_CFLAGS($GST_CVS) + +dnl define an ERROR_CXXFLAGS Makefile variable +AG_GST_SET_ERROR_CXXFLAGS($GST_CVS) + +dnl define correct level for debugging messages +AG_GST_SET_LEVEL_DEFAULT($GST_CVS) + +dnl *** finalize CFLAGS, LDFLAGS, LIBS + +dnl Overview: +dnl GST_OPTION_CFLAGS: common flags for profiling, debugging, errors, ... +dnl GST_*: flags shared by built objects to link against GStreamer +dnl GST_ALL_LDFLAGS: linker flags shared by all +dnl GST_LIB_LDFLAGS: additional linker flags for all libaries +dnl GST_LT_LDFLAGS: library versioning of our libraries +dnl GST_PLUGIN_LDFLAGS: flags to be used for all plugins + +dnl GST_OPTION_CFLAGS +if test "x$USE_DEBUG" = xyes; then + PROFILE_CFLAGS="-g" +fi +AC_SUBST(PROFILE_CFLAGS) + +if test "x$PACKAGE_VERSION_NANO" = "x1"; then + dnl Define _only_ during CVS (not pre-releases or releases) + DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED" +else + DEPRECATED_CFLAGS="" +fi +AC_SUBST(DEPRECATED_CFLAGS) + +dnl every flag in GST_OPTION_CFLAGS and GST_OPTION_CXXFLAGS can be overridden +dnl at make time with e.g. make ERROR_CFLAGS="" +GST_OPTION_CFLAGS="\$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)" +GST_OPTION_CXXFLAGS="\$(ERROR_CXXFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)" +AC_SUBST(GST_OPTION_CFLAGS) +AC_SUBST(GST_OPTION_CXXFLAGS) + +dnl FIXME: do we want to rename to GST_ALL_* ? +dnl prefer internal headers to already installed ones +dnl also add builddir include for enumtypes and marshal +dnl add GST_OPTION_CFLAGS, but overridable +GST_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs $GST_CFLAGS \$(GST_OPTION_CFLAGS)" +GST_CXXFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs $GST_CXXFLAGS \$(GST_OPTION_CXXFLAGS)" +AC_SUBST(GST_CFLAGS) +AC_SUBST(GST_CXXFLAGS) +AC_SUBST(GST_LIBS) + +dnl LDFLAGS really should only contain flags, not libs - they get added before +dnl whatevertarget_LIBS and -L flags here affect the rest of the linking +GST_ALL_LDFLAGS="-no-undefined" +AC_SUBST(GST_ALL_LDFLAGS) + +SHAVE_INIT([common],[enable]) + +dnl *** output files *** + +dnl po/Makefile.in + +AC_CONFIG_FILES( +Makefile +common/Makefile +common/shave +common/shave-libtool +common/m4/Makefile +gst-plugins-bad.spec +#po/Makefile.in +#docs/Makefile +#docs/plugins/Makefile +#docs/plugins/figures/Makefile +#docs/version.entities +m4/Makefile +) +AC_OUTPUT diff --git a/src/ges-simple-timeline-layer.c b/src/ges-simple-timeline-layer.c new file mode 100644 index 0000000000..8a08b26929 --- /dev/null +++ b/src/ges-simple-timeline-layer.c @@ -0,0 +1,88 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-simple-timeline-layer.h" + +G_DEFINE_TYPE (GESSimpleTimelineLayer, ges_simple_timeline_layer, GES_TIMELINE_LAYER) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_SIMPLE_TIMELINE_LAYER, GESSimpleTimelineLayerPrivate)) + +typedef struct _GESSimpleTimelineLayerPrivate GESSimpleTimelineLayerPrivate; + +struct _GESSimpleTimelineLayerPrivate { + int dummy; +}; + +static void +ges_simple_timeline_layer_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_simple_timeline_layer_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_simple_timeline_layer_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_simple_timeline_layer_parent_class)->dispose (object); +} + +static void +ges_simple_timeline_layer_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_simple_timeline_layer_parent_class)->finalize (object); +} + +static void +ges_simple_timeline_layer_class_init (GESSimpleTimelineLayerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESSimpleTimelineLayerPrivate)); + + object_class->get_property = ges_simple_timeline_layer_get_property; + object_class->set_property = ges_simple_timeline_layer_set_property; + object_class->dispose = ges_simple_timeline_layer_dispose; + object_class->finalize = ges_simple_timeline_layer_finalize; +} + +static void +ges_simple_timeline_layer_init (GESSimpleTimelineLayer *self) +{ +} + +GESSimpleTimelineLayer* +ges_simple_timeline_layer_new (void) +{ + return g_object_new (GES_TYPE_SIMPLE_TIMELINE_LAYER, NULL); +} + diff --git a/src/ges-simple-timeline-layer.h b/src/ges-simple-timeline-layer.h new file mode 100644 index 0000000000..a04922af3f --- /dev/null +++ b/src/ges-simple-timeline-layer.h @@ -0,0 +1,60 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_SIMPLE_TIMELINE_LAYER +#define _GES_SIMPLE_TIMELINE_LAYER + +#include +#include "ges-timeline-layer.h" + +G_BEGIN_DECLS + +#define GES_TYPE_SIMPLE_TIMELINE_LAYER ges_simple_timeline_layer_get_type() + +#define GES_SIMPLE_TIMELINE_LAYER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_SIMPLE_TIMELINE_LAYER, GESSimpleTimelineLayer)) + +#define GES_SIMPLE_TIMELINE_LAYER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_SIMPLE_TIMELINE_LAYER, GESSimpleTimelineLayerClass)) + +#define GES_IS_SIMPLE_TIMELINE_LAYER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_SIMPLE_TIMELINE_LAYER)) + +#define GES_IS_SIMPLE_TIMELINE_LAYER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_SIMPLE_TIMELINE_LAYER)) + +#define GES_SIMPLE_TIMELINE_LAYER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_SIMPLE_TIMELINE_LAYER, GESSimpleTimelineLayerClass)) + +typedef struct { + GESTimelineLayer parent; +} GESSimpleTimelineLayer; + +typedef struct { + GESTimelineLayerClass parent_class; +} GESSimpleTimelineLayerClass; + +GType ges_simple_timeline_layer_get_type (void); + +GESSimpleTimelineLayer* ges_simple_timeline_layer_new (void); + +G_END_DECLS + +#endif /* _GES_SIMPLE_TIMELINE_LAYER */ + diff --git a/src/ges-timeline-layer.c b/src/ges-timeline-layer.c new file mode 100644 index 0000000000..2e9ef0ae90 --- /dev/null +++ b/src/ges-timeline-layer.c @@ -0,0 +1,94 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-timeline-layer.h" + +/** + * GESTimelineLayer + * + * Responsible for the ordering of the various contained TimelineObject(s) + */ + +G_DEFINE_TYPE (GESTimelineLayer, ges_timeline_layer, G_TYPE_OBJECT) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_TIMELINE_LAYER, GESTimelineLayerPrivate)) + +typedef struct _GESTimelineLayerPrivate GESTimelineLayerPrivate; + +struct _GESTimelineLayerPrivate { + int dummy; +}; + +static void +ges_timeline_layer_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_layer_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_layer_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_layer_parent_class)->dispose (object); +} + +static void +ges_timeline_layer_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_layer_parent_class)->finalize (object); +} + +static void +ges_timeline_layer_class_init (GESTimelineLayerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESTimelineLayerPrivate)); + + object_class->get_property = ges_timeline_layer_get_property; + object_class->set_property = ges_timeline_layer_set_property; + object_class->dispose = ges_timeline_layer_dispose; + object_class->finalize = ges_timeline_layer_finalize; +} + +static void +ges_timeline_layer_init (GESTimelineLayer *self) +{ +} + +GESTimelineLayer* +ges_timeline_layer_new (void) +{ + return g_object_new (GES_TYPE_TIMELINE_LAYER, NULL); +} + diff --git a/src/ges-timeline-layer.h b/src/ges-timeline-layer.h new file mode 100644 index 0000000000..f83b9e5366 --- /dev/null +++ b/src/ges-timeline-layer.h @@ -0,0 +1,59 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TIMELINE_LAYER +#define _GES_TIMELINE_LAYER + +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TIMELINE_LAYER ges_timeline_layer_get_type() + +#define GES_TIMELINE_LAYER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TIMELINE_LAYER, GESTimelineLayer)) + +#define GES_TIMELINE_LAYER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TIMELINE_LAYER, GESTimelineLayerClass)) + +#define GES_IS_TIMELINE_LAYER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TIMELINE_LAYER)) + +#define GES_IS_TIMELINE_LAYER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TIMELINE_LAYER)) + +#define GES_TIMELINE_LAYER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TIMELINE_LAYER, GESTimelineLayerClass)) + +typedef struct { + GObject parent; +} GESTimelineLayer; + +typedef struct { + GObjectClass parent_class; +} GESTimelineLayerClass; + +GType ges_timeline_layer_get_type (void); + +GESTimelineLayer* ges_timeline_layer_new (void); + +G_END_DECLS + +#endif /* _GES_TIMELINE_LAYER */ + diff --git a/src/ges-timeline-object.c b/src/ges-timeline-object.c new file mode 100644 index 0000000000..fffe808223 --- /dev/null +++ b/src/ges-timeline-object.c @@ -0,0 +1,97 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-timeline-object.h" + +/** + * GESTimelineObject + * + * Responsible for creating the TrackObject(s) for given TimelineTrack(s) + * + * Keeps a reference to the TrackObject(s) it created and sets/updates their properties. + */ + + +G_DEFINE_TYPE (GESTimelineObject, ges_timeline_object, G_TYPE_OBJECT) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_TIMELINE_OBJECT, GESTimelineObjectPrivate)) + +typedef struct _GESTimelineObjectPrivate GESTimelineObjectPrivate; + +struct _GESTimelineObjectPrivate { + int dummy; +}; + +static void +ges_timeline_object_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_object_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_object_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_object_parent_class)->dispose (object); +} + +static void +ges_timeline_object_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_object_parent_class)->finalize (object); +} + +static void +ges_timeline_object_class_init (GESTimelineObjectClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESTimelineObjectPrivate)); + + object_class->get_property = ges_timeline_object_get_property; + object_class->set_property = ges_timeline_object_set_property; + object_class->dispose = ges_timeline_object_dispose; + object_class->finalize = ges_timeline_object_finalize; +} + +static void +ges_timeline_object_init (GESTimelineObject *self) +{ +} + +GESTimelineObject* +ges_timeline_object_new (void) +{ + return g_object_new (GES_TYPE_TIMELINE_OBJECT, NULL); +} + diff --git a/src/ges-timeline-object.h b/src/ges-timeline-object.h new file mode 100644 index 0000000000..438c996744 --- /dev/null +++ b/src/ges-timeline-object.h @@ -0,0 +1,59 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TIMELINE_OBJECT +#define _GES_TIMELINE_OBJECT + +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TIMELINE_OBJECT ges_timeline_object_get_type() + +#define GES_TIMELINE_OBJECT(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TIMELINE_OBJECT, GESTimelineObject)) + +#define GES_TIMELINE_OBJECT_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TIMELINE_OBJECT, GESTimelineObjectClass)) + +#define GES_IS_TIMELINE_OBJECT(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TIMELINE_OBJECT)) + +#define GES_IS_TIMELINE_OBJECT_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TIMELINE_OBJECT)) + +#define GES_TIMELINE_OBJECT_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TIMELINE_OBJECT, GESTimelineObjectClass)) + +typedef struct { + GObject parent; +} GESTimelineObject; + +typedef struct { + GObjectClass parent_class; +} GESTimelineObjectClass; + +GType ges_timeline_object_get_type (void); + +GESTimelineObject* ges_timeline_object_new (void); + +G_END_DECLS + +#endif /* _GES_TIMELINE_OBJECT */ + diff --git a/src/ges-timeline-pipeline.c b/src/ges-timeline-pipeline.c new file mode 100644 index 0000000000..18faeb0515 --- /dev/null +++ b/src/ges-timeline-pipeline.c @@ -0,0 +1,92 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-timeline-pipeline.h" + +/* TimelinePipeline + * + */ + +G_DEFINE_TYPE (GESTimelinePipeline, ges_timeline_pipeline, GST_TYPE_PIPELINE) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEST_TYPE_TIMELINE_PIPELINE, GESTimelinePipelinePrivate)) + +typedef struct _GESTimelinePipelinePrivate GESTimelinePipelinePrivate; + +struct _GESTimelinePipelinePrivate { + int dummy; +}; + +static void +ges_timeline_pipeline_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_pipeline_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_pipeline_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_pipeline_parent_class)->dispose (object); +} + +static void +ges_timeline_pipeline_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_pipeline_parent_class)->finalize (object); +} + +static void +ges_timeline_pipeline_class_init (GESTimelinePipelineClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESTimelinePipelinePrivate)); + + object_class->get_property = ges_timeline_pipeline_get_property; + object_class->set_property = ges_timeline_pipeline_set_property; + object_class->dispose = ges_timeline_pipeline_dispose; + object_class->finalize = ges_timeline_pipeline_finalize; +} + +static void +ges_timeline_pipeline_init (GESTimelinePipeline *self) +{ +} + +GESTimelinePipeline* +ges_timeline_pipeline_new (void) +{ + return g_object_new (GEST_TYPE_TIMELINE_PIPELINE, NULL); +} + diff --git a/src/ges-timeline-pipeline.h b/src/ges-timeline-pipeline.h new file mode 100644 index 0000000000..3e61c5166f --- /dev/null +++ b/src/ges-timeline-pipeline.h @@ -0,0 +1,59 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TIMELINE_PIPELINE +#define _GES_TIMELINE_PIPELINE + +#include + +G_BEGIN_DECLS + +#define GEST_TYPE_TIMELINE_PIPELINE ges_timeline_pipeline_get_type() + +#define GEST_TIMELINE_PIPELINE(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEST_TYPE_TIMELINE_PIPELINE, GESTimelinePipeline)) + +#define GEST_TIMELINE_PIPELINE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GEST_TYPE_TIMELINE_PIPELINE, GESTimelinePipelineClass)) + +#define GEST_IS_TIMELINE_PIPELINE(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEST_TYPE_TIMELINE_PIPELINE)) + +#define GEST_IS_TIMELINE_PIPELINE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GEST_TYPE_TIMELINE_PIPELINE)) + +#define GEST_TIMELINE_PIPELINE_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GEST_TYPE_TIMELINE_PIPELINE, GESTimelinePipelineClass)) + +typedef struct { + GstPipeline parent; +} GESTimelinePipeline; + +typedef struct { + GstPipelineClass parent_class; +} GESTimelinePipelineClass; + +GType ges_timeline_pipeline_get_type (void); + +GESTimelinePipeline* ges_timeline_pipeline_new (void); + +G_END_DECLS + +#endif /* _GES_TIMELINE_PIPELINE */ + diff --git a/src/ges-timeline-source.c b/src/ges-timeline-source.c new file mode 100644 index 0000000000..229c74a42b --- /dev/null +++ b/src/ges-timeline-source.c @@ -0,0 +1,88 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-timeline-source.h" + +G_DEFINE_TYPE (GESTimelineSource, ges_timeline_source, GES_TIMELINE_OBJECT) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_TIMELINE_SOURCE, GESTimelineSourcePrivate)) + +typedef struct _GESTimelineSourcePrivate GESTimelineSourcePrivate; + +struct _GESTimelineSourcePrivate { + int dummy; +}; + +static void +ges_timeline_source_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_source_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_source_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_source_parent_class)->dispose (object); +} + +static void +ges_timeline_source_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_source_parent_class)->finalize (object); +} + +static void +ges_timeline_source_class_init (GESTimelineSourceClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESTimelineSourcePrivate)); + + object_class->get_property = ges_timeline_source_get_property; + object_class->set_property = ges_timeline_source_set_property; + object_class->dispose = ges_timeline_source_dispose; + object_class->finalize = ges_timeline_source_finalize; +} + +static void +ges_timeline_source_init (GESTimelineSource *self) +{ +} + +GESTimelineSource* +ges_timeline_source_new (void) +{ + return g_object_new (GES_TYPE_TIMELINE_SOURCE, NULL); +} + diff --git a/src/ges-timeline-source.h b/src/ges-timeline-source.h new file mode 100644 index 0000000000..d0162935bc --- /dev/null +++ b/src/ges-timeline-source.h @@ -0,0 +1,59 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TIMELINE_SOURCE +#define _GES_TIMELINE_SOURCE + +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TIMELINE_SOURCE ges_timeline_source_get_type() + +#define GES_TIMELINE_SOURCE(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TIMELINE_SOURCE, GESTimelineSource)) + +#define GES_TIMELINE_SOURCE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TIMELINE_SOURCE, GESTimelineSourceClass)) + +#define GES_IS_TIMELINE_SOURCE(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TIMELINE_SOURCE)) + +#define GES_IS_TIMELINE_SOURCE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TIMELINE_SOURCE)) + +#define GES_TIMELINE_SOURCE_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TIMELINE_SOURCE, GESTimelineSourceClass)) + +typedef struct { + GESTimelineObject parent; +} GESTimelineSource; + +typedef struct { + GESTimelineObjectClass parent_class; +} GESTimelineSourceClass; + +GType ges_timeline_source_get_type (void); + +GESTimelineSource* ges_timeline_source_new (void); + +G_END_DECLS + +#endif /* _GES_TIMELINE_SOURCE */ + diff --git a/src/ges-timeline-transition.c b/src/ges-timeline-transition.c new file mode 100644 index 0000000000..802b934a53 --- /dev/null +++ b/src/ges-timeline-transition.c @@ -0,0 +1,88 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-timeline-transition.h" + +G_DEFINE_TYPE (GESTimelineTransition, ges_timeline_transition, GES_TIMELINE_OBJECT) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_TIMELINE_TRANSITION, GESTimelineTransitionPrivate)) + +typedef struct _GESTimelineTransitionPrivate GESTimelineTransitionPrivate; + +struct _GESTimelineTransitionPrivate { + int dummy; +}; + +static void +ges_timeline_transition_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_transition_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_transition_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_transition_parent_class)->dispose (object); +} + +static void +ges_timeline_transition_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_transition_parent_class)->finalize (object); +} + +static void +ges_timeline_transition_class_init (GESTimelineTransitionClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESTimelineTransitionPrivate)); + + object_class->get_property = ges_timeline_transition_get_property; + object_class->set_property = ges_timeline_transition_set_property; + object_class->dispose = ges_timeline_transition_dispose; + object_class->finalize = ges_timeline_transition_finalize; +} + +static void +ges_timeline_transition_init (GESTimelineTransition *self) +{ +} + +GESTimelineTransition* +ges_timeline_transition_new (void) +{ + return g_object_new (GES_TYPE_TIMELINE_TRANSITION, NULL); +} + diff --git a/src/ges-timeline-transition.h b/src/ges-timeline-transition.h new file mode 100644 index 0000000000..f4bf03fc77 --- /dev/null +++ b/src/ges-timeline-transition.h @@ -0,0 +1,58 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TIMELINE_TRANSITION +#define _GES_TIMELINE_TRANSITION + +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TIMELINE_TRANSITION ges_timeline_transition_get_type() + +#define GES_TIMELINE_TRANSITION(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TIMELINE_TRANSITION, GESTimelineTransition)) + +#define GES_TIMELINE_TRANSITION_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TIMELINE_TRANSITION, GESTimelineTransitionClass)) + +#define GES_IS_TIMELINE_TRANSITION(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TIMELINE_TRANSITION)) + +#define GES_IS_TIMELINE_TRANSITION_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TIMELINE_TRANSITION)) + +#define GES_TIMELINE_TRANSITION_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TIMELINE_TRANSITION, GESTimelineTransitionClass)) + +typedef struct { + GESTimelineObject parent; +} GESTimelineTransition; + +typedef struct { + GESTimelineObjectClass parent_class; +} GESTimelineTransitionClass; + +GType ges_timeline_transition_get_type (void); + +GESTimelineTransition* ges_timeline_transition_new (void); + +G_END_DECLS + +#endif /* _GES_TIMELINE_TRANSITION */ diff --git a/src/ges-timeline.c b/src/ges-timeline.c new file mode 100644 index 0000000000..ed26365c8e --- /dev/null +++ b/src/ges-timeline.c @@ -0,0 +1,154 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-timeline.h" + +/** + * GESTimelinePipeline + * + * Top-level container for pipelines + * + * Contains a list of TimelineLayer which users should use to arrange the + * various timeline objects. + * + */ + +G_DEFINE_TYPE (GESTimeline, ges_timeline, GST_TYPE_BIN) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_TIMELINE, GESTimelinePrivate)) + +typedef struct _GESTimelinePrivate GESTimelinePrivate; + +struct _GESTimelinePrivate { + GList *tracks; /* TimelineTracks */ +}; + +static void +ges_timeline_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_timeline_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_parent_class)->dispose (object); +} + +static void +ges_timeline_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_timeline_parent_class)->finalize (object); +} + +static void +ges_timeline_class_init (GESTimelineClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESTimelinePrivate)); + + object_class->get_property = ges_timeline_get_property; + object_class->set_property = ges_timeline_set_property; + object_class->dispose = ges_timeline_dispose; + object_class->finalize = ges_timeline_finalize; +} + +static void +ges_timeline_init (GESTimeline *self) +{ + self->layers = NULL; + self->tracks = NULL; +} + +GESTimeline* +ges_timeline_new (void) +{ + return g_object_new (GES_TYPE_TIMELINE, NULL); +} + +GESTimeline* +ges_timeline_load_from_uri (gchar *uri) +{ + /* FIXME : IMPLEMENT */ + return NULL; +} + +gboolean +ges_timeline_save (GESTimeline *timeline, gchar *uri) +{ + /* FIXME : IMPLEMENT */ + return FALSE; +} + +gboolean +ges_timeline_add_layer (GESTimeline *timeline, GESTimelineLayer *layer) +{ + /* FIXME : IMPLEMENT */ + + /* Add to the list of layers, make sure we don't already control it */ + + /* Assign Tracks to it */ + + return FALSE; +} + +gboolean +ges_timeline_remove_layer (GESTimeline *timeline, GESTimelineLayer *layer) +{ + /* FIXME : IMPLEMENT */ + + /* Unassign tracks from the given layer */ + return FALSE; +} + +gboolean +ges_timeline_add_track (GESTimeline *timeline, GESTrack *track) +{ + /* FIXME : IMPLEMENT */ + + /* Add to the list of tracks, make sure we don't already control it */ + + + return FALSE; +} +gboolean +ges_timeline_remove_track (GESTimeline *timeline, GESTrack *track) +{ + /* FIXME : IMPLEMENT */ + + /* Signal track removal to all layers/objects */ + + /* */ +} diff --git a/src/ges-timeline.h b/src/ges-timeline.h new file mode 100644 index 0000000000..55beddd34f --- /dev/null +++ b/src/ges-timeline.h @@ -0,0 +1,74 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TIMELINE +#define _GES_TIMELINE + +#include +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TIMELINE ges_timeline_get_type() + +#define GES_TIMELINE(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TIMELINE, GESTimeline)) + +#define GES_TIMELINE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TIMELINE, GESTimelineClass)) + +#define GES_IS_TIMELINE(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TIMELINE)) + +#define GES_IS_TIMELINE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TIMELINE)) + +#define GES_TIMELINE_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TIMELINE, GESTimelineClass)) + +typedef struct { + GstBin parent; + + GList *layers; /* TimelineLayer(s) ordered by priority */ + GList *tracks; /* TimelineTrack(s) */ +} GESTimeline; + +typedef struct { + GstBinClass parent_class; +} GESTimelineClass; + +GType ges_timeline_get_type (void); + +GESTimeline* ges_timeline_new (void); + + +GESTimeline* ges_timeline_load_from_uri (gchar *uri); + +gboolean ges_timeline_save (GESTimeline *timeline, gchar *uri); + +gboolean ges_timeline_add_layer (GESTimeline *timeline, GESTimelineLayer *layer); +gboolean ges_timeline_remove_layer (GESTimeline *timeline, GESTimelineLayer *layer); + +gboolean ges_timeline_add_track (GESTimeline *timeline, GESTrack *track); +gboolean ges_timeline_remove_track (GESTimeline *timeline, GESTrack *track); + +G_END_DECLS + +#endif /* _GES_TIMELINE */ + diff --git a/src/ges-track.c b/src/ges-track.c new file mode 100644 index 0000000000..22905596e0 --- /dev/null +++ b/src/ges-track.c @@ -0,0 +1,96 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "ges-track.h" + +/** + * GESTrack + * + * Corresponds to one output format (i.e. audio OR video) + * + * Contains the compatible TrackObject(s) + */ + +G_DEFINE_TYPE (GESTrack, ges_track, GST_TYPE_BIN) + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), GES_TYPE_TRACK, GESTrackPrivate)) + +typedef struct _GESTrackPrivate GESTrackPrivate; + +struct _GESTrackPrivate { + int dummy; +}; + +static void +ges_track_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_track_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + switch (property_id) { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +ges_track_dispose (GObject *object) +{ + G_OBJECT_CLASS (ges_track_parent_class)->dispose (object); +} + +static void +ges_track_finalize (GObject *object) +{ + G_OBJECT_CLASS (ges_track_parent_class)->finalize (object); +} + +static void +ges_track_class_init (GESTrackClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GESTrackPrivate)); + + object_class->get_property = ges_track_get_property; + object_class->set_property = ges_track_set_property; + object_class->dispose = ges_track_dispose; + object_class->finalize = ges_track_finalize; +} + +static void +ges_track_init (GESTrack *self) +{ +} + +GESTrack* +ges_track_new (void) +{ + return g_object_new (GES_TYPE_TRACK, NULL); +} + diff --git a/src/ges-track.h b/src/ges-track.h new file mode 100644 index 0000000000..b3baeea2a9 --- /dev/null +++ b/src/ges-track.h @@ -0,0 +1,61 @@ +/* GStreamer Editing Services + * Copyright (C) 2009 Edward Hervey + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _GES_TRACK +#define _GES_TRACK + +#include + +G_BEGIN_DECLS + +#define GES_TYPE_TRACK ges_track_get_type() + +#define GES_TRACK(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TRACK, GESTrack)) + +#define GES_TRACK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TRACK, GESTrackClass)) + +#define GES_IS_TRACK(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TRACK)) + +#define GES_IS_TRACK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TRACK)) + +#define GES_TRACK_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TRACK, GESTrackClass)) + +typedef struct { + GstBin parent; +} GESTrack; + +typedef struct { + GstBinClass parent_class; +} GESTrackClass; + +GType ges_track_get_type (void); + +GESTrack* ges_track_new (void); + +gboolean ges_track_add_object (GESTrack *track, GESTrackObject * object); + +G_END_DECLS + +#endif /* _GES_TRACK */ + -- 2.34.1