blob: 73a28a562c350b8571ceba9c55fade6ff6d962bc [file] [log] [blame]
// Copyright 2018 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.
#ifndef MEDIA_RENDERERS_FLINGING_RENDERER_CLIENT_FACTORY_H_
#define MEDIA_RENDERERS_FLINGING_RENDERER_CLIENT_FACTORY_H_
#include "media/base/media_export.h"
#include "media/base/renderer_factory.h"
#include "media/renderers/remote_playback_client_wrapper.h"
namespace media {
// Creates a renderer for media flinging.
// The FRCF uses a MojoRendererFactory to create a FlingingRenderer in the
// browser process. The actual renderer returned by the FRCF is a MojoRenderer
// directly (as opposed to a dedicated FlingingRendererClient), because all the
// renderer needs to do is forward calls to the FlingingRenderer in the browser.
class MEDIA_EXPORT FlingingRendererClientFactory : public RendererFactory {
public:
// |mojo_flinging_factory| should be created using
// HostedRendererType::kFlinging, and GetActivePresentationId()
// should be given to it through SetGetTypeSpecificIdCB().
FlingingRendererClientFactory(
std::unique_ptr<RendererFactory> mojo_flinging_factory,
std::unique_ptr<RemotePlaybackClientWrapper> remote_playback_client);
~FlingingRendererClientFactory() override;
std::unique_ptr<Renderer> CreateRenderer(
const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
const scoped_refptr<base::TaskRunner>& worker_task_runner,
AudioRendererSink* audio_renderer_sink,
VideoRendererSink* video_renderer_sink,
const RequestOverlayInfoCB& request_overlay_info_cb,
const gfx::ColorSpace& target_color_space) override;
// Returns whether media flinging has started, based off of whether the
// |remote_playback_client_| has a presentation ID or not. Called by
// RendererFactorySelector to determine when to create a FlingingRenderer.
bool IsFlingingActive();
// Used by the |mojo_flinging_factory_| to retrieve the latest presentation ID
// when CreateRenderer() is called.
std::string GetActivePresentationId();
private:
std::unique_ptr<RendererFactory> mojo_flinging_factory_;
std::unique_ptr<RemotePlaybackClientWrapper> remote_playback_client_;
DISALLOW_COPY_AND_ASSIGN(FlingingRendererClientFactory);
};
} // namespace media
#endif // MEDIA_RENDERERS_FLINGING_RENDERER_CLIENT_FACTORY_H_