]> git.sesse.net Git - mlt/blobdiff - src/framework/mlt_service.c
Stash the backtrace code somewhere.
[mlt] / src / framework / mlt_service.c
index d49be3ff9093a2f37d2be21abb3c2cb7c9cb535c..9b1eb7037d9b861510270666e0637131fe028834 100644 (file)
@@ -131,6 +131,8 @@ static void mlt_service_property_changed( mlt_listener listener, mlt_properties
  * \param self the service to lock
  */
 
+#include <execinfo.h>
+
 void mlt_service_lock( mlt_service self )
 {
        if ( self != NULL )
@@ -544,6 +546,19 @@ static void mlt_service_filter_property_changed( mlt_service owner, mlt_service
 
 int mlt_service_attach( mlt_service self, mlt_filter filter )
 {
+#if 0
+       void *buffer[1024];
+       int num, i;
+       char **sym;
+       printf("ATTACHING %p -> %p\n", self, filter);
+       for (i = 0; i < 1024; ++i) buffer[i] = 0;
+       num = backtrace(buffer, 1024);
+       sym = backtrace_symbols(buffer, num);
+       for (i = 0; i < num; ++i) {
+               //printf("%3d: %s\n", sym[i]);
+       }
+       free(sym);
+#endif
        int error = self == NULL || filter == NULL;
        if ( error == 0 )
        {
@@ -571,6 +586,9 @@ int mlt_service_attach( mlt_service self, mlt_filter filter )
                                mlt_properties_set_data( props, "service", self, 0, NULL, NULL );
                                mlt_events_fire( properties, "service-changed", NULL );
                                mlt_events_fire( props, "service-changed", NULL );
+                               mlt_service cp = mlt_properties_get_data( properties, "_cut_parent", NULL );
+                               if ( cp )
+                                       mlt_events_fire( MLT_SERVICE_PROPERTIES(cp), "service-changed", NULL );
                                mlt_events_listen( props, self, "service-changed", ( mlt_listener )mlt_service_filter_changed );
                                mlt_events_listen( props, self, "property-changed", ( mlt_listener )mlt_service_filter_property_changed );
                        }
@@ -670,6 +688,7 @@ int mlt_service_move_filter( mlt_service self, int from, int to )
                                        base->filters[i] = base->filters[i + 1];
                        }
                        base->filters[to] = filter;
+                       mlt_events_fire( MLT_SERVICE_PROPERTIES(self), "service-changed", NULL );
                        error = 0;
                }
        }