| // 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_GPU_IMAGE_PROCESSOR_FACTORY_H_ |
| #define MEDIA_GPU_IMAGE_PROCESSOR_FACTORY_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/callback_forward.h" |
| #include "base/macros.h" |
| #include "media/gpu/image_processor.h" |
| #include "media/gpu/media_gpu_export.h" |
| |
| namespace media { |
| |
| class MEDIA_GPU_EXPORT ImageProcessorFactory { |
| public: |
| // Factory method to create ImageProcessor. |
| // Given input and output PortConfig, it tries to find out the most suitable |
| // ImageProcessor to be used for the current platform. |
| // |
| // For |preferred_output_modes|, it tries instantiate an ImageProcessor class |
| // with an output mode in sequence. With ImageProcessor subclass and output |
| // mode selected, the subclass' factory method will pick the first supported |
| // input and output storage type from input and output PortConfig, |
| // respectively. It has an assumption that the selection of output mode is |
| // independent from the selection of output storage type. |
| // |
| // TODO(crbug.com/907767): Remove |preferred_output_modes| once ImageProcessor |
| // only accepts IMPORT output mode. |
| // |
| // Args: |
| // input_config: input PortConfig. |
| // output_config: output PortConfig. |
| // preferred_output_modes: list of preferred output modes. |
| // num_buffers: number of input and output buffers. |
| // error_cb: Callback when error occurs. |
| // |
| // Returns: |
| // Most suitable ImageProcessor instance. nullptr if no ImageProcessor |
| // is available for given parameters on current platform. |
| static std::unique_ptr<ImageProcessor> Create( |
| const ImageProcessor::PortConfig& input_config, |
| const ImageProcessor::PortConfig& output_config, |
| const std::vector<ImageProcessor::OutputMode>& preferred_output_modes, |
| size_t num_buffers, |
| ImageProcessor::ErrorCB error_cb); |
| |
| DISALLOW_IMPLICIT_CONSTRUCTORS(ImageProcessorFactory); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_GPU_IMAGE_PROCESSOR_FACTORY_H_ |