Upload upstream chromium 120.0.6099.5
[platform/framework/web/chromium-efl.git] / media / renderers / renderer_impl_factory.h
1 // Copyright 2014 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MEDIA_RENDERERS_RENDERER_IMPL_FACTORY_H_
6 #define MEDIA_RENDERERS_RENDERER_IMPL_FACTORY_H_
7
8 #include <memory>
9 #include <vector>
10
11 #include "base/functional/callback.h"
12 #include "base/memory/raw_ptr.h"
13 #include "base/task/sequenced_task_runner.h"
14 #include "build/build_config.h"
15 #include "media/base/media_export.h"
16 #include "media/base/media_player_logging_id.h"
17 #include "media/base/renderer_factory.h"
18
19 #if !BUILDFLAG(IS_ANDROID)
20 #include "media/base/speech_recognition_client.h"
21 #endif
22
23 namespace media {
24
25 class AudioBuffer;
26 class AudioDecoder;
27 class AudioRendererSink;
28 class DecoderFactory;
29 class GpuVideoAcceleratorFactories;
30 class MediaLog;
31 class VideoDecoder;
32 class VideoRendererSink;
33
34 using CreateAudioDecodersCB =
35     base::RepeatingCallback<std::vector<std::unique_ptr<AudioDecoder>>()>;
36 using CreateVideoDecodersCB =
37     base::RepeatingCallback<std::vector<std::unique_ptr<VideoDecoder>>()>;
38
39 // The default factory class for creating RendererImpl.
40 class MEDIA_EXPORT RendererImplFactory final : public RendererFactory {
41  public:
42   using GetGpuFactoriesCB =
43       base::RepeatingCallback<GpuVideoAcceleratorFactories*()>;
44
45 #if BUILDFLAG(IS_ANDROID)
46   RendererImplFactory(MediaLog* media_log,
47                       DecoderFactory* decoder_factory,
48                       const GetGpuFactoriesCB& get_gpu_factories_cb,
49                       MediaPlayerLoggingID media_player_id);
50 #else
51   RendererImplFactory(
52       MediaLog* media_log,
53       DecoderFactory* decoder_factory,
54       const GetGpuFactoriesCB& get_gpu_factories_cb,
55       MediaPlayerLoggingID media_player_id,
56       std::unique_ptr<SpeechRecognitionClient> speech_recognition_client);
57 #endif
58
59   RendererImplFactory(const RendererImplFactory&) = delete;
60   RendererImplFactory& operator=(const RendererImplFactory&) = delete;
61
62   ~RendererImplFactory() final;
63
64   std::unique_ptr<Renderer> CreateRenderer(
65       const scoped_refptr<base::SequencedTaskRunner>& media_task_runner,
66       const scoped_refptr<base::TaskRunner>& worker_task_runner,
67       AudioRendererSink* audio_renderer_sink,
68       VideoRendererSink* video_renderer_sink,
69       RequestOverlayInfoCB request_overlay_info_cb,
70       const gfx::ColorSpace& target_color_space) final;
71
72  private:
73   std::vector<std::unique_ptr<AudioDecoder>> CreateAudioDecoders(
74       const scoped_refptr<base::SequencedTaskRunner>& media_task_runner);
75   std::vector<std::unique_ptr<VideoDecoder>> CreateVideoDecoders(
76       const scoped_refptr<base::SequencedTaskRunner>& media_task_runner,
77       RequestOverlayInfoCB request_overlay_info_cb,
78       const gfx::ColorSpace& target_color_space,
79       GpuVideoAcceleratorFactories* gpu_factories);
80
81   raw_ptr<MediaLog> media_log_;
82
83   // Factory to create extra audio and video decoders.
84   // Could be nullptr if not extra decoders are available.
85   raw_ptr<DecoderFactory, DanglingUntriaged> decoder_factory_;
86
87   // Creates factories for supporting video accelerators. May be null.
88   GetGpuFactoriesCB get_gpu_factories_cb_;
89
90   // WebMediaPlayerImpl id.
91   MediaPlayerLoggingID media_player_id_;
92
93 #if !BUILDFLAG(IS_ANDROID)
94   std::unique_ptr<SpeechRecognitionClient> speech_recognition_client_;
95 #endif
96 };
97
98 }  // namespace media
99
100 #endif  // MEDIA_RENDERERS_RENDERER_IMPL_FACTORY_H_