Skip to content

Commit 4ddc9df

Browse files
committed
Sync to DNEG internal repo
1 parent 0407e17 commit 4ddc9df

File tree

362 files changed

+10504
-6247
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

362 files changed

+10504
-6247
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ if(INSTALL_XSTUDIO)
241241
add_subdirectory(share/fonts)
242242

243243
if(BUILD_DOCS)
244-
add_subdirectory(docs)
244+
#add_subdirectory(docs)
245245
else()
246246
install(DIRECTORY share/docs/ DESTINATION share/xstudio/docs)
247247
endif ()

cmake/macros.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ macro(default_compile_options name)
2727
PRIVATE $<$<PLATFORM_ID:Linux>:-Wfatal-errors> # Stop after first error
2828
PRIVATE $<$<AND:$<CONFIG:Debug>,$<PLATFORM_ID:Linux>>:-Wpedantic>
2929
PRIVATE $<$<AND:$<CONFIG:Debug>,$<PLATFORM_ID:Windows>>:/wd4100>
30+
PRIVATE $<$<PLATFORM_ID:Windows>:/bigobj>
3031
# PRIVATE $<$<CONFIG:Debug>:-Wall>
3132
# PRIVATE $<$<CONFIG:Debug>:-Werror>
3233
# PRIVATE $<$<CONFIG:Debug>:-Wextra>

include/xstudio/atoms.hpp

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ namespace media {
9393
class MediaKey;
9494
class AVFrameID;
9595
class StreamDetail;
96-
typedef std::shared_ptr<const std::map<timebase::flicks, std::shared_ptr<const AVFrameID>>> FrameTimeMapPtr;
96+
typedef std::shared_ptr<const std::map<timebase::flicks, std::shared_ptr<const AVFrameID>>>
97+
FrameTimeMapPtr;
9798
typedef std::vector<std::pair<utility::time_point, std::shared_ptr<const AVFrameID>>>
9899
AVFrameIDsAndTimePoints;
99100
typedef std::vector<std::shared_ptr<const AVFrameID>> AVFrameIDs;
@@ -113,7 +114,7 @@ namespace media_reader {
113114
class ImageBufDisplaySet;
114115
class ImageSetLayoutData;
115116
typedef std::shared_ptr<const ImageBufDisplaySet> ImageBufDisplaySetPtr;
116-
typedef std::shared_ptr<const ImageSetLayoutData> ImageSetLayoutDataPtr;
117+
typedef std::shared_ptr<const ImageSetLayoutData> ImageSetLayoutDataPtr;
117118
class MediaReaderManager;
118119
class PixelInfo;
119120
} // namespace media_reader
@@ -218,7 +219,7 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_simple_types, FIRST_CUSTOM_ID)
218219
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::AVFrameID))
219220
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::AVFrameIDs))
220221
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::AVFrameIDsAndTimePoints))
221-
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::FrameTimeMapPtr))
222+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::FrameTimeMapPtr))
222223
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::media_error))
223224
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::MediaDetail))
224225
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media::MediaKey))
@@ -228,12 +229,12 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_simple_types, FIRST_CUSTOM_ID)
228229
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_metadata::MMCertainty))
229230
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::AudioBufPtr))
230231
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::ImageBufPtr))
231-
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::ImageBufDisplaySetPtr))
232-
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::ImageSetLayoutDataPtr))
232+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::ImageBufDisplaySetPtr))
233+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::ImageSetLayoutDataPtr))
233234
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::MRCertainty))
234235
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::media_reader::PixelInfo))
235236
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::playhead::AssemblyMode))
236-
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::playhead::AutoAlignMode))
237+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::playhead::AutoAlignMode))
237238
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::playhead::LoopMode))
238239
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::playhead::OverflowMode))
239240
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::plugin_manager::PluginDetail))
@@ -253,8 +254,8 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_simple_types, FIRST_CUSTOM_ID)
253254
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::ui::viewport::FitMode))
254255
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::ui::viewport::MirrorMode))
255256
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::ui::viewport::GPUShaderPtr))
256-
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::ui::viewport::GraphicsAPI))
257-
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::ui::viewport::ViewportRendererPtr))
257+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::ui::viewport::GraphicsAPI))
258+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::ui::viewport::ViewportRendererPtr))
258259
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::utility::absolute_receive_timeout))
259260
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::utility::ContainerDetail))
260261
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::utility::CopyResult))
@@ -276,6 +277,8 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_simple_types, FIRST_CUSTOM_ID)
276277
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::utility::NotificationType))
277278
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::utility::Notification))
278279
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::playhead::SelectionMode))
280+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::timeline::ItemType))
281+
CAF_ADD_TYPE_ID(xstudio_simple_types, (xstudio::utility::ColourTriplet))
279282

280283
CAF_END_TYPE_ID_BLOCK(xstudio_simple_types)
281284

@@ -377,6 +380,11 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_complex_types, FIRST_CUSTOM_ID + 200)
377380
CAF_ADD_TYPE_ID(xstudio_complex_types, (std::pair<xstudio::playhead::AutoAlignMode, xstudio::playhead::AssemblyMode>))
378381
CAF_ADD_TYPE_ID(xstudio_complex_types, (std::pair<float, std::vector<Imath::M44f>>))
379382

383+
CAF_ADD_TYPE_ID(xstudio_complex_types, (std::vector<std::optional<std::pair<xstudio::timeline::Item, xstudio::utility::FrameRate>>>))
384+
385+
CAF_ADD_TYPE_ID(xstudio_complex_types, (std::vector<xstudio::utility::Notification>))
386+
387+
380388
CAF_END_TYPE_ID_BLOCK(xstudio_complex_types)
381389

382390
CAF_BEGIN_TYPE_ID_BLOCK(xstudio_framework_atoms, FIRST_CUSTOM_ID + (200 * 2))
@@ -389,7 +397,6 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_framework_atoms, FIRST_CUSTOM_ID + (200 * 2))
389397
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, create_studio_atom)
390398
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, exit_atom)
391399
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, get_actor_from_registry_atom)
392-
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, get_api_mode_atom)
393400
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, get_application_mode_atom)
394401
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, get_global_audio_cache_atom)
395402
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, get_global_image_cache_atom)
@@ -442,9 +449,6 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_framework_atoms, FIRST_CUSTOM_ID + (200 * 2))
442449
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::module, release_ui_focus_atom)
443450
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::module, update_attribute_in_preferences_atom)
444451

445-
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::sync, authorise_connection_atom)
446-
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::sync, get_sync_atom)
447-
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::sync, request_connection_atom)
448452
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::thumbnail, cache_path_atom)
449453
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::thumbnail, cache_stats_atom)
450454
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::utility, change_atom)
@@ -473,6 +477,8 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_framework_atoms, FIRST_CUSTOM_ID + (200 * 2))
473477

474478
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::utility, notification_atom)
475479

480+
CAF_ADD_ATOM(xstudio_framework_atoms, xstudio::global, authenticate_atom)
481+
476482
CAF_END_TYPE_ID_BLOCK(xstudio_framework_atoms)
477483

478484

@@ -666,6 +672,8 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_session_atoms, FIRST_CUSTOM_ID + (200 * 4))
666672
CAF_ADD_ATOM(xstudio_session_atoms, xstudio::playlist, expanded_atom)
667673

668674
CAF_ADD_ATOM(xstudio_session_atoms, xstudio::media, current_media_atom)
675+
CAF_ADD_ATOM(xstudio_session_atoms, xstudio::timeline, item_selection_atom)
676+
CAF_ADD_ATOM(xstudio_session_atoms, xstudio::timeline, item_type_atom)
669677

670678
CAF_END_TYPE_ID_BLOCK(xstudio_session_atoms)
671679

@@ -675,6 +683,7 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_playback_atoms, FIRST_CUSTOM_ID + (200 * 5))
675683
CAF_ADD_ATOM(xstudio_playback_atoms, xstudio::audio, get_samples_for_soundcard_atom)
676684
CAF_ADD_ATOM(xstudio_playback_atoms, xstudio::audio, push_samples_atom)
677685
CAF_ADD_ATOM(xstudio_playback_atoms, xstudio::audio, set_override_volume_atom)
686+
CAF_ADD_ATOM(xstudio_playback_atoms, xstudio::audio, audio_samples_atom)
678687
CAF_ADD_ATOM(xstudio_playback_atoms, xstudio::colour_pipeline, colour_operation_uniforms_atom)
679688
CAF_ADD_ATOM(xstudio_playback_atoms, xstudio::colour_pipeline, colour_pipeline_atom)
680689
CAF_ADD_ATOM(xstudio_playback_atoms, xstudio::colour_pipeline, connect_to_viewport_atom)
@@ -792,6 +801,7 @@ CAF_BEGIN_TYPE_ID_BLOCK(xstudio_ui_atoms, FIRST_CUSTOM_ID + (200 * 6))
792801
CAF_ADD_ATOM(xstudio_ui_atoms, xstudio::ui::keypress_monitor, register_hotkey_atom)
793802
CAF_ADD_ATOM(xstudio_ui_atoms, xstudio::ui::keypress_monitor, skipped_mouse_event_atom)
794803
CAF_ADD_ATOM(xstudio_ui_atoms, xstudio::ui::keypress_monitor, text_entry_atom)
804+
CAF_ADD_ATOM(xstudio_ui_atoms, xstudio::ui::keypress_monitor, watch_hotkey_atom)
795805
CAF_ADD_ATOM(xstudio_ui_atoms, xstudio::ui::model_data, insert_or_update_menu_node_atom)
796806
CAF_ADD_ATOM(xstudio_ui_atoms, xstudio::ui::model_data, insert_rows_atom)
797807
CAF_ADD_ATOM(xstudio_ui_atoms, xstudio::ui::model_data, menu_node_activated_atom)

include/xstudio/audio/audio_output.hpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,19 @@ class AudioOutputControl {
3434
* audio frames.
3535
*
3636
*/
37-
void prepare_samples_for_soundcard(
37+
void prepare_samples_for_soundcard_playback(
38+
std::vector<int16_t> &samples,
39+
const long num_samps_to_push,
40+
const long microseconds_delay,
41+
const int num_channels,
42+
const int sample_rate);
43+
44+
/**
45+
* @brief Pick audio samples based on the current playhead position to sound
46+
* audio during timeline scrubbing.
47+
*
48+
*/
49+
void prepare_samples_for_soundcard_scrubbing(
3850
std::vector<int16_t> &samples,
3951
const long num_samps_to_push,
4052
const long microseconds_delay,
@@ -54,13 +66,13 @@ class AudioOutputControl {
5466
/**
5567
* @brief Queue audio buffer for streaming to the soundcard
5668
*/
57-
void queue_samples_for_playing(
58-
const std::vector<media_reader::AudioBufPtr> &audio_buffers);
69+
void queue_samples_for_playing(const std::vector<media_reader::AudioBufPtr> &audio_buffers);
5970

6071
/**
6172
* @brief Fine grained update of playhead position
6273
*/
63-
void playhead_position_changed(const timebase::flicks playhead_position,
74+
void playhead_position_changed(
75+
const timebase::flicks playhead_position,
6476
const bool forward,
6577
const float velocity,
6678
const bool playing,
@@ -92,7 +104,7 @@ class AudioOutputControl {
92104
override_volume_ = override_volume;
93105
}
94106

95-
private:
107+
protected:
96108
media_reader::AudioBufPtr
97109
pick_audio_buffer(const utility::clock::time_point &tp, const bool drop_old_buffers);
98110

@@ -104,14 +116,16 @@ class AudioOutputControl {
104116
std::map<timebase::flicks, media_reader::AudioBufPtr> sample_data_;
105117
media_reader::AudioBufPtr current_buf_;
106118
media_reader::AudioBufPtr previous_buf_;
119+
media_reader::AudioBufPtr next_buf_;
107120
long current_buf_pos_;
108121
float playback_velocity_ = {1.0f};
109122

110123
int fade_in_out_ = {NoFade};
111124

112125
timebase::flicks playhead_position_;
113-
bool playing_forward_ = {true};
126+
bool playing_forward_ = {true};
114127
utility::time_point playhead_position_update_tp_;
128+
timebase::flicks last_buffer_pts_;
115129

116130
bool audio_repitch_ = {false};
117131
bool audio_scrubbing_ = {false};

include/xstudio/audio/audio_output_actor.hpp

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,17 @@ class AudioOutputDeviceActor : public caf::event_based_actor {
5353
// we get this message every time the AudioOutputActor has
5454
// received samples to play.
5555
// connect to the sound output device if necessary
56-
if (output_device_)
57-
output_device_->connect_to_soundcard();
56+
if (output_device_) {
57+
try {
58+
output_device_->connect_to_soundcard();
59+
} catch (std::exception &err) {
60+
spdlog::critical("Failed to connect to audio device: {}", err.what());
61+
output_device_.reset();
62+
return;
63+
}
64+
} else {
65+
return;
66+
}
5867

5968
if (!waiting_for_samples_) {
6069
// start playback loop
@@ -77,7 +86,6 @@ class AudioOutputDeviceActor : public caf::event_based_actor {
7786
}
7887
},
7988
[=](push_samples_atom) {
80-
8189
if (!output_device_)
8290
return;
8391

@@ -100,10 +108,10 @@ class AudioOutputDeviceActor : public caf::event_based_actor {
100108
// essentially we have two loops running within the single actor.
101109
if (waiting_for_samples_)
102110
return;
103-
waiting_for_samples_ = true;
111+
waiting_for_samples_ = true;
104112
const long num_samps_soundcard_wants = (long)output_device_->desired_samples();
105113

106-
auto tt = utility::clock::now();
114+
auto tt = utility::clock::now();
107115
request(
108116
audio_samples_actor_,
109117
infinite,
@@ -152,8 +160,13 @@ class AudioOutputDeviceActor : public caf::event_based_actor {
152160
class AudioOutputActor : public caf::event_based_actor, AudioOutputControl {
153161

154162
public:
155-
AudioOutputActor(caf::actor_config &cfg, std::shared_ptr<AudioOutputDevice> output_device)
156-
: caf::event_based_actor(cfg), output_device_(output_device) {
163+
AudioOutputActor(
164+
caf::actor_config &cfg,
165+
std::shared_ptr<AudioOutputDevice> output_device,
166+
bool subscribe_to_global_audio_stream = true)
167+
: caf::event_based_actor(cfg),
168+
output_device_(output_device),
169+
is_global_(subscribe_to_global_audio_stream) {
157170
init();
158171
}
159172

@@ -170,13 +183,13 @@ class AudioOutputActor : public caf::event_based_actor, AudioOutputControl {
170183

171184
caf::behavior behavior_;
172185
const utility::JsonStore params_;
173-
bool playing_ = {false};
174186
int video_frame_ = {0};
175187
int retry_on_error_ = {0};
176188
utility::Uuid uuid_ = {utility::Uuid::generate()};
177189
utility::Uuid sub_playhead_uuid_;
178190
std::shared_ptr<AudioOutputDevice> output_device_;
179191
caf::actor playhead_;
192+
bool is_global_;
180193
};
181194

182195
/* Singleton class that receives audio sample buffers from the current
@@ -203,13 +216,16 @@ class GlobalAudioOutputActor : public caf::event_based_actor, module::Module {
203216

204217

205218
private:
219+
caf::actor independent_output(const utility::Uuid &playhead_uuid);
220+
206221
caf::actor event_group_;
207222
caf::message_handler behavior_;
208223
module::BooleanAttribute *audio_repitch_;
209224
module::BooleanAttribute *audio_scrubbing_;
210225
module::FloatAttribute *volume_;
211226
module::BooleanAttribute *muted_;
212227
utility::Uuid mute_hotkey_;
228+
std::map<utility::Uuid, caf::actor> independent_outputs_;
213229
};
214230

215231
} // namespace xstudio::audio

include/xstudio/bookmark/bookmark.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ namespace bookmark {
3131
}
3232
utility::Uuid bookmark_uuid_;
3333

34+
virtual size_t hash() const { return 0; }
35+
3436
private:
3537
utility::JsonStore store_;
3638
};
@@ -104,6 +106,7 @@ namespace bookmark {
104106

105107
std::optional<bool> has_note_;
106108
std::optional<bool> has_annotation_;
109+
std::optional<size_t> annotation_hash_;
107110

108111
std::optional<utility::MediaReference> media_reference_;
109112
std::optional<std::string> media_flag_;
@@ -124,6 +127,7 @@ namespace bookmark {
124127
f.field("utp", x.user_type_),
125128
f.field("udt", x.user_data_),
126129
f.field("hasa", x.has_annotation_),
130+
f.field("anh", x.annotation_hash_),
127131
f.field("hasn", x.has_note_),
128132
f.field("aut", x.author_),
129133
f.field("cat", x.category_),
@@ -288,6 +292,7 @@ namespace bookmark {
288292

289293
auto has_note() const { return static_cast<bool>(note_); }
290294
auto has_annotation() const { return static_cast<bool>(annotation_); }
295+
size_t annotation_hash() const { return annotation_ ? annotation_->hash() : 0; }
291296

292297
void create_note();
293298
void create_annotation();

include/xstudio/colour_pipeline/colour_pipeline.hpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ namespace colour_pipeline {
3939
std::any user_data_;
4040

4141
void set_cache_id(const std::string &id) { cache_id_ = id; }
42-
[[nodiscard]] const std::string & cache_id() const { return cache_id_; }
42+
[[nodiscard]] const std::string &cache_id() const { return cache_id_; }
4343

44-
private:
44+
private:
4545
std::string cache_id_;
46-
4746
};
4847

4948
typedef std::shared_ptr<ColourOperationData> ColourOperationDataPtr;
@@ -92,10 +91,9 @@ namespace colour_pipeline {
9291
}
9392

9493
void set_cache_id(const std::string &id) { cache_id_ = id; }
95-
[[nodiscard]] const std::string & cache_id() const { return cache_id_; }
94+
[[nodiscard]] const std::string &cache_id() const { return cache_id_; }
9695

9796
private:
98-
9997
std::string cache_id_;
10098

10199
/*Apply grades and other colour manipulations after stage_zero_operation_*/
@@ -217,7 +215,9 @@ namespace colour_pipeline {
217215
virtual size_t fast_display_transform_hash(const media::AVFrameID &media_ptr) = 0;
218216

219217
protected:
220-
void make_pre_draw_gpu_hook(caf::typed_response_promise<plugin::GPUPreDrawHookPtr> rp);
218+
void make_pre_draw_gpu_hook(
219+
const std::string &viewport_name,
220+
caf::typed_response_promise<plugin::GPUPreDrawHookPtr> rp);
221221

222222
void attribute_changed(const utility::Uuid &attr_uuid, const int role) override;
223223

@@ -268,7 +268,9 @@ namespace colour_pipeline {
268268
bool colour_ops_loaded_ = false;
269269

270270
std::vector<caf::actor> colour_op_plugins_;
271-
std::vector<caf::typed_response_promise<plugin::GPUPreDrawHookPtr>> hook_requests_;
271+
std::vector<
272+
std::pair<std::string, caf::typed_response_promise<plugin::GPUPreDrawHookPtr>>>
273+
hook_requests_;
272274
};
273275

274276
} // namespace colour_pipeline

include/xstudio/conform/conform_manager_actor.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class ConformWorkerActor : public caf::event_based_actor {
100100
inline static const std::string NAME = "ConformWorkerActor";
101101
caf::behavior behavior_;
102102
std::vector<caf::actor> conformers_;
103+
bool initialised_{false};
103104
};
104105

105106
class ConformManagerActor : public caf::event_based_actor, public module::Module {

0 commit comments

Comments
 (0)