summaryrefslogtreecommitdiffstats
path: root/media/base
diff options
context:
space:
mode:
Diffstat (limited to 'media/base')
-rw-r--r--media/base/audio_bus_perftest.cc2
-rw-r--r--media/base/audio_converter_unittest.cc2
-rw-r--r--media/base/audio_hash_unittest.cc2
-rw-r--r--media/base/audio_renderer_mixer.cc3
-rw-r--r--media/base/audio_renderer_mixer.h4
-rw-r--r--media/base/audio_renderer_mixer_input.cc2
-rw-r--r--media/base/audio_renderer_mixer_unittest.cc8
-rw-r--r--media/base/audio_renderer_sink.h7
-rw-r--r--media/base/fake_audio_render_callback.cc5
-rw-r--r--media/base/fake_audio_render_callback.h4
-rw-r--r--media/base/fake_audio_renderer_sink.cc5
-rw-r--r--media/base/fake_audio_renderer_sink.h3
12 files changed, 29 insertions, 18 deletions
diff --git a/media/base/audio_bus_perftest.cc b/media/base/audio_bus_perftest.cc
index 71e8132..c126d99 100644
--- a/media/base/audio_bus_perftest.cc
+++ b/media/base/audio_bus_perftest.cc
@@ -43,7 +43,7 @@ void RunInterleaveBench(AudioBus* bus, const std::string& trace_name) {
TEST(AudioBusPerfTest, Interleave) {
scoped_ptr<AudioBus> bus = AudioBus::Create(2, 48000 * 120);
FakeAudioRenderCallback callback(0.2);
- callback.Render(bus.get(), 0);
+ callback.Render(bus.get(), 0, 0);
RunInterleaveBench<int8>(bus.get(), "int8");
RunInterleaveBench<int16>(bus.get(), "int16");
diff --git a/media/base/audio_converter_unittest.cc b/media/base/audio_converter_unittest.cc
index 741027f..d427923 100644
--- a/media/base/audio_converter_unittest.cc
+++ b/media/base/audio_converter_unittest.cc
@@ -111,7 +111,7 @@ class AudioConverterTest
converter_->Convert(audio_bus_.get());
// Render expected audio data.
- expected_callback_->Render(expected_audio_bus_.get(), 0);
+ expected_callback_->Render(expected_audio_bus_.get(), 0, 0);
// Zero out unused channels in the expected AudioBus just as AudioConverter
// would during channel mixing.
diff --git a/media/base/audio_hash_unittest.cc b/media/base/audio_hash_unittest.cc
index 1adf5bc..742deed 100644
--- a/media/base/audio_hash_unittest.cc
+++ b/media/base/audio_hash_unittest.cc
@@ -34,7 +34,7 @@ class AudioHashTest : public testing::Test {
// audio data, we need to fill each channel manually.
for (int ch = 0; ch < audio_bus->channels(); ++ch) {
wrapped_bus->SetChannelData(0, audio_bus->channel(ch));
- fake_callback_.Render(wrapped_bus.get(), 0);
+ fake_callback_.Render(wrapped_bus.get(), 0, 0);
}
}
diff --git a/media/base/audio_renderer_mixer.cc b/media/base/audio_renderer_mixer.cc
index 26171f9..218bb9e 100644
--- a/media/base/audio_renderer_mixer.cc
+++ b/media/base/audio_renderer_mixer.cc
@@ -117,7 +117,8 @@ OutputDevice* AudioRendererMixer::GetOutputDevice() {
}
int AudioRendererMixer::Render(AudioBus* audio_bus,
- int audio_delay_milliseconds) {
+ uint32_t audio_delay_milliseconds,
+ uint32_t frames_skipped) {
base::AutoLock auto_lock(lock_);
// If there are no mixer inputs and we haven't seen one for a while, pause the
diff --git a/media/base/audio_renderer_mixer.h b/media/base/audio_renderer_mixer.h
index e8a0f8d..80e9d9b 100644
--- a/media/base/audio_renderer_mixer.h
+++ b/media/base/audio_renderer_mixer.h
@@ -54,7 +54,9 @@ class MEDIA_EXPORT AudioRendererMixer
typedef std::map<int, scoped_ptr<LoopbackAudioConverter>> AudioConvertersMap;
// AudioRendererSink::RenderCallback implementation.
- int Render(AudioBus* audio_bus, int audio_delay_milliseconds) override;
+ int Render(AudioBus* audio_bus,
+ uint32_t audio_delay_milliseconds,
+ uint32_t frames_skipped) override;
void OnRenderError() override;
bool is_master_sample_rate(int sample_rate) {
diff --git a/media/base/audio_renderer_mixer_input.cc b/media/base/audio_renderer_mixer_input.cc
index 539cdf3..d0d38d3 100644
--- a/media/base/audio_renderer_mixer_input.cc
+++ b/media/base/audio_renderer_mixer_input.cc
@@ -166,7 +166,7 @@ OutputDeviceStatus AudioRendererMixerInput::GetDeviceStatus() {
double AudioRendererMixerInput::ProvideInput(AudioBus* audio_bus,
base::TimeDelta buffer_delay) {
int frames_filled = callback_->Render(
- audio_bus, static_cast<int>(buffer_delay.InMillisecondsF() + 0.5));
+ audio_bus, static_cast<int>(buffer_delay.InMillisecondsF() + 0.5), 0);
// AudioConverter expects unfilled frames to be zeroed.
if (frames_filled < audio_bus->frames()) {
diff --git a/media/base/audio_renderer_mixer_unittest.cc b/media/base/audio_renderer_mixer_unittest.cc
index bae2ebb..8f45c2b 100644
--- a/media/base/audio_renderer_mixer_unittest.cc
+++ b/media/base/audio_renderer_mixer_unittest.cc
@@ -156,12 +156,12 @@ class AudioRendererMixerTest
}
// Render actual audio data.
- int frames = mixer_callback_->Render(audio_bus_.get(), 0);
+ int frames = mixer_callback_->Render(audio_bus_.get(), 0, 0);
if (frames != audio_bus_->frames())
return false;
// Render expected audio data (without scaling).
- expected_callback_->Render(expected_audio_bus_.get(), 0);
+ expected_callback_->Render(expected_audio_bus_.get(), 0, 0);
if (half_fill_) {
// In this case, just verify that every frame was initialized, this will
@@ -486,7 +486,7 @@ TEST_P(AudioRendererMixerBehavioralTest, MixerPausesStream) {
const base::TimeDelta kSleepTime = base::TimeDelta::FromMilliseconds(100);
base::TimeTicks start_time = base::TimeTicks::Now();
while (!pause_event.IsSignaled()) {
- mixer_callback_->Render(audio_bus_.get(), 0);
+ mixer_callback_->Render(audio_bus_.get(), 0, 0);
base::PlatformThread::Sleep(kSleepTime);
ASSERT_TRUE(base::TimeTicks::Now() - start_time < kTestTimeout);
}
@@ -501,7 +501,7 @@ TEST_P(AudioRendererMixerBehavioralTest, MixerPausesStream) {
// Ensure once the input is paused the sink eventually pauses.
start_time = base::TimeTicks::Now();
while (!pause_event.IsSignaled()) {
- mixer_callback_->Render(audio_bus_.get(), 0);
+ mixer_callback_->Render(audio_bus_.get(), 0, 0);
base::PlatformThread::Sleep(kSleepTime);
ASSERT_TRUE(base::TimeTicks::Now() - start_time < kTestTimeout);
}
diff --git a/media/base/audio_renderer_sink.h b/media/base/audio_renderer_sink.h
index 30cbfef..b45c0fc 100644
--- a/media/base/audio_renderer_sink.h
+++ b/media/base/audio_renderer_sink.h
@@ -35,8 +35,11 @@ class AudioRendererSink
class RenderCallback {
public:
// Attempts to completely fill all channels of |dest|, returns actual
- // number of frames filled.
- virtual int Render(AudioBus* dest, int audio_delay_milliseconds) = 0;
+ // number of frames filled. |frames_skipped| contains the number of frames
+ // the consumer has skipped, if any.
+ virtual int Render(AudioBus* dest,
+ uint32_t audio_delay_milliseconds,
+ uint32_t frames_skipped) = 0;
// Signals an error has occurred.
virtual void OnRenderError() = 0;
diff --git a/media/base/fake_audio_render_callback.cc b/media/base/fake_audio_render_callback.cc
index 73d606e..8d7ef20 100644
--- a/media/base/fake_audio_render_callback.cc
+++ b/media/base/fake_audio_render_callback.cc
@@ -23,7 +23,8 @@ FakeAudioRenderCallback::FakeAudioRenderCallback(double step)
FakeAudioRenderCallback::~FakeAudioRenderCallback() {}
int FakeAudioRenderCallback::Render(AudioBus* audio_bus,
- int audio_delay_milliseconds) {
+ uint32_t audio_delay_milliseconds,
+ uint32_t frames_skipped) {
last_audio_delay_milliseconds_ = audio_delay_milliseconds;
last_channel_count_ = audio_bus->channels();
@@ -46,7 +47,7 @@ int FakeAudioRenderCallback::Render(AudioBus* audio_bus,
double FakeAudioRenderCallback::ProvideInput(AudioBus* audio_bus,
base::TimeDelta buffer_delay) {
- Render(audio_bus, buffer_delay.InMillisecondsF() + 0.5);
+ Render(audio_bus, buffer_delay.InMillisecondsF() + 0.5, 0);
return volume_;
}
diff --git a/media/base/fake_audio_render_callback.h b/media/base/fake_audio_render_callback.h
index 65d7df2..49d64ba 100644
--- a/media/base/fake_audio_render_callback.h
+++ b/media/base/fake_audio_render_callback.h
@@ -26,7 +26,9 @@ class FakeAudioRenderCallback
// Renders a sine wave into the provided audio data buffer. If |half_fill_|
// is set, will only fill half the buffer.
- int Render(AudioBus* audio_bus, int audio_delay_milliseconds) override;
+ int Render(AudioBus* audio_bus,
+ uint32_t audio_delay_milliseconds,
+ uint32_t frames_skipped) override;
MOCK_METHOD0(OnRenderError, void());
// AudioTransform::ProvideAudioTransformInput implementation.
diff --git a/media/base/fake_audio_renderer_sink.cc b/media/base/fake_audio_renderer_sink.cc
index d8a7262..5ce6074 100644
--- a/media/base/fake_audio_renderer_sink.cc
+++ b/media/base/fake_audio_renderer_sink.cc
@@ -60,12 +60,13 @@ OutputDevice* FakeAudioRendererSink::GetOutputDevice() {
return output_device_.get();
}
-bool FakeAudioRendererSink::Render(AudioBus* dest, int audio_delay_milliseconds,
+bool FakeAudioRendererSink::Render(AudioBus* dest,
+ uint32_t audio_delay_milliseconds,
int* frames_written) {
if (state_ != kPlaying)
return false;
- *frames_written = callback_->Render(dest, audio_delay_milliseconds);
+ *frames_written = callback_->Render(dest, audio_delay_milliseconds, 0);
return true;
}
diff --git a/media/base/fake_audio_renderer_sink.h b/media/base/fake_audio_renderer_sink.h
index 0a9bd93..765257d 100644
--- a/media/base/fake_audio_renderer_sink.h
+++ b/media/base/fake_audio_renderer_sink.h
@@ -43,7 +43,8 @@ class FakeAudioRendererSink : public AudioRendererSink {
// Returns false if this object is in a state where calling Render()
// should not occur. (i.e., in the kPaused or kStopped state.) The
// value of |frames_written| is undefined if false is returned.
- bool Render(AudioBus* dest, int audio_delay_milliseconds,
+ bool Render(AudioBus* dest,
+ uint32_t audio_delay_milliseconds,
int* frames_written);
void OnRenderError();