libncurses5-dev libxinerama-dev libfreetype6-dev libxft-dev libgif-dev \
libtiff5-dev exuberant-ctags ttf-bitstream-vera xfonts-75dpi xfonts-100dpi \
fonts-dejavu libopenexr-dev festival libfftw3-dev gdb \
- libdc1394-22-dev libesd0-dev libflac-dev libjbig-dev libvdpau-dev \
+ libdc1394-22-dev libflac-dev libjbig-dev libvdpau-dev \
inkscape libsndfile1-dev libtheora-dev cmake udftools libxml2-utils git \
autoconf automake debhelper libgtk2.0-dev
;;
libncurses5-dev libxinerama-dev libfreetype6-dev libxft-dev libgif-dev \
libtiff5-dev exuberant-ctags ttf-bitstream-vera xfonts-75dpi xfonts-100dpi \
fonts-dejavu libopenexr-dev libavc1394-dev festival-dev fftw3-dev gdb \
- libdc1394-22-dev libiec61883-dev libesd0-dev libflac-dev libjbig-dev \
+ libdc1394-22-dev libiec61883-dev libflac-dev libjbig-dev \
libvdpau-dev libsndfile1-dev libtheora-dev cmake udftools libxml2-utils \
git inkscape autoconf automake debhelper libgtk2.0-dev
;;
//PRINT_TRACE
// Initialize stuff which MWindow does.
signals->initialize("/tmp/cinelerra_batch%d.dmp");
+ boot_defaults = 0;
MWindow::init_defaults(boot_defaults, config_path);
load_defaults(boot_defaults);
preferences = new Preferences;
static CHANLIST ntsc_dvb[] =
{
- { "2", 57 },
- { "3", 63 },
- { "4", 69 },
- { "5", 79 },
- { "6", 85 },
- { "7", 177 },
- { "8", 183 },
- { "9", 189 },
- { "10", 195 },
- { "11", 201 },
- { "12", 207 },
- { "13", 213 },
- { "14", 473 },
- { "15", 479 },
- { "16", 485 },
- { "17", 491 },
- { "18", 497 },
- { "19", 503 },
- { "20", 509 },
- { "21", 515 },
- { "22", 521 },
- { "23", 527 },
- { "24", 533 },
- { "25", 539 },
- { "26", 545 },
- { "27", 551 },
- { "28", 557 },
- { "29", 563 },
- { "30", 569 },
- { "31", 575 },
- { "32", 581 },
- { "33", 587 },
- { "34", 593 },
- { "35", 599 },
- { "36", 605 },
- { "37", 611 },
- { "38", 617 },
- { "39", 623 },
- { "40", 629 },
- { "41", 635 },
- { "42", 641 },
- { "43", 647 },
- { "44", 653 },
- { "45", 659 },
- { "46", 665 },
- { "47", 671 },
- { "48", 677 },
- { "49", 683 },
- { "50", 689 },
- { "51", 695 },
- { "52", 701 },
- { "53", 707 },
- { "54", 713 },
- { "55", 719 },
- { "56", 725 },
- { "57", 731 },
- { "58", 737 },
- { "59", 743 },
- { "60", 749 },
- { "61", 755 },
- { "62", 761 },
- { "63", 767 },
- { "64", 773 },
- { "65", 779 },
- { "66", 785 },
- { "67", 791 },
- { "68", 797 },
- { "69", 803 },
- { "70", 809 },
- { "71", 815 },
- { "72", 821 },
- { "73", 827 },
- { "74", 833 },
- { "75", 839 },
- { "76", 845 },
- { "77", 851 },
- { "78", 857 },
- { "79", 863 },
- { "80", 869 },
- { "81", 875 },
- { "82", 881 },
- { "83", 887 },
- { "84", 893 },
- { "85", 899 },
- { "86", 905 },
- { "87", 911 },
- { "88", 917 },
- { "89", 923 },
- { "90", 929 },
- { "91", 935 },
- { "92", 941 },
- { "93", 947 },
- { "94", 953 },
- { "95", 959 },
- { "96", 965 },
- { "97", 971 },
- { "98", 977 },
- { "99", 983 },
- { "100", 989 },
- { "101", 995 },
- { "102", 1001 },
- { "103", 1007 },
- { "104", 1013 },
- { "105", 1019 },
- { "106", 1025 },
- { "107", 1031 },
- { "108", 1037 },
- { "109", 1043 },
+ { "2", 57000 },
+ { "3", 63000 },
+ { "4", 69000 },
+ { "5", 79000 },
+ { "6", 85000 },
+ { "7", 177000 },
+ { "8", 183000 },
+ { "9", 189000 },
+ { "10", 195000 },
+ { "11", 201000 },
+ { "12", 207000 },
+ { "13", 213000 },
+ { "14", 473000 },
+ { "15", 479000 },
+ { "16", 485000 },
+ { "17", 491000 },
+ { "18", 497000 },
+ { "19", 503000 },
+ { "20", 509000 },
+ { "21", 515000 },
+ { "22", 521000 },
+ { "23", 527000 },
+ { "24", 533000 },
+ { "25", 539000 },
+ { "26", 545000 },
+ { "27", 551000 },
+ { "28", 557000 },
+ { "29", 563000 },
+ { "30", 569000 },
+ { "31", 575000 },
+ { "32", 581000 },
+ { "33", 587000 },
+ { "34", 593000 },
+ { "35", 599000 },
+ { "36", 605000 },
+ { "37", 611000 },
+ { "38", 617000 },
+ { "39", 623000 },
+ { "40", 629000 },
+ { "41", 635000 },
+ { "42", 641000 },
+ { "43", 647000 },
+ { "44", 653000 },
+ { "45", 659000 },
+ { "46", 665000 },
+ { "47", 671000 },
+ { "48", 677000 },
+ { "49", 683000 },
+ { "50", 689000 },
+ { "51", 695000 },
+ { "52", 701000 },
+ { "53", 707000 },
+ { "54", 713000 },
+ { "55", 719000 },
+ { "56", 725000 },
+ { "57", 731000 },
+ { "58", 737000 },
+ { "59", 743000 },
+ { "60", 749000 },
+ { "61", 755000 },
+ { "62", 761000 },
+ { "63", 767000 },
+ { "64", 773000 },
+ { "65", 779000 },
+ { "66", 785000 },
+ { "67", 791000 },
+ { "68", 797000 },
+ { "69", 803000 },
+ { "70", 809000 },
+ { "71", 815000 },
+ { "72", 821000 },
+ { "73", 827000 },
+ { "74", 833000 },
+ { "75", 839000 },
+ { "76", 845000 },
+ { "77", 851000 },
+ { "78", 857000 },
+ { "79", 863000 },
+ { "80", 869000 },
+ { "81", 875000 },
+ { "82", 881000 },
+ { "83", 887000 },
+ { "84", 893000 },
+ { "85", 899000 },
+ { "86", 905000 },
+ { "87", 911000 },
+ { "88", 917000 },
+ { "89", 923000 },
+ { "90", 929000 },
+ { "91", 935000 },
+ { "92", 941000 },
+ { "93", 947000 },
+ { "94", 953000 },
+ { "95", 959000 },
+ { "96", 965000 },
+ { "97", 971000 },
+ { "98", 977000 },
+ { "99", 983000 },
+ { "100", 989000 },
+ { "101", 995000 },
+ { "102", 1001000 },
+ { "103", 1007000 },
+ { "104", 1013000 },
+ { "105", 1019000 },
+ { "106", 1025000 },
+ { "107", 1031000 },
+ { "108", 1037000 },
+ { "109", 1043000 },
};
static CHANLIST catv_dvb[] =
{
- { "2", 57 },
- { "3", 63 },
- { "4", 69 },
- { "5", 79 },
- { "6", 85 },
- { "7", 177 },
- { "8", 183 },
- { "9", 189 },
- { "10", 195 },
- { "11", 201 },
- { "12", 207 },
- { "13", 213 },
- { "14", 123 },
- { "15", 129 },
- { "16", 135 },
- { "17", 141 },
- { "18", 147 },
- { "19", 153 },
- { "20", 159 },
- { "21", 165 },
- { "22", 171 },
- { "23", 219 },
- { "24", 225 },
- { "25", 231 },
- { "26", 237 },
- { "27", 243 },
- { "28", 249 },
- { "29", 255 },
- { "30", 261 },
- { "31", 267 },
- { "32", 273 },
- { "33", 279 },
- { "34", 285 },
- { "35", 291 },
- { "36", 297 },
- { "37", 303 },
- { "38", 309 },
- { "39", 315 },
- { "40", 321 },
- { "41", 327 },
- { "42", 333 },
- { "43", 339 },
- { "44", 345 },
- { "45", 351 },
- { "46", 357 },
- { "47", 363 },
- { "48", 369 },
- { "49", 375 },
- { "50", 381 },
- { "51", 387 },
- { "52", 393 },
- { "53", 399 },
- { "54", 405 },
- { "55", 411 },
- { "56", 417 },
- { "57", 423 },
- { "58", 429 },
- { "59", 435 },
- { "60", 441 },
- { "61", 447 },
- { "62", 453 },
- { "63", 459 },
- { "64", 465 },
- { "65", 471 },
- { "66", 477 },
- { "67", 483 },
- { "68", 489 },
- { "69", 495 },
- { "70", 501 },
- { "71", 507 },
- { "72", 513 },
- { "73", 519 },
- { "74", 525 },
- { "75", 531 },
- { "76", 537 },
- { "77", 543 },
- { "78", 549 },
- { "79", 555 },
- { "80", 561 },
- { "81", 567 },
- { "82", 573 },
- { "83", 579 },
- { "84", 585 },
- { "85", 591 },
- { "86", 597 },
- { "87", 603 },
- { "88", 609 },
- { "89", 615 },
- { "90", 621 },
- { "91", 627 },
- { "92", 633 },
- { "93", 639 },
- { "94", 645 },
- { "95", 93 },
- { "96", 99 },
- { "97", 105 },
- { "98", 111 },
- { "99", 117 },
- { "100", 651 },
- { "101", 657 },
- { "102", 663 },
- { "103", 669 },
- { "104", 675 },
- { "105", 681 },
- { "106", 687 },
- { "107", 693 },
- { "108", 699 },
- { "109", 705 },
- { "110", 711 },
- { "111", 717 },
- { "112", 723 },
- { "113", 729 },
- { "114", 735 },
- { "115", 741 },
- { "116", 747 },
- { "117", 753 },
- { "118", 759 },
- { "119", 765 },
- { "120", 771 },
- { "121", 777 },
- { "122", 783 },
- { "123", 789 },
- { "124", 795 },
- { "125", 781 },
- { "126", 807 },
- { "127", 813 },
- { "128", 819 },
- { "129", 825 },
- { "130", 831 },
- { "131", 837 },
- { "132", 843 },
- { "133", 849 },
- { "134", 855 },
- { "135", 861 },
- { "136", 867 },
- { "137", 873 },
- { "138", 879 },
- { "139", 885 },
- { "140", 891 },
- { "141", 897 },
- { "142", 903 },
- { "143", 909 },
- { "144", 915 },
- { "145", 921 },
- { "146", 927 },
- { "147", 933 },
- { "148", 939 },
- { "149", 945 },
- { "150", 951 },
- { "151", 957 },
- { "152", 963 },
- { "153", 969 },
- { "154", 975 },
- { "155", 981 },
- { "156", 987 },
- { "157", 993 },
- { "158", 999 },
+ { "2", 57000 },
+ { "3", 63000 },
+ { "4", 69000 },
+ { "5", 79000 },
+ { "6", 85000 },
+ { "7", 177000 },
+ { "8", 183000 },
+ { "9", 189000 },
+ { "10", 195000 },
+ { "11", 201000 },
+ { "12", 207000 },
+ { "13", 213000 },
+ { "14", 123000 },
+ { "15", 129000 },
+ { "16", 135000 },
+ { "17", 141000 },
+ { "18", 147000 },
+ { "19", 153000 },
+ { "20", 159000 },
+ { "21", 165000 },
+ { "22", 171000 },
+ { "23", 219000 },
+ { "24", 225000 },
+ { "25", 231000 },
+ { "26", 237000 },
+ { "27", 243000 },
+ { "28", 249000 },
+ { "29", 255000 },
+ { "30", 261000 },
+ { "31", 267000 },
+ { "32", 273000 },
+ { "33", 279000 },
+ { "34", 285000 },
+ { "35", 291000 },
+ { "36", 297000 },
+ { "37", 303000 },
+ { "38", 309000 },
+ { "39", 315000 },
+ { "40", 321000 },
+ { "41", 327000 },
+ { "42", 333000 },
+ { "43", 339000 },
+ { "44", 345000 },
+ { "45", 351000 },
+ { "46", 357000 },
+ { "47", 363000 },
+ { "48", 369000 },
+ { "49", 375000 },
+ { "50", 381000 },
+ { "51", 387000 },
+ { "52", 393000 },
+ { "53", 399000 },
+ { "54", 405000 },
+ { "55", 411000 },
+ { "56", 417000 },
+ { "57", 423000 },
+ { "58", 429000 },
+ { "59", 435000 },
+ { "60", 441000 },
+ { "61", 447000 },
+ { "62", 453000 },
+ { "63", 459000 },
+ { "64", 465000 },
+ { "65", 471000 },
+ { "66", 477000 },
+ { "67", 483000 },
+ { "68", 489000 },
+ { "69", 495000 },
+ { "70", 501000 },
+ { "71", 507000 },
+ { "72", 513000 },
+ { "73", 519000 },
+ { "74", 525000 },
+ { "75", 531000 },
+ { "76", 537000 },
+ { "77", 543000 },
+ { "78", 549000 },
+ { "79", 555000 },
+ { "80", 561000 },
+ { "81", 567000 },
+ { "82", 573000 },
+ { "83", 579000 },
+ { "84", 585000 },
+ { "85", 591000 },
+ { "86", 597000 },
+ { "87", 603000 },
+ { "88", 609000 },
+ { "89", 615000 },
+ { "90", 621000 },
+ { "91", 627000 },
+ { "92", 633000 },
+ { "93", 639000 },
+ { "94", 645000 },
+ { "95", 93000 },
+ { "96", 99000 },
+ { "97", 105000 },
+ { "98", 111000 },
+ { "99", 117000 },
+ { "100", 651000 },
+ { "101", 657000 },
+ { "102", 663000 },
+ { "103", 669000 },
+ { "104", 675000 },
+ { "105", 681000 },
+ { "106", 687000 },
+ { "107", 693000 },
+ { "108", 699000 },
+ { "109", 705000 },
+ { "110", 711000 },
+ { "111", 717000 },
+ { "112", 723000 },
+ { "113", 729000 },
+ { "114", 735000 },
+ { "115", 741000 },
+ { "116", 747000 },
+ { "117", 753000 },
+ { "118", 759000 },
+ { "119", 765000 },
+ { "120", 771000 },
+ { "121", 777000 },
+ { "122", 783000 },
+ { "123", 789000 },
+ { "124", 795000 },
+ { "125", 781000 },
+ { "126", 807000 },
+ { "127", 813000 },
+ { "128", 819000 },
+ { "129", 825000 },
+ { "130", 831000 },
+ { "131", 837000 },
+ { "132", 843000 },
+ { "133", 849000 },
+ { "134", 855000 },
+ { "135", 861000 },
+ { "136", 867000 },
+ { "137", 873000 },
+ { "138", 879000 },
+ { "139", 885000 },
+ { "140", 891000 },
+ { "141", 897000 },
+ { "142", 903000 },
+ { "143", 909000 },
+ { "144", 915000 },
+ { "145", 921000 },
+ { "146", 927000 },
+ { "147", 933000 },
+ { "148", 939000 },
+ { "149", 945000 },
+ { "150", 951000 },
+ { "151", 957000 },
+ { "152", 963000 },
+ { "153", 969000 },
+ { "154", 975000 },
+ { "155", 981000 },
+ { "156", 987000 },
+ { "157", 993000 },
+ { "158", 999000 },
};
static CHANLIST ntsc_bcast[] =
#define CHAN_COUNT(x) (sizeof(x)/sizeof(CHANLIST))
-extern CHANLISTS chanlists[];
-
#define NTSC_AUDIO_CARRIER 4500
#define PAL_AUDIO_CARRIER_I 6000
#define PAL_AUDIO_CARRIER_BGHN 5500
#define PAL_NEWZEALAND 10
#define PAL_AUSTRALIA 11
#define PAL_IRELAND 12
+#define CHANLIST_SIZE 13
+
+extern CHANLISTS chanlists[CHANLIST_SIZE];
#endif
return 1;
}
+// Return values: 0 = OK, 1 = unreported error, 2 = error reported to stderr
int DeviceDVBInput::dvb_open()
{
int ret = 0;
(frontend_fd = ::open(frontend_path, O_RDWR)) < 0 ) {
fprintf(stderr, "DeviceDVBInput::dvb_open %s: %s\n",
frontend_path, strerror(errno));
- ret = 1;
+ ret = 2;
}
if( !ret && ioctl(frontend_fd, FE_GET_INFO, &fe_info) < 0 ) {
fprintf(stderr,
"DeviceDVBInput::dvb_open FE_GET_INFO: %s\n",
strerror(errno));
- ret = 1;
+ ret = 2;
}
pwr_min = snr_min = 0;
int index = -1, table = -1;
if( !ret && (index = get_channel()) < 0 ) ret = 1;
if( !ret && (table = get_channel_table()) < 0 ) ret = 1;
+ if( !ret && table >= CHANLIST_SIZE ) ret = 1;
+
+ struct dvb_frontend_parameters frontend_param;
if( !ret ) {
- uint32_t frequency = 0;
- struct dvb_frontend_parameters frontend_param;
- bzero(&frontend_param, sizeof(frontend_param));
- ret = 1;
- switch(table) {
- case NETTUNE_AIR:
- if( index >= chanlists[NTSC_DVB].count ) break;
- frequency = chanlists[NTSC_DVB].list[index].freq * 1000000;
- if( frequency < fe_info.frequency_min ||
- frequency > fe_info.frequency_max ) break;
- frontend_param.frequency = frequency;
+ uint32_t frequency = chanlists[table].list[index].freq * 1000;
+ if( frequency < fe_info.frequency_min ||
+ frequency > fe_info.frequency_max ) {
+ fprintf(stderr,
+ "DeviceDVBInput::dvb_open channel %s frequency %d out of range %d-%d\n",
+ chanlists[table].list[index].name, frequency, fe_info.frequency_min, fe_info.frequency_max);
+ ret = 2;
+ }
+ memset(&frontend_param, 0, sizeof(frontend_param));
+ frontend_param.frequency = frequency;
+ }
+ if( !ret ) {
+ switch( table ) {
+ case NTSC_DVB:
+ case NTSC_BCAST:
+ case NTSC_HRC:
+ case NTSC_BCAST_JP:
frontend_param.u.vsb.modulation = VSB_8;
- ret = 0;
break;
- case NETTUNE_CABLE:
- if( index >= chanlists[CATV_DVB].count ) break;
- frequency = chanlists[CATV_DVB].list[index].freq * 1000000;
- if( frequency < fe_info.frequency_min ||
- frequency > fe_info.frequency_max ) break;
- frontend_param.frequency = frequency;
+ case PAL_EUROPE:
+ case PAL_E_EUROPE:
+ case PAL_ITALY:
+ case PAL_NEWZEALAND:
+ case PAL_AUSTRALIA:
+ case PAL_IRELAND:
+ case CATV_DVB:
+ case NTSC_CABLE:
+ case NTSC_CABLE_JP:
frontend_param.u.vsb.modulation = QAM_AUTO;
- ret = 0;
break;
- }
-
- if( !ret && ioctl(frontend_fd, FE_SET_FRONTEND, &frontend_param) < 0 ) {
+ default:
fprintf(stderr,
- "DeviceDVBInput::dvb_open FE_SET_FRONTEND frequency=%d: %s\n",
- frontend_param.frequency, strerror(errno));
- ret = 1;
+ "DeviceDVBInput::dvb_open bad table index=%d\n", table);
+ ret = 2;
+ break;
}
+ }
- if( !ret && wait_signal(333,3) ) {
- fprintf(stderr,
- "DeviceDVBInput::dvb_open: no signal, index=%d frequency=%d\n",
- index, frontend_param.frequency);
- ret = 1;
- }
+ if( !ret && ioctl(frontend_fd, FE_SET_FRONTEND, &frontend_param) < 0 ) {
+ fprintf(stderr,
+ "DeviceDVBInput::dvb_open FE_SET_FRONTEND frequency=%d: %s\n",
+ frontend_param.frequency, strerror(errno));
+ ret = 2;
+ }
- if( !ret && ioctl(frontend_fd, FE_GET_FRONTEND, &frontend_param) ) {
- fprintf(stderr,
- "DeviceDVBInput::dvb_open FE_GET_FRONTEND: %s\n",
- strerror(errno));
- ret = 1;
+ if( !ret && wait_signal(333,3) ) {
+ fprintf(stderr,
+ "DeviceDVBInput::dvb_open: no signal, index=%d, channel %s, frequency=%d\n",
+ index, chanlists[table].list[index].name, frontend_param.frequency);
+ ret = 2;
+ }
+
+ if( !ret && ioctl(frontend_fd, FE_GET_FRONTEND, &frontend_param) ) {
+ fprintf(stderr,
+ "DeviceDVBInput::dvb_open FE_GET_FRONTEND: %s\n",
+ strerror(errno));
+ ret = 2;
+ }
+ if( !ret ) { // goofy quirks
+ if( !strcmp("Samsung S5H1409 QAM/8VSB Frontend", fe_info.name) ) {
+ switch(frontend_param.u.vsb.modulation) {
+ case QAM_64: snr_min = 200; snr_max = 300; break;
+ case QAM_256: snr_min = 260; snr_max = 400; break;
+ case VSB_8: snr_min = 111; snr_max = 300; break;
+ default: break;
+ }
+ pwr_min = snr_min; pwr_max = snr_max;
+ }
+ else if( !strcmp("Auvitek AU8522 QAM/8VSB Frontend", fe_info.name) ) {
+ switch(frontend_param.u.vsb.modulation) {
+ case QAM_64: snr_min = 190; snr_max = 290; break;
+ case QAM_256: snr_min = 280; snr_max = 400; break;
+ case VSB_8: snr_min = 115; snr_max = 270; break;
+ default: break;
+ }
+ pwr_min = snr_min; pwr_max = snr_max;
}
- if( !ret ) { // goofy quirks
- if( !strcmp("Samsung S5H1409 QAM/8VSB Frontend", fe_info.name) ) {
- switch(frontend_param.u.vsb.modulation) {
- case QAM_64: snr_min = 200; snr_max = 300; break;
- case QAM_256: snr_min = 260; snr_max = 400; break;
- case VSB_8: snr_min = 111; snr_max = 300; break;
- default: break;
- }
- pwr_min = snr_min; pwr_max = snr_max;
- }
- else if( !strcmp("Auvitek AU8522 QAM/8VSB Frontend", fe_info.name) ) {
- switch(frontend_param.u.vsb.modulation) {
- case QAM_64: snr_min = 190; snr_max = 290; break;
- case QAM_256: snr_min = 280; snr_max = 400; break;
- case VSB_8: snr_min = 115; snr_max = 270; break;
- default: break;
- }
- pwr_min = snr_min; pwr_max = snr_max;
- }
- }
}
if( !ret && (demux_fd = ::open(demux_path, O_RDWR)) < 0 ) {
"DeviceDVBInput::dvb_open %s for video: %s\n",
demux_path,
strerror(errno));
- ret = 1;
+ ret = 2;
}
// Setting exactly one PES filter to 0x2000 dumps the entire
if( fe < 0 ) return -1;
fe_status_t st; memset(&st, 0, sizeof(st));
if( ioctl(fe, FE_READ_STATUS, &st) ) return 1;
- if( (st & FE_TIMEDOUT) != 0 ) return 1;
+ if( (st & FE_TIMEDOUT) != 0 ) return 1;
signal_lck = (st & FE_HAS_LOCK) != 0 ? 1 : 0;
signal_crr = (st & FE_HAS_CARRIER) != 0 ? 1 : 0;
uint16_t power = 0;
{
int ret = 0;
dvb_lock->lock("DeviceDVBInput::open_dev");
- if( dvb_fd < 0 )
- {
+ if( dvb_fd < 0 ) {
ret = dvb_open();
- if( ret ) {
+ if( ret == 1 ) {
printf("DeviceDVBInput::open_dev: adaptor %s open failed\n",
dev_name);
}
#include "edlsession.h"
#include "filexml.h"
#include "filesystem.h"
+#include "labels.h"
#include "localsession.h"
#include "plugin.h"
#include "mainsession.h"
void Edit::shift(int64_t difference)
{
-//printf("Edit::shift 1 %p %jd %jd\n", this, startproject, difference);
startproject += difference;
-//printf("Edit::shift 2 %jd %jd\n", startproject, difference);
}
-int Edit::shift_start_in(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
- Edits *trim_edits)
+
+int Edit::shift_start(int edit_mode, int64_t newposition, int64_t oldposition,
+ int edit_edits, int edit_labels, int edit_plugins, int edit_autos,
+ Edits *trim_edits)
{
+ int64_t startproject = this->startproject;
+ int64_t startsource = this->startsource;
+ int64_t length = this->length;
+ int64_t source_len = get_source_end(startsource + length);
int64_t cut_length = newposition - oldposition;
- int64_t end_previous_source, end_source;
-
- if(edit_mode == MOVE_ALL_EDITS)
- {
- if(cut_length < length)
- { // clear partial
- edits->clear_recursive(oldposition,
- newposition,
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
- }
- else
- { // clear entire
- edits->clear_recursive(oldposition,
- startproject + length,
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
- }
- }
- else
- if(edit_mode == MOVE_ONE_EDIT)
- {
-// Paste silence and cut
-//printf("Edit::shift_start_in 1\n");
- if(!previous)
- {
- Edit *new_edit = edits->create_edit();
- new_edit->startproject = this->startproject;
- new_edit->length = 0;
- edits->insert_before(this,
- new_edit);
- }
-//printf("Edit::shift_start_in 2 %p\n", previous);
-
- end_previous_source = previous->get_source_end(previous->startsource + previous->length + cut_length);
- if(end_previous_source > 0 &&
- previous->startsource + previous->length + cut_length > end_previous_source)
- cut_length = end_previous_source - previous->startsource - previous->length;
-
- if(cut_length < length)
- { // Move in partial
- startproject += cut_length;
- startsource += cut_length;
- length -= cut_length;
- previous->length += cut_length;
-//printf("Edit::shift_start_in 2\n");
- }
- else
- { // Clear entire edit
- cut_length = length;
- previous->length += cut_length;
- for(Edit* current_edit = this; current_edit; current_edit = current_edit->next)
- {
- current_edit->startproject += cut_length;
- }
- edits->clear_recursive(oldposition + cut_length,
- startproject + cut_length,
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
- }
-//printf("Edit::shift_start_in 3\n");
- }
- else
- if(edit_mode == MOVE_NO_EDITS)
- {
- end_source = get_source_end(startsource + length + cut_length);
- if(end_source > 0 && startsource + length + cut_length > end_source)
- cut_length = end_source - startsource - length;
+ source_len -= cut_length;
+ switch( edit_mode ) {
+ case MOVE_EDGE:
+ startproject += cut_length;
+ startsource += cut_length;
+ length -= cut_length;
+ break;
+ case MOVE_MEDIA:
startsource += cut_length;
+ break;
+ case MOVE_EDGE_MEDIA:
+ startproject += cut_length;
+ length -= cut_length;
+ break;
}
- return 0;
-}
-
-int Edit::shift_start_out(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
- Edits *trim_edits)
-{
- int64_t cut_length = oldposition - newposition;
-
- if(asset || nested_edl)
- {
- int64_t end_source = get_source_end(1);
-
-//printf("Edit::shift_start_out 1 %jd %jd\n", startsource, cut_length);
- if(end_source > 0 && startsource < cut_length)
- {
- cut_length = startsource;
- }
+ if( startproject < 0 ) {
+ startsource += startproject;
+ length += startproject;
+ startproject = 0;
}
-
- if(edit_mode == MOVE_ALL_EDITS)
- {
-//printf("Edit::shift_start_out 10 %jd\n", cut_length);
- startsource -= cut_length;
- length += cut_length;
-
- if(edit_autos)
- edits->shift_keyframes_recursive(startproject,
- cut_length);
- if(edit_plugins)
- edits->shift_effects_recursive(startproject,
- cut_length,
- edit_autos);
-
- for(Edit* current_edit = next; current_edit; current_edit = current_edit->next)
- {
- current_edit->startproject += cut_length;
- }
+ if( startsource < 0 )
+ startsource = 0;
+ if( length > source_len )
+ length = source_len;
+ if( length < 0 )
+ length = 0;
+
+ int64_t start = this->startproject;
+ int64_t end = start + this->length;
+ if( edit_labels ) {
+ double cut_len = track->from_units(cut_length);
+ double start_pos = edits->track->from_units(start);
+ edits->edl->labels->insert(start_pos, cut_len);
+ double end_pos = edits->track->from_units(end);
+ edits->edl->labels->insert(end_pos + cut_len, -cut_len);
}
- else
- if(edit_mode == MOVE_ONE_EDIT)
- {
- if(previous)
- {
- if(cut_length < previous->length)
- { // Cut into previous edit
- previous->length -= cut_length;
- startproject -= cut_length;
- startsource -= cut_length;
- length += cut_length;
- }
- else
- { // Clear entire previous edit
- cut_length = previous->length;
- previous->length = 0;
- length += cut_length;
- startsource -= cut_length;
- startproject -= cut_length;
- }
- }
+ if( edit_autos ) {
+ edits->shift_keyframes_recursive(start, cut_length);
+ edits->shift_keyframes_recursive(end + cut_length, -cut_length);
}
- else
- if(edit_mode == MOVE_NO_EDITS)
- {
- startsource -= cut_length;
+ if( edit_plugins ) {
+ edits->shift_effects_recursive(start, cut_length, 1);
+ edits->shift_effects_recursive(end + cut_length, -cut_length, 1);
}
-
-// Fix infinite length files
- if(startsource < 0) startsource = 0;
- return 0;
-}
-
-int Edit::shift_end_in(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
- Edits *trim_edits)
-{
- int64_t cut_length = oldposition - newposition;
-
- if(edit_mode == MOVE_ALL_EDITS)
- {
-//printf("Edit::shift_end_in 1\n");
- if(newposition > startproject)
- { // clear partial edit
-//printf("Edit::shift_end_in %p %p\n", track->edits, edits);
- edits->clear_recursive(newposition,
- oldposition,
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
- }
- else
- { // clear entire edit
- edits->clear_recursive(startproject,
- oldposition,
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
- }
+ if( !edit_edits && startproject < start ) {
+ edits->clear(startproject, start);
+ cut_length = start - startproject;
+ for( Edit *edit=next; edit; edit=edit->next )
+ edit->startproject += cut_length;
}
- else
- if(edit_mode == MOVE_ONE_EDIT)
- {
- if(next)
- {
- if(next->asset)
- {
- int64_t end_source = next->get_source_end(1);
- if(end_source > 0 && next->startsource - cut_length < 0)
- {
- cut_length = next->startsource;
- }
- }
+ this->startproject = startproject;
+ this->startsource = startsource;
+ this->length = length;
- if(cut_length < length)
- {
- length -= cut_length;
- next->startproject -= cut_length;
- next->startsource -= cut_length;
- next->length += cut_length;
-//printf("Edit::shift_end_in 2 %d\n", cut_length);
- }
- else
- {
- cut_length = length;
- next->length += cut_length;
- next->startsource -= cut_length;
- next->startproject -= cut_length;
- length -= cut_length;
- }
- }
- else
- {
- if(cut_length < length)
- {
- length -= cut_length;
- }
- else
- {
- cut_length = length;
- edits->clear_recursive(startproject,
- oldposition,
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
- }
- }
- }
- else
-// Does nothing for plugins
- if(edit_mode == MOVE_NO_EDITS)
- {
-//printf("Edit::shift_end_in 3\n");
- int64_t end_source = get_source_end(1);
- if(end_source > 0 && startsource < cut_length)
- {
- cut_length = startsource;
- }
- startsource -= cut_length;
- }
return 0;
}
-int Edit::shift_end_out(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
- Edits *trim_edits)
+int Edit::shift_end(int edit_mode, int64_t newposition, int64_t oldposition,
+ int edit_edits, int edit_labels, int edit_plugins, int edit_autos,
+ Edits *trim_edits)
{
+ int64_t startproject = this->startproject;
+ int64_t startsource = this->startsource;
+ int64_t length = this->length;
+ int64_t source_len = get_source_end(startsource + length);
int64_t cut_length = newposition - oldposition;
- int64_t endsource = get_source_end(startsource + length + cut_length);
-
-// check end of edit against end of source file
- if(endsource > 0 && startsource + length + cut_length > endsource)
- cut_length = endsource - startsource - length;
+ source_len += cut_length;
-//printf("Edit::shift_end_out 1 %jd %d %d %d\n", oldposition, newposition, this->length, cut_length);
- if(edit_mode == MOVE_ALL_EDITS)
- {
-// Extend length
- this->length += cut_length;
-
-// Effects are shifted in length extension
- if(edit_plugins)
- edits->shift_effects_recursive(oldposition /* startproject */,
- cut_length,
- edit_autos);
- if(edit_autos)
- edits->shift_keyframes_recursive(oldposition /* startproject */,
- cut_length);
-
- for(Edit* current_edit = next; current_edit; current_edit = current_edit->next)
- {
- current_edit->startproject += cut_length;
- }
+ switch( edit_mode ) {
+ case MOVE_EDGE:
+ length += cut_length;
+ break;
+ case MOVE_MEDIA:
+ startsource += cut_length;
+ break;
+ case MOVE_EDGE_MEDIA:
+ startsource -= cut_length;
+ length += cut_length;
+ break;
}
- else
- if(edit_mode == MOVE_ONE_EDIT)
- {
- if(next)
- {
- if(cut_length < next->length)
- {
- length += cut_length;
- next->startproject += cut_length;
- next->startsource += cut_length;
- next->length -= cut_length;
-//printf("Edit::shift_end_out %d cut_length=%d\n", __LINE__, cut_length);
- }
- else
- {
-//printf("Edit::shift_end_out %d cut_length=%d next->length=%d\n", __LINE__, cut_length, next->length);
- cut_length = next->length;
- next->startproject += next->length;
- next->startsource += next->length;
- next->length = 0;
- length += cut_length;
-//track->dump();
- }
- }
+ if( startproject < 0 ) {
+ startsource += startproject;
+ length += startproject;
+ startproject = 0;
+ }
+ if( startsource < 0 )
+ startsource = 0;
+ if( length > source_len )
+ length = source_len;
+ if( length < 0 )
+ length = 0;
+
+ int64_t start = this->startproject;
+ int64_t end = start + this->length;
+ if( edit_labels ) {
+ double cut_len = track->from_units(cut_length);
+ double end_pos = edits->track->from_units(end);
+ if( cut_len < 0 )
+ edits->edl->labels->clear(end_pos + cut_len, end_pos, 1);
else
- {
- length += cut_length;
- }
+ edits->edl->labels->insert(end_pos, cut_len);
}
- else
- if(edit_mode == MOVE_NO_EDITS)
- {
- startsource += cut_length;
+ Track *track = edits->track;
+ if( cut_length < 0 )
+ track->clear(end+cut_length, end,
+ 0, 0, edit_autos, edit_plugins, trim_edits);
+ else if( cut_length > 0 ) {
+ if( edit_autos )
+ track->shift_keyframes(end, cut_length);
+ if( edit_plugins )
+ track->shift_effects(end, cut_length, 1, trim_edits);
}
+
+ int64_t new_end = startproject + length;
+ if( edit_edits ) {
+ cut_length = new_end - end;
+ for( Edit* edit=next; edit; edit=edit->next )
+ edit->startproject += cut_length;
+ }
+ else if( new_end > end )
+ edits->clear(end, new_end);
+
+ this->startproject = startproject;
+ this->startsource = startsource;
+ this->length = length;
+
return 0;
}
+
int Edit::popup_transition(float view_start, float zoom_units, int cursor_x, int cursor_y)
{
int64_t left, right, left_unit, right_unit;
// Shift in time
virtual void shift(int64_t difference);
- int shift_start_in(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
+ int shift_start(int edit_mode, int64_t newposition, int64_t oldposition,
+ int edit_edits, int edit_labels, int edit_plugins, int edit_autos,
Edits *trim_edits);
- int shift_start_out(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
- Edits *trim_edits);
- int shift_end_in(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
- Edits *trim_edits);
- int shift_end_out(int edit_mode,
- int64_t newposition,
- int64_t oldposition,
- int edit_edits,
- int edit_labels,
- int edit_plugins,
- int edit_autos,
+ int shift_end(int edit_mode, int64_t newposition, int64_t oldposition,
+ int edit_edits, int edit_labels, int edit_plugins, int edit_autos,
Edits *trim_edits);
void insert_transition(char *title);
// Lengthen effects
if(edit_plugins)
track->shift_effects(current_edit->next->startproject,
- length,
- edit_autos);
+ length, edit_autos, 0);
for(current_edit = current_edit->next; current_edit; current_edit = current_edit->next)
{
oldposition = track->from_units(current_edit->startproject);
if( group_id > 0 ) newposition = oldposition + delta;
result = 1;
-
- if( newposition >= oldposition ) {
-//printf("Edits::modify_handle 1 %s %f %f\n", track->title, oldposition, newposition);
-// shift start of edit in
- current_edit->shift_start_in(edit_mode,
- track->to_units(newposition, 0),
- track->to_units(oldposition, 0),
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
- }
- else {
-//printf("Edits::modify_handle 2 %s\n", track->title);
-// move start of edit out
- current_edit->shift_start_out(edit_mode,
- track->to_units(newposition, 0),
- track->to_units(oldposition, 0),
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
+// dont move stuff if media playback does not shift in time
+ if( edit_mode != MOVE_MEDIA && edit_mode != MOVE_EDGE_MEDIA ) {
+ edit_labels = 0;
+ edit_plugins = 0;
+ edit_autos = 0;
}
+ current_edit->shift_start(edit_mode,
+ track->to_units(newposition, 0), track->to_units(oldposition, 0),
+ 0, edit_labels, edit_plugins, edit_autos,
+ trim_edits);
}
if(!result) current_edit = current_edit->next;
if( group_id > 0 ) newposition = oldposition + delta;
result = 1;
-//printf("Edits::modify_handle 3\n");
- if(newposition <= oldposition) {
-// shift end of edit in
-//printf("Edits::modify_handle 4\n");
- current_edit->shift_end_in(edit_mode,
- track->to_units(newposition, 0),
- track->to_units(oldposition, 0),
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
-//printf("Edits::modify_handle 5\n");
- }
- else
- {
-// move end of edit out
-//printf("Edits::modify_handle %d edit_mode=%d\n", __LINE__, edit_mode);
- current_edit->shift_end_out(edit_mode,
- track->to_units(newposition, 0),
- track->to_units(oldposition, 0),
- edit_edits,
- edit_labels,
- edit_plugins,
- edit_autos,
- trim_edits);
-//printf("Edits::modify_handle 7\n");
- }
+ current_edit->shift_end(edit_mode,
+ track->to_units(newposition, 0), track->to_units(oldposition, 0),
+ edit_edits, edit_labels, edit_plugins, edit_autos, trim_edits);
}
if(!result) current_edit = current_edit->next;
void Edits::shift_effects_recursive(int64_t position, int64_t length, int edit_autos)
{
- track->shift_effects(position, length, edit_autos);
+ track->shift_effects(position, length, edit_autos, 0);
}
#define EDITING_IBEAM 1
+// default for left button
+#define MOVE_EDGE 0
+// default for middle button
+#define MOVE_MEDIA 1
+// default for right button
+#define MOVE_EDGE_MEDIA 2
-#define EDIT_HANDLE_MODES 3
-
-// Behavior for the edit handles based on mouse button
-#define MOVE_ALL_EDITS 0 // default for left button
-#define MOVE_ONE_EDIT 1 // default for middle button
-#define MOVE_NO_EDITS 2 // default for right button
#define MOVE_EDITS_DISABLED 3
+#define EDIT_HANDLE_MODES 3
// AWindow folders
#define AW_NO_FOLDER -1
strcpy(default_atransition, INIT_ATRANSITION);
strcpy(default_vtransition, INIT_VTRANSITION);
default_transition_length = 1.0;
- edit_handle_mode[0] = MOVE_ALL_EDITS;
- edit_handle_mode[1] = MOVE_ONE_EDIT;
- edit_handle_mode[2] = MOVE_NO_EDITS;
+ edit_handle_mode[0] = MOVE_EDGE;
+ edit_handle_mode[1] = MOVE_MEDIA;
+ edit_handle_mode[2] = MOVE_EDGE_MEDIA;
editing_mode = EDITING_IBEAM;
enable_duplex = 1;
folderlist_format = FOLDERS_ICONS;
sprintf(default_vtransition, INIT_VTRANSITION);
defaults->get("DEFAULT_VTRANSITION", default_vtransition);
default_transition_length = defaults->get("DEFAULT_TRANSITION_LENGTH", (double)1);
- edit_handle_mode[0] = defaults->get("EDIT_HANDLE_MODE0", MOVE_ALL_EDITS);
- edit_handle_mode[1] = defaults->get("EDIT_HANDLE_MODE1", MOVE_ONE_EDIT);
- edit_handle_mode[2] = defaults->get("EDIT_HANDLE_MODE2", MOVE_NO_EDITS);
+ edit_handle_mode[0] = defaults->get("EDIT_HANDLE_MODE0", MOVE_EDGE);
+ edit_handle_mode[1] = defaults->get("EDIT_HANDLE_MODE1", MOVE_MEDIA);
+ edit_handle_mode[2] = defaults->get("EDIT_HANDLE_MODE2", MOVE_EDGE_MEDIA);
editing_mode = defaults->get("EDITING_MODE", EDITING_IBEAM);
enable_duplex = defaults->get("ENABLE_DUPLEX", 1);
folderlist_format = defaults->get("FOLDERLIST_FORMAT", FOLDERS_TEXT);
N_("No effect")
#endif
-#define MOVE_ALL_EDITS_TITLE N_("Drag all following edits")
-#define MOVE_ONE_EDIT_TITLE N_("Drag only one edit")
-#define MOVE_NO_EDITS_TITLE N_("Drag source only")
+#define MOVE_EDGE_TITLE N_("Drag edge only")
+#define MOVE_MEDIA_TITLE N_("Drag media only")
+#define MOVE_EDGE_MEDIA_TITLE N_("Drag edge and media")
#define MOVE_EDITS_DISABLED_TITLE N_("No effect")
InterfacePrefs::InterfacePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
const char* InterfacePrefs::behavior_to_text(int mode)
{
switch(mode) {
- case MOVE_ALL_EDITS: return _(MOVE_ALL_EDITS_TITLE);
- case MOVE_ONE_EDIT: return _(MOVE_ONE_EDIT_TITLE);
- case MOVE_NO_EDITS: return _(MOVE_NO_EDITS_TITLE);
+ case MOVE_EDGE: return _(MOVE_EDGE_TITLE);
+ case MOVE_MEDIA: return _(MOVE_MEDIA_TITLE);
+ case MOVE_EDGE_MEDIA: return _(MOVE_EDGE_MEDIA_TITLE);
case MOVE_EDITS_DISABLED: return _(MOVE_EDITS_DISABLED_TITLE);
default: return "";
}
void ViewBehaviourText::create_objects()
{
- add_item(new ViewBehaviourItem(this, _(MOVE_ALL_EDITS_TITLE), MOVE_ALL_EDITS));
- add_item(new ViewBehaviourItem(this, _(MOVE_ONE_EDIT_TITLE), MOVE_ONE_EDIT));
- add_item(new ViewBehaviourItem(this, _(MOVE_NO_EDITS_TITLE), MOVE_NO_EDITS));
+ add_item(new ViewBehaviourItem(this, _(MOVE_EDGE_TITLE), MOVE_EDGE));
+ add_item(new ViewBehaviourItem(this, _(MOVE_MEDIA_TITLE), MOVE_MEDIA));
+ add_item(new ViewBehaviourItem(this, _(MOVE_EDGE_MEDIA_TITLE), MOVE_EDGE_MEDIA));
add_item(new ViewBehaviourItem(this, _(MOVE_EDITS_DISABLED_TITLE), MOVE_EDITS_DISABLED));
}
return 0;
}
-int Labels::modify_handles(double oldposition,
- double newposition,
- int currentend,
- int handle_mode,
- int edit_labels)
+int Labels::modify_handles(double oldposition, double newposition,
+ int currentend, int handle_mode, int edit_labels)
{
- if(edit_labels &&
- handle_mode == MOVE_ALL_EDITS)
- {
- if(currentend == 0) // left handle
- {
- if(newposition < oldposition)
- {
+ if( edit_labels && handle_mode == MOVE_EDGE ) {
+ if( !currentend ) { // left handle
+ if( newposition < oldposition )
insert(oldposition, oldposition - newposition); // shift all labels right
- }
else
- {
clear(oldposition, newposition); // clear selection
- }
}
- else
- { // right handle
- if(newposition < oldposition)
- {
+ else { // right handle
+ if( newposition < oldposition )
clear(newposition, oldposition);
- }
else
- {
insert(oldposition, newposition - oldposition);
- }
}
}
return 0;
void MWindow::finish_modify_handles()
{
int edit_mode = edl->session->edit_handle_mode[session->drag_button];
-
- if( (session->drag_handle == 1 && edit_mode != MOVE_NO_EDITS) ||
- (session->drag_handle == 0 && edit_mode == MOVE_ONE_EDIT) ) {
-//printf("MWindow::finish_modify_handles %d\n", __LINE__);
- edl->local_session->set_selectionstart(session->drag_position);
- edl->local_session->set_selectionend(session->drag_position);
- }
- else
- if( edit_mode != MOVE_NO_EDITS ) {
-//printf("MWindow::finish_modify_handles %d\n", __LINE__);
- edl->local_session->set_selectionstart(session->drag_start);
- edl->local_session->set_selectionend(session->drag_start);
- }
-
-// clamp the selection to 0
- if( edl->local_session->get_selectionstart(1) < 0 ) {
- edl->local_session->set_selectionstart(0);
- edl->local_session->set_selectionend(0);
+ if( edit_mode != MOVE_MEDIA ) {
+ double position = session->drag_position ;
+ if( position < 0 ) position = 0;
+ edl->local_session->set_selectionstart(position);
+ edl->local_session->set_selectionend(position);
}
undo->update_undo_after(_("drag handle"), LOAD_EDITS | LOAD_TIMEBAR);
int edit_autos)
{
// Extend plugins if no incoming plugins
- if(!track->plugin_set.total)
- {
- shift_effects(position,
- min_length,
- edit_autos);
- }
- else
- for(int i = 0; i < track->plugin_set.total; i++)
- {
- if(i >= plugin_set.total)
- plugin_set.append(new PluginSet(edl, this));
+ if( track->plugin_set.total ) {
+ for(int i = 0; i < track->plugin_set.total; i++) {
+ if(i >= plugin_set.total)
+ plugin_set.append(new PluginSet(edl, this));
- plugin_set.values[i]->insert_edits(track->plugin_set.values[i],
- position,
- min_length,
- edit_autos);
+ plugin_set.values[i]->insert_edits(track->plugin_set.values[i],
+ position, min_length, edit_autos);
+ }
}
+ else
+ shift_effects(position, min_length, edit_autos, 0);
}
// Effect keyframes are shifted in shift_effects
}
-void Track::shift_effects(int64_t position, int64_t length, int edit_autos)
+void Track::shift_effects(int64_t position, int64_t length, int edit_autos, Edits *trim_edits)
{
- for(int i = 0; i < plugin_set.total; i++)
- {
- plugin_set.values[i]->shift_effects(position, length, edit_autos);
+ for( int i=0; i<plugin_set.total; ++i ) {
+ if( !trim_edits || trim_edits == (Edits*)plugin_set.values[i] )
+ plugin_set.values[i]->shift_effects(position, length, edit_autos);
}
}
if(!trim_edits || trim_edits == (Edits*)plugin_set.values[i])
plugin_set.values[i]->modify_handles(oldposition, newposition,
// Don't allow plugin tweeks to affect edits.
- currentend, handle_mode, 0,
- edit_labels, 1, edit_autos, trim_edits, 0);
+ currentend, handle_mode, 0, 0, 0, 0, 0, 0);
}
return 0;
}
if( edit_autos )
shift_keyframes(start, end - start);
if( edit_plugins )
- shift_effects(start, end - start, edit_autos);
+ shift_effects(start, end - start, edit_autos, 0);
edits->optimize();
return 0;
}
virtual int copy_settings(Track *track);
void shift_keyframes(int64_t position, int64_t length);
- void shift_effects(int64_t position, int64_t length, int edit_autos);
+ void shift_effects(int64_t position, int64_t length, int edit_autos, Edits *trim_edits);
void change_plugins(SharedLocation &old_location, SharedLocation &new_location, int do_swap);
void change_modules(int old_location, int new_location, int do_swap);
int plugin_exists(Plugin *plugin);
edl->session->labels_follow_edits,
edl->session->plugins_follow_edits,
edl->session->autos_follow_edits,
- session->drag_edit->group_id);
- double position = edit_mode != MOVE_NO_EDITS &&
- ( session->drag_handle || edit_mode == MOVE_ONE_EDIT ) ?
- session->drag_position : session->drag_start;
+ !session->drag_edit ? 0 : session->drag_edit->group_id);
+ double position = edit_mode == MOVE_EDGE || edit_mode == MOVE_EDGE_MEDIA ?
+ session->drag_position : session->drag_start ;
Track *track = session->drag_handle_track();
int64_t pos = track->to_units(position, 0);
render_handle_frame(edl, pos, shift_down() ? 0 :
// Go in using the edit handle interface
int64_t starting_length = current_edit->length;
- if(length_units < current_edit->length)
- {
- current_edit->shift_end_in(MOVE_ALL_EDITS,
- current_edit->startproject + length_units,
- current_edit->startproject + current_edit->length,
- 1,
- edl->session->labels_follow_edits,
- edl->session->plugins_follow_edits,
- edl->session->autos_follow_edits,
- 0);
- }
- else
- {
- current_edit->shift_end_out(MOVE_ALL_EDITS,
- current_edit->startproject + length_units,
- current_edit->startproject + current_edit->length,
- 1,
- edl->session->labels_follow_edits,
- edl->session->plugins_follow_edits,
- edl->session->autos_follow_edits,
- 0);
- }
+ current_edit->shift_end(MOVE_EDGE,
+ current_edit->startproject + length_units,
+ current_edit->startproject + current_edit->length,
+ 1, 0,
+ edl->session->plugins_follow_edits,
+ edl->session->autos_follow_edits,
+ 0);
int64_t ending_length = current_edit->length;
edl->labels->modify_handles(
current_track->from_units(current_edit->startproject + starting_length),
current_track->from_units(current_edit->startproject + ending_length),
- 1,
- MOVE_ALL_EDITS,
- 1);
+ 1, MOVE_EDGE, 1);
}
// Go in using the edit handle interface
int64_t starting_length = current_edit->length;
- if(length_units < current_edit->length)
- {
- current_edit->shift_end_in(MOVE_ALL_EDITS,
- current_edit->startproject + length_units,
- current_edit->startproject + current_edit->length,
- 1,
- edl->session->labels_follow_edits,
- edl->session->plugins_follow_edits,
- edl->session->autos_follow_edits,
- 0);
- }
- else
- {
- current_edit->shift_end_out(MOVE_ALL_EDITS,
- current_edit->startproject + length_units,
- current_edit->startproject + current_edit->length,
- 1,
- edl->session->labels_follow_edits,
- edl->session->plugins_follow_edits,
- edl->session->autos_follow_edits,
- 0);
- }
+ current_edit->shift_end(MOVE_EDGE,
+ current_edit->startproject + length_units,
+ current_edit->startproject + current_edit->length,
+ 1, 0,
+ edl->session->plugins_follow_edits,
+ edl->session->autos_follow_edits,
+ 0);
int64_t ending_length = current_edit->length;
- if(edl->session->labels_follow_edits && first_track)
- {
-// printf("Tracks::set_edit_length %d %f %f\n",
-// __LINE__,
+ if(edl->session->labels_follow_edits && first_track) {
+// printf("Tracks::set_edit_length %d %f %f\n", __LINE__,
// current_track->from_units(current_edit->startproject + starting_length),
// current_track->from_units(current_edit->startproject + ending_length));
edl->labels->modify_handles(
current_track->from_units(current_edit->startproject + starting_length),
current_track->from_units(current_edit->startproject + ending_length),
- 1,
- MOVE_ALL_EDITS,
- 1);
+ 1, MOVE_EDGE, 1);
}
[ libtwolame ])
PKG_3RD([x264],[auto],
- [x264-snapshot-20180118-2245],
+ [x264-snapshot-20190117-2245-stable],
[ libx264.a ],
[ . ])
PKG_3RD([x265],[auto],
- [x265_2.8],
+ [x265_2.9],
[ libx265.a ],
[ . source ])
<td align="left"><font face="Liberation Serif" size=4>Double click</font></td>
<td align="left"><font face="Liberation Serif" size=4>On fade/speed, synch video/audio ganged</font></td>
</tr>
+ <tr>
+ <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
+ <td align="left"><font face="Liberation Serif" size=4><br></font></td>
+ <td align="left"><font face="Liberation Serif" size=4>Shift</font></td>
+ <td align="left"><font face="Liberation Serif" size=4>While dragging auto turns off gang</font></td>
+ </tr>
<tr>
<td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
<td align="left"><font face="Liberation Serif" size=4><br></font></td>