/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2013 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <libcxml/cxml.h>
#include "film.h"
#include "job.h"
-#include "filter.h"
#include "util.h"
#include "job_manager.h"
#include "transcode_job.h"
#include "ui_signaller.h"
#include "playlist.h"
#include "player.h"
-#include "ffmpeg_content.h"
-#include "imagemagick_content.h"
-#include "sndfile_content.h"
#include "dcp_content_type.h"
#include "ratio.h"
#include "cross.h"
, _use_dci_name (true)
, _dcp_content_type (Config::instance()->default_dcp_content_type ())
, _container (Config::instance()->default_container ())
+ , _resolution (RESOLUTION_2K)
, _scaler (Scaler::from_id ("bicubic"))
, _with_subtitles (false)
- , _j2k_bandwidth (200000000)
+ , _j2k_bandwidth (Config::instance()->default_j2k_bandwidth ())
, _dci_metadata (Config::instance()->default_dci_metadata ())
, _dcp_video_frame_rate (24)
, _dcp_audio_channels (MAX_AUDIO_CHANNELS)
_log.reset (new FileLog ("log"));
}
-Film::Film (Film const & o)
- : boost::enable_shared_from_this<Film> (o)
- /* note: the copied film shares the original's log */
- , _log (o._log)
- , _playlist (new Playlist (o._playlist))
- , _directory (o._directory)
- , _name (o._name)
- , _use_dci_name (o._use_dci_name)
- , _dcp_content_type (o._dcp_content_type)
- , _container (o._container)
- , _scaler (o._scaler)
- , _with_subtitles (o._with_subtitles)
- , _j2k_bandwidth (o._j2k_bandwidth)
- , _dci_metadata (o._dci_metadata)
- , _dcp_video_frame_rate (o._dcp_video_frame_rate)
- , _dci_date (o._dci_date)
- , _dirty (o._dirty)
-{
- _playlist->ContentChanged.connect (bind (&Film::playlist_content_changed, this, _1, _2));
-}
-
string
Film::video_identifier () const
{
stringstream s;
s << container()->id()
+ << "_" << resolution_to_string (_resolution)
<< "_" << _playlist->video_identifier()
<< "_" << _dcp_video_frame_rate
<< "_" << scaler()->id()
root->add_child("Container")->add_child_text (_container->id ());
}
+ root->add_child("Resolution")->add_child_text (resolution_to_string (_resolution));
root->add_child("Scaler")->add_child_text (_scaler->id ());
root->add_child("WithSubtitles")->add_child_text (_with_subtitles ? "1" : "0");
root->add_child("J2KBandwidth")->add_child_text (lexical_cast<string> (_j2k_bandwidth));
}
}
+ _resolution = string_to_resolution (f.string_child ("Resolution"));
_scaler = Scaler::from_id (f.string_child ("Scaler"));
_with_subtitles = f.bool_child ("WithSubtitles");
_j2k_bandwidth = f.number_child<int> ("J2KBandwidth");
if (!dm.audio_language.empty ()) {
d << "_" << dm.audio_language;
- if (!dm.subtitle_language.empty()) {
+ if (!dm.subtitle_language.empty() && with_subtitles()) {
d << "-" << dm.subtitle_language;
} else {
d << "-XX";
}
}
- d << "_51_2K";
+ switch (dcp_audio_channels ()) {
+ case 1:
+ d << "_10";
+ break;
+ case 2:
+ d << "_20";
+ break;
+ case 3:
+ d << "_30";
+ break;
+ case 4:
+ d << "_40";
+ break;
+ case 5:
+ d << "_50";
+ break;
+ case 6:
+ d << "_51";
+ break;
+ }
+
+ d << "_" << resolution_to_string (_resolution);
if (!dm.studio.empty ()) {
d << "_" << dm.studio;
signal_changed (CONTAINER);
}
+void
+Film::set_resolution (Resolution r)
+{
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _resolution = r;
+ }
+ signal_changed (RESOLUTION);
+}
+
void
Film::set_scaler (Scaler const * s)
{
case Film::CONTENT:
set_dcp_video_frame_rate (_playlist->best_dcp_frame_rate ());
break;
+ case Film::DCP_VIDEO_FRAME_RATE:
+ _playlist->maybe_sequence_video ();
+ break;
default:
break;
}
}
shared_ptr<Player>
-Film::player () const
+Film::make_player () const
{
return shared_ptr<Player> (new Player (shared_from_this (), _playlist));
}
libdcp::Size
Film::full_frame () const
{
- return libdcp::Size (2048, 1080);
+ switch (_resolution) {
+ case RESOLUTION_2K:
+ return libdcp::Size (2048, 1080);
+ case RESOLUTION_4K:
+ return libdcp::Size (4096, 2160);
+ }
+
+ assert (false);
+ return libdcp::Size ();
}