Another try at sorting out the thorny question of timing.
[dcpomatic.git] / src / lib / audio_decoder.cc
index df13a984a4b36416fb1120b6512aca4537484f6c..dc49a1846e74ada429e20603d213666d858ecd52 100644 (file)
 */
 
 #include "audio_decoder.h"
+#include "audio_buffers.h"
+#include "exceptions.h"
+#include "log.h"
 
+#include "i18n.h"
+
+using std::stringstream;
+using std::list;
+using std::pair;
+using std::cout;
 using boost::optional;
 using boost::shared_ptr;
 
 AudioDecoder::AudioDecoder (shared_ptr<const Film> f)
        : Decoder (f)
+       , _audio_position (0)
+{
+}
+
+#if 0
+void
+AudioDecoder::process_end ()
 {
+       if (_swr_context) {
+
+               shared_ptr<const Film> film = _film.lock ();
+               assert (film);
+               
+               shared_ptr<AudioBuffers> out (new AudioBuffers (film->audio_mapping().dcp_channels(), 256));
+                       
+               while (1) {
+                       int const frames = swr_convert (_swr_context, (uint8_t **) out->data(), 256, 0, 0);
+
+                       if (frames < 0) {
+                               throw EncodeError (_("could not run sample-rate converter"));
+                       }
 
+                       if (frames == 0) {
+                               break;
+                       }
+
+                       out->set_frames (frames);
+                       _writer->write (out);
+               }
+
+       }
+}
+#endif
+
+void
+AudioDecoder::audio (shared_ptr<const AudioBuffers> data, AudioContent::Frame frame)
+{
+       Audio (data, frame);
+       _audio_position = frame + data->frames ();
 }