summaryrefslogtreecommitdiff
path: root/src/lib/audio_decoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/audio_decoder.cc')
-rw-r--r--src/lib/audio_decoder.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc
index 0d5591072..a65e5f759 100644
--- a/src/lib/audio_decoder.cc
+++ b/src/lib/audio_decoder.cc
@@ -47,6 +47,29 @@ AudioDecoder::get_audio (AudioStreamPtr stream, Frame frame, Frame length, bool
void
AudioDecoder::audio (AudioStreamPtr stream, shared_ptr<const AudioBuffers> data, ContentTime time)
{
+ if (_streams.find (stream) == _streams.end ()) {
+
+ /* This method can be called with an unknown stream during the following sequence:
+ - Add KDM to some DCP content.
+ - Content gets re-examined.
+ - SingleStreamAudioContent::take_from_audio_examiner creates a new stream.
+ - Some content property change signal is delivered so Player::Changed is emitted.
+ - Film viewer to re-gets the frame.
+ - Player calls DCPDecoder pass which calls this method on the new stream.
+
+ At this point the AudioDecoder does not know about the new stream.
+
+ Then
+ - Some other property change signal is delivered which marks the player's pieces invalid.
+ - Film viewer re-gets again.
+ - Everything is OK.
+
+ In this situation it is fine for us to silently drop the audio.
+ */
+
+ return;
+ }
+
_streams[stream]->audio (data, time);
}