X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Faudio_decoder.cc;h=c0ef02f65d5ab5518dcb7e53aa145b1ff3f9a598;hb=cadf2d574d144098fffa3c61e0a2be88f496cac6;hp=846cdf59501a44e36fc37e98df48d884d6674945;hpb=f08f4598f243dff5a4139f09ad00e8c643d4f0e0;p=dcpomatic.git diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc index 846cdf595..c0ef02f65 100644 --- a/src/lib/audio_decoder.cc +++ b/src/lib/audio_decoder.cc @@ -34,34 +34,25 @@ using boost::shared_ptr; AudioDecoder::AudioDecoder (shared_ptr film, shared_ptr content) : Decoder (film) + , _audio_content (content) , _audio_position (0) { - if (content->content_audio_frame_rate() != content->output_audio_frame_rate() && content->audio_channels ()) { - _resampler.reset ( - new Resampler ( - content->content_audio_frame_rate(), - content->output_audio_frame_rate(), - content->audio_channels() - ) - ); - } + } void -AudioDecoder::audio (shared_ptr data, AudioContent::Frame) +AudioDecoder::audio (shared_ptr data, AudioContent::Frame frame) { - if (_resampler) { - data = _resampler->run (data); - } - - Audio (data, _audio_position); - _audio_position += data->frames (); + Audio (data, frame); + _audio_position = frame + data->frames (); } -void -AudioDecoder::flush () +/** This is a bit odd, but necessary when we have (e.g.) FFmpegDecoders with no audio. + * The player needs to know that there is no audio otherwise it will keep trying to + * pass() the decoder to get it to emit audio. + */ +bool +AudioDecoder::has_audio () const { - if (_resampler) { - _resampler->flush (); - } + return _audio_content->audio_channels () > 0; }