blob: 73f13ae144a7cab3458eb4125fce76450b3a855a [file] [log] [blame]
// Copyright 2017 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 "modules/media_capabilities/MediaCapabilities.h"
#include "bindings/core/v8/CallbackPromiseAdapter.h"
#include "bindings/core/v8/ScriptPromise.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
#include "bindings/core/v8/ScriptState.h"
#include "modules/media_capabilities/MediaConfiguration.h"
#include "modules/media_capabilities/MediaDecodingAbility.h"
#include "public/platform/Platform.h"
#include "public/platform/modules/media_capabilities/WebMediaCapabilitiesClient.h"
#include "public/platform/modules/media_capabilities/WebMediaConfiguration.h"
#include "public/platform/modules/media_capabilities/WebMediaDecodingAbility.h"
namespace blink {
namespace {
WebAudioConfiguration toWebAudioConfiguration(
const AudioConfiguration& configuration) {
WebAudioConfiguration webConfiguration;
// contentType is mandatory.
DCHECK(configuration.hasContentType());
webConfiguration.contentType = configuration.contentType();
// channels is optional and will be set to a null WebString if not present.
webConfiguration.channels = configuration.hasChannels()
? WebString(configuration.channels())
: WebString();
if (configuration.hasBitrate())
webConfiguration.bitrate = configuration.bitrate();
if (configuration.hasSamplerate())
webConfiguration.samplerate = configuration.samplerate();
return webConfiguration;
}
WebVideoConfiguration toWebVideoConfiguration(
const VideoConfiguration& configuration) {
WebVideoConfiguration webConfiguration;
// All the properties are mandatory.
DCHECK(configuration.hasContentType());
webConfiguration.contentType = configuration.contentType();
DCHECK(configuration.hasWidth());
webConfiguration.width = configuration.width();
DCHECK(configuration.hasHeight());
webConfiguration.height = configuration.height();
DCHECK(configuration.hasBitrate());
webConfiguration.bitrate = configuration.bitrate();
DCHECK(configuration.hasFramerate());
webConfiguration.framerate = configuration.framerate();
return webConfiguration;
}
WebMediaConfiguration toWebMediaConfiguration(
const MediaConfiguration& configuration) {
WebMediaConfiguration webConfiguration;
// type is mandatory.
DCHECK(configuration.hasType());
if (configuration.hasAudio()) {
webConfiguration.audioConfiguration =
toWebAudioConfiguration(configuration.audio());
}
if (configuration.hasVideo()) {
webConfiguration.videoConfiguration =
toWebVideoConfiguration(configuration.video());
}
return webConfiguration;
}
} // anonymous namespace
MediaCapabilities::MediaCapabilities() = default;
ScriptPromise MediaCapabilities::query(
ScriptState* scriptState,
const MediaConfiguration& configuration) {
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
Platform::current()->mediaCapabilitiesClient()->query(
toWebMediaConfiguration(configuration),
WTF::makeUnique<CallbackPromiseAdapter<MediaDecodingAbility, void>>(
resolver));
return promise;
}
DEFINE_TRACE(MediaCapabilities) {}
} // namespace blink