Home | History | Annotate | Download | only in android
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MEDIA_BASE_ANDROID_AUDIO_DECODER_JOB_H_
      6 #define MEDIA_BASE_ANDROID_AUDIO_DECODER_JOB_H_
      7 
      8 #include <jni.h>
      9 #include <vector>
     10 
     11 #include "base/callback.h"
     12 #include "media/base/android/media_decoder_job.h"
     13 
     14 namespace media {
     15 
     16 class AudioCodecBridge;
     17 class AudioTimestampHelper;
     18 
     19 // Class for managing audio decoding jobs.
     20 class AudioDecoderJob : public MediaDecoderJob {
     21  public:
     22   // Creates a new AudioDecoderJob instance for decoding audio.
     23   // |request_data_cb| - Callback used to request more data for the decoder.
     24   // |on_demuxer_config_changed_cb| - Callback used to inform the caller that
     25   // demuxer config has changed.
     26   AudioDecoderJob(const base::Closure& request_data_cb,
     27                   const base::Closure& on_demuxer_config_changed_cb);
     28   virtual ~AudioDecoderJob();
     29 
     30   // MediaDecoderJob implementation.
     31   virtual bool HasStream() const OVERRIDE;
     32   virtual void SetDemuxerConfigs(const DemuxerConfigs& configs) OVERRIDE;
     33 
     34   // Sets the volume of the audio output.
     35   void SetVolume(double volume);
     36 
     37   // Sets the base timestamp for |audio_timestamp_helper_|.
     38   void SetBaseTimestamp(base::TimeDelta base_timestamp);
     39 
     40  private:
     41   // MediaDecoderJob implementation.
     42   virtual void ReleaseOutputBuffer(
     43       int output_buffer_index,
     44       size_t size,
     45       bool render_output,
     46       base::TimeDelta current_presentation_timestamp,
     47       const ReleaseOutputCompletionCallback& callback) OVERRIDE;
     48   virtual bool ComputeTimeToRender() const OVERRIDE;
     49   virtual bool AreDemuxerConfigsChanged(
     50       const DemuxerConfigs& configs) const OVERRIDE;
     51   virtual bool CreateMediaCodecBridgeInternal() OVERRIDE;
     52 
     53   // Helper method to set the audio output volume.
     54   void SetVolumeInternal();
     55 
     56   // Audio configs from the demuxer.
     57   AudioCodec audio_codec_;
     58   int num_channels_;
     59   int sampling_rate_;
     60   std::vector<uint8> audio_extra_data_;
     61   double volume_;
     62   int bytes_per_frame_;
     63 
     64   // Base timestamp for the |audio_timestamp_helper_|.
     65   base::TimeDelta base_timestamp_;
     66 
     67   // Object to calculate the current audio timestamp for A/V sync.
     68   scoped_ptr<AudioTimestampHelper> audio_timestamp_helper_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(AudioDecoderJob);
     71 };
     72 
     73 }  // namespace media
     74 
     75 #endif  // MEDIA_BASE_ANDROID_AUDIO_DECODER_JOB_H_
     76