--- /dev/null
+MLT++
+-----
+
+ This mlt sub-project provides a C++ wrapping for the MLT library.
+
+INSTALLATION
+------------
+
+ ./configure [ --prefix=path ]
+ make
+ make install
+
+USAGE
+-----
+
+ Use the following definitions in a Makefile to compile and link with mlt++:
+
+ CXXFLAGS=`mlt-config -Wall`
+ LDFLAGS=-lmlt++
+
+ All definitions are placed in an Mlt namespace, and adhere closely to the C
+ naming convention. Mappings always follow the pattern:
+
+ Factory methods:
+
+ mlt_factory_init => Mlt::Factory::init
+ mlt_factory_producer => Mlt::Factory::producer
+ etc
+
+ Types:
+
+ mlt_producer ==> Mlt::Producer
+ mlt_consumer ==> Mlt::Consumer
+ etc
+
+ Methods:
+
+ mlt_type_method ==> Mlt:Type.method
+ ie: mlt_playlist_append ==> Mlt::Playlist.append
+ etc
+
+ Enumerators and macros are reused directly from the C library.
+
+CLASS HIERARCHY
+---------------
+
+ The currently mapped objects are shown in the following hierarchy:
+
+ Factory
+ Properties
+ Frame
+ Service
+ Consumer
+ Filter
+ Producer
+ Playlist
+ Transition
+
+SPECIAL CASES
+-------------
+
+ Care should be taken with wrapper objects.
+
+ Taking, as an example, the C function that returns the immediate consumer of
+ a service:
+
+ mlt_service mlt_service_consumer( mlt_service );
+
+ This maps to:
+
+ Mlt::Service *Mlt::Service.consumer( );
+
+ Note that you get an object back - it is never the original object, but a
+ wrapping object. This is done to keep consistency with the C api which may
+ instantiate C instances - therefore there it cannot be assumed that a C++
+ object exists for all mlt service instances.
+
+ As such, it is mandatory that you delete these objects. The original will
+ not be affected. Further to that, all modifications (to properties or its
+ state of connection) will be reflected in the original object.
+
+ This excludes the use of the RTTI to determine the real type of the object -
+ this can only be done by parsing the objects properties.
+
+LIMITATIONS
+-----------
+
+ The mechanisms for the definition of new services have deliberately not
+ been exposed by the C++ wrappings - this is done to ensure that service
+ networks constructed can be serialised and used by existing applications
+ which are based on the C API (such as miracle).
+
--- /dev/null
+#!/bin/sh
+
+path=`which mlt-config 2>/dev/null`
+[ $? != 0 ] && echo "MLT not installed - aborting" && exit 1
+
+# Determine default prefix
+prefix=`dirname $path`
+prefix=`dirname $prefix`
+
+# Allow override from command line
+[ "$1" != "" ] && prefix="${1#--prefix=}"
+
+# Sanity check
+[ ! -d "$prefix" ] && echo "Invalid prefix $prefix - aborting" && exit 1
+
+echo "prefix=$prefix" > config.mak
+echo "MLT++ configured - installed in $prefix."
+
Service *Service::producer( )
{
- return new ServiceInstance( mlt_service_producer( get_service( ) ) );
+ if ( get_service( ) != NULL )
+ return new ServiceInstance( mlt_service_producer( get_service( ) ) );
+ else
+ return NULL;
}
Service *Service::consumer( )
{
- return new ServiceInstance( mlt_service_consumer( get_service( ) ) );
+ if ( get_service( ) != NULL )
+ return new ServiceInstance( mlt_service_consumer( get_service( ) ) );
+ else
+ return NULL;
}
Frame *Service::get_frame( int index )