X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsndfile_decoder.cc;h=e10f4f568430d08dd86d1d5db38d2116606fbbbb;hb=2d5b8cdde08044d323aa7193dfac6c9f8bca7131;hp=f114979de71faae98b8079877b5aafc6244d1e4b;hpb=237a0052c60af768f4d62b00321932918b7ba4d9;p=dcpomatic.git diff --git a/src/lib/sndfile_decoder.cc b/src/lib/sndfile_decoder.cc index f114979de..e10f4f568 100644 --- a/src/lib/sndfile_decoder.cc +++ b/src/lib/sndfile_decoder.cc @@ -39,7 +39,8 @@ SndfileDecoder::SndfileDecoder (shared_ptr f, shared_ptrfile().string().c_str(), SFM_READ, &_info); + _info.format = 0; + _sndfile = sf_open (_sndfile_content->path(0).string().c_str(), SFM_READ, &_info); if (!_sndfile) { throw DecodeError (_("could not open audio file for reading")); } @@ -54,7 +55,7 @@ SndfileDecoder::~SndfileDecoder () delete[] _deinterleave_buffer; } -bool +void SndfileDecoder::pass () { /* Do things in half second blocks as I think there may be limits @@ -65,11 +66,11 @@ SndfileDecoder::pass () int const channels = _sndfile_content->audio_channels (); - shared_ptr audio (new AudioBuffers (channels, this_time)); + shared_ptr data (new AudioBuffers (channels, this_time)); if (_sndfile_content->audio_channels() == 1) { /* No de-interleaving required */ - sf_read_float (_sndfile, audio->data(0), this_time); + sf_read_float (_sndfile, data->data(0), this_time); } else { /* Deinterleave */ if (!_deinterleave_buffer) { @@ -78,7 +79,7 @@ SndfileDecoder::pass () sf_readf_float (_sndfile, _deinterleave_buffer, this_time); vector out_ptr (channels); for (int i = 0; i < channels; ++i) { - out_ptr[i] = audio->data(i); + out_ptr[i] = data->data(i); } float* in_ptr = _deinterleave_buffer; for (int i = 0; i < this_time; ++i) { @@ -88,12 +89,10 @@ SndfileDecoder::pass () } } - audio->set_frames (this_time); - Audio (audio, double(_done) / audio_frame_rate()); + data->set_frames (this_time); + audio (data, _done); _done += this_time; _remaining -= this_time; - - return (_remaining == 0); } int @@ -102,7 +101,7 @@ SndfileDecoder::audio_channels () const return _info.channels; } -ContentAudioFrame +AudioContent::Frame SndfileDecoder::audio_length () const { return _info.frames; @@ -113,3 +112,9 @@ SndfileDecoder::audio_frame_rate () const { return _info.samplerate; } + +bool +SndfileDecoder::done () const +{ + return _audio_position >= _sndfile_content->audio_length (); +}