Add Prores 4444 support (#2263).
[dcpomatic.git] / src / lib / util.cc
index 7d0d2bf606c698d3a2a4881f2336c4e156456899..c964d853330ac5a7876f50919c22463fab54db17 100644 (file)
@@ -410,8 +410,8 @@ LIBDCP_ENABLE_WARNINGS
                optional<string>(), false, false, false, dcp::Colour(), 42, 1, dcp::Time(), dcp::Time(), 0, dcp::HAlign::CENTER, 0, dcp::VAlign::CENTER, dcp::Direction::LTR,
                "Hello dolly", dcp::Effect::NONE, dcp::Colour(), dcp::Time(), dcp::Time(), 0
                );
-       subs.push_back (StringText(ss, 0));
-       render_text (subs, list<shared_ptr<Font>>(), dcp::Size(640, 480), DCPTime(), 24);
+       subs.push_back (StringText(ss, 0, {}));
+       render_text (subs, dcp::Size(640, 480), DCPTime(), 24);
 #endif
 
        Ratio::setup_ratios ();
@@ -705,44 +705,47 @@ split_get_request (string url)
        return r;
 }
 
+
+static
 string
-video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary)
+asset_filename (shared_ptr<dcp::Asset> asset, string type, int reel_index, int reel_count, optional<string> summary, string extension)
 {
        dcp::NameFormat::Map values;
-       values['t'] = "j2c";
-       values['r'] = raw_convert<string> (reel_index + 1);
-       values['n'] = raw_convert<string> (reel_count);
+       values['t'] = type;
+       values['r'] = raw_convert<string>(reel_index + 1);
+       values['n'] = raw_convert<string>(reel_count);
        if (summary) {
-               values['c'] = careful_string_filter (summary.get());
+               values['c'] = careful_string_filter(summary.get());
        }
-       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
+       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + extension);
+}
+
+
+string
+video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary)
+{
+       return asset_filename(asset, "j2c", reel_index, reel_count, summary, ".mxf");
 }
 
+
 string
 audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int reel_count, optional<string> summary)
 {
-       dcp::NameFormat::Map values;
-       values['t'] = "pcm";
-       values['r'] = raw_convert<string> (reel_index + 1);
-       values['n'] = raw_convert<string> (reel_count);
-       if (summary) {
-               values['c'] = careful_string_filter (summary.get());
-       }
-       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
+       return asset_filename(asset, "pcm", reel_index, reel_count, summary, ".mxf");
+}
+
+
+string
+subtitle_asset_filename (shared_ptr<dcp::SubtitleAsset> asset, int reel_index, int reel_count, optional<string> summary, string extension)
+{
+       return asset_filename(asset, "sub", reel_index, reel_count, summary, extension);
 }
 
 
 string
 atmos_asset_filename (shared_ptr<dcp::AtmosAsset> asset, int reel_index, int reel_count, optional<string> summary)
 {
-       dcp::NameFormat::Map values;
-       values['t'] = "atmos";
-       values['r'] = raw_convert<string> (reel_index + 1);
-       values['n'] = raw_convert<string> (reel_count);
-       if (summary) {
-               values['c'] = careful_string_filter (summary.get());
-       }
-       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
+       return asset_filename(asset, "atmos", reel_index, reel_count, summary, ".mxf");
 }
 
 
@@ -791,7 +794,7 @@ careful_string_filter (string s)
        /* Then remove anything that's not in a very limited character set */
        wstring out;
        wstring const allowed = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_%.+";
-       for (size_t i = 0; i < transliterated_more.length(); ++i) {
+       for (int i = 0; i < transliterated_more.length(); ++i) {
                wchar_t c = transliterated_more[i];
                if (allowed.find(c) != string::npos) {
                        out += c;