00001 #include "asset.h"
00002 #include "assets.h"
00003 #include "awindowgui.h"
00004 #include "awindow.h"
00005 #include "bcsignals.h"
00006 #include "cache.h"
00007 #include "clip.h"
00008 #include "clipedit.h"
00009 #include "cplayback.h"
00010 #include "ctimebar.h"
00011 #include "cwindow.h"
00012 #include "cwindowgui.h"
00013 #include "bchash.h"
00014 #include "edl.h"
00015 #include "edlsession.h"
00016 #include "filexml.h"
00017 #include "gwindow.h"
00018 #include "gwindowgui.h"
00019 #include "keyframe.h"
00020 #include "language.h"
00021 #include "labels.h"
00022 #include "levelwindow.h"
00023 #include "localsession.h"
00024 #include "mainclock.h"
00025 #include "maincursor.h"
00026 #include "mainerror.h"
00027 #include "mainindexes.h"
00028 #include "mainmenu.h"
00029 #include "mainsession.h"
00030 #include "mainundo.h"
00031 #include "maskautos.h"
00032 #include "mtimebar.h"
00033 #include "mwindowgui.h"
00034 #include "mwindow.h"
00035 #include "panauto.h"
00036 #include "patchbay.h"
00037 #include "playbackengine.h"
00038 #include "pluginset.h"
00039 #include "recordlabel.h"
00040 #include "samplescroll.h"
00041 #include "trackcanvas.h"
00042 #include "track.h"
00043 #include "trackscroll.h"
00044 #include "tracks.h"
00045 #include "transition.h"
00046 #include "transportque.h"
00047 #include "units.h"
00048 #include "undostackitem.h"
00049 #include "vplayback.h"
00050 #include "vwindow.h"
00051 #include "vwindowgui.h"
00052 #include "zoombar.h"
00053 #include "automation.h"
00054 #include "maskautos.h"
00055
00056
00057 #include <string.h>
00058
00059
00060
00061
00062
00063
00064 void MWindow::add_audio_track_entry(int above, Track *dst)
00065 {
00066 add_audio_track(above, dst);
00067 save_backup();
00068 undo->update_undo(_("add track"), LOAD_ALL);
00069
00070 restart_brender();
00071 gui->get_scrollbars();
00072 gui->canvas->draw();
00073 gui->patchbay->update();
00074 gui->cursor->draw(1);
00075 gui->canvas->flash();
00076 gui->canvas->activate();
00077 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00078 CHANGE_EDL,
00079 edl,
00080 1);
00081 }
00082
00083 void MWindow::add_video_track_entry(Track *dst)
00084 {
00085 add_video_track(1, dst);
00086 undo->update_undo(_("add track"), LOAD_ALL);
00087
00088 restart_brender();
00089 gui->get_scrollbars();
00090 gui->canvas->draw();
00091 gui->patchbay->update();
00092 gui->cursor->draw(1);
00093 gui->canvas->flash();
00094 gui->canvas->activate();
00095 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00096 CHANGE_EDL,
00097 edl,
00098 1);
00099 save_backup();
00100 }
00101
00102
00103 int MWindow::add_audio_track(int above, Track *dst)
00104 {
00105 edl->tracks->add_audio_track(above, dst);
00106 edl->tracks->update_y_pixels(theme);
00107 save_backup();
00108 return 0;
00109 }
00110
00111 int MWindow::add_video_track(int above, Track *dst)
00112 {
00113 edl->tracks->add_video_track(above, dst);
00114 edl->tracks->update_y_pixels(theme);
00115 save_backup();
00116 return 0;
00117 }
00118
00119
00120
00121
00122
00123 void MWindow::asset_to_size()
00124 {
00125 if(session->drag_assets->total &&
00126 session->drag_assets->values[0]->video_data)
00127 {
00128 int w, h;
00129
00130
00131 w = session->drag_assets->values[0]->width;
00132 h = session->drag_assets->values[0]->height;
00133
00134
00135 edl->session->output_w = w;
00136 edl->session->output_h = h;
00137
00138 if(((edl->session->output_w % 4) ||
00139 (edl->session->output_h % 4)) &&
00140 edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL)
00141 {
00142 MainError::show_error(
00143 _("This project's dimensions are not multiples of 4 so\n"
00144 "it can't be rendered by OpenGL."));
00145 }
00146
00147
00148
00149 if(defaults->get("AUTOASPECT", 0))
00150 {
00151 create_aspect_ratio(edl->session->aspect_w,
00152 edl->session->aspect_h,
00153 w,
00154 h);
00155 }
00156
00157 save_backup();
00158
00159 undo->update_undo(_("asset to size"), LOAD_ALL);
00160 restart_brender();
00161 sync_parameters(CHANGE_ALL);
00162 }
00163 }
00164
00165
00166 void MWindow::asset_to_rate()
00167 {
00168 if(session->drag_assets->total &&
00169 session->drag_assets->values[0]->video_data)
00170 {
00171 double new_framerate = session->drag_assets->values[0]->frame_rate;
00172 double old_framerate = edl->session->frame_rate;
00173
00174 edl->session->frame_rate = new_framerate;
00175 edl->resample(old_framerate, new_framerate, TRACK_VIDEO);
00176
00177 save_backup();
00178
00179 undo->update_undo(_("asset to rate"), LOAD_ALL);
00180 restart_brender();
00181 gui->update(1,
00182 2,
00183 1,
00184 1,
00185 1,
00186 1,
00187 0);
00188 sync_parameters(CHANGE_ALL);
00189 }
00190 }
00191
00192
00193
00194 void MWindow::clear_entry()
00195 {
00196 clear(1);
00197
00198 edl->optimize();
00199 save_backup();
00200 undo->update_undo(_("clear"), LOAD_EDITS | LOAD_TIMEBAR);
00201
00202 restart_brender();
00203 update_plugin_guis();
00204 gui->update(1, 2, 1, 1, 1, 1, 0);
00205 cwindow->update(1, 0, 0, 0, 1);
00206 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00207 CHANGE_EDL,
00208 edl,
00209 1);
00210 }
00211
00212 void MWindow::clear(int clear_handle)
00213 {
00214 double start = edl->local_session->get_selectionstart();
00215 double end = edl->local_session->get_selectionend();
00216 if(clear_handle || !EQUIV(start, end))
00217 {
00218 edl->clear(start,
00219 end,
00220 edl->session->labels_follow_edits,
00221 edl->session->plugins_follow_edits);
00222 }
00223 }
00224
00225 void MWindow::straighten_automation()
00226 {
00227 edl->tracks->straighten_automation(
00228 edl->local_session->get_selectionstart(),
00229 edl->local_session->get_selectionend());
00230 save_backup();
00231 undo->update_undo(_("straighten curves"), LOAD_AUTOMATION);
00232
00233 restart_brender();
00234 update_plugin_guis();
00235 gui->canvas->draw_overlays();
00236 gui->canvas->flash();
00237 sync_parameters(CHANGE_PARAMS);
00238 gui->patchbay->update();
00239 cwindow->update(1, 0, 0);
00240 }
00241
00242 void MWindow::clear_automation()
00243 {
00244 edl->tracks->clear_automation(edl->local_session->get_selectionstart(),
00245 edl->local_session->get_selectionend());
00246 save_backup();
00247 undo->update_undo(_("clear keyframes"), LOAD_AUTOMATION);
00248
00249 restart_brender();
00250 update_plugin_guis();
00251 gui->canvas->draw_overlays();
00252 gui->canvas->flash();
00253 sync_parameters(CHANGE_PARAMS);
00254 gui->patchbay->update();
00255 cwindow->update(1, 0, 0);
00256 }
00257
00258 int MWindow::clear_default_keyframe()
00259 {
00260 edl->tracks->clear_default_keyframe();
00261 save_backup();
00262 undo->update_undo(_("clear default keyframe"), LOAD_AUTOMATION);
00263
00264 restart_brender();
00265 gui->canvas->draw_overlays();
00266 gui->canvas->flash();
00267 sync_parameters(CHANGE_PARAMS);
00268 gui->patchbay->update();
00269 cwindow->update(1, 0, 0);
00270
00271 return 0;
00272 }
00273
00274 void MWindow::clear_labels()
00275 {
00276 clear_labels(edl->local_session->get_selectionstart(),
00277 edl->local_session->get_selectionend());
00278 undo->update_undo(_("clear labels"), LOAD_TIMEBAR);
00279
00280 gui->timebar->update();
00281 cwindow->update(0, 0, 0, 0, 1);
00282 save_backup();
00283 }
00284
00285 int MWindow::clear_labels(double start, double end)
00286 {
00287 edl->labels->clear(start, end, 0);
00288 return 0;
00289 }
00290
00291 void MWindow::concatenate_tracks()
00292 {
00293 edl->tracks->concatenate_tracks(edl->session->plugins_follow_edits);
00294 save_backup();
00295 undo->update_undo(_("concatenate tracks"), LOAD_EDITS);
00296
00297 restart_brender();
00298 gui->update(1, 1, 0, 0, 1, 0, 0);
00299 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00300 CHANGE_EDL,
00301 edl,
00302 1);
00303 }
00304
00305
00306 void MWindow::copy()
00307 {
00308 copy(edl->local_session->get_selectionstart(),
00309 edl->local_session->get_selectionend());
00310 }
00311
00312 int MWindow::copy(double start, double end)
00313 {
00314 if(start == end) return 1;
00315
00316
00317 FileXML file;
00318
00319 edl->copy(start,
00320 end,
00321 0,
00322 0,
00323 0,
00324 &file,
00325 plugindb,
00326 "",
00327 1);
00328
00329
00330
00331
00332
00333 gui->get_clipboard()->to_clipboard(file.string, strlen(file.string), SECONDARY_SELECTION);
00334
00335
00336 save_backup();
00337 return 0;
00338 }
00339
00340 int MWindow::copy_automation()
00341 {
00342 FileXML file;
00343 edl->tracks->copy_automation(edl->local_session->get_selectionstart(),
00344 edl->local_session->get_selectionend(),
00345 &file,
00346 0,
00347 0);
00348 gui->get_clipboard()->to_clipboard(file.string,
00349 strlen(file.string),
00350 SECONDARY_SELECTION);
00351 return 0;
00352 }
00353
00354 int MWindow::copy_default_keyframe()
00355 {
00356 FileXML file;
00357 edl->tracks->copy_default_keyframe(&file);
00358 gui->get_clipboard()->to_clipboard(file.string,
00359 strlen(file.string),
00360 SECONDARY_SELECTION);
00361 return 0;
00362 }
00363
00364
00365
00366
00367 void MWindow::crop_video()
00368 {
00369
00370
00371 if(edl->session->crop_x1 > edl->session->crop_x2)
00372 {
00373 edl->session->crop_x1 ^= edl->session->crop_x2;
00374 edl->session->crop_x2 ^= edl->session->crop_x1;
00375 edl->session->crop_x1 ^= edl->session->crop_x2;
00376 }
00377 if(edl->session->crop_y1 > edl->session->crop_y2)
00378 {
00379 edl->session->crop_y1 ^= edl->session->crop_y2;
00380 edl->session->crop_y2 ^= edl->session->crop_y1;
00381 edl->session->crop_y1 ^= edl->session->crop_y2;
00382 }
00383
00384 float old_projector_x = (float)edl->session->output_w / 2;
00385 float old_projector_y = (float)edl->session->output_h / 2;
00386 float new_projector_x = (float)(edl->session->crop_x1 + edl->session->crop_x2) / 2;
00387 float new_projector_y = (float)(edl->session->crop_y1 + edl->session->crop_y2) / 2;
00388 float projector_offset_x = -(new_projector_x - old_projector_x);
00389 float projector_offset_y = -(new_projector_y - old_projector_y);
00390
00391 edl->tracks->translate_projector(projector_offset_x, projector_offset_y);
00392
00393 edl->session->output_w = edl->session->crop_x2 - edl->session->crop_x1;
00394 edl->session->output_h = edl->session->crop_y2 - edl->session->crop_y1;
00395 edl->session->crop_x1 = 0;
00396 edl->session->crop_y1 = 0;
00397 edl->session->crop_x2 = edl->session->output_w;
00398 edl->session->crop_y2 = edl->session->output_h;
00399
00400
00401 if(defaults->get("AUTOASPECT", 0))
00402 {
00403 create_aspect_ratio(edl->session->aspect_w,
00404 edl->session->aspect_h,
00405 edl->session->output_w,
00406 edl->session->output_h);
00407 }
00408
00409 undo->update_undo(_("crop"), LOAD_ALL);
00410
00411 restart_brender();
00412 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00413 CHANGE_ALL,
00414 edl,
00415 1);
00416 save_backup();
00417 }
00418
00419 void MWindow::cut()
00420 {
00421
00422 double start = edl->local_session->get_selectionstart();
00423 double end = edl->local_session->get_selectionend();
00424
00425 copy(start, end);
00426 edl->clear(start,
00427 end,
00428 edl->session->labels_follow_edits,
00429 edl->session->plugins_follow_edits);
00430
00431
00432 edl->optimize();
00433 save_backup();
00434 undo->update_undo(_("cut"), LOAD_EDITS | LOAD_TIMEBAR);
00435
00436 restart_brender();
00437 update_plugin_guis();
00438 gui->update(1, 2, 1, 1, 1, 1, 0);
00439 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00440 CHANGE_EDL,
00441 edl,
00442 1);
00443 }
00444
00445 int MWindow::cut_automation()
00446 {
00447
00448 copy_automation();
00449
00450 edl->tracks->clear_automation(edl->local_session->get_selectionstart(),
00451 edl->local_session->get_selectionend());
00452 save_backup();
00453 undo->update_undo(_("cut keyframes"), LOAD_AUTOMATION);
00454
00455
00456 restart_brender();
00457 update_plugin_guis();
00458 gui->canvas->draw_overlays();
00459 gui->canvas->flash();
00460 sync_parameters(CHANGE_PARAMS);
00461 gui->patchbay->update();
00462 cwindow->update(1, 0, 0);
00463 return 0;
00464 }
00465
00466 int MWindow::cut_default_keyframe()
00467 {
00468
00469 copy_default_keyframe();
00470 edl->tracks->clear_default_keyframe();
00471 undo->update_undo(_("cut default keyframe"), LOAD_AUTOMATION);
00472
00473 restart_brender();
00474 gui->canvas->draw_overlays();
00475 gui->canvas->flash();
00476 sync_parameters(CHANGE_PARAMS);
00477 gui->patchbay->update();
00478 cwindow->update(1, 0, 0);
00479 save_backup();
00480
00481
00482 return 0;
00483 }
00484
00485 void MWindow::delete_inpoint()
00486 {
00487 edl->local_session->unset_inpoint();
00488 save_backup();
00489 }
00490
00491 void MWindow::delete_outpoint()
00492 {
00493 edl->local_session->unset_outpoint();
00494 save_backup();
00495 }
00496
00497 void MWindow::delete_track()
00498 {
00499 if (edl->tracks->last)
00500 delete_track(edl->tracks->last);
00501 }
00502
00503 void MWindow::delete_tracks()
00504 {
00505 edl->tracks->delete_tracks();
00506 undo->update_undo(_("delete tracks"), LOAD_ALL);
00507 save_backup();
00508
00509 restart_brender();
00510 update_plugin_states();
00511 gui->update(1, 1, 1, 0, 1, 0, 0);
00512 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00513 CHANGE_EDL,
00514 edl,
00515 1);
00516 }
00517
00518 void MWindow::delete_track(Track *track)
00519 {
00520 edl->tracks->delete_track(track);
00521 undo->update_undo(_("delete track"), LOAD_ALL);
00522
00523 restart_brender();
00524 update_plugin_states();
00525 gui->update(1, 1, 1, 0, 1, 0, 0);
00526 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00527 CHANGE_EDL,
00528 edl,
00529 1);
00530 save_backup();
00531 }
00532
00533 void MWindow::detach_transition(Transition *transition)
00534 {
00535 hide_plugin(transition, 1);
00536 int is_video = (transition->edit->track->data_type == TRACK_VIDEO);
00537 transition->edit->detach_transition();
00538 save_backup();
00539 undo->update_undo(_("detach transition"), LOAD_ALL);
00540
00541 if(is_video) restart_brender();
00542 gui->update(0,
00543 1,
00544 0,
00545 0,
00546 0,
00547 0,
00548 0);
00549 sync_parameters(CHANGE_EDL);
00550 }
00551
00552
00553
00554
00555
00556
00557 void MWindow::insert(double position,
00558 FileXML *file,
00559 int edit_labels,
00560 int edit_plugins,
00561 EDL *parent_edl)
00562 {
00563
00564
00565
00566 EDL edl(parent_edl);
00567 ArrayList<EDL*> new_edls;
00568 uint32_t load_flags = LOAD_ALL;
00569
00570
00571 new_edls.append(&edl);
00572 edl.create_objects();
00573
00574
00575
00576
00577 if(parent_edl) load_flags &= ~LOAD_SESSION;
00578 if(!edl.session->autos_follow_edits) load_flags &= ~LOAD_AUTOMATION;
00579 if(!edl.session->labels_follow_edits) load_flags &= ~LOAD_TIMEBAR;
00580
00581 edl.load_xml(plugindb, file, load_flags);
00582
00583
00584
00585
00586
00587
00588 paste_edls(&new_edls,
00589 LOAD_PASTE,
00590 0,
00591 position,
00592 edit_labels,
00593 edit_plugins,
00594 0);
00595
00596
00597
00598
00599 new_edls.remove_all();
00600
00601 }
00602
00603 void MWindow::insert_effects_canvas(double start,
00604 double length)
00605 {
00606 Track *dest_track = session->track_highlighted;
00607 if(!dest_track) return;
00608
00609
00610 for(int i = 0; i < session->drag_pluginservers->total; i++)
00611 {
00612 PluginServer *plugin = session->drag_pluginservers->values[i];
00613
00614 insert_effect(plugin->title,
00615 0,
00616 dest_track,
00617 i == 0 ? session->pluginset_highlighted : 0,
00618 start,
00619 length,
00620 PLUGIN_STANDALONE);
00621 }
00622
00623 save_backup();
00624 undo->update_undo(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
00625 restart_brender();
00626 sync_parameters(CHANGE_EDL);
00627
00628 }
00629
00630 void MWindow::insert_effects_cwindow(Track *dest_track)
00631 {
00632 if(!dest_track) return;
00633
00634
00635 double start = 0;
00636 double length = dest_track->get_length();
00637
00638 if(edl->local_session->get_selectionend() >
00639 edl->local_session->get_selectionstart())
00640 {
00641 start = edl->local_session->get_selectionstart();
00642 length = edl->local_session->get_selectionend() -
00643 edl->local_session->get_selectionstart();
00644 }
00645
00646 for(int i = 0; i < session->drag_pluginservers->total; i++)
00647 {
00648 PluginServer *plugin = session->drag_pluginservers->values[i];
00649
00650
00651 insert_effect(plugin->title,
00652 0,
00653 dest_track,
00654 0,
00655 start,
00656 length,
00657 PLUGIN_STANDALONE);
00658 }
00659
00660 save_backup();
00661 undo->update_undo(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
00662 restart_brender();
00663 sync_parameters(CHANGE_EDL);
00664 gui->update(1,
00665 1,
00666 0,
00667 0,
00668 1,
00669 0,
00670 0);
00671 }
00672
00673
00674
00675 void MWindow::insert_effect(char *title,
00676 SharedLocation *shared_location,
00677 Track *track,
00678 PluginSet *plugin_set,
00679 double start,
00680 double length,
00681 int plugin_type)
00682 {
00683 KeyFrame *default_keyframe = 0;
00684 PluginServer *server = 0;
00685
00686
00687
00688
00689
00690
00691
00692 if(plugin_type == PLUGIN_STANDALONE)
00693 {
00694 default_keyframe = new KeyFrame;
00695 server = new PluginServer(*scan_plugindb(title, track->data_type));
00696
00697 server->open_plugin(0, preferences, edl, 0, -1);
00698 server->save_data(default_keyframe);
00699 }
00700
00701
00702
00703
00704 track->insert_effect(title,
00705 shared_location,
00706 default_keyframe,
00707 plugin_set,
00708 start,
00709 length,
00710 plugin_type);
00711
00712 track->optimize();
00713
00714
00715 if(plugin_type == PLUGIN_STANDALONE)
00716 {
00717 server->close_plugin();
00718 delete server;
00719 delete default_keyframe;
00720 }
00721 }
00722
00723 int MWindow::modify_edithandles()
00724 {
00725
00726 edl->modify_edithandles(session->drag_start,
00727 session->drag_position,
00728 session->drag_handle,
00729 edl->session->edit_handle_mode[session->drag_button],
00730 edl->session->labels_follow_edits,
00731 edl->session->plugins_follow_edits);
00732
00733 finish_modify_handles();
00734
00735
00736
00737 return 0;
00738 }
00739
00740 int MWindow::modify_pluginhandles()
00741 {
00742
00743 edl->modify_pluginhandles(session->drag_start,
00744 session->drag_position,
00745 session->drag_handle,
00746 edl->session->edit_handle_mode[session->drag_button],
00747 edl->session->labels_follow_edits,
00748 session->trim_edits);
00749
00750 finish_modify_handles();
00751
00752 return 0;
00753 }
00754
00755
00756
00757 void MWindow::finish_modify_handles()
00758 {
00759 int edit_mode = edl->session->edit_handle_mode[session->drag_button];
00760
00761 if((session->drag_handle == 1 && edit_mode != MOVE_NO_EDITS) ||
00762 (session->drag_handle == 0 && edit_mode == MOVE_ONE_EDIT))
00763 {
00764 edl->local_session->set_selectionstart(session->drag_position);
00765 edl->local_session->set_selectionend(session->drag_position);
00766 }
00767 else
00768 if(edit_mode != MOVE_NO_EDITS)
00769 {
00770 edl->local_session->set_selectionstart(session->drag_start);
00771 edl->local_session->set_selectionend(session->drag_start);
00772 }
00773
00774 if(edl->local_session->get_selectionstart(1) < 0)
00775 {
00776 edl->local_session->set_selectionstart(0);
00777 edl->local_session->set_selectionend(0);
00778 }
00779
00780 save_backup();
00781 undo->update_undo(_("drag handle"), LOAD_EDITS | LOAD_TIMEBAR);
00782 restart_brender();
00783 sync_parameters(CHANGE_EDL);
00784 update_plugin_guis();
00785 gui->update(1, 2, 1, 1, 1, 1, 0);
00786 cwindow->update(1, 0, 0, 0, 1);
00787 }
00788
00789 void MWindow::match_output_size(Track *track)
00790 {
00791 track->track_w = edl->session->output_w;
00792 track->track_h = edl->session->output_h;
00793 save_backup();
00794 undo->update_undo(_("match output size"), LOAD_ALL);
00795
00796 restart_brender();
00797 sync_parameters(CHANGE_EDL);
00798 }
00799
00800
00801 void MWindow::move_edits(ArrayList<Edit*> *edits,
00802 Track *track,
00803 double position,
00804 int behaviour)
00805 {
00806
00807 edl->tracks->move_edits(edits,
00808 track,
00809 position,
00810 edl->session->labels_follow_edits,
00811 edl->session->plugins_follow_edits,
00812 behaviour);
00813
00814 save_backup();
00815 undo->update_undo(_("move edit"), LOAD_ALL);
00816
00817 restart_brender();
00818 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00819 CHANGE_EDL,
00820 edl,
00821 1);
00822
00823 update_plugin_guis();
00824 gui->update(1,
00825 1,
00826 1,
00827 0,
00828 0,
00829 0,
00830 0);
00831 }
00832
00833 void MWindow::move_effect(Plugin *plugin,
00834 PluginSet *dest_plugin_set,
00835 Track *dest_track,
00836 int64_t dest_position)
00837 {
00838
00839 edl->tracks->move_effect(plugin,
00840 dest_plugin_set,
00841 dest_track,
00842 dest_position);
00843
00844 save_backup();
00845 undo->update_undo(_("move effect"), LOAD_ALL);
00846
00847 restart_brender();
00848 cwindow->playback_engine->que->send_command(CURRENT_FRAME,
00849 CHANGE_EDL,
00850