Allow signals to be blocked and resumed, and so make sure that a set
[dcpomatic.git] / src / lib / dcp_content.cc
index 3cc724b8e16a634e5f73a0e31b10850852829da6..cad775b24854b9c79aba7448570c11a70edd99ce 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2014-2022 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2014-2023 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -31,6 +31,7 @@
 #include "job.h"
 #include "log.h"
 #include "overlaps.h"
+#include "scope_guard.h"
 #include "text_content.h"
 #include "video_content.h"
 #include <dcp/dcp.h>
@@ -105,7 +106,8 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
                                node->optional_number_child<Frame>("AudioLength").get_value_or (
                                        video->length() * node->number_child<int>("AudioFrameRate") / video_frame_rate().get()
                                        ),
-                               AudioMapping (node->node_child ("AudioMapping"), version)
+                               AudioMapping(node->node_child("AudioMapping"), version),
+                               24
                                )
                        );
        }
@@ -212,6 +214,11 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
        bool const needed_kdm = needs_kdm ();
        string const old_name = name ();
 
+       ContentChangeSignalDespatcher::instance()->suspend();
+       ScopeGuard sg = []() {
+               ContentChangeSignalDespatcher::instance()->resume();
+       };
+
        ContentChangeSignaller cc_texts (this, DCPContentProperty::TEXTS);
        ContentChangeSignaller cc_assets (this, DCPContentProperty::NEEDS_ASSETS);
        ContentChangeSignaller cc_kdm (this, DCPContentProperty::NEEDS_KDM);
@@ -238,7 +245,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
                        boost::mutex::scoped_lock lm (_mutex);
                        audio = make_shared<AudioContent>(this);
                }
-               auto as = make_shared<AudioStream>(examiner->audio_frame_rate(), examiner->audio_length(), examiner->audio_channels());
+               auto as = make_shared<AudioStream>(examiner->audio_frame_rate(), examiner->audio_length(), examiner->audio_channels(), 24);
                audio->set_stream (as);
                auto m = as->mapping ();
                m.make_default (film ? film->audio_processor() : 0);
@@ -257,7 +264,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
                atmos->set_length (examiner->atmos_length());
        }
 
-       list<shared_ptr<TextContent>> new_text;
+       vector<shared_ptr<TextContent>> new_text;
 
        for (int i = 0; i < examiner->text_count(TextType::OPEN_SUBTITLE); ++i) {
                auto c = make_shared<TextContent>(this, TextType::OPEN_SUBTITLE, TextType::OPEN_SUBTITLE);