gui->lock_window("ClipPopupNest::handle_event 1");
if( mwindow->edl->session->proxy_scale != 1 ) {
eprintf("Nesting not allowed when proxy scale != 1");
+ return 1;
}
- else if( mwindow->session->drag_clips->total > 0 ) {
+ int clips_total = mwindow->session->drag_clips->total;
+ for( int i=0; i<clips_total; ++i ) {
EDL *edl = mwindow->edl;
time_t dt; time(&dt);
struct tm dtm; localtime_r(&dt, &dtm);
sprintf(path, _("Nested_%02d%02d%02d-%02d%02d%02d"),
dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday,
dtm.tm_hour, dtm.tm_min, dtm.tm_sec);
- EDL *clip = mwindow->session->drag_clips->values[0];
+ EDL *clip = mwindow->session->drag_clips->values[i];
EDL *nested = edl->new_nested(clip, path);
EDL *new_clip = edl->create_nested_clip(nested);
new_clip->folder_no = AW_CLIP_FOLDER;
- sprintf(new_clip->local_session->clip_icon,
- "clip_%02d%02d%02d-%02d%02d%02d.png",
- dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday,
- dtm.tm_hour, dtm.tm_min, dtm.tm_sec);
+ sprintf(new_clip->local_session->clip_icon,
+ "clip_%02d%02d%02d-%02d%02d%02d.png",
+ dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday,
+ dtm.tm_hour, dtm.tm_min, dtm.tm_sec);
snprintf(new_clip->local_session->clip_title,
sizeof(new_clip->local_session->clip_title),
_("Nested: %s"), clip->local_session->clip_title);
strcpy(new_clip->local_session->clip_notes,
- clip->local_session->clip_notes);
+ clip->local_session->clip_notes);
int idx = edl->clips.number_of(clip);
if( idx >= 0 ) {
edl->clips[idx] = new_clip;
else
edl->clips.append(new_clip);
mwindow->mainindexes->add_next_asset(0, nested);
- mwindow->mainindexes->start_build();
- popup->gui->async_update_assets();
}
+ mwindow->mainindexes->start_build();
+ popup->gui->async_update_assets();
gui->unlock_window();
return 1;
}
EDL *nested_edl = 0;
MWindowGUI *gui = mwindow->gui;
gui->lock_window("ClipPopupUnNest::handle_event 1");
- if( mwindow->session->drag_clips->total > 0 ) {
- EDL *clip = mwindow->session->drag_clips->values[0];
+ int clips_total = mwindow->session->drag_clips->total;
+ for( int i=0; i<clips_total; ++i ) {
+ EDL *clip = mwindow->session->drag_clips->values[i];
Track *track = clip->tracks->first;
Edit *edit = track ? track->edits->first : 0;
nested_edl = edit && !edit->next && !edit->asset ? edit->nested_edl : 0;
CreateDVD_MenuItem::CreateDVD_MenuItem(MWindow *mwindow)
- : BC_MenuItem(_("DVD Render..."), _("Shift-D"), 'D')
+ : BC_MenuItem(_("DVD Render..."), _("Alt-d"), 'd')
{
- set_shift(1);
+ set_alt(1);
this->mwindow = mwindow;
}
void MainIndexes::start_build()
{
+ if( !current_indexables.size() ) return;
//printf("MainIndexes::start_build 1\n");
interrupt_flag = 0;
// Locked up when indexes were already being built and an indexable was
trackmenu->add_item(new MoveTracksUp(mwindow));
trackmenu->add_item(new MoveTracksDown(mwindow));
trackmenu->add_item(new DeleteTracks(mwindow));
- trackmenu->add_item(new DeleteTrack(mwindow));
+ trackmenu->add_item(new DeleteFirstTrack(mwindow));
+ trackmenu->add_item(new DeleteLastTrack(mwindow));
trackmenu->add_item(new ConcatenateTracks(mwindow));
AppendTracks *append_tracks;
trackmenu->add_item(append_tracks = new AppendTracks(mwindow));
return 1;
}
-DeleteTrack::DeleteTrack(MWindow *mwindow)
+DeleteFirstTrack::DeleteFirstTrack(MWindow *mwindow)
+ : BC_MenuItem(_("Delete first track"), "Shift-D", 'D')
+{
+ set_shift(1);
+ this->mwindow = mwindow;
+}
+
+int DeleteFirstTrack::handle_event()
+{
+ if( mwindow->session->current_operation == NO_OPERATION ) {
+ Track *track = mwindow->edl->tracks->first;
+ if( track ) mwindow->delete_track(track);
+ }
+ return 1;
+}
+
+DeleteLastTrack::DeleteLastTrack(MWindow *mwindow)
: BC_MenuItem(_("Delete last track"), "d", 'd')
{
this->mwindow = mwindow;
}
-int DeleteTrack::handle_event()
+int DeleteLastTrack::handle_event()
{
- if( mwindow->session->current_operation == NO_OPERATION )
- mwindow->delete_track();
+ if( mwindow->session->current_operation == NO_OPERATION ) {
+ Track *track = mwindow->edl->tracks->last;
+ if( track ) mwindow->delete_track(track);
+ }
return 1;
}
MoveTracksUp::MoveTracksUp(MWindow *mwindow)
: BC_MenuItem(_("Move tracks up"), _("Shift-Up"), UP)
{
- set_shift(); this->mwindow = mwindow;
+ this->mwindow = mwindow;
+ set_shift();
}
int MoveTracksUp::handle_event()
MWindow *mwindow;
};
-class DeleteTrack : public BC_MenuItem
+class DeleteFirstTrack : public BC_MenuItem
{
public:
- DeleteTrack(MWindow *mwindow);
+ DeleteFirstTrack(MWindow *mwindow);
+ int handle_event();
+ MWindow *mwindow;
+};
+
+class DeleteLastTrack : public BC_MenuItem
+{
+public:
+ DeleteLastTrack(MWindow *mwindow);
int handle_event();
MWindow *mwindow;
};
class MoveTracksDown;
class DeleteTracks;
class ConcatenateTracks;
-class DeleteTrack;
+class DeleteFirstTrack;
+class DeleteLastTrack;
class LoopPlayback;
class SetBRenderActive;
class LabelsFollowEdits;
// Calculate defaults path
static void create_defaults_path(char *string, const char *config_file);
- void delete_track();
void delete_track(Track *track);
void delete_tracks();
int feather_edits(int64_t feather_samples, int audio, int video);
}
-void MWindow::delete_track()
-{
- if( edl->tracks->last )
- delete_track(edl->tracks->last);
-}
-
void MWindow::delete_tracks()
{
undo_before();
}
}
-
- uri_map.callback_data = (LV2_URI_Map_Callback_Data)this;
- uri_map.uri_to_id = uri_to_id;
- features.append(new Lv2Feature(NS_EXT "uri-map", &uri_map));
- map.handle = (void*)&uri_table;
- map.map = uri_table_map;
- features.append(new Lv2Feature(LV2_URID_MAP_URI, &map));
- unmap.handle = (void*)&uri_table;
- unmap.unmap = uri_table_unmap;
- features.append(new Lv2Feature(LV2_URID_UNMAP_URI, &unmap));
+ uri_map.handle = (LV2_URID_Map_Handle)this;
+ uri_map.map = map_uri;
+ features.append(new Lv2Feature(LV2_URID__map, &uri_map));
+ uri_unmap.handle = (LV2_URID_Unmap_Handle)this;
+ uri_unmap.unmap = unmap_uri;
+ features.append(new Lv2Feature(LV2_URID__unmap, &uri_unmap));
features.append(new Lv2Feature(LV2_BUF_SIZE__powerOf2BlockLength, 0));
features.append(new Lv2Feature(LV2_BUF_SIZE__fixedBlockLength, 0));
features.append(new Lv2Feature(LV2_BUF_SIZE__boundedBlockLength, 0));
return 0;
}
-LV2_URID PluginLV2::uri_table_map(LV2_URID_Map_Handle handle, const char *uri)
-{
- return ((PluginLV2UriTable *)handle)->map(uri);
-}
-
-const char *PluginLV2::uri_table_unmap(LV2_URID_Map_Handle handle, LV2_URID urid)
+uint32_t PluginLV2::map_uri(LV2_URID_Map_Handle handle, const char *uri)
{
- return ((PluginLV2UriTable *)handle)->unmap(urid);
+ PluginLV2 *the = (PluginLV2 *)handle;
+ return the->uri_table.map(uri);
}
-uint32_t PluginLV2::uri_to_id(LV2_URI_Map_Callback_Data callback_data,
- const char *map, const char *uri)
+const char *PluginLV2::unmap_uri(LV2_URID_Unmap_Handle handle, LV2_URID urid)
{
- PluginLV2 *the = (PluginLV2 *)callback_data;
- return the->map.map(the->uri_table, uri);
+ PluginLV2 *the = (PluginLV2 *)handle;
+ return the->uri_table.unmap(urid);
}
void PluginLV2::connect_ports(PluginLV2ClientConfig &conf, int ports)
title[0] = 0;
memset(&uri_map, 0, sizeof(uri_map));
+ memset(&uri_unmap, 0, sizeof(uri_unmap));
memset(&extui_host, 0, sizeof(extui_host));
wgt_type = LV2_EXTERNAL_UI_URI__KX__Widget;
gtk_type = LV2_UI__GtkUI;
int load_lv2(const char *path,char *title=0);
int init_lv2(PluginLV2ClientConfig &conf, int sample_rate, int bfrsz);
virtual int is_forked() { return 0; }
-
- static LV2_URID uri_table_map(LV2_URID_Map_Handle handle, const char *uri);
- static const char *uri_table_unmap(LV2_URID_Map_Handle handle, LV2_URID urid);
- static uint32_t uri_to_id(LV2_URI_Map_Callback_Data callback_data,
- const char *map, const char *uri);
+ static uint32_t map_uri(LV2_URID_Map_Handle handle, const char *uri);
+ static const char *unmap_uri(LV2_URID_Unmap_Handle handle, LV2_URID urid);
+ LV2_URID_Map uri_map;
+ LV2_URID_Unmap uri_unmap;
void connect_ports(PluginLV2ClientConfig &conf, int ports);
void del_buffer();
void new_buffer(int64_t sz);
const LilvPlugin *lilv;
LilvUIs *lilv_uis;
- LV2_URI_Map_Feature uri_map;
PluginLV2UriTable uri_table;
LV2_URID_Map map;
LV2_Feature map_feature;
position -= 1./command->get_edl()->session->frame_rate;
if( position < 0 ) position = 0;
}
+ playback_engine->command->command = STOP;
playback_engine->is_playing_back = 0;
playback_engine->tracking_position = position;
playback_engine->stop_tracking();
int Tracks::move_tracks_up()
{
- Track *track, *next_track;
int result = 0;
-
- for(track = first;
- track;
- track = next_track)
- {
- next_track = track->next;
-
- if(track->record)
- {
- if(track->previous)
- {
- change_modules(number_of(track->previous), number_of(track), 1);
-
- swap(track->previous, track);
- result = 1;
- }
+ Track *next = first;
+ while( next ) {
+ Track *track = next; next = track->next;
+ if( !track->record ) continue;
+ if( track->previous ) {
+ change_modules(number_of(track->previous), number_of(track), 1);
+ swap(track->previous, track);
+ result = 1;
}
}
int Tracks::move_tracks_down()
{
- Track *track, *previous_track;
int result = 0;
-
- for(track = last;
- track;
- track = previous_track)
- {
- previous_track = track->previous;
-
- if(track->record)
- {
- if(track->next)
- {
- change_modules(number_of(track), number_of(track->next), 1);
-
- swap(track, track->next);
- result = 1;
- }
+ Track *prev = last;
+ while( prev ) {
+ Track *track = prev; prev = track->previous;
+ if( !track->record ) continue;
+ if( track->next ) {
+ change_modules(number_of(track), number_of(track->next), 1);
+ swap(track, track->next);
+ result = 1;
}
}
}
-
void Tracks::paste_audio_transition(PluginServer *server)
{
for(Track *current = first; current; current = NEXT)
[ . source ])
PKG_3RD([libvpx],[auto],
- [libvpx-1.7.0],
+ [libvpx-1.8.0],
[ libvpx.a ],
[ . ])
PKG_3RD([lv2],[auto],
- [lv2-1.14.0],
+ [lv2-1.16.0],
[ ],
[ usr/local/include usr/local/lib64/lv2 usr/local/lib/lv2 ])
PKG_3RD([sratom],[auto],
- [sratom-0.6.0],
+ [sratom-0.6.2],
[ usr/local/lib/libsratom-0.a ],
[ usr/local/include ])
PKG_3RD([serd],[auto],
- [serd-0.28.0],
+ [serd-0.30.0],
[ usr/local/lib/libserd-0.a ],
[ usr/local/include ])
PKG_3RD([sord],[auto],
- [sord-0.16.0],
+ [sord-0.16.2],
[ usr/local/lib/libsord-0.a ],
[ usr/local/include ])
PKG_3RD([lilv],[auto],
- [lilv-0.24.2],
+ [lilv-0.24.4],
[ usr/local/lib/liblilv-0.a ],
[ usr/local/include ])
PKG_3RD([suil],[auto],
- [suil-0.8.4],
+ [suil-0.10.2],
[ usr/local/lib/libsuil-0.a ],
[ usr/local/include ])
-Cinelerra-GG Infinity continuously merged/enriched from the
- original Heroine Virtual of Adam Williams which does not
- support many modern formats, and now contains CV mods
- provided over prior years from the Community Version.
For usage help, refer to the following:
https://cinelerra-gg.org/downloads/CinelerraGG_manual.pdf
https://archive.mozilla.org/pub/opus/opus-1.3.tar.gz
https://github.com/webmproject/libwebp = libwebp-1.0.2
https://github.com/mozilla/aom = libaom-v1.0.0
+
+https://gitlab.com/drobilla/lv2/-/archive/v1.16.0/lv2-v1.16.0.tar.gz
+http://download.drobilla.net/suil-0.10.2.tar.bz2
+http://download.drobilla.net/sratom-0.6.2.tar.bz2
+http://download.drobilla.net/lilv-0.24.4.tar.bz2
+http://download.drobilla.net/sord-0.16.2.tar.bz2
+http://download.drobilla.net/serd-0.30.0.tar.bz2
+http://download.drobilla.net/jalv-1.6.0.tar.bz2