face_detection_provider_win.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright 2017 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 SERVICES_SHAPE_DETECTION_FACE_DETECTION_PROVIDER_WIN_H_
  5. #define SERVICES_SHAPE_DETECTION_FACE_DETECTION_PROVIDER_WIN_H_
  6. #include <windows.foundation.h>
  7. #include <windows.graphics.imaging.h>
  8. #include <wrl/client.h>
  9. #include <memory>
  10. #include <utility>
  11. #include "base/memory/weak_ptr.h"
  12. #include "mojo/public/cpp/bindings/pending_receiver.h"
  13. #include "mojo/public/cpp/bindings/self_owned_receiver.h"
  14. #include "services/shape_detection/face_detection_impl_win.h"
  15. #include "services/shape_detection/public/mojom/facedetection_provider.mojom.h"
  16. namespace shape_detection {
  17. class FaceDetectionProviderWin
  18. : public shape_detection::mojom::FaceDetectionProvider {
  19. public:
  20. FaceDetectionProviderWin();
  21. FaceDetectionProviderWin(const FaceDetectionProviderWin&) = delete;
  22. FaceDetectionProviderWin& operator=(const FaceDetectionProviderWin&) = delete;
  23. ~FaceDetectionProviderWin() override;
  24. static void Create(
  25. mojo::PendingReceiver<shape_detection::mojom::FaceDetectionProvider>
  26. receiver) {
  27. auto provider = std::make_unique<FaceDetectionProviderWin>();
  28. auto* provider_ptr = provider.get();
  29. provider_ptr->receiver_ =
  30. mojo::MakeSelfOwnedReceiver(std::move(provider), std::move(receiver));
  31. }
  32. void CreateFaceDetection(
  33. mojo::PendingReceiver<shape_detection::mojom::FaceDetection> receiver,
  34. shape_detection::mojom::FaceDetectorOptionsPtr options) override;
  35. private:
  36. void OnFaceDetectorCreated(
  37. mojo::PendingReceiver<shape_detection::mojom::FaceDetection> receiver,
  38. ABI::Windows::Graphics::Imaging::BitmapPixelFormat pixel_format,
  39. Microsoft::WRL::ComPtr<ABI::Windows::Media::FaceAnalysis::IFaceDetector>
  40. face_detector);
  41. mojo::SelfOwnedReceiverRef<mojom::FaceDetectionProvider> receiver_;
  42. base::WeakPtrFactory<FaceDetectionProviderWin> weak_factory_{this};
  43. };
  44. } // namespace shape_detection
  45. #endif // SERVICES_SHAPE_DETECTION_FACE_DETECTION_PROVIDER_WIN_H_