Chromium Code Reviews| Index: media/filters/decrypting_audio_decoder.h |
| diff --git a/media/filters/decrypting_video_decoder.h b/media/filters/decrypting_audio_decoder.h |
| similarity index 75% |
| copy from media/filters/decrypting_video_decoder.h |
| copy to media/filters/decrypting_audio_decoder.h |
| index 900b0bb3db9e8a1c74b620bea286329df2d5fc85..769b3cb73c290dd9312169876f03f98f61426658 100644 |
| --- a/media/filters/decrypting_video_decoder.h |
| +++ b/media/filters/decrypting_audio_decoder.h |
| @@ -2,14 +2,14 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#ifndef MEDIA_FILTERS_DECRYPTING_VIDEO_DECODER_H_ |
| -#define MEDIA_FILTERS_DECRYPTING_VIDEO_DECODER_H_ |
| +#ifndef MEDIA_FILTERS_DECRYPTING_AUDIO_DECODER_H_ |
| +#define MEDIA_FILTERS_DECRYPTING_AUDIO_DECODER_H_ |
| #include "base/callback.h" |
| #include "base/memory/ref_counted.h" |
| +#include "media/base/audio_decoder.h" |
| #include "media/base/decryptor.h" |
| #include "media/base/demuxer_stream.h" |
| -#include "media/base/video_decoder.h" |
| namespace base { |
| class MessageLoopProxy; |
| @@ -20,16 +20,16 @@ namespace media { |
| class DecoderBuffer; |
| class Decryptor; |
| -// Decryptor-based VideoDecoder implementation that can decrypt and decode |
| -// encrypted video buffers and return decrypted and decompressed video frames. |
| +// Decryptor-based AudioDecoder implementation that can decrypt and decode |
| +// encrypted audio buffers and return decrypted and decompressed audio frames. |
| // All public APIs and callbacks are trampolined to the |message_loop_| so |
| // that no locks are required for thread safety. |
| // |
| -// TODO(xhwang): For now, DecryptingVideoDecoder relies on the decryptor to do |
| -// both decryption and video decoding. Add the path to use the decryptor for |
| -// decryption only and use other VideoDecoder implementations within |
| -// DecryptingVideoDecoder for video decoding. |
| -class MEDIA_EXPORT DecryptingVideoDecoder : public VideoDecoder { |
| +// TODO(xhwang): For now, DecryptingAudioDecoder relies on the decryptor to do |
| +// both decryption and audio decoding. Add the path to use the decryptor for |
| +// decryption only and use other AudioDecoder implementations within |
| +// DecryptingAudioDecoder for audio decoding. |
| +class MEDIA_EXPORT DecryptingAudioDecoder : public AudioDecoder { |
| public: |
| // Callback to get a message loop. |
| typedef base::Callback< |
| @@ -46,25 +46,28 @@ class MEDIA_EXPORT DecryptingVideoDecoder : public VideoDecoder { |
| typedef base::Callback<void(const DecryptorNotificationCB&)> |
| RequestDecryptorNotificationCB; |
| - DecryptingVideoDecoder( |
| + DecryptingAudioDecoder( |
| const MessageLoopFactoryCB& message_loop_factory_cb, |
| const RequestDecryptorNotificationCB& request_decryptor_notification_cb); |
| - // VideoDecoder implementation. |
| + // AudioDecoder implementation. |
| virtual void Initialize(const scoped_refptr<DemuxerStream>& stream, |
| const PipelineStatusCB& status_cb, |
| const StatisticsCB& statistics_cb) OVERRIDE; |
| virtual void Read(const ReadCB& read_cb) OVERRIDE; |
| virtual void Reset(const base::Closure& closure) OVERRIDE; |
| - virtual void Stop(const base::Closure& closure) OVERRIDE; |
| + virtual int bits_per_channel() OVERRIDE; |
| + virtual ChannelLayout channel_layout() OVERRIDE; |
| + virtual int samples_per_second() OVERRIDE; |
| protected: |
| - virtual ~DecryptingVideoDecoder(); |
| + virtual ~DecryptingAudioDecoder(); |
| private: |
| // For a detailed state diagram please see this link: http://goo.gl/8jAok |
| // TODO(xhwang): Add a ASCII state diagram in this file after this class |
| // stabilizes. |
| + // TODO(xhwang): Update this diagram for DecryptingAudioDecoder. |
| enum DecoderState { |
| kUninitialized = 0, |
| kDecryptorRequested, |
| @@ -74,7 +77,6 @@ class MEDIA_EXPORT DecryptingVideoDecoder : public VideoDecoder { |
| kPendingDecode, |
| kWaitingForKey, |
| kDecodeFinished, |
| - kStopped |
| }; |
| // Carries out the initialization operation scheduled by Initialize(). |
| @@ -85,7 +87,7 @@ class MEDIA_EXPORT DecryptingVideoDecoder : public VideoDecoder { |
| // Callback for DecryptorHost::RequestDecryptor(). |
| void SetDecryptor(Decryptor* decryptor); |
| - // Callback for Decryptor::InitializeVideoDecoder(). |
| + // Callback for Decryptor::InitializeAudioDecoder(). |
| void FinishInitialization(bool success); |
| // Carries out the buffer reading operation scheduled by Read(). |
| @@ -104,32 +106,29 @@ class MEDIA_EXPORT DecryptingVideoDecoder : public VideoDecoder { |
| void DecodePendingBuffer(); |
| - // Callback for Decryptor::DecryptAndDecodeVideo(). |
| + // Callback for Decryptor::DecryptAndDecodeAudio(). |
| void DeliverFrame(int buffer_size, |
| Decryptor::Status status, |
| - const scoped_refptr<VideoFrame>& frame); |
| + const Decryptor::AudioBuffers& frames); |
| // Carries out the frame delivery operation scheduled by DeliverFrame(). |
| void DoDeliverFrame(int buffer_size, |
| Decryptor::Status status, |
| - const scoped_refptr<VideoFrame>& frame); |
| + const Decryptor::AudioBuffers& frames); |
| - // Callback for the |decryptor_| to notify the DecryptingVideoDecoder that |
| + // Callback for the |decryptor_| to notify the DecryptingAudioDecoder that |
| // a new key has been added. |
| void OnKeyAdded(); |
| // Reset decoder and call |reset_cb_|. |
| void DoReset(); |
| - // Free decoder resources and call |stop_cb_|. |
| - void DoStop(); |
| - |
| // This is !is_null() iff Initialize() hasn't been called. |
| MessageLoopFactoryCB message_loop_factory_cb_; |
| scoped_refptr<base::MessageLoopProxy> message_loop_; |
| - // Current state of the DecryptingVideoDecoder. |
| + // Current state of the DecryptingAudioDecoder. |
| DecoderState state_; |
| PipelineStatusCB init_cb_; |
| @@ -155,9 +154,16 @@ class MEDIA_EXPORT DecryptingVideoDecoder : public VideoDecoder { |
| // decryption key. |
| bool key_added_while_pending_decode_; |
| - DISALLOW_COPY_AND_ASSIGN(DecryptingVideoDecoder); |
| + Decryptor::AudioBuffers queued_audio_frames_; |
|
scherkus (not reviewing)
2012/10/19 02:12:58
sorry just for noticing this... why are we queuing
xhwang
2012/10/19 02:19:45
This is the same as "queued_audio_" in FFAD. We ma
|
| + |
| + // Decoded audio format. |
| + int bits_per_channel_; |
| + ChannelLayout channel_layout_; |
| + int samples_per_second_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DecryptingAudioDecoder); |
| }; |
| } // namespace media |
| -#endif // MEDIA_FILTERS_DECRYPTING_VIDEO_DECODER_H_ |
| +#endif // MEDIA_FILTERS_DECRYPTING_AUDIO_DECODER_H_ |