summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
Diffstat (limited to 'media')
-rw-r--r--media/audio/audio_output.h14
-rw-r--r--media/audio/mac/audio_output_mac.cc8
-rw-r--r--media/audio/mac/audio_output_mac.h11
-rw-r--r--media/audio/win/audio_output_win.cc4
-rw-r--r--media/audio/win/waveout_output_win.cc4
-rw-r--r--media/audio/win/waveout_output_win.h1
6 files changed, 34 insertions, 8 deletions
diff --git a/media/audio/audio_output.h b/media/audio/audio_output.h
index 0cfca08..289b2af 100644
--- a/media/audio/audio_output.h
+++ b/media/audio/audio_output.h
@@ -42,8 +42,11 @@
class AudioOutputStream {
public:
enum State {
- STATE_STARTED = 0, // The output stream is started.
+ STATE_CREATED = 0, // The output stream is created.
+ STATE_STARTED, // The output stream is started.
STATE_PAUSED, // The output stream is paused.
+ STATE_STOPPED, // The output stream is stopped.
+ STATE_CLOSED, // The output stream is closed.
STATE_ERROR, // The output stream is in error state.
};
@@ -82,6 +85,10 @@ class AudioOutputStream {
virtual bool Open(size_t packet_size) = 0;
// Starts playing audio and generating AudioSourceCallback::OnMoreData().
+ // Since implementor of AudioOutputStream may have internal buffers, right
+ // after calling this method initial buffers are fetched. User of this
+ // object should prepare |AudioOutputStream::GetNumBuffers()| before calling
+ // AudioOutputStream::Start().
virtual void Start(AudioSourceCallback* callback) = 0;
// Stops playing audio. Effect might no be instantaneous as the hardware
@@ -100,6 +107,11 @@ class AudioOutputStream {
// After calling this method, the object should not be used anymore.
virtual void Close() = 0;
+ // Gets the number of internal buffers used in this output stream. This
+ // method is useful for providing information about how user of this object
+ // should prepare initial buffers before calling AudioOutputStream::Start().
+ virtual size_t GetNumBuffers() = 0;
+
protected:
virtual ~AudioOutputStream() {}
};
diff --git a/media/audio/mac/audio_output_mac.cc b/media/audio/mac/audio_output_mac.cc
index 3866a56..da6772f 100644
--- a/media/audio/mac/audio_output_mac.cc
+++ b/media/audio/mac/audio_output_mac.cc
@@ -9,7 +9,7 @@
PCMQueueOutAudioOutputStream::PCMQueueOutAudioOutputStream(
AudioManagerMac* manager, int channels, int sampling_rate,
- char bits_per_sample)
+ char bits_per_sample)
: format_(),
audio_queue_(NULL),
buffer_(),
@@ -91,7 +91,7 @@ void PCMQueueOutAudioOutputStream::Close() {
}
void PCMQueueOutAudioOutputStream::Stop() {
- // TODO(cpu): Implement.
+ // TODO(cpu): Implement.
}
void PCMQueueOutAudioOutputStream::SetVolume(double left_level,
@@ -104,6 +104,10 @@ void PCMQueueOutAudioOutputStream::GetVolume(double* left_level,
// TODO(cpu): Implement.
}
+size_t PCMQueueOutAudioOutputStream::GetNumBuffers() {
+ return kNumBuffers;
+}
+
void PCMQueueOutAudioOutputStream::RenderCallback(void* p_this,
AudioQueueRef queue,
AudioQueueBufferRef buffer) {
diff --git a/media/audio/mac/audio_output_mac.h b/media/audio/mac/audio_output_mac.h
index eb3c091..d1129b3 100644
--- a/media/audio/mac/audio_output_mac.h
+++ b/media/audio/mac/audio_output_mac.h
@@ -25,9 +25,9 @@ class PCMQueueOutAudioOutputStream : public AudioOutputStream {
int channels, int sampling_rate,
char bits_per_sample);
// The dtor is typically called by the AudioManager only and it is usually
- // triggered by calling AudioOutputStream::Close().
+ // triggered by calling AudioOutputStream::Close().
virtual ~PCMQueueOutAudioOutputStream();
-
+
// Implementation of AudioOutputStream.
virtual bool Open(size_t packet_size);
virtual void Close();
@@ -35,11 +35,12 @@ class PCMQueueOutAudioOutputStream : public AudioOutputStream {
virtual void Stop();
virtual void SetVolume(double left_level, double right_level);
virtual void GetVolume(double* left_level, double* right_level);
-
+ virtual size_t GetNumBuffers();
+
private:
// The audio is double buffered.
static const size_t kNumBuffers = 2;
-
+
// The OS calls back here when an audio buffer has been processed.
static void RenderCallback(void* p_this, AudioQueueRef queue,
AudioQueueBufferRef buffer);
@@ -56,7 +57,7 @@ class PCMQueueOutAudioOutputStream : public AudioOutputStream {
AudioSourceCallback* source_;
// Our creator, the audio manager needs to be notified when we close.
AudioManagerMac* manager_;
-
+
DISALLOW_COPY_AND_ASSIGN(PCMQueueOutAudioOutputStream);
};
diff --git a/media/audio/win/audio_output_win.cc b/media/audio/win/audio_output_win.cc
index 880555b..5990e27 100644
--- a/media/audio/win/audio_output_win.cc
+++ b/media/audio/win/audio_output_win.cc
@@ -61,6 +61,10 @@ class AudioOutputStreamMockWin : public AudioOutputStream {
*right_level = right_volume_;
}
+ virtual size_t GetNumBuffers() {
+ return 1;
+ }
+
virtual void Close() {
callback_->OnClose(this);
callback_ = NULL;
diff --git a/media/audio/win/waveout_output_win.cc b/media/audio/win/waveout_output_win.cc
index 95f70ab..59efa4e 100644
--- a/media/audio/win/waveout_output_win.cc
+++ b/media/audio/win/waveout_output_win.cc
@@ -193,6 +193,10 @@ void PCMWaveOutAudioOutputStream::GetVolume(double* left_level,
return;
}
+size_t PCMWaveOutAudioOutputStream::GetNumBuffers() {
+ return kNumBuffers;
+}
+
void PCMWaveOutAudioOutputStream::HandleError(MMRESULT error) {
DLOG(WARNING) << "PCMWaveOutAudio error " << error;
callback_->OnError(this, error);
diff --git a/media/audio/win/waveout_output_win.h b/media/audio/win/waveout_output_win.h
index 1c8ffa6..8b90e69 100644
--- a/media/audio/win/waveout_output_win.h
+++ b/media/audio/win/waveout_output_win.h
@@ -40,6 +40,7 @@ class PCMWaveOutAudioOutputStream : public AudioOutputStream {
virtual void Stop();
virtual void SetVolume(double left_level, double right_level);
virtual void GetVolume(double* left_level, double* right_level);
+ virtual size_t GetNumBuffers();
// Sends a buffer to the audio driver for playback.
void QueueNextPacket(WAVEHDR* buffer);