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