avfilter_register_all ();
+#ifdef DCPOMATIC_OSX
+ /* Add our lib directory to the libltdl search path so that
+ xmlsec can find xmlsec1-openssl.
+ */
+ boost::filesystem::path lib = app_contents ();
+ lib /= "lib";
+ setenv ("LTDL_LIBRARY_PATH", lib.c_str (), 1);
+#endif
+
libdcp::init ();
Ratio::setup_ratios ();
assert (MAX_AUDIO_CHANNELS == 6);
/* TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency
- enhancement channel (sub-woofer)./
+ enhancement channel (sub-woofer).
*/
string const channels[] = {
_("Left"),
FrameRateConversion::FrameRateConversion (float source, int dcp)
: skip (false)
- , repeat (false)
+ , repeat (1)
, change_speed (false)
{
- if (fabs (source / 2.0 - dcp) < (fabs (source - dcp))) {
+ if (fabs (source / 2.0 - dcp) < fabs (source - dcp)) {
+ /* The difference between source and DCP frame rate will be lower
+ (i.e. better) if we skip.
+ */
skip = true;
} else if (fabs (source * 2 - dcp) < fabs (source - dcp)) {
- repeat = true;
+ /* The difference between source and DCP frame rate would be better
+ if we repeated each frame once; it may be better still if we
+ repeated more than once. Work out the required repeat.
+ */
+ repeat = round (dcp / source);
}
change_speed = !about_equal (source * factor(), dcp);
- if (!skip && !repeat && !change_speed) {
+ if (!skip && repeat == 1 && !change_speed) {
description = _("Content and DCP have the same rate.\n");
} else {
if (skip) {
description = _("DCP will use every other frame of the content.\n");
- } else if (repeat) {
+ } else if (repeat == 2) {
description = _("Each content frame will be doubled in the DCP.\n");
+ } else if (repeat > 2) {
+ description = String::compose (_("Each content frame will be repeated %1 more times in the DCP.\n"), repeat - 1);
}
if (change_speed) {
list<boost::filesystem::path>::const_iterator i = files.begin();
while (i != files.end()) {
boost::filesystem::path p (sd);
- sd /= *i;
- if (!boost::filesystem::exists (sd)) {
+ p /= *i;
+ if (!boost::filesystem::exists (p)) {
boost::filesystem::remove_all (sd);
+ boost::filesystem::create_directories (sd);
libdcp::make_signer_chain (sd, openssl_path ());
break;
}
return shared_ptr<const libdcp::Signer> (new libdcp::Signer (chain, signer_key));
}
+libdcp::Size
+fit_ratio_within (float ratio, libdcp::Size full_frame)
+{
+ if (ratio < full_frame.ratio ()) {
+ return libdcp::Size (full_frame.height * ratio, full_frame.height);
+ }
+
+ return libdcp::Size (full_frame.width, full_frame.width / ratio);
+}