Chromium Code Reviews| Index: media/filters/audio_renderer_impl.h |
| diff --git a/media/filters/audio_renderer_impl.h b/media/filters/audio_renderer_impl.h |
| index 1d716be84d36f00dadfc811ff597309dc814df95..9158aa1426fcb22cd97dfbed04b4243e0c9ea768 100644 |
| --- a/media/filters/audio_renderer_impl.h |
| +++ b/media/filters/audio_renderer_impl.h |
| @@ -29,19 +29,23 @@ |
| #include "media/base/audio_renderer.h" |
| #include "media/base/audio_renderer_sink.h" |
| #include "media/base/buffers.h" |
| +#include "media/base/decryptor.h" |
| #include "media/filters/audio_renderer_algorithm.h" |
| namespace media { |
| +class AudioDecoderSelector; |
| class AudioSplicer; |
| +class DecryptingDemuxerStream; |
| class MEDIA_EXPORT AudioRendererImpl |
| : public AudioRenderer, |
| - NON_EXPORTED_BASE(public media::AudioRendererSink::RenderCallback) { |
| + NON_EXPORTED_BASE(public AudioRendererSink::RenderCallback) { |
| public: |
| // Methods called on Render thread ------------------------------------------ |
| // An AudioRendererSink is used as the destination for the rendered audio. |
| - explicit AudioRendererImpl(media::AudioRendererSink* sink); |
| + AudioRendererImpl(AudioRendererSink* sink, |
| + const SetDecryptorReadyCB& set_decryptor_ready_cb); |
|
scherkus (not reviewing)
2012/12/14 06:39:12
it's a bit unfortunate to have to pass this in onl
xhwang
2012/12/14 07:45:06
I actually like this idea ;)
scherkus (not reviewing)
2012/12/14 19:43:45
...actually I thought about this a bit more.
If w
|
| // Methods called on pipeline thread ---------------------------------------- |
| // AudioRenderer implementation. |
| @@ -138,20 +142,17 @@ class MEDIA_EXPORT AudioRendererImpl |
| // in the kPrerolling state. |
| bool IsBeforePrerollTime(const scoped_refptr<Buffer>& buffer); |
| - // Pops the front of |decoders|, assigns it to |decoder_| and then |
| - // calls initialize on the new decoder. |
| - void InitializeNextDecoder(const scoped_refptr<DemuxerStream>& demuxer_stream, |
| - scoped_ptr<AudioDecoderList> decoders); |
| + // Called when |decoder_selector_| selected the |selected_decoder|. |
| + // |decrypting_demuxer_stream| was also populated if a DecryptingDemuxerStream |
| + // created to help decrypt the encrypted stream. |
| + // Note: |decoder_selector| is passed here to keep the AudioDecoderSelector |
| + // alive until OnDecoderSelected() finishes. |
| + void OnDecoderSelected( |
| + scoped_ptr<AudioDecoderSelector> decoder_selector, |
| + const scoped_refptr<AudioDecoder>& selected_decoder, |
| + const scoped_refptr<DecryptingDemuxerStream>& decrypting_demuxer_stream); |
| - // Called when |decoder_| initialization completes. |
| - // |demuxer_stream| & |decoders| are used if initialization failed and |
| - // InitializeNextDecoder() needs to be called again. |
| - void OnDecoderInitDone(const scoped_refptr<DemuxerStream>& demuxer_stream, |
| - scoped_ptr<AudioDecoderList> decoders, |
| - PipelineStatus status); |
| - |
| - // Audio decoder. |
| - scoped_refptr<AudioDecoder> decoder_; |
| + void ResetDecoder(const base::Closure& callback); |
| scoped_ptr<AudioSplicer> splicer_; |
| @@ -161,6 +162,12 @@ class MEDIA_EXPORT AudioRendererImpl |
| // audio, pipeline, and decoder threads may deadlock. |
| scoped_refptr<media::AudioRendererSink> sink_; |
| + SetDecryptorReadyCB set_decryptor_ready_cb_; |
| + |
| + // These two will be set by AudioDecoderSelector::SelectAudioDecoder(). |
| + scoped_refptr<AudioDecoder> decoder_; |
| + scoped_refptr<DecryptingDemuxerStream> decrypting_demuxer_stream_; |
| + |
| // Ensures certain methods are always called on the pipeline thread. |
| base::ThreadChecker pipeline_thread_checker_; |