Add a .gitignore file
[melted] / mlt++ / src / MltService.cpp
index 03f8261..88751ab 100644 (file)
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+#include <string.h>
 #include "MltService.h"
+#include "MltFilter.h"
+#include "MltProfile.h"
 using namespace Mlt;
 
+Service::Service( ) :
+       Properties( false ),
+       instance( NULL )
+{
+}
+
+Service::Service( Service &service ) :
+       Properties( false ),
+       instance( service.get_service( ) )
+{
+       inc_ref( );
+}
+
+Service::Service( mlt_service service ) :
+       Properties( false ),
+       instance( service )
+{
+       inc_ref( );
+}
+
+Service::~Service( )
+{
+       mlt_service_close( instance );
+}
+
+mlt_service Service::get_service( )
+{
+       return instance;
+}
+
 mlt_properties Service::get_properties( )
 {
        return mlt_service_properties( get_service( ) );
 }
 
+void Service::lock( )
+{
+       mlt_service_lock( get_service( ) );
+}
+
+void Service::unlock( )
+{
+       mlt_service_unlock( get_service( ) );
+}
+
 int Service::connect_producer( Service &producer, int index )
 {
        return mlt_service_connect_producer( get_service( ), producer.get_service( ), index );
@@ -33,39 +76,46 @@ int Service::connect_producer( Service &producer, int index )
 
 Service *Service::producer( )
 {
-       if ( get_service( ) != NULL )
-               return new ServiceInstance( mlt_service_producer( get_service( ) ) );
-       else
-               return NULL;
+       return new Service( mlt_service_producer( get_service( ) ) );
 }
 
 Service *Service::consumer( )
 {
-       if ( get_service( ) != NULL )
-               return new ServiceInstance( mlt_service_consumer( get_service( ) ) );
-       else
-               return NULL;
+       return new Service( mlt_service_consumer( get_service( ) ) );
+}
+
+Profile *Service::profile( )
+{
+       return new Profile( mlt_service_profile( get_service() ) );
 }
 
 Frame *Service::get_frame( int index )
 {
        mlt_frame frame = NULL;
        mlt_service_get_frame( get_service( ), &frame, index );
-       return new FrameInstance( frame );
+       Frame *result = new Frame( frame );
+       mlt_frame_close( frame );
+       return result;
 }
 
-mlt_service ServiceInstance::get_service( )
+mlt_service_type Service::type( )
 {
-       return instance;
+       return mlt_service_identify( get_service( ) );
 }
 
-ServiceInstance::ServiceInstance( Service &service ) :
-       instance( service.get_service( ) )
+int Service::attach( Filter &filter )
 {
+       return mlt_service_attach( get_service( ), filter.get_filter( ) );
 }
 
-ServiceInstance::ServiceInstance( mlt_service service ) :
-       instance( service )
+int Service::detach( Filter &filter )
+{
+       return mlt_service_detach( get_service( ), filter.get_filter( ) );
+}
+
+Filter *Service::filter( int index )
 {
+       mlt_filter result = mlt_service_filter( get_service( ), index );
+       return result == NULL ? NULL : new Filter( result );
 }