vaapi_image_decode_accelerator_worker.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef MEDIA_GPU_VAAPI_VAAPI_IMAGE_DECODE_ACCELERATOR_WORKER_H_
  5. #define MEDIA_GPU_VAAPI_VAAPI_IMAGE_DECODE_ACCELERATOR_WORKER_H_
  6. #include <stdint.h>
  7. #include <memory>
  8. #include <unordered_map>
  9. #include <vector>
  10. #include "base/containers/small_map.h"
  11. #include "base/memory/scoped_refptr.h"
  12. #include "base/sequence_checker.h"
  13. #include "gpu/config/gpu_info.h"
  14. #include "gpu/ipc/service/image_decode_accelerator_worker.h"
  15. namespace base {
  16. class SequencedTaskRunner;
  17. }
  18. namespace gfx {
  19. class Size;
  20. }
  21. namespace media {
  22. class VaapiImageDecoder;
  23. using VaapiImageDecoderVector = std::vector<std::unique_ptr<VaapiImageDecoder>>;
  24. using VaapiImageDecoderMap =
  25. base::small_map<std::unordered_map<gpu::ImageDecodeAcceleratorType,
  26. std::unique_ptr<VaapiImageDecoder>>>;
  27. // This class uses the VAAPI to provide image decode acceleration. The
  28. // interaction with the VAAPI is done on |decoder_task_runner_|.
  29. class VaapiImageDecodeAcceleratorWorker
  30. : public gpu::ImageDecodeAcceleratorWorker {
  31. public:
  32. // Creates a VaapiImageDecodeAcceleratorWorker and attempts to initialize the
  33. // internal state. Returns nullptr if initialization fails.
  34. static std::unique_ptr<VaapiImageDecodeAcceleratorWorker> Create();
  35. VaapiImageDecodeAcceleratorWorker(const VaapiImageDecodeAcceleratorWorker&) =
  36. delete;
  37. VaapiImageDecodeAcceleratorWorker& operator=(
  38. const VaapiImageDecodeAcceleratorWorker&) = delete;
  39. ~VaapiImageDecodeAcceleratorWorker() override;
  40. // gpu::ImageDecodeAcceleratorWorker implementation.
  41. gpu::ImageDecodeAcceleratorSupportedProfiles GetSupportedProfiles() override;
  42. void Decode(std::vector<uint8_t> encoded_data,
  43. const gfx::Size& output_size,
  44. CompletedDecodeCB decode_cb) override;
  45. private:
  46. friend class VaapiImageDecodeAcceleratorWorkerTest;
  47. explicit VaapiImageDecodeAcceleratorWorker(VaapiImageDecoderVector decoders);
  48. VaapiImageDecoder* GetDecoderForImage(
  49. const std::vector<uint8_t>& encoded_data);
  50. // We delegate the decoding to the appropriate decoder in |decoders_| which
  51. // are used and destroyed on |decoder_task_runner_|.
  52. VaapiImageDecoderMap decoders_;
  53. gpu::ImageDecodeAcceleratorSupportedProfiles supported_profiles_;
  54. scoped_refptr<base::SequencedTaskRunner> decoder_task_runner_;
  55. SEQUENCE_CHECKER(main_sequence_checker_);
  56. SEQUENCE_CHECKER(io_sequence_checker_);
  57. };
  58. } // namespace media
  59. #endif // MEDIA_GPU_VAAPI_VAAPI_IMAGE_DECODE_ACCELERATOR_WORKER_H_