blob: 4ad5342892177ab484eaced9998ac586f3506676 [file] [log] [blame]
// Copyright (c) 2013 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 "content/renderer/media/mock_media_stream_registry.h"
#include <string>
#include "base/strings/utf_string_conversions.h"
#include "content/renderer/media/media_stream.h"
#include "content/renderer/media/media_stream_audio_source.h"
#include "content/renderer/media/media_stream_video_track.h"
#include "content/renderer/media/mock_media_stream_video_source.h"
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/platform/WebVector.h"
namespace content {
namespace {
const char kTestStreamLabel[] = "stream_label";
class MockCDQualityAudioSource : public MediaStreamAudioSource {
public:
MockCDQualityAudioSource() : MediaStreamAudioSource(true) {
MediaStreamAudioSource::SetFormat(media::AudioParameters(
media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
media::CHANNEL_LAYOUT_STEREO,
media::AudioParameters::kAudioCDSampleRate,
16,
media::AudioParameters::kAudioCDSampleRate / 100));
MediaStreamAudioSource::SetDeviceInfo(StreamDeviceInfo(
MEDIA_DEVICE_AUDIO_CAPTURE, "Mock audio device", "mock_audio_device_id",
media::AudioParameters::kAudioCDSampleRate,
media::CHANNEL_LAYOUT_STEREO,
media::AudioParameters::kAudioCDSampleRate / 100));
}
private:
DISALLOW_COPY_AND_ASSIGN(MockCDQualityAudioSource);
};
} // namespace
MockMediaStreamRegistry::MockMediaStreamRegistry() {}
void MockMediaStreamRegistry::Init(const std::string& stream_url) {
stream_url_ = stream_url;
const blink::WebVector<blink::WebMediaStreamTrack> webkit_audio_tracks;
const blink::WebVector<blink::WebMediaStreamTrack> webkit_video_tracks;
const blink::WebString label(kTestStreamLabel);
test_stream_.initialize(label, webkit_audio_tracks, webkit_video_tracks);
test_stream_.setExtraData(new MediaStream());
}
void MockMediaStreamRegistry::AddVideoTrack(
const std::string& track_id,
const blink::WebMediaConstraints& constraints) {
blink::WebMediaStreamSource blink_source;
blink_source.initialize("mock video source id",
blink::WebMediaStreamSource::TypeVideo,
"mock video source name");
MockMediaStreamVideoSource* native_source =
new MockMediaStreamVideoSource(false /* manual get supported formats */);
blink_source.setExtraData(native_source);
blink::WebMediaStreamTrack blink_track;
blink_track.initialize(blink::WebString::fromUTF8(track_id), blink_source);
MediaStreamVideoTrack* native_track = new MediaStreamVideoTrack(
native_source, constraints, MediaStreamVideoSource::ConstraintsCallback(),
true /* enabled */);
blink_track.setTrackData(native_track);
test_stream_.addTrack(blink_track);
}
void MockMediaStreamRegistry::AddVideoTrack(const std::string& track_id) {
blink::WebMediaConstraints constraints;
constraints.initialize();
AddVideoTrack(track_id, constraints);
}
void MockMediaStreamRegistry::AddAudioTrack(const std::string& track_id) {
blink::WebMediaStreamSource blink_source;
blink_source.initialize("mock audio source id",
blink::WebMediaStreamSource::TypeAudio,
"mock audio source name");
MediaStreamAudioSource* const source = new MockCDQualityAudioSource();
blink_source.setExtraData(source); // Takes ownership.
blink::WebMediaStreamTrack blink_track;
blink_track.initialize(blink_source);
CHECK(source->ConnectToTrack(blink_track));
test_stream_.addTrack(blink_track);
}
blink::WebMediaStream MockMediaStreamRegistry::GetMediaStream(
const std::string& url) {
return (url != stream_url_) ? blink::WebMediaStream() : test_stream_;
}
} // namespace content