Avi Drissman | d387f092 | 2022-09-14 20:51:31 | [diff] [blame] | 1 | // Copyright 2016 The Chromium Authors |
xhwang | 409e5355 | 2016-02-23 00:52:44 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
sandersd | 45399899 | 2016-06-14 00:52:43 | [diff] [blame] | 5 | #include "media/mojo/clients/mojo_decoder_factory.h" |
xhwang | 409e5355 | 2016-02-23 00:52:44 | [diff] [blame] | 6 | |
Gyuyoung Kim | 62a5de4 | 2018-01-10 09:48:42 | [diff] [blame] | 7 | #include <memory> |
| 8 | |
liberato@chromium.org | 677d1be0 | 2017-12-28 22:05:42 | [diff] [blame] | 9 | #include "base/feature_list.h" |
Patrick Monette | 643cdf6 | 2021-10-15 19:13:42 | [diff] [blame] | 10 | #include "base/task/sequenced_task_runner.h" |
liberato@chromium.org | 677d1be0 | 2017-12-28 22:05:42 | [diff] [blame] | 11 | #include "build/build_config.h" |
| 12 | #include "media/base/media_switches.h" |
Scott Violet | a35f9a4 | 2018-03-22 22:00:44 | [diff] [blame] | 13 | #include "media/mojo/buildflags.h" |
sandersd | 45399899 | 2016-06-14 00:52:43 | [diff] [blame] | 14 | #include "media/mojo/clients/mojo_audio_decoder.h" |
| 15 | #include "media/mojo/clients/mojo_video_decoder.h" |
Miyoung Shin | 25bb8c09 | 2019-08-03 00:56:57 | [diff] [blame] | 16 | #include "media/mojo/mojom/audio_decoder.mojom.h" |
| 17 | #include "media/mojo/mojom/interface_factory.mojom.h" |
Miyoung Shin | ae2c4ab8 | 2019-10-17 07:03:14 | [diff] [blame] | 18 | #include "mojo/public/cpp/bindings/pending_remote.h" |
xhwang | 409e5355 | 2016-02-23 00:52:44 | [diff] [blame] | 19 | |
| 20 | namespace media { |
| 21 | |
| 22 | MojoDecoderFactory::MojoDecoderFactory( |
Xiaohan Wang | cbf485ba | 2017-08-09 06:13:18 | [diff] [blame] | 23 | media::mojom::InterfaceFactory* interface_factory) |
| 24 | : interface_factory_(interface_factory) { |
| 25 | DCHECK(interface_factory_); |
xhwang | 409e5355 | 2016-02-23 00:52:44 | [diff] [blame] | 26 | } |
| 27 | |
Chris Watkins | 2de6929 | 2017-12-01 03:08:01 | [diff] [blame] | 28 | MojoDecoderFactory::~MojoDecoderFactory() = default; |
xhwang | 409e5355 | 2016-02-23 00:52:44 | [diff] [blame] | 29 | |
| 30 | void MojoDecoderFactory::CreateAudioDecoders( |
Chris Cunningham | 135f8b7 | 2020-11-03 00:06:34 | [diff] [blame] | 31 | scoped_refptr<base::SequencedTaskRunner> task_runner, |
Lizhi Fan | 511e203b | 2018-05-22 14:46:15 | [diff] [blame] | 32 | MediaLog* media_log, |
xiaofeng.zhang | 47778d3 | 2017-05-12 02:24:55 | [diff] [blame] | 33 | std::vector<std::unique_ptr<AudioDecoder>>* audio_decoders) { |
xhwang | db24d60 | 2017-05-20 06:32:24 | [diff] [blame] | 34 | #if BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER) |
Miyoung Shin | ae2c4ab8 | 2019-10-17 07:03:14 | [diff] [blame] | 35 | mojo::PendingRemote<mojom::AudioDecoder> audio_decoder; |
| 36 | interface_factory_->CreateAudioDecoder( |
| 37 | audio_decoder.InitWithNewPipeAndPassReceiver()); |
timav | fe54753 | 2016-03-18 01:14:37 | [diff] [blame] | 38 | |
Gyuyoung Kim | 62a5de4 | 2018-01-10 09:48:42 | [diff] [blame] | 39 | audio_decoders->push_back(std::make_unique<MojoAudioDecoder>( |
Wojciech Dzierżanowski | a409102 | 2023-04-19 09:28:43 | [diff] [blame] | 40 | task_runner, media_log, std::move(audio_decoder))); |
sandersd | 02864e3 | 2016-03-15 22:02:09 | [diff] [blame] | 41 | #endif |
| 42 | } |
| 43 | |
| 44 | void MojoDecoderFactory::CreateVideoDecoders( |
Chris Cunningham | 135f8b7 | 2020-11-03 00:06:34 | [diff] [blame] | 45 | scoped_refptr<base::SequencedTaskRunner> task_runner, |
sandersd | e78f9cb | 2016-05-25 20:06:37 | [diff] [blame] | 46 | GpuVideoAcceleratorFactories* gpu_factories, |
sandersd | 57073e9 | 2017-07-08 00:44:58 | [diff] [blame] | 47 | MediaLog* media_log, |
Jose Lopes | 689012d | 2020-02-27 09:04:49 | [diff] [blame] | 48 | RequestOverlayInfoCB request_overlay_info_cb, |
Dan Sanders | bc62ef7 | 2018-05-14 23:09:50 | [diff] [blame] | 49 | const gfx::ColorSpace& target_color_space, |
xiaofeng.zhang | 47778d3 | 2017-05-12 02:24:55 | [diff] [blame] | 50 | std::vector<std::unique_ptr<VideoDecoder>>* video_decoders) { |
xhwang | db24d60 | 2017-05-20 06:32:24 | [diff] [blame] | 51 | #if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER) |
liberato@chromium.org | b1603f0 | 2019-04-19 05:43:48 | [diff] [blame] | 52 | |
Ted Meyer | ff439e7 | 2020-07-07 08:40:54 | [diff] [blame] | 53 | mojo::PendingRemote<mojom::VideoDecoder> video_decoder_remote; |
Mario Sanchez Prada | 1833af9 | 2019-10-21 09:54:11 | [diff] [blame] | 54 | interface_factory_->CreateVideoDecoder( |
Andres Calderon Jaramillo | 73a4f15 | 2022-04-01 21:46:30 | [diff] [blame] | 55 | video_decoder_remote.InitWithNewPipeAndPassReceiver(), |
| 56 | /*dst_video_decoder=*/{}); |
Xiaohan Wang | cbf485ba | 2017-08-09 06:13:18 | [diff] [blame] | 57 | |
Gyuyoung Kim | 62a5de4 | 2018-01-10 09:48:42 | [diff] [blame] | 58 | video_decoders->push_back(std::make_unique<MojoVideoDecoder>( |
Ted Meyer | ff439e7 | 2020-07-07 08:40:54 | [diff] [blame] | 59 | task_runner, gpu_factories, media_log, std::move(video_decoder_remote), |
Ted Meyer | 4041de9 | 2021-06-14 20:22:37 | [diff] [blame] | 60 | std::move(request_overlay_info_cb), target_color_space)); |
liberato@chromium.org | b1603f0 | 2019-04-19 05:43:48 | [diff] [blame] | 61 | |
sandersd | 02864e3 | 2016-03-15 22:02:09 | [diff] [blame] | 62 | #endif |
xhwang | 409e5355 | 2016-02-23 00:52:44 | [diff] [blame] | 63 | } |
| 64 | |
| 65 | } // namespace media |