Config::Config ()
: _num_local_encoding_threads (2)
, _server_port (6192)
- , _colour_lut_index (0)
- , _j2k_bandwidth (250000000)
, _reference_scaler (Scaler::from_id ("bicubic"))
, _tms_path (".")
, _sound_processor (SoundProcessor::from_id ("dolby_cp750"))
_default_directory = v;
} else if (k == "server_port") {
_server_port = atoi (v.c_str ());
- } else if (k == "colour_lut_index") {
- _colour_lut_index = atoi (v.c_str ());
- } else if (k == "j2k_bandwidth") {
- _j2k_bandwidth = atoi (v.c_str ());
} else if (k == "reference_scaler") {
_reference_scaler = Scaler::from_id (v);
} else if (k == "reference_filter") {
f << "num_local_encoding_threads " << _num_local_encoding_threads << "\n"
<< "default_directory " << _default_directory << "\n"
<< "server_port " << _server_port << "\n"
- << "colour_lut_index " << _colour_lut_index << "\n"
- << "j2k_bandwidth " << _j2k_bandwidth << "\n"
<< "reference_scaler " << _reference_scaler->id () << "\n";
for (vector<Filter const *>::const_iterator i = _reference_filters.begin(); i != _reference_filters.end(); ++i) {
return _server_port;
}
- /** @return index of colour LUT to use when converting RGB to XYZ.
- * 0: sRGB
- * 1: Rec 709
- */
- int colour_lut_index () const {
- return _colour_lut_index;
- }
-
- /** @return bandwidth for J2K files in bits per second */
- int j2k_bandwidth () const {
- return _j2k_bandwidth;
- }
-
/** @return J2K encoding servers to use */
std::vector<ServerDescription*> servers () const {
return _servers;
_server_port = p;
}
- /** @param i New colour LUT index */
- void set_colour_lut_index (int i) {
- _colour_lut_index = i;
- }
-
- /** @param b New J2K bandwidth */
- void set_j2k_bandwidth (int b) {
- _j2k_bandwidth = b;
- }
-
/** @param s New list of servers */
void set_servers (std::vector<ServerDescription*> s) {
_servers = s;
std::string _default_directory;
/** port to use for J2K encoding servers */
int _server_port;
- /** index of colour LUT to use when converting RGB to XYZ
- * (see colour_lut_index ())
- */
- int _colour_lut_index;
- /** bandwidth for J2K files in bits per second */
- int _j2k_bandwidth;
/** J2K encoding servers to use */
std::vector<ServerDescription *> _servers;
, _frame (f)
, _frames_per_second (dcp_frame_rate(fps).frames_per_second)
, _post_process (pp)
- , _colour_lut_index (clut)
+ , _colour_lut (clut)
, _j2k_bandwidth (bw)
, _log (l)
, _image (0)
for (int x = 0; x < _out_size.width; ++x) {
/* In gamma LUT (converting 8-bit input to 12-bit) */
- s.r = lut_in[_colour_lut_index][*p++ << 4];
- s.g = lut_in[_colour_lut_index][*p++ << 4];
- s.b = lut_in[_colour_lut_index][*p++ << 4];
+ s.r = lut_in[_colour_lut][*p++ << 4];
+ s.g = lut_in[_colour_lut][*p++ << 4];
+ s.b = lut_in[_colour_lut][*p++ << 4];
/* RGB to XYZ Matrix */
- d.x = ((s.r * color_matrix[_colour_lut_index][0][0]) +
- (s.g * color_matrix[_colour_lut_index][0][1]) +
- (s.b * color_matrix[_colour_lut_index][0][2]));
+ d.x = ((s.r * color_matrix[_colour_lut][0][0]) +
+ (s.g * color_matrix[_colour_lut][0][1]) +
+ (s.b * color_matrix[_colour_lut][0][2]));
- d.y = ((s.r * color_matrix[_colour_lut_index][1][0]) +
- (s.g * color_matrix[_colour_lut_index][1][1]) +
- (s.b * color_matrix[_colour_lut_index][1][2]));
+ d.y = ((s.r * color_matrix[_colour_lut][1][0]) +
+ (s.g * color_matrix[_colour_lut][1][1]) +
+ (s.b * color_matrix[_colour_lut][1][2]));
- d.z = ((s.r * color_matrix[_colour_lut_index][2][0]) +
- (s.g * color_matrix[_colour_lut_index][2][1]) +
- (s.b * color_matrix[_colour_lut_index][2][2]));
+ d.z = ((s.r * color_matrix[_colour_lut][2][0]) +
+ (s.g * color_matrix[_colour_lut][2][1]) +
+ (s.b * color_matrix[_colour_lut][2][2]));
/* DCI companding */
d.x = d.x * DCI_COEFFICENT * (DCI_LUT_SIZE - 1);
s << "post_process " << _post_process << "\n";
}
- s << "colour_lut " << Config::instance()->colour_lut_index () << "\n"
- << "j2k_bandwidth " << Config::instance()->j2k_bandwidth () << "\n";
+ s << "colour_lut " << _colour_lut << "\n"
+ << "j2k_bandwidth " << _j2k_bandwidth << "\n";
if (_subtitle) {
s << "subtitle_x " << _subtitle->position().x << "\n"
SourceFrame _frame; ///< frame index within the Film's source
int _frames_per_second; ///< Frames per second that we will use for the DCP (rounded)
std::string _post_process; ///< FFmpeg post-processing string to use
- int _colour_lut_index; ///< Colour look-up table to use (see Config::colour_lut_index ())
- int _j2k_bandwidth; ///< J2K bandwidth to use (see Config::j2k_bandwidth ())
+ int _colour_lut; ///< Colour look-up table to use
+ int _j2k_bandwidth; ///< J2K bandwidth to use
Log* _log; ///< log
new DCPVideoFrame (
image, sub, _opt->out_size, _opt->padding, _film->subtitle_offset(), _film->subtitle_scale(),
_film->scaler(), _video_frame, _film->frames_per_second(), s.second,
- Config::instance()->colour_lut_index (), Config::instance()->j2k_bandwidth (),
+ _film->colour_lut(), _film->j2k_bandwidth(),
_film->log()
)
));
, _with_subtitles (false)
, _subtitle_offset (0)
, _subtitle_scale (1)
+ , _colour_lut (0)
+ , _j2k_bandwidth (200000000)
, _frames_per_second (0)
, _dirty (false)
{
, _with_subtitles (o._with_subtitles)
, _subtitle_offset (o._subtitle_offset)
, _subtitle_scale (o._subtitle_scale)
+ , _colour_lut (o._colour_lut)
+ , _j2k_bandwidth (o._j2k_bandwidth)
, _audio_language (o._audio_language)
, _subtitle_language (o._subtitle_language)
, _territory (o._territory)
log()->log (String::compose ("Content length %1", length()));
log()->log (String::compose ("Content digest %1", content_digest()));
log()->log (String::compose ("%1 threads", Config::instance()->num_local_encoding_threads()));
- log()->log (String::compose ("J2K bandwidth %1", Config::instance()->j2k_bandwidth()));
+ log()->log (String::compose ("J2K bandwidth %1", j2k_bandwidth()));
}
if (format() == 0) {
f << "with_subtitles " << _with_subtitles << "\n";
f << "subtitle_offset " << _subtitle_offset << "\n";
f << "subtitle_scale " << _subtitle_scale << "\n";
+ f << "colour_lut " << _colour_lut << "\n";
+ f << "j2k_bandwidth " << _j2k_bandwidth << "\n";
f << "audio_language " << _audio_language << "\n";
f << "subtitle_language " << _subtitle_language << "\n";
f << "territory " << _territory << "\n";
_subtitle_offset = atoi (v.c_str ());
} else if (k == "subtitle_scale") {
_subtitle_scale = atof (v.c_str ());
+ } else if (k == "colour_lut") {
+ _colour_lut = atoi (v.c_str ());
+ } else if (k == "j2k_bandwidth") {
+ _j2k_bandwidth = atoi (v.c_str ());
} else if (k == "audio_language") {
_audio_language = v;
} else if (k == "subtitle_language") {
signal_changed (SUBTITLE_SCALE);
}
+void
+Film::set_colour_lut (int i)
+{
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _colour_lut = i;
+ }
+ signal_changed (COLOUR_LUT);
+}
+
+void
+Film::set_j2k_bandwidth (int b)
+{
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _j2k_bandwidth = b;
+ }
+ signal_changed (J2K_BANDWIDTH);
+}
+
void
Film::set_audio_language (string l)
{
WITH_SUBTITLES,
SUBTITLE_OFFSET,
SUBTITLE_SCALE,
+ COLOUR_LUT,
+ J2K_BANDWIDTH,
DCI_METADATA,
SIZE,
LENGTH,
return _subtitle_scale;
}
+ /** @return index of colour LUT to use when converting RGB to XYZ.
+ * 0: sRGB
+ * 1: Rec 709
+ */
+ int colour_lut () const {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ return _colour_lut;
+ }
+
+ /** @return bandwidth for J2K files in bits per second */
+ int j2k_bandwidth () const {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ return _j2k_bandwidth;
+ }
+
std::string audio_language () const {
boost::mutex::scoped_lock lm (_state_mutex);
return _audio_language;
void set_with_subtitles (bool);
void set_subtitle_offset (int);
void set_subtitle_scale (float);
+ void set_colour_lut (int);
+ void set_j2k_bandwidth (int);
void set_audio_language (std::string);
void set_subtitle_language (std::string);
void set_territory (std::string);
int _subtitle_offset;
/** scale factor to apply to subtitles */
float _subtitle_scale;
-
+ /** index of colour LUT to use when converting RGB to XYZ
+ * (see colour_lut ())
+ */
+ int _colour_lut;
+ /** bandwidth for J2K files in bits per second */
+ int _j2k_bandwidth;
+
/* DCI naming stuff */
std::string _audio_language;
std::string _subtitle_language;
<< " -v, --version show DVD-o-matic version\n"
<< " -h, --help show this help\n"
<< " -d, --deps list DVD-o-matic dependency details and quit\n"
- << " -c, --config list configuration settings that affect output and quit\n"
<< " -t, --test run in test mode (repeatable UUID generation, timestamps etc.)\n"
<< " -n, --no-progress do not print progress to stdout\n"
<< " -r, --no-remote do not use any remote servers\n"
{ "version", no_argument, 0, 'v'},
{ "help", no_argument, 0, 'h'},
{ "deps", no_argument, 0, 'd'},
- { "config", no_argument, 0, 'c'},
{ "test", no_argument, 0, 't'},
{ "no-progress", no_argument, 0, 'n'},
{ "no-remote", no_argument, 0, 'r'},
{ 0, 0, 0, 0 }
};
- int c = getopt_long (argc, argv, "vhdctnrl:", long_options, &option_index);
+ int c = getopt_long (argc, argv, "vhdtnrl:", long_options, &option_index);
if (c == -1) {
break;
case 'r':
no_remote = true;
break;
- case 'c':
- cout << "Colour LUT " << colour_lut_index_to_name (Config::instance()->colour_lut_index()) << "; "
- << "J2K bandwidth " << Config::instance()->j2k_bandwidth() << "; ";
-#ifdef DVDOMATIC_DEBUG
- cout << "built in debug mode\n";
-#else
- cout << "built in optimised mode\n";
-#endif
- exit (EXIT_SUCCESS);
case 'l':
log_level = atoi (optarg);
break;
table->Add (_default_directory, 1, wxEXPAND);
table->AddSpacer (0);
- add_label_to_sizer (table, this, "Colour look-up table");
- _colour_lut = new wxComboBox (this, wxID_ANY);
- for (int i = 0; i < 2; ++i) {
- _colour_lut->Append (std_to_wx (colour_lut_index_to_name (i)));
- }
- _colour_lut->SetSelection (0);
- table->Add (_colour_lut, 1, wxEXPAND);
- table->AddSpacer (0);
-
- add_label_to_sizer (table, this, "JPEG2000 bandwidth");
- _j2k_bandwidth = new wxSpinCtrl (this, wxID_ANY);
- table->Add (_j2k_bandwidth, 1, wxEXPAND);
- add_label_to_sizer (table, this, "MBps");
-
add_label_to_sizer (table, this, "Reference scaler for A/B");
_reference_scaler = new wxComboBox (this, wxID_ANY);
vector<Scaler const *> const sc = Scaler::all ();
_default_directory->SetPath (std_to_wx (config->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir()))));
_default_directory->Connect (wxID_ANY, wxEVT_COMMAND_DIRPICKER_CHANGED, wxCommandEventHandler (ConfigDialog::default_directory_changed), 0, this);
- _colour_lut->Connect (wxID_ANY, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler (ConfigDialog::colour_lut_changed), 0, this);
-
- _j2k_bandwidth->SetRange (50, 250);
- _j2k_bandwidth->SetValue (rint ((double) config->j2k_bandwidth() / 1e6));
- _j2k_bandwidth->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (ConfigDialog::j2k_bandwidth_changed), 0, this);
-
_reference_scaler->SetSelection (Scaler::as_index (config->reference_scaler ()));
_reference_scaler->Connect (wxID_ANY, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler (ConfigDialog::reference_scaler_changed), 0, this);
Config::instance()->set_default_directory (wx_to_std (_default_directory->GetPath ()));
}
-void
-ConfigDialog::colour_lut_changed (wxCommandEvent &)
-{
- Config::instance()->set_colour_lut_index (_colour_lut->GetSelection ());
-}
-
-void
-ConfigDialog::j2k_bandwidth_changed (wxCommandEvent &)
-{
- Config::instance()->set_j2k_bandwidth (_j2k_bandwidth->GetValue() * 1e6);
-}
-
void
ConfigDialog::add_server_to_control (ServerDescription* s)
{
void tms_password_changed (wxCommandEvent &);
void num_local_encoding_threads_changed (wxCommandEvent &);
void default_directory_changed (wxCommandEvent &);
- void colour_lut_changed (wxCommandEvent &);
- void j2k_bandwidth_changed (wxCommandEvent &);
void reference_scaler_changed (wxCommandEvent &);
void edit_reference_filters_clicked (wxCommandEvent &);
void reference_filters_changed (std::vector<Filter const *>);
#else
wxDirPickerCtrl* _default_directory;
#endif
- wxComboBox* _colour_lut;
- wxSpinCtrl* _j2k_bandwidth;
wxComboBox* _reference_scaler;
wxStaticText* _reference_filters;
wxButton* _reference_filters_button;
_with_subtitles->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::with_subtitles_toggled), 0, this);
_subtitle_offset->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::subtitle_offset_changed), 0, this);
_subtitle_scale->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::subtitle_scale_changed), 0, this);
+ _colour_lut->Connect (wxID_ANY, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler (FilmEditor::colour_lut_changed), 0, this);
+ _j2k_bandwidth->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::j2k_bandwidth_changed), 0, this);
_subtitle_stream->Connect (wxID_ANY, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler (FilmEditor::subtitle_stream_changed), 0, this);
_audio_stream->Connect (wxID_ANY, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler (FilmEditor::audio_stream_changed), 0, this);
_audio_gain->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::audio_gain_changed), 0, this);
_scaler->Append (std_to_wx ((*i)->name()));
}
+ add_label_to_sizer (_video_sizer, _video_panel, "Colour look-up table");
+ _colour_lut = new wxComboBox (_video_panel, wxID_ANY);
+ for (int i = 0; i < 2; ++i) {
+ _colour_lut->Append (std_to_wx (colour_lut_index_to_name (i)));
+ }
+ _colour_lut->SetSelection (0);
+ _video_sizer->Add (_colour_lut, 1, wxEXPAND);
+
+ {
+ add_label_to_sizer (_video_sizer, _video_panel, "JPEG2000 bandwidth");
+ wxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+ _j2k_bandwidth = new wxSpinCtrl (_video_panel, wxID_ANY);
+ s->Add (_j2k_bandwidth, 1);
+ add_label_to_sizer (s, _video_panel, "MBps");
+ _video_sizer->Add (s, 1);
+ }
+
_left_crop->SetRange (0, 1024);
_top_crop->SetRange (0, 1024);
_right_crop->SetRange (0, 1024);
_still_duration->SetRange (1, 60 * 60);
_dcp_trim_start->SetRange (0, 100);
_dcp_trim_end->SetRange (0, 100);
+ _j2k_bandwidth->SetRange (50, 250);
}
void
_film->set_subtitle_scale (_subtitle_scale->GetValue() / 100.0);
}
+void
+FilmEditor::colour_lut_changed (wxCommandEvent &)
+{
+ if (!_film) {
+ return;
+ }
+
+ _film->set_colour_lut (_colour_lut->GetSelection ());
+}
+
+void
+FilmEditor::j2k_bandwidth_changed (wxCommandEvent &)
+{
+ if (!_film) {
+ return;
+ }
+
+ _film->set_j2k_bandwidth (_j2k_bandwidth->GetValue() * 1e6);
+}
+
/** Called when the metadata stored in the Film object has changed;
* so that we can update the GUI.
case Film::SUBTITLE_SCALE:
checked_set (_subtitle_scale, _film->subtitle_scale() * 100);
break;
+ case Film::COLOUR_LUT:
+ checked_set (_colour_lut, _film->colour_lut ());
+ break;
+ case Film::J2K_BANDWIDTH:
+ checked_set (_j2k_bandwidth, double (_film->j2k_bandwidth()) / 1e6);
+ break;
case Film::USE_DCI_NAME:
checked_set (_use_dci_name, _film->use_dci_name ());
_dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
film_changed (Film::WITH_SUBTITLES);
film_changed (Film::SUBTITLE_OFFSET);
film_changed (Film::SUBTITLE_SCALE);
+ film_changed (Film::COLOUR_LUT);
+ film_changed (Film::J2K_BANDWIDTH);
film_changed (Film::DCI_METADATA);
film_changed (Film::SIZE);
film_changed (Film::LENGTH);
_dcp_trim_start->Enable (s);
_dcp_trim_end->Enable (s);
_dcp_ab->Enable (s);
+ _colour_lut->Enable (s);
+ _j2k_bandwidth->Enable (s);
_audio_gain->Enable (s);
_audio_gain_calculate_button->Enable (s);
_audio_delay->Enable (s);
void with_subtitles_toggled (wxCommandEvent &);
void subtitle_offset_changed (wxCommandEvent &);
void subtitle_scale_changed (wxCommandEvent &);
+ void colour_lut_changed (wxCommandEvent &);
+ void j2k_bandwidth_changed (wxCommandEvent &);
void still_duration_changed (wxCommandEvent &);
void audio_stream_changed (wxCommandEvent &);
void subtitle_stream_changed (wxCommandEvent &);
wxComboBox* _subtitle_stream;
wxSpinCtrl* _subtitle_offset;
wxSpinCtrl* _subtitle_scale;
+ wxComboBox* _colour_lut;
+ wxSpinCtrl* _j2k_bandwidth;
/** The Film's DCP content type */
wxComboBox* _dcp_content_type;
/** The Film's frames per second */
if (_film->length()) {
_frames->SetLabel (std_to_wx (lexical_cast<string> (_film->length().get())));
- double const disk = ((double) Config::instance()->j2k_bandwidth() / 8) * _film->length().get() / (_film->frames_per_second () * 1073741824);
+ double const disk = ((double) _film->j2k_bandwidth() / 8) * _film->length().get() / (_film->frames_per_second () * 1073741824);
stringstream s;
s << fixed << setprecision (1) << disk << "Gb";
_disk_for_frames->SetLabel (std_to_wx (s.str ()));
setup_test_config ()
{
Config::instance()->set_num_local_encoding_threads (1);
- Config::instance()->set_colour_lut_index (0);
- Config::instance()->set_j2k_bandwidth (200000000);
Config::instance()->set_servers (vector<ServerDescription*> ());
Config::instance()->set_server_port (61920);
}