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