#include "content/renderer/media/media_interface_factory.h"
#include <string>
#include "base/functional/bind.h"
#include "base/task/single_thread_task_runner.h"
#include "build/build_config.h"
#include "media/mojo/mojom/content_decryption_module.mojom.h"
#include "media/mojo/mojom/renderer.mojom.h"
#include "media/mojo/mojom/renderer_extensions.mojom.h"
#include "third_party/blink/public/platform/browser_interface_broker_proxy.h"
namespace content {
MediaInterfaceFactory::MediaInterfaceFactory(
const blink::BrowserInterfaceBrokerProxy* interface_broker)
: … { … }
MediaInterfaceFactory::MediaInterfaceFactory(
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
mojo::PendingRemote<media::mojom::InterfaceFactory> interface_factory)
: … { … }
MediaInterfaceFactory::~MediaInterfaceFactory() { … }
void MediaInterfaceFactory::CreateAudioDecoder(
mojo::PendingReceiver<media::mojom::AudioDecoder> receiver) { … }
void MediaInterfaceFactory::CreateVideoDecoder(
mojo::PendingReceiver<media::mojom::VideoDecoder> receiver,
mojo::PendingRemote<media::stable::mojom::StableVideoDecoder>
dst_video_decoder) { … }
#if BUILDFLAG(ALLOW_OOP_VIDEO_DECODER)
void MediaInterfaceFactory::CreateStableVideoDecoder(
mojo::PendingReceiver<media::stable::mojom::StableVideoDecoder>
video_decoder) { … }
#endif
void MediaInterfaceFactory::CreateAudioEncoder(
mojo::PendingReceiver<media::mojom::AudioEncoder> receiver) { … }
void MediaInterfaceFactory::CreateDefaultRenderer(
const std::string& audio_device_id,
mojo::PendingReceiver<media::mojom::Renderer> receiver) { … }
#if BUILDFLAG(ENABLE_CAST_RENDERER)
void MediaInterfaceFactory::CreateCastRenderer(
const base::UnguessableToken& overlay_plane_id,
mojo::PendingReceiver<media::mojom::Renderer> receiver) {
if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&MediaInterfaceFactory::CreateCastRenderer, weak_this_,
overlay_plane_id, std::move(receiver)));
return;
}
DVLOG(1) << __func__;
GetMediaInterfaceFactory()->CreateCastRenderer(overlay_plane_id,
std::move(receiver));
}
#endif
#if BUILDFLAG(IS_ANDROID)
void MediaInterfaceFactory::CreateMediaPlayerRenderer(
mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
client_extension_remote,
mojo::PendingReceiver<media::mojom::Renderer> receiver,
mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) {
if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&MediaInterfaceFactory::CreateMediaPlayerRenderer,
weak_this_, std::move(client_extension_remote),
std::move(receiver),
std::move(renderer_extension_receiver)));
return;
}
DVLOG(1) << __func__;
GetMediaInterfaceFactory()->CreateMediaPlayerRenderer(
std::move(client_extension_remote), std::move(receiver),
std::move(renderer_extension_receiver));
}
void MediaInterfaceFactory::CreateFlingingRenderer(
const std::string& presentation_id,
mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
client_extension,
mojo::PendingReceiver<media::mojom::Renderer> receiver) {
if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&MediaInterfaceFactory::CreateFlingingRenderer,
weak_this_, presentation_id, std::move(client_extension),
std::move(receiver)));
return;
}
DVLOG(1) << __func__;
GetMediaInterfaceFactory()->CreateFlingingRenderer(
presentation_id, std::move(client_extension), std::move(receiver));
}
#endif
#if BUILDFLAG(IS_WIN)
void MediaInterfaceFactory::CreateMediaFoundationRenderer(
mojo::PendingRemote<media::mojom::MediaLog> media_log_remote,
mojo::PendingReceiver<media::mojom::Renderer> receiver,
mojo::PendingReceiver<media::mojom::MediaFoundationRendererExtension>
renderer_extension_receiver,
mojo::PendingRemote<media::mojom::MediaFoundationRendererClientExtension>
client_extension_remote) {
if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&MediaInterfaceFactory::CreateMediaFoundationRenderer,
weak_this_, std::move(media_log_remote),
std::move(receiver),
std::move(renderer_extension_receiver),
std::move(client_extension_remote)));
return;
}
DVLOG(1) << __func__;
GetMediaInterfaceFactory()->CreateMediaFoundationRenderer(
std::move(media_log_remote), std::move(receiver),
std::move(renderer_extension_receiver),
std::move(client_extension_remote));
}
#endif
void MediaInterfaceFactory::CreateCdm(const media::CdmConfig& cdm_config,
CreateCdmCallback callback) { … }
media::mojom::InterfaceFactory*
MediaInterfaceFactory::GetMediaInterfaceFactory() { … }
void MediaInterfaceFactory::OnConnectionError() { … }
}