Hi Dan, the last weeks I thought my job will kill me :-)). But now I had some time and here my new results:
1) There is one issue with seeking with mlt jack if the consumer (sdl_preview) is stopped or paused. The reason is the same as for our ugly noise. The function in filter_jackrack.c: static int jackrack_get_audio( mlt_frame frame, void **buffer, mlt_audio_format *format, int *frequency, int *channels, int *samples) { ... if ( pos == mlt_properties_get_position( filter_properties, "_jack_seek" ) ) { jack_client_t *jack_client = mlt_properties_get_data(filter_properties, "jack_client", NULL ); jack_position_t jack_pos; jack_transport_query( jack_client, &jack_pos ); double fps = mlt_profile_fps( mlt_service_profile(MLT_FILTER_SERVICE(filter) ) ); jack_nframes_t jack_frame = jack_pos.frame_rate * pos / fps; jack_transport_locate( jack_client, jack_frame ); mlt_properties_set_position( filter_properties, "_jack_seek", -1 ); } ... } is not called and the _jack_seek property is not evaluated. This means that seeking on paused consumers is not possible. I think this is the common use case - seeking is done on paused consumers. Another big issue is resulting from this: Seeking in Tracks without or muted audio is not possible at all. Very bad for the following use case: Video is edited in kdenlive and audio in ardour/tractor. In Kdenlive I don't have audio at all ==> jack seeking in kdenlive is not possible. In the function: static void on_jack_seek( mlt_properties owner, mlt_filter filter, mlt_position *position ) { mlt_properties properties = MLT_FILTER_PROPERTIES( filter ); mlt_log_verbose( MLT_FILTER_SERVICE(filter), "%s: %d\n", __FUNCTION__, *position ); mlt_properties_set_int( properties, "_sync_guard", 1 ); mlt_properties_set_position( properties, "_jack_seek", *position ); return; <--- why mlt_profile profile = mlt_service_profile( MLT_FILTER_SERVICE( filter ) ); jack_client_t *jack_client = mlt_properties_get_data( properties, "jack_client", NULL ); jack_nframes_t jack_frame = jack_get_sample_rate( jack_client ); jack_frame *= *position / mlt_profile_fps( profile ); jack_transport_locate( jack_client, jack_frame ); } you return after setting the property "_jack_seek" without calling the jack_transport_locate( jack_client, jack_frame ); . I don't understand that the sync is not done here. This is done later in the function "jackrack_get_audio". But this function is not called in cases mentioned above. In my private mlt branch I removed the return and the setting of the "_jack_seek" property it worked pretty good so far. Have you got an idea how to solve this issues??? 2) The crazy noise is now fixed. But on stopping/pausing jack transport it takes at least one second until sound stops to play. I tried this with shotcut with the same result. In ardour the sound stops immediately after pressing the stop key.Is there a way to optimize this behaviour? (of course low prio). 3) By the way. I played a little bit with shotcut. On my computer I have the same behaviour with opengl and jack (I reported this some time ago with kdenlive). If shotcut is connected to jack on exit it hangs forever. For this I want to try jack1 and perhaps another linux installation. PS: With the hack in mlt (removing return ...) and the jack enabled kdenlive I made a 15min film. The video was done in kdenlive and the audio in ardour. It worked for me so far. I think now I am a step closer to the end :-))) regards eddrog