Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / media / base / audio_decoder.h
index aa2eeb8..44e79a4 100644 (file)
@@ -5,11 +5,15 @@
 #ifndef MEDIA_BASE_AUDIO_DECODER_H_
 #define MEDIA_BASE_AUDIO_DECODER_H_
 
+#include <string>
+
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
+#include "media/base/audio_decoder_config.h"
 #include "media/base/channel_layout.h"
-#include "media/base/pipeline_status.h"
+#include "media/base/decoder_buffer.h"
 #include "media/base/media_export.h"
+#include "media/base/pipeline_status.h"
 
 namespace media {
 
@@ -18,44 +22,61 @@ class DemuxerStream;
 
 class MEDIA_EXPORT AudioDecoder {
  public:
-  // Status codes for read operations.
+  // Status codes for decode operations.
+  // TODO(rileya): Now that both AudioDecoder and VideoDecoder Status enums
+  // match, break them into a decoder_status.h.
   enum Status {
-    kOk,
-    kAborted,
-    kDecodeError,
+    kOk,  // We're all good.
+    kAborted,  // We aborted as a result of Reset() or destruction.
+    kDecodeError,  // A decoding error occurred.
+    kDecryptError  // Decrypting error happened.
   };
 
+  // Callback for AudioDecoder to return a decoded frame whenever it becomes
+  // available. Only non-EOS frames should be returned via this callback.
+  typedef base::Callback<void(const scoped_refptr<AudioBuffer>&)> OutputCB;
+
+  // Callback for Decode(). Called after the decoder has completed decoding
+  // corresponding DecoderBuffer, indicating that it's ready to accept another
+  // buffer to decode.
+  typedef base::Callback<void(Status)> DecodeCB;
+
   AudioDecoder();
+
+  // Fires any pending callbacks, stops and destroys the decoder.
+  // Note: Since this is a destructor, |this| will be destroyed after this call.
+  // Make sure the callbacks fired from this call doesn't post any task that
+  // depends on |this|.
   virtual ~AudioDecoder();
 
-  // Initialize an AudioDecoder with the given DemuxerStream, executing the
+  // Returns the name of the decoder for logging purpose.
+  virtual std::string GetDisplayName() const = 0;
+
+  // Initializes an AudioDecoder with the given DemuxerStream, executing the
   // callback upon completion.
-  // statistics_cb is used to update global pipeline statistics.
-  virtual void Initialize(DemuxerStream* stream,
+  //  |statistics_cb| is used to update global pipeline statistics.
+  //  |output_cb| is called for decoded audio buffers (see Decode()).
+  virtual void Initialize(const AudioDecoderConfig& config,
                           const PipelineStatusCB& status_cb,
-                          const StatisticsCB& statistics_cb) = 0;
+                          const OutputCB& output_cb) = 0;
 
-  // Request samples to be decoded and returned via the provided callback.
-  // Only one read may be in flight at any given time.
+  // Requests samples to be decoded. Only one decode may be in flight at any
+  // given time. Once the buffer is decoded the decoder calls |decode_cb|.
+  // |output_cb| specified in Initialize() is called for each decoded buffer,
+  // before or after |decode_cb|.
   //
-  // Implementations guarantee that the callback will not be called from within
+  // Implementations guarantee that the callbacks will not be called from within
   // this method.
   //
-  // Non-NULL sample buffer pointers will contain decoded audio data or may
-  // indicate the end of the stream. A NULL buffer pointer indicates an aborted
-  // Read(). This can happen if the DemuxerStream gets flushed and doesn't have
-  // any more data to return.
-  typedef base::Callback<void(Status, const scoped_refptr<AudioBuffer>&)>
-      ReadCB;
-  virtual void Read(const ReadCB& read_cb) = 0;
-
-  // Reset decoder state, dropping any queued encoded data.
-  virtual void Reset(const base::Closure& closure) = 0;
+  // If |buffer| is an EOS buffer then the decoder must be flushed, i.e.
+  // |output_cb| must be called for each frame pending in the queue and
+  // |decode_cb| must be called after that.
+  virtual void Decode(const scoped_refptr<DecoderBuffer>& buffer,
+                      const DecodeCB& decode_cb) = 0;
 
-  // Returns various information about the decoded audio format.
-  virtual int bits_per_channel() = 0;
-  virtual ChannelLayout channel_layout() = 0;
-  virtual int samples_per_second() = 0;
+  // Resets decoder state. All pending Decode() requests will be finished or
+  // aborted before |closure| is called.
+  virtual void Reset(const base::Closure& closure) = 0;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(AudioDecoder);