#include "bcdisplayinfo.h"
#include "bcsignals.h"
#include "bctimer.h"
+#include "bdcreate.h"
#include "brender.h"
#include "cache.h"
#include "channel.h"
#include "channeldb.h"
#include "channelinfo.h"
#include "clip.h"
-#include "colormodels.h"
+#include "bccmodels.h"
#include "commercials.h"
#include "cplayback.h"
#include "ctimebar.h"
#include "cwindow.h"
#include "bchash.h"
#include "devicedvbinput.inc"
+#include "dvdcreate.h"
#include "editpanel.h"
#include "edl.h"
#include "edlsession.h"
#include "vwindowgui.h"
#include "vwindow.h"
#include "wavecache.h"
+#include "wwindow.h"
#include "zoombar.h"
#include <string.h>
plugin_guis = 0;
dead_plugins = 0;
keyframe_threads = 0;
+ create_bd = 0;
create_dvd = 0;
batch_render = 0;
render = 0;
awindow = 0;
gwindow = 0;
twindow = 0;
+ wwindow = 0;
lwindow = 0;
sighandler = 0;
reload_status = 0;
brender_lock->lock("MWindow::quit");
delete brender; brender = 0;
brender_lock->unlock();
+ delete create_bd; create_bd = 0;
delete create_dvd; create_dvd = 0;
delete batch_render; batch_render = 0;
commit_commercial();
if( lwindow && lwindow->gui ) lwindow->gui->close(0);
if( gwindow && gwindow->gui ) gwindow->gui->close(0);
if( twindow && twindow->is_running() ) twindow->close_window();
+ if( wwindow && wwindow->is_running() ) wwindow->close_window();
vwindows.remove_all_objects();
gui->close(0);
if( awindow ) awindow->join();
if( cwindow ) cwindow->join();
if( lwindow ) lwindow->join();
if( twindow ) twindow->join();
+ if( wwindow ) wwindow->join();
if( gwindow ) gwindow->join();
join();
#else
close_gui(lwindow);
close_gui(gwindow);
close_gui(twindow);
+ close_gui(wwindow);
vwindows.remove_all_objects();
gui->close(0);
join();
delete awindow; awindow = 0;
delete lwindow; lwindow = 0;
delete twindow; twindow = 0;
+ delete wwindow; wwindow = 0;
delete gwindow; gwindow = 0;
// must be last or nouveau chokes
delete cwindow; cwindow = 0;
if( !load_plugin_index(mwindow, index_path) ) return 1;
FILE *fp = fopen(index_path,"w");
if( !fp ) {
- fprintf(stderr," MWindow::init_plugins: "
- "can't create plugin index: %s\n", index_path);
+ fprintf(stderr,_("MWindow::init_plugins: "
+ "can't create plugin index: %s\n"), index_path);
return 1;
}
fprintf(fp, "%d\n", PLUGIN_FILE_VERSION);
//printf("MWindow::clean_indexes 2 %s\n", string2);
sprintf(ptr, ".toc");
remove(string2);
+ sprintf(ptr, ".mkr");
+ remove(string2);
}
}
void MWindow::init_tipwindow()
{
- twindow = new TipWindow(this);
+ if( !twindow )
+ twindow = new TipWindow(this);
twindow->start();
}
+void MWindow::show_warning(int *do_warning, const char *text)
+{
+ if( do_warning && !*do_warning ) return;
+ if( !wwindow )
+ wwindow = new WWindow(this);
+ wwindow->show_warning(do_warning, text);
+}
+
void MWindow::init_theme()
{
Timer timer;
void MWindow::init_menus()
{
char string[BCTEXTLEN];
- cmodel_to_text(string, BC_RGB888);
+ BC_CModels::to_text(string, BC_RGB888);
colormodels.append(new ColormodelItem(string, BC_RGB888));
- cmodel_to_text(string, BC_RGBA8888);
+ BC_CModels::to_text(string, BC_RGBA8888);
colormodels.append(new ColormodelItem(string, BC_RGBA8888));
-// cmodel_to_text(string, BC_RGB161616);
+// BC_CModels::to_text(string, BC_RGB161616);
// colormodels.append(new ColormodelItem(string, BC_RGB161616));
-// cmodel_to_text(string, BC_RGBA16161616);
+// BC_CModels::to_text(string, BC_RGBA16161616);
// colormodels.append(new ColormodelItem(string, BC_RGBA16161616));
- cmodel_to_text(string, BC_RGB_FLOAT);
+ BC_CModels::to_text(string, BC_RGB_FLOAT);
colormodels.append(new ColormodelItem(string, BC_RGB_FLOAT));
- cmodel_to_text(string, BC_RGBA_FLOAT);
+ BC_CModels::to_text(string, BC_RGBA_FLOAT);
colormodels.append(new ColormodelItem(string, BC_RGBA_FLOAT));
- cmodel_to_text(string, BC_YUV888);
+ BC_CModels::to_text(string, BC_YUV888);
colormodels.append(new ColormodelItem(string, BC_YUV888));
- cmodel_to_text(string, BC_YUVA8888);
+ BC_CModels::to_text(string, BC_YUVA8888);
colormodels.append(new ColormodelItem(string, BC_YUVA8888));
-// cmodel_to_text(string, BC_YUV161616);
+// BC_CModels::to_text(string, BC_YUV161616);
// colormodels.append(new ColormodelItem(string, BC_YUV161616));
-// cmodel_to_text(string, BC_YUVA16161616);
+// BC_CModels::to_text(string, BC_YUVA16161616);
// colormodels.append(new ColormodelItem(string, BC_YUVA16161616));
}
void MWindow::init_render()
{
render = new Render(this);
+ create_bd = new CreateBD_Thread(this);
create_dvd = new CreateDVD_Thread(this);
batch_render = new BatchRenderThread(this);
}
for(Track *track=tracks->first; track && !errmsg; track=track->next) {
if( track->data_type != TRACK_VIDEO ) continue;
if( !track->record ) continue;
- if( count > 0 ) { errmsg = "multiple video tracks"; break; }
+ if( count > 0 ) { errmsg = _("multiple video tracks"); break; }
++count;
int64_t units_start = track->to_units(start,0);
int64_t units_end = track->to_units(end,0);
edit2 = edits->last;
units_end = edits->length();
}
- if(edit1 != edit2) { errmsg = "crosses edits"; break; }
+ if(edit1 != edit2) { errmsg = _("crosses edits"); break; }
Indexable *indexable = edit1->get_source();
- if( !indexable->is_asset ) { errmsg = "not asset"; break; }
+ if( !indexable->is_asset ) { errmsg = _("not asset"); break; }
}
//run it
for(Track *track=tracks->first; track && !errmsg; track=track->next) {
Indexable *indexable = edit1->get_source();
Asset *asset = (Asset *)indexable;
File *file = video_cache->check_out(asset, edl);
- if( !file ) { errmsg = "no file"; break; }
+ if( !file ) { errmsg = _("no file"); break; }
int64_t edit_length = units_end - units_start;
int64_t edit_start = units_start - edit1->startproject + edit1->startsource;
result = commercials->put_clip(file, edit1->channel,
track->from_units(edit_start), track->from_units(edit_length));
video_cache->check_in(asset);
- if( result ) { errmsg = "db failed"; break; }
+ if( result ) { errmsg = _("db failed"); break; }
}
if( errmsg ) {
char string[BCTEXTLEN];
- sprintf(string, "put_commercial: %s", errmsg);
+ sprintf(string, _("put_commercial: %s"), errmsg);
MainError::show_error(string);
undo_commercial();
result = 1;
0);
cwindow->playback_engine->interrupt_playback(wait);
- for(int i = 0; i < vwindows.size(); i++)
- {
+ for(int i = 0; i < vwindows.size(); i++) {
VWindow *vwindow = vwindows.get(i);
- if(vwindow->running())
- {
- vwindow->playback_engine->que->send_command(STOP,
- CHANGE_NONE,
- 0,
- 0);
- vwindow->playback_engine->interrupt_playback(wait);
- }
+ if( !vwindow->is_running() ) continue;
+ vwindow->playback_engine->que->send_command(STOP, CHANGE_NONE, 0, 0);
+ vwindow->playback_engine->interrupt_playback(wait);
}
if( locked ) gui->lock_window("MWindow::stop_playback");
}
new_edl->copy_session(edl);
new_file->set_program(edl->session->program_no);
- sprintf(string, "Loading %s", new_asset->path);
+ sprintf(string, _("Loading %s"), new_asset->path);
gui->show_message(string);
if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
(new_asset->height % 2)))
{
char string[BCTEXTLEN];
- sprintf(string, "%s's resolution is %dx%d.\nImages with odd dimensions may not decode properly.",
+ sprintf(string, _("%s's resolution is %dx%d.\nImages with odd dimensions may not decode properly."),
new_asset->path,
new_asset->width,
new_asset->height);
edl->session->program_no != new_asset->program)
{
char string[BCTEXTLEN];
- sprintf(string, "%s's index was built for program number %d\n"
- "Playback preference is %d.\n Using program %d.",
+ sprintf(string, _("%s's index was built for program number %d\n"
+ "Playback preference is %d.\n Using program %d."),
new_asset->path, new_asset->program,
edl->session->program_no, new_asset->program);
MainError::show_error(string);
select_asset(0, 0);
edl->local_session->preview_start = 0;
edl->local_session->preview_end = edl->tracks->total_playable_length();
+ edl->local_session->loop_playback = 0;
edl->local_session->set_selectionstart(0);
edl->local_session->set_selectionend(0);
fit_selection();
if (!plugin_found)
{
sprintf(string,
- "The effect '%s' in file '%s' is not part of your installation of Cinelerra.\n"
- "The project won't be rendered as it was meant and Cinelerra might crash.\n",
- plugin->title,
+ _("The %s '%s' in file '%s' is not part of your installation of Cinelerra.\n"
+ "The project won't be rendered as it was meant and Cinelerra might crash.\n"),
+ "effect", plugin->title,
path);
MainError::show_error(string);
}
if (!transition_found)
{
sprintf(string,
- "The transition '%s' in file '%s' is not part of your installation of Cinelerra.\n"
- "The project won't be rendered as it was meant and Cinelerra might crash.\n",
- edit->transition->title,
+ _("The %s '%s' in file '%s' is not part of your installation of Cinelerra.\n"
+ "The project won't be rendered as it was meant and Cinelerra might crash.\n"),
+ "transition", edit->transition->title,
path);
MainError::show_error(string);
}
fd = 0;
if(result < 0x7fffffff) {
char string[BCTEXTLEN];
- sprintf(string, "MWindow::init_shm: /proc/sys/kernel/shmmax is 0x" _LX ".\n"
+ sprintf(string, _("MWindow::init_shm: /proc/sys/kernel/shmmax is 0x" _LX ".\n"
"you probably need to be root, or:\n"
"as root, run: echo 0x7fffffff > /proc/sys/kernel/shmmax\n"
"before trying to start cinelerra.\n"
- "It should be at least 0x7fffffff for Cinelerra.\n", result);
+ "It should be at least 0x7fffffff for Cinelerra.\n"), result);
MainError::show_error(string);
}
}
session->show_vwindow);
// Show all vwindows
-// if(session->show_vwindow)
-// {
-// for(int j = 0; j < vwindows.size(); j++)
-// {
+// if(session->show_vwindow) {
+// for(int j = 0; j < vwindows.size(); j++) {
// VWindow *vwindow = vwindows.get(j);
+// if( !vwindow->is_running() ) continue;
// if(debug) printf("MWindow::create_objects %d vwindow=%p\n",
// __LINE__,
// vwindow);
int total_running = 0;
session->show_vwindow = 1;
-
// Raise all windows which are visible
- for(int j = 0; j < vwindows.size(); j++)
- {
+ for(int j = 0; j < vwindows.size(); j++) {
VWindow *vwindow = vwindows.get(j);
- if(vwindow->is_running())
- {
- vwindow->gui->lock_window("MWindow::show_vwindow");
- vwindow->gui->show_window(0);
- vwindow->gui->raise_window();
- vwindow->gui->flush();
- vwindow->gui->unlock_window();
- total_running++;
- }
+ if( !vwindow->is_running() ) continue;
+ vwindow->gui->lock_window("MWindow::show_vwindow");
+ vwindow->gui->show_window(0);
+ vwindow->gui->raise_window();
+ vwindow->gui->flush();
+ vwindow->gui->unlock_window();
+ total_running++;
}
//printf("MWindow::show_vwindow %d %d\n", __LINE__, vwindows.size());
void MWindow::sync_parameters(int change_type)
{
+ if( in_destructor ) return;
// Sync engines which are playing back
if(cwindow->playback_engine->is_playing_back)
// Close all the vwindows
if(load_mode == LOADMODE_REPLACE ||
- load_mode == LOADMODE_REPLACE_CONCATENATE)
- {
+ load_mode == LOADMODE_REPLACE_CONCATENATE) {
if(debug) PRINT_TRACE
int first_vwindow = 0;
if(session->show_vwindow) first_vwindow = 1;
// Change visible windows to no source
- for(int i = 0; i < first_vwindow && i < vwindows.size(); i++)
- {
- vwindows.get(i)->change_source(-1);
+ for(int i = 0; i < first_vwindow && i < vwindows.size(); i++) {
+ VWindow *vwindow = vwindows.get(i);
+ if( !vwindow->is_running() ) continue;
+ vwindow->change_source(-1);
}
// Close remaining windows
- for(int i = first_vwindow; i < vwindows.size(); i++)
- {
- vwindows.get(i)->close_window();
+ for(int i = first_vwindow; i < vwindows.size(); i++) {
+ VWindow *vwindow = vwindows.get(i);
+ if( !vwindow->is_running() ) continue;
+ vwindow->close_window();
}
if(debug) PRINT_TRACE
}
- else
- if(vwindows.size())
- {
+ else if(vwindows.size()) {
VWindow *vwindow = vwindows.get(DEFAULT_VWINDOW);
- if(vwindow->is_running())
- {
+ if( vwindow->is_running() ) {
vwindow->gui->lock_window("MWindow::update_project");
vwindow->update(1);
vwindow->gui->unlock_window();
// Erase file
IndexFile::delete_index(preferences, asset, ".toc");
IndexFile::delete_index(preferences, asset, ".idx");
+ IndexFile::delete_index(preferences, asset, ".mkr");
}
void MWindow::rebuild_indices()
int MWindow::create_aspect_ratio(float &w, float &h, int width, int height)
{
+ w = 1; h = 1;
if(!width || !height) return 1;
double ar = (double)width / height;
+// square-ish pixels
+ if( EQUIV(ar, 1.0000) ) return 0;
+ if( EQUIV(ar, 1.3333) ) { w = 4; h = 3; return 0; }
+ if( EQUIV(ar, 1.7777) ) { w = 16; h = 9; return 0; }
+ if( EQUIV(ar, 2.1111) ) { w = 19; h = 9; return 0; }
+ if( EQUIV(ar, 2.2222) ) { w = 20; h = 9; return 0; }
+ if( EQUIV(ar, 2.3333) ) { w = 21; h = 9; return 0; }
int ww = width, hh = height;
// numerator, denominator must be under mx
int mx = 255, n = gcd(ww, hh);
if( cwindow->playback_engine && cwindow->playback_engine->video_cache )
cwindow->playback_engine->video_cache->remove_all();
- for(int i = 0; i < vwindows.size(); i++)
- {
+ for(int i = 0; i < vwindows.size(); i++) {
VWindow *vwindow = vwindows.get(i);
- if(vwindow->is_running())
- {
- if(vwindow->playback_engine && vwindow->playback_engine->audio_cache)
- vwindow->playback_engine->audio_cache->remove_all();
- if(vwindow->playback_engine && vwindow->playback_engine->video_cache)
- vwindow->playback_engine->video_cache->remove_all();
- }
+ if( !vwindow->is_running() ) continue;
+ if(vwindow->playback_engine && vwindow->playback_engine->audio_cache)
+ vwindow->playback_engine->audio_cache->remove_all();
+ if(vwindow->playback_engine && vwindow->playback_engine->video_cache)
+ vwindow->playback_engine->video_cache->remove_all();
}
}
cwindow->playback_engine->audio_cache->delete_entry(asset);
if( cwindow->playback_engine && cwindow->playback_engine->video_cache )
cwindow->playback_engine->video_cache->delete_entry(asset);
- for(int i = 0; i < vwindows.size(); i++)
- {
+ for(int i = 0; i < vwindows.size(); i++) {
VWindow *vwindow = vwindows.get(i);
- if(vwindow->is_running())
- {
- if(vwindow->playback_engine && vwindow->playback_engine->audio_cache)
- vwindow->playback_engine->audio_cache->delete_entry(asset);
- if(vwindow->playback_engine && vwindow->playback_engine->video_cache)
- vwindow->playback_engine->video_cache->delete_entry(asset);
- }
+ if( !vwindow->is_running() ) continue;
+ if(vwindow->playback_engine && vwindow->playback_engine->audio_cache)
+ vwindow->playback_engine->audio_cache->delete_entry(asset);
+ if(vwindow->playback_engine && vwindow->playback_engine->video_cache)
+ vwindow->playback_engine->video_cache->delete_entry(asset);
}
}
void MWindow::remove_assets_from_project(int push_undo)
{
- for(int i = 0; i < session->drag_assets->total; i++)
- {
+ for(int i = 0; i < session->drag_assets->total; i++) {
Indexable *indexable = session->drag_assets->values[i];
if(indexable->is_asset) remove_asset_from_caches((Asset*)indexable);
}
// Remove from VWindow.
- for(int i = 0; i < session->drag_clips->total; i++)
- {
- for(int j = 0; j < vwindows.size(); j++)
- {
+ for(int i = 0; i < session->drag_clips->total; i++) {
+ for(int j = 0; j < vwindows.size(); j++) {
VWindow *vwindow = vwindows.get(j);
- if(vwindow->is_running())
- {
- if(session->drag_clips->values[i] == vwindow->get_edl())
- {
- vwindow->gui->lock_window("MWindow::remove_assets_from_project 1");
- vwindow->delete_source(1, 1);
- vwindow->gui->unlock_window();
- }
+ if( !vwindow->is_running() ) continue;
+ if(session->drag_clips->values[i] == vwindow->get_edl()) {
+ vwindow->gui->lock_window("MWindow::remove_assets_from_project 1");
+ vwindow->delete_source(1, 1);
+ vwindow->gui->unlock_window();
}
}
}
- for(int i = 0; i < session->drag_assets->size(); i++)
- {
- for(int j = 0; j < vwindows.size(); j++)
- {
+ for(int i = 0; i < session->drag_assets->size(); i++) {
+ for(int j = 0; j < vwindows.size(); j++) {
VWindow *vwindow = vwindows.get(j);
- if(vwindow->is_running())
- {
- if(session->drag_assets->get(i) == vwindow->get_source())
- {
- vwindow->gui->lock_window("MWindow::remove_assets_from_project 2");
- vwindow->delete_source(1, 1);
- vwindow->gui->unlock_window();
- }
+ if( !vwindow->is_running() ) continue;
+ if(session->drag_assets->get(i) == vwindow->get_source()) {
+ vwindow->gui->lock_window("MWindow::remove_assets_from_project 2");
+ vwindow->delete_source(1, 1);
+ vwindow->gui->unlock_window();
}
}
}
+ for(int i = 0; i < session->drag_assets->size(); i++) {
+ Indexable *indexable = session->drag_assets->values[i];
+ remove_indexfile(indexable);
+ }
+
+//printf("MWindow::rebuild_indices 1 %s\n", indexable->path);
if(push_undo) undo->update_undo_before();
edl->remove_from_project(session->drag_assets);
edl->remove_from_project(session->drag_clips);
cwindow->gui->meters->reset_meters();
cwindow->gui->unlock_window();
- for(int j = 0; j < vwindows.size(); j++)
- {
+ for(int j = 0; j < vwindows.size(); j++) {
VWindow *vwindow = vwindows.get(j);
- if(vwindow->is_running())
- {
- vwindow->gui->lock_window("MWindow::reset_meters 2");
- vwindow->gui->meters->reset_meters();
- vwindow->gui->unlock_window();
- }
+ if( !vwindow->is_running() ) continue;
+ vwindow->gui->lock_window("MWindow::reset_meters 2");
+ vwindow->gui->meters->reset_meters();
+ vwindow->gui->unlock_window();
}
lwindow->gui->lock_window("MWindow::reset_meters 3");
cwindow->gui->flush();
cwindow->gui->unlock_window();
- for(int i = 0; i < vwindows.size(); i++)
- {
+ for(int i = 0; i < vwindows.size(); i++) {
VWindow *vwindow = vwindows.get(i);
+ if( !vwindow->is_running() ) continue;
vwindow->gui->lock_window("MWindow::resync_guis");
vwindow->gui->resize_event(vwindow->gui->get_w(),
vwindow->gui->get_h());