RealtimeMediaSourceCenterMac.cpp [plain text]
#include "config.h"
#if ENABLE(MEDIA_STREAM)
#include "RealtimeMediaSourceCenterMac.h"
#include "AVCaptureDeviceManager.h"
#include "MediaStreamCreationClient.h"
#include "MediaStreamPrivate.h"
#include "MediaStreamTrackSourcesRequestClient.h"
#include <wtf/MainThread.h>
namespace WebCore {
RealtimeMediaSourceCenter& RealtimeMediaSourceCenter::platformCenter()
{
ASSERT(isMainThread());
DEPRECATED_DEFINE_STATIC_LOCAL(RealtimeMediaSourceCenterMac, center, ());
return center;
}
RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac()
{
}
RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac()
{
}
void RealtimeMediaSourceCenterMac::validateRequestConstraints(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints)
{
RefPtr<MediaStreamCreationClient> client = prpQueryClient;
ASSERT(client);
if (audioConstraints) {
String invalidConstraint;
AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Audio, audioConstraints.get(), invalidConstraint);
if (!invalidConstraint.isEmpty()) {
client->constraintsInvalid(invalidConstraint);
return;
}
}
if (videoConstraints) {
String invalidConstraint;
AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Video, videoConstraints.get(), invalidConstraint);
if (!invalidConstraint.isEmpty()) {
client->constraintsInvalid(invalidConstraint);
return;
}
}
client->constraintsValidated();
}
void RealtimeMediaSourceCenterMac::createMediaStream(PassRefPtr<MediaStreamCreationClient> prpQueryClient, PassRefPtr<MediaConstraints> audioConstraints, PassRefPtr<MediaConstraints> videoConstraints)
{
RefPtr<MediaStreamCreationClient> client = prpQueryClient;
ASSERT(client);
Vector<RefPtr<RealtimeMediaSource>> audioSources;
Vector<RefPtr<RealtimeMediaSource>> videoSources;
if (audioConstraints) {
String invalidConstraint;
AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Audio, audioConstraints.get(), invalidConstraint);
if (!invalidConstraint.isEmpty()) {
client->failedToCreateStreamWithConstraintsError(invalidConstraint);
return;
}
RefPtr<RealtimeMediaSource> audioSource = AVCaptureDeviceManager::singleton().bestSourceForTypeAndConstraints(RealtimeMediaSource::Audio, audioConstraints.get());
ASSERT(audioSource);
audioSources.append(audioSource.release());
}
if (videoConstraints) {
String invalidConstraint;
AVCaptureDeviceManager::singleton().verifyConstraintsForMediaType(RealtimeMediaSource::Video, videoConstraints.get(), invalidConstraint);
if (!invalidConstraint.isEmpty()) {
client->failedToCreateStreamWithConstraintsError(invalidConstraint);
return;
}
RefPtr<RealtimeMediaSource> videoSource = AVCaptureDeviceManager::singleton().bestSourceForTypeAndConstraints(RealtimeMediaSource::Video, videoConstraints.get());
ASSERT(videoSource);
videoSources.append(videoSource.release());
}
client->didCreateStream(MediaStreamPrivate::create(audioSources, videoSources));
}
bool RealtimeMediaSourceCenterMac::getMediaStreamTrackSources(PassRefPtr<MediaStreamTrackSourcesRequestClient> prpClient)
{
RefPtr<MediaStreamTrackSourcesRequestClient> requestClient = prpClient;
Vector<RefPtr<TrackSourceInfo>> sources = AVCaptureDeviceManager::singleton().getSourcesInfo(requestClient->requestOrigin());
requestClient->didCompleteRequest(sources);
return true;
}
}
#endif // ENABLE(MEDIA_STREAM)