web_engine_media_renderer_factory.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef FUCHSIA_WEB_WEBENGINE_RENDERER_WEB_ENGINE_MEDIA_RENDERER_FACTORY_H_
  5. #define FUCHSIA_WEB_WEBENGINE_RENDERER_WEB_ENGINE_MEDIA_RENDERER_FACTORY_H_
  6. #include <memory>
  7. #include <vector>
  8. #include "base/callback.h"
  9. #include "fuchsia_web/webengine/mojom/web_engine_media_resource_provider.mojom.h"
  10. #include "media/base/renderer_factory.h"
  11. #include "mojo/public/cpp/bindings/remote.h"
  12. namespace media {
  13. class AudioRendererSink;
  14. class DecoderFactory;
  15. class GpuVideoAcceleratorFactories;
  16. class MediaLog;
  17. class VideoDecoder;
  18. class VideoRendererSink;
  19. } // namespace media
  20. // RendererFactory implementation used on Fuchsia. It works the same as
  21. // DefaultRendererFactory, except that it uses WebEngineAudioRenderer for audio.
  22. class WebEngineMediaRendererFactory final : public media::RendererFactory {
  23. public:
  24. using GetGpuFactoriesCB =
  25. base::RepeatingCallback<media::GpuVideoAcceleratorFactories*()>;
  26. WebEngineMediaRendererFactory(
  27. media::MediaLog* media_log,
  28. media::DecoderFactory* decoder_factory,
  29. GetGpuFactoriesCB get_gpu_factories_cb,
  30. mojo::Remote<mojom::WebEngineMediaResourceProvider>
  31. media_resource_provider);
  32. ~WebEngineMediaRendererFactory() override;
  33. // RendererFactory interface.
  34. std::unique_ptr<media::Renderer> CreateRenderer(
  35. const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
  36. const scoped_refptr<base::TaskRunner>& worker_task_runner,
  37. media::AudioRendererSink* audio_renderer_sink,
  38. media::VideoRendererSink* video_renderer_sink,
  39. media::RequestOverlayInfoCB request_overlay_info_cb,
  40. const gfx::ColorSpace& target_color_space) override;
  41. private:
  42. std::vector<std::unique_ptr<media::VideoDecoder>> CreateVideoDecoders(
  43. const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
  44. media::RequestOverlayInfoCB request_overlay_info_cb,
  45. const gfx::ColorSpace& target_color_space,
  46. media::GpuVideoAcceleratorFactories* gpu_factories);
  47. media::MediaLog* const media_log_;
  48. // Factory to create extra audio and video decoders.
  49. // Could be nullptr if not extra decoders are available.
  50. media::DecoderFactory* const decoder_factory_;
  51. // Creates factories for supporting video accelerators. May be null.
  52. GetGpuFactoriesCB get_gpu_factories_cb_;
  53. mojo::Remote<mojom::WebEngineMediaResourceProvider> media_resource_provider_;
  54. };
  55. #endif // FUCHSIA_WEB_WEBENGINE_RENDERER_WEB_ENGINE_MEDIA_RENDERER_FACTORY_H_