1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // Copyright 2019 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_VAAPI_VAAPI_IMAGE_DECODE_ACCELERATOR_WORKER_H_
- #define MEDIA_GPU_VAAPI_VAAPI_IMAGE_DECODE_ACCELERATOR_WORKER_H_
- #include <stdint.h>
- #include <memory>
- #include <unordered_map>
- #include <vector>
- #include "base/containers/small_map.h"
- #include "base/memory/scoped_refptr.h"
- #include "base/sequence_checker.h"
- #include "gpu/config/gpu_info.h"
- #include "gpu/ipc/service/image_decode_accelerator_worker.h"
- namespace base {
- class SequencedTaskRunner;
- }
- namespace gfx {
- class Size;
- }
- namespace media {
- class VaapiImageDecoder;
- using VaapiImageDecoderVector = std::vector<std::unique_ptr<VaapiImageDecoder>>;
- using VaapiImageDecoderMap =
- base::small_map<std::unordered_map<gpu::ImageDecodeAcceleratorType,
- std::unique_ptr<VaapiImageDecoder>>>;
- // This class uses the VAAPI to provide image decode acceleration. The
- // interaction with the VAAPI is done on |decoder_task_runner_|.
- class VaapiImageDecodeAcceleratorWorker
- : public gpu::ImageDecodeAcceleratorWorker {
- public:
- // Creates a VaapiImageDecodeAcceleratorWorker and attempts to initialize the
- // internal state. Returns nullptr if initialization fails.
- static std::unique_ptr<VaapiImageDecodeAcceleratorWorker> Create();
- VaapiImageDecodeAcceleratorWorker(const VaapiImageDecodeAcceleratorWorker&) =
- delete;
- VaapiImageDecodeAcceleratorWorker& operator=(
- const VaapiImageDecodeAcceleratorWorker&) = delete;
- ~VaapiImageDecodeAcceleratorWorker() override;
- // gpu::ImageDecodeAcceleratorWorker implementation.
- gpu::ImageDecodeAcceleratorSupportedProfiles GetSupportedProfiles() override;
- void Decode(std::vector<uint8_t> encoded_data,
- const gfx::Size& output_size,
- CompletedDecodeCB decode_cb) override;
- private:
- friend class VaapiImageDecodeAcceleratorWorkerTest;
- explicit VaapiImageDecodeAcceleratorWorker(VaapiImageDecoderVector decoders);
- VaapiImageDecoder* GetDecoderForImage(
- const std::vector<uint8_t>& encoded_data);
- // We delegate the decoding to the appropriate decoder in |decoders_| which
- // are used and destroyed on |decoder_task_runner_|.
- VaapiImageDecoderMap decoders_;
- gpu::ImageDecodeAcceleratorSupportedProfiles supported_profiles_;
- scoped_refptr<base::SequencedTaskRunner> decoder_task_runner_;
- SEQUENCE_CHECKER(main_sequence_checker_);
- SEQUENCE_CHECKER(io_sequence_checker_);
- };
- } // namespace media
- #endif // MEDIA_GPU_VAAPI_VAAPI_IMAGE_DECODE_ACCELERATOR_WORKER_H_
|