Use the correct font to render subtitles in preview / burn-in (#663).
[dcpomatic.git] / src / lib / audio_decoder_stream.cc
index b9a8f2657aff81693c6d739e4fe3c7f57fb8055f..52a33c172a2cd416fd13a6908fb64af74cb1768a 100644 (file)
@@ -23,6 +23,9 @@
 #include "audio_decoder.h"
 #include "resampler.h"
 #include "util.h"
+#include "film.h"
+#include "log.h"
+#include "compose.hpp"
 #include <iostream>
 
 #include "i18n.h"
@@ -58,8 +61,10 @@ AudioDecoderStream::get (Frame frame, Frame length, bool accurate)
 {
        shared_ptr<ContentAudio> dec;
 
+       _content->film()->log()->log (String::compose ("ADS has request for %1 %2", frame, length), Log::TYPE_DEBUG_DECODE);
+
        Frame const end = frame + length - 1;
-               
+
        if (frame < _decoded.frame || end > (_decoded.frame + length * 4)) {
                /* Either we have no decoded data, or what we do have is a long way from what we want: seek */
                seek (ContentTime::from_frames (frame, _content->resampled_audio_frame_rate()), accurate);
@@ -69,7 +74,7 @@ AudioDecoderStream::get (Frame frame, Frame length, bool accurate)
           (to be set up shortly)
        */
        Frame decoded_offset = 0;
-       
+
        /* Now enough pass() calls will either:
         *  (a) give us what we want, or
         *  (b) hit the end of the decoder.
@@ -81,18 +86,18 @@ AudioDecoderStream::get (Frame frame, Frame length, bool accurate)
                /* Keep stuffing data into _decoded until we have enough data, or the subclass does not want to give us any more */
                while (
                        (_decoded.frame > frame || (_decoded.frame + _decoded.audio->frames()) < end) &&
-                       !_decoder->pass (Decoder::PASS_REASON_AUDIO)
+                       !_decoder->pass ()
                        )
                {}
-               
+
                decoded_offset = frame - _decoded.frame;
        } else {
                while (
                        _decoded.audio->frames() < length &&
-                       !_decoder->pass (Decoder::PASS_REASON_AUDIO)
+                       !_decoder->pass ()
                        )
                {}
-               
+
                /* Use decoded_offset of 0, as we don't really care what frames we return */
        }
 
@@ -130,6 +135,8 @@ AudioDecoderStream::get (Frame frame, Frame length, bool accurate)
 void
 AudioDecoderStream::audio (shared_ptr<const AudioBuffers> data, ContentTime time)
 {
+       _content->film()->log()->log (String::compose ("ADS receives %1 %2", time, data->frames ()), Log::TYPE_DEBUG_DECODE);
+
        if (_resampler) {
                data = _resampler->run (data);
        }
@@ -139,7 +146,7 @@ AudioDecoderStream::audio (shared_ptr<const AudioBuffers> data, ContentTime time
        if (_seek_reference) {
                /* We've had an accurate seek and now we're seeing some data */
                ContentTime const delta = time - _seek_reference.get ();
-               Frame const delta_frames = delta.frames (frame_rate);
+               Frame const delta_frames = delta.frames_round (frame_rate);
                if (delta_frames > 0) {
                        /* This data comes after the seek time.  Pad the data with some silence. */
                        shared_ptr<AudioBuffers> padded (new AudioBuffers (data->channels(), data->frames() + delta_frames));
@@ -166,7 +173,7 @@ AudioDecoderStream::audio (shared_ptr<const AudioBuffers> data, ContentTime time
        }
 
        if (!_position) {
-               _position = time.frames (frame_rate);
+               _position = time.frames_round (frame_rate);
        }
 
        DCPOMATIC_ASSERT (_position.get() >= (_decoded.frame + _decoded.audio->frames()));
@@ -183,7 +190,7 @@ AudioDecoderStream::add (shared_ptr<const AudioBuffers> data)
                */
                return;
        }
-       
+
        /* Resize _decoded to fit the new data */
        int new_size = 0;
        if (_decoded.audio->frames() == 0) {
@@ -194,7 +201,7 @@ AudioDecoderStream::add (shared_ptr<const AudioBuffers> data)
                /* Otherwise we need to extend _decoded to include the new stuff */
                new_size = _position.get() + data->frames() - _decoded.frame;
        }
-       
+
        _decoded.audio->ensure_size (new_size);
        _decoded.audio->set_frames (new_size);