X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Faudio_decoder.cc;h=c0ef02f65d5ab5518dcb7e53aa145b1ff3f9a598;hb=07f3a8fccdf9127b2eaf4a6f3425185dba73a23f;hp=cf9e3ac51a7e12a516c9946e4551a6546d45db52;hpb=945460f71db55d8daa232df3d869cc604ae5a240;p=dcpomatic.git diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc index cf9e3ac51..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 frame) { - if (_resampler) { - data = _resampler->run (data); - } - - Audio (data, _audio_position); + 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; }