blob: f6b38231c5aacaa1182dc24c977f2e072de1b3bd [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_SHAPE_DETECTION_FACE_DETECTION_PROVIDER_WIN_H_
#define SERVICES_SHAPE_DETECTION_FACE_DETECTION_PROVIDER_WIN_H_
#include <windows.foundation.h>
#include <windows.graphics.imaging.h>
#include <wrl/client.h>
#include <memory>
#include <utility>
#include "base/memory/weak_ptr.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "services/shape_detection/face_detection_impl_win.h"
#include "services/shape_detection/public/mojom/facedetection_provider.mojom.h"
namespace shape_detection {
class FaceDetectionProviderWin
: public shape_detection::mojom::FaceDetectionProvider {
public:
FaceDetectionProviderWin();
FaceDetectionProviderWin(const FaceDetectionProviderWin&) = delete;
FaceDetectionProviderWin& operator=(const FaceDetectionProviderWin&) = delete;
~FaceDetectionProviderWin() override;
static void Create(
mojo::PendingReceiver<shape_detection::mojom::FaceDetectionProvider>
receiver) {
auto provider = std::make_unique<FaceDetectionProviderWin>();
auto* provider_ptr = provider.get();
provider_ptr->receiver_ =
mojo::MakeSelfOwnedReceiver(std::move(provider), std::move(receiver));
}
void CreateFaceDetection(
mojo::PendingReceiver<shape_detection::mojom::FaceDetection> receiver,
shape_detection::mojom::FaceDetectorOptionsPtr options) override;
private:
void OnFaceDetectorCreated(
mojo::PendingReceiver<shape_detection::mojom::FaceDetection> receiver,
ABI::Windows::Graphics::Imaging::BitmapPixelFormat pixel_format,
Microsoft::WRL::ComPtr<ABI::Windows::Media::FaceAnalysis::IFaceDetector>
face_detector);
mojo::SelfOwnedReceiverRef<mojom::FaceDetectionProvider> receiver_;
base::WeakPtrFactory<FaceDetectionProviderWin> weak_factory_{this};
};
} // namespace shape_detection
#endif // SERVICES_SHAPE_DETECTION_FACE_DETECTION_PROVIDER_WIN_H_