X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindowedit.C;h=e5d90c6b52e23ef8cef4f96cadacee22f5f4cb5a;hp=cfabc9bb1c73820aad08cb905bad3bcdfcd57fa8;hb=540f653df26e5e2d1249de1f7a1a3d888dddf341;hpb=114b45040c8027671cbe50e7d6cecb28bf73b35f diff --git a/cinelerra-5.1/cinelerra/mwindowedit.C b/cinelerra-5.1/cinelerra/mwindowedit.C index cfabc9bb..e5d90c6b 100644 --- a/cinelerra-5.1/cinelerra/mwindowedit.C +++ b/cinelerra-5.1/cinelerra/mwindowedit.C @@ -1065,10 +1065,16 @@ void MWindow::overwrite(EDL *source, int all) { FileXML file; + LocalSession *src = source->local_session; double src_start = all ? 0 : - source->local_session->get_selectionstart(); - double overwrite_len = all ? source->tracks->total_length() : - source->local_session->get_selectionend() - src_start; + src->inpoint_valid() ? src->get_inpoint() : + src->outpoint_valid() ? 0 : + src->get_selectionstart(); + double src_end = all ? source->tracks->total_length() : + src->outpoint_valid() ? src->get_outpoint() : + src->inpoint_valid() ? source->tracks->total_length() : + src->get_selectionend(); + double overwrite_len = src_end - src_start; double dst_start = edl->local_session->get_selectionstart(); double dst_len = edl->local_session->get_selectionend() - dst_start; @@ -1655,11 +1661,6 @@ void MWindow::paste_transition() PluginServer *server = session->drag_pluginservers->values[0]; undo->update_undo_before(); - if( server->audio ) - strcpy(edl->session->default_atransition, server->title); - else - strcpy(edl->session->default_vtransition, server->title); - edl->tracks->paste_transition(server, session->edit_highlighted); save_backup(); undo->update_undo_after(_("transition"), LOAD_EDITS); @@ -1676,7 +1677,6 @@ void MWindow::paste_transitions(int track_type, char *title) double start = edl->local_session->get_selectionstart(); double end = edl->local_session->get_selectionend(); edl->tracks->paste_transitions(start, end, track_type, title); - save_backup(); undo->update_undo_after(_("attach transitions"), LOAD_EDITS); @@ -1995,12 +1995,16 @@ void MWindow::unset_inoutpoint(int is_mwindow) void MWindow::splice(EDL *source, int all) { FileXML file; + LocalSession *src = source->local_session; undo->update_undo_before(); double source_start = all ? 0 : - source->local_session->get_selectionstart(); + src->inpoint_valid() ? src->get_inpoint() : + src->outpoint_valid() ? 0 : src->get_selectionstart(); double source_end = all ? source->tracks->total_length() : - source->local_session->get_selectionend(); + src->outpoint_valid() ? src->get_outpoint() : + src->inpoint_valid() ? source->tracks->total_length() : + src->get_selectionend(); source->copy(source_start, source_end, 1, &file, "", 1); //file.dump(); double start = edl->local_session->get_selectionstart(); @@ -2322,123 +2326,18 @@ void MWindow::remap_audio(int pattern) void MWindow::rescale_proxy(EDL *clip, int orig_scale, int new_scale) { - if( orig_scale == new_scale ) return; -// project size - float orig_w = (float)clip->session->output_w * orig_scale; - float orig_h = (float)clip->session->output_h * orig_scale; - if( !clip->parent_edl ) { - clip->session->output_w = Units::round(orig_w / new_scale); - clip->session->output_h = Units::round(orig_h / new_scale); - } - -// track sizes - for( Track *track=clip->tracks->first; track; track=track->next ) { - if( track->data_type != TRACK_VIDEO ) continue; - orig_w = (float)track->track_w * orig_scale; - orig_h = (float)track->track_h * orig_scale; - track->track_w = Units::round(orig_w / new_scale); - track->track_h = Units::round(orig_h / new_scale); - ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])-> - set_proxy(orig_scale, new_scale); - ((FloatAutos*)track->automation->autos[AUTOMATION_CAMERA_X])-> - set_proxy(orig_scale, new_scale); - ((FloatAutos*)track->automation->autos[AUTOMATION_CAMERA_Y])-> - set_proxy(orig_scale, new_scale); - ((FloatAutos*)track->automation->autos[AUTOMATION_PROJECTOR_X])-> - set_proxy(orig_scale, new_scale); - ((FloatAutos*)track->automation->autos[AUTOMATION_PROJECTOR_Y])-> - set_proxy(orig_scale, new_scale); - } -} - -void MWindow::set_proxy(int use_scaler, int new_scale, int auto_scale, - ArrayList *orig_assets, - ArrayList *proxy_assets) -{ - int orig_use_scaler = edl->session->proxy_use_scaler; - int orig_scale = edl->session->proxy_scale; -// rescale to full size asset in read_frame - edl->session->proxy_use_scaler = use_scaler; - edl->session->proxy_scale = new_scale; - edl->session->proxy_auto_scale = auto_scale; - - if( use_scaler ) { - for( int i=0; isize(); ++i ) { - Asset *proxy_asset = (Asset *)proxy_assets->get(i); - proxy_asset->width = orig_assets->get(i)->get_w(); - proxy_asset->height = orig_assets->get(i)->get_h(); - } - new_scale = 1; - } - - if( !orig_use_scaler ) - rescale_proxy(edl, orig_scale, new_scale); - -// change original assets to proxy assets - int awindow_folder = use_scaler || new_scale != 1 ? AW_PROXY_FOLDER : AW_MEDIA_FOLDER; - for( int i=0,n=proxy_assets->size(); iassets->update((Asset *)proxy_assets->get(i)); - proxy_asset->awindow_folder = awindow_folder; -// replace track contents - for( Track *track=edl->tracks->first; track; track=track->next ) { - if( track->data_type != TRACK_VIDEO ) continue; - for( Edit *edit=track->edits->first; edit; edit=edit->next ) { - if( !edit->asset ) continue; - if( !strcmp(edit->asset->path, orig_assets->get(i)->path) ) { - edit->asset = proxy_asset; - } - } - } - for( int j=0,m=edl->clips.size(); jclips[j]; - int has_proxy = 0; - for( Track *track=clip->tracks->first; track; track=track->next ) { - if( track->data_type != TRACK_VIDEO ) continue; - for( Edit *edit=track->edits->first; edit; edit=edit->next ) { - if( !edit->asset ) continue; - if( !strcmp(edit->asset->path, orig_assets->get(i)->path) ) { - has_proxy = 1; - edit->asset = proxy_asset; - } - } - } - if( has_proxy && !orig_use_scaler ) - rescale_proxy(clip, orig_scale, new_scale); - } - } + edl->rescale_proxy(orig_scale, new_scale); } void MWindow::add_proxy(int use_scaler, - ArrayList *orig_assets, - ArrayList *proxy_assets) -{ - if( use_scaler ) { - for( int i=0,n=proxy_assets->size(); iget(i); - proxy_asset->width = orig_assets->get(i)->get_w(); - proxy_asset->height = orig_assets->get(i)->get_h(); - } - } - -// change original assets to proxy assets - for( int i=0,n=proxy_assets->size(); iassets->update((Asset *)proxy_assets->get(i)); - proxy_asset->awindow_folder = AW_PROXY_FOLDER; -// replace track contents - for( Track *track=edl->tracks->first; track; track=track->next ) { - if( track->data_type != TRACK_VIDEO ) continue; - for( Edit *edit=track->edits->first; edit; edit=edit->next ) { - if( !edit->asset ) continue; - if( !strcmp(edit->asset->path, orig_assets->get(i)->path) ) { - edit->asset = proxy_asset; - } - } - } - } + ArrayList *orig_assets, ArrayList *proxy_assets) +{ + edl->add_proxy(use_scaler, orig_assets, proxy_assets); } void MWindow::cut_commercials() { +#ifdef HAVE_COMMERCIAL undo->update_undo_before(); commercials->scan_media(); edl->optimize(); @@ -2450,6 +2349,7 @@ void MWindow::cut_commercials() gui->update(1, 2, 1, 1, 1, 1, 0); cwindow->update(1, 0, 0, 0, 1); cwindow->refresh_frame(CHANGE_EDL); +#endif } int MWindow::normalize_speed(EDL *old_edl, EDL *new_edl)