blob: 715309e7d38c4d8c00f7c171bf98bbb14407ceed [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/logging.h"
#include "content/renderer/media/webrtc/webrtc_audio_sink_adapter.h"
#include "media/base/audio_bus.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
namespace content {
WebRtcAudioSinkAdapter::WebRtcAudioSinkAdapter(
webrtc::AudioTrackSinkInterface* sink)
: sink_(sink) {
DCHECK(sink);
}
WebRtcAudioSinkAdapter::~WebRtcAudioSinkAdapter() {
}
bool WebRtcAudioSinkAdapter::IsEqual(
const webrtc::AudioTrackSinkInterface* other) const {
return (other == sink_);
}
void WebRtcAudioSinkAdapter::OnData(const media::AudioBus& audio_bus,
base::TimeTicks estimated_capture_time) {
DCHECK_EQ(audio_bus.frames(), params_.frames_per_buffer());
DCHECK_EQ(audio_bus.channels(), params_.channels());
// TODO(henrika): Remove this conversion once the interface in libjingle
// supports float vectors.
audio_bus.ToInterleaved(audio_bus.frames(),
sizeof(interleaved_data_[0]),
interleaved_data_.get());
sink_->OnData(interleaved_data_.get(),
16,
params_.sample_rate(),
audio_bus.channels(),
audio_bus.frames());
}
void WebRtcAudioSinkAdapter::OnSetFormat(
const media::AudioParameters& params) {
DCHECK(params.IsValid());
params_ = params;
const int num_pcm16_data_elements =
params_.frames_per_buffer() * params_.channels();
interleaved_data_.reset(new int16_t[num_pcm16_data_elements]);
}
} // namespace content