| // 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_DEFAULT_DECODER_FACTORY_H_ |
| #define MEDIA_RENDERERS_DEFAULT_DECODER_FACTORY_H_ |
| |
| #include <memory> |
| |
| #include "base/synchronization/lock.h" |
| #include "media/base/decoder_factory.h" |
| #include "media/base/media_export.h" |
| |
| namespace media { |
| |
| class MEDIA_EXPORT DefaultDecoderFactory final : public DecoderFactory { |
| public: |
| // |external_decoder_factory| is optional decoder factory that provides |
| // additional decoders. |
| explicit DefaultDecoderFactory( |
| std::unique_ptr<DecoderFactory> external_decoder_factory); |
| |
| DefaultDecoderFactory(const DefaultDecoderFactory&) = delete; |
| DefaultDecoderFactory& operator=(const DefaultDecoderFactory&) = delete; |
| |
| ~DefaultDecoderFactory() final; |
| |
| void CreateAudioDecoders( |
| scoped_refptr<base::SequencedTaskRunner> task_runner, |
| MediaLog* media_log, |
| std::vector<std::unique_ptr<AudioDecoder>>* audio_decoders) final; |
| |
| SupportedVideoDecoderConfigs GetSupportedVideoDecoderConfigsForWebRTC() final; |
| |
| void CreateVideoDecoders( |
| scoped_refptr<base::SequencedTaskRunner> task_runner, |
| GpuVideoAcceleratorFactories* gpu_factories, |
| MediaLog* media_log, |
| RequestOverlayInfoCB request_overlay_info_cb, |
| const gfx::ColorSpace& target_color_space, |
| std::vector<std::unique_ptr<VideoDecoder>>* video_decoders) final; |
| |
| // Called from the renderer thread to prevent any more decoders from being |
| // vended on other threads. |
| void Shutdown(); |
| |
| private: |
| base::Lock shutdown_lock_; |
| bool is_shutdown_ GUARDED_BY(shutdown_lock_) = false; |
| |
| std::unique_ptr<DecoderFactory> external_decoder_factory_ |
| GUARDED_BY(shutdown_lock_); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_RENDERERS_DEFAULT_DECODER_FACTORY_H_ |