]> git.sesse.net Git - mlt/commitdiff
Add mlt_service_move_filter() and Mlt::Service::move_filter().
authorDan Dennedy <dan@dennedy.org>
Sun, 7 Apr 2013 06:22:02 +0000 (23:22 -0700)
committerDan Dennedy <dan@dennedy.org>
Sun, 7 Apr 2013 06:22:22 +0000 (23:22 -0700)
src/framework/mlt.vers
src/framework/mlt_service.c
src/framework/mlt_service.h
src/mlt++/MltService.cpp
src/mlt++/MltService.h
src/mlt++/mlt++.vers

index 7b80f40afda97f0926c0b3a2c103a65bb069f3f9..2ae06f31aebcf7537e88ef3c92cffabfce5f455b 100644 (file)
@@ -405,4 +405,5 @@ MLT_0.8.8 {
 MLT_0.9.0 {
   global:
     "mlt_service_filter_count";
+    "mlt_service_move_filter";
 } MLT_0.8.8;
index 8a02da3af2cc0bafc607fcc294b6227d8bc36710..d49be3ff9093a2f37d2be21abb3c2cb7c9cb535c 100644 (file)
@@ -636,6 +636,46 @@ int mlt_service_filter_count( mlt_service self )
        return result;
 }
 
+/** Reorder the attached filters.
+ *
+ * \public \memberof mlt_service_s
+ * \param self a service
+ * \param from the current index value of the filter to move
+ * \param to the new index value for the filter specified in \p from
+ * \return true if there was an error
+ */
+
+int mlt_service_move_filter( mlt_service self, int from, int to )
+{
+       int error = -1;
+       if ( self )
+       {
+               mlt_service_base *base = self->local;
+               if ( from < 0 ) from = 0;
+               if ( from >= base->filter_count ) from = base->filter_count - 1;
+               if ( to < 0 ) to = 0;
+               if ( to >= base->filter_count ) to = base->filter_count - 1;
+               if ( from != to && base->filter_count > 1 )
+               {
+                       mlt_filter filter = base->filters[from];
+                       int i;
+                       if ( from > to )
+                       {
+                               for ( i = from; i > to; i-- )
+                                       base->filters[i] = base->filters[i - 1];
+                       }
+                       else
+                       {
+                               for ( i = from; i < to; i++ )
+                                       base->filters[i] = base->filters[i + 1];
+                       }
+                       base->filters[to] = filter;
+                       error = 0;
+               }
+       }
+       return error;
+}
+
 /** Retrieve an attached filter.
  *
  * \public \memberof mlt_service_s
index 1d28ac99ae8cee27f2ba0ed9ecd4c6fd53202e07..82491ee21271de563c7fd9ca89dfc5191edba41f 100644 (file)
@@ -93,6 +93,7 @@ extern int mlt_service_attach( mlt_service self, mlt_filter filter );
 extern int mlt_service_detach( mlt_service self, mlt_filter filter );
 extern void mlt_service_apply_filters( mlt_service self, mlt_frame frame, int index );
 extern int mlt_service_filter_count( mlt_service self );
+extern int mlt_service_move_filter( mlt_service self, int from, int to );
 extern mlt_filter mlt_service_filter( mlt_service self, int index );
 extern mlt_profile mlt_service_profile( mlt_service self );
 extern void mlt_service_set_profile( mlt_service self, mlt_profile profile );
index a320f29983a40e0b32914883340d6a01d9ed273f..56b5343ce2836e7a4cfe020dcccbb83ed6681e4d 100644 (file)
@@ -123,6 +123,11 @@ int Service::filter_count()
        return mlt_service_filter_count( get_service() );
 }
 
+int Service::move_filter(int from, int to)
+{
+       return mlt_service_move_filter( get_service(), from, to );
+}
+
 Filter *Service::filter( int index )
 {
        mlt_filter result = mlt_service_filter( get_service( ), index );
index b755970f3df11048edd1d87267a2bd84ad45b208..3054b7ef10e7c290d29acac1682f882b582e2025 100644 (file)
@@ -58,6 +58,7 @@ namespace Mlt
                        int attach( Filter &filter );
                        int detach( Filter &filter );
                        int filter_count( );
+                       int move_filter( int from, int to );
                        Filter *filter( int index );
                        void set_profile( Profile &profile );
        };
index c1f11a0e5949c2be8e058461a31f50b61497fc93..46ee0b29eb4779f0a4d11f3d0d84e368af1d1a93 100644 (file)
@@ -440,5 +440,6 @@ MLTPP_0.9.0 {
     extern "C++" {
       "Mlt::Deque::peek(int)";
       "Mlt::Service::filter_count()";
+      "Mlt::Service::move_filter(int, int)";
     };
 } MLTPP_0.8.8;