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
14namespace media {
15
16class AudioCodecBridge;
17class AudioTimestampHelper;
18
19// Class for managing audio decoding jobs.
20class 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
33  // Sets the volume of the audio output.
34  void SetVolume(double volume);
35
36  // Sets the base timestamp for |audio_timestamp_helper_|.
37  void SetBaseTimestamp(base::TimeDelta base_timestamp);
38
39 private:
40  // MediaDecoderJob implementation.
41  virtual void ReleaseOutputBuffer(
42      int output_buffer_index,
43      size_t size,
44      bool render_output,
45      base::TimeDelta current_presentation_timestamp,
46      const ReleaseOutputCompletionCallback& callback) OVERRIDE;
47  virtual bool ComputeTimeToRender() const OVERRIDE;
48  virtual bool AreDemuxerConfigsChanged(
49      const DemuxerConfigs& configs) const OVERRIDE;
50  virtual void UpdateDemuxerConfigs(const DemuxerConfigs& configs) 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