chromium/chromeos/ash/components/kiosk/vision/internal/detection_observer.h

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_DETECTION_OBSERVER_H_
#define CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_DETECTION_OBSERVER_H_

#include "base/feature_list.h"
#include "base/timer/timer.h"
#include "chromeos/ash/components/kiosk/vision/internal/detection_processor.h"
#include "media/capture/video/chromeos/mojom/cros_camera_service.mojom-forward.h"
#include "media/capture/video/chromeos/mojom/cros_camera_service.mojom.h"

namespace ash::kiosk_vision {

// When enabled, `DetectionObserver` will emit fake detections to processors.
// Used for development purposes only.
BASE_DECLARE_FEATURE(kEmitKioskVisionFakes);

// Receives detections from `CrosCameraService` and forwards them to the given
// `processors`.
class DetectionObserver : public cros::mojom::KioskVisionObserver {
 public:
  explicit DetectionObserver(DetectionProcessors processors);
  DetectionObserver(const DetectionObserver&) = delete;
  DetectionObserver& operator=(const DetectionObserver&) = delete;
  ~DetectionObserver() override;

  // `cros::mojom::KioskVisionObserver` implementations.
  void OnFrameProcessed(
      cros::mojom::KioskVisionDetectionPtr detection) override;
  void OnTrackCompleted(cros::mojom::KioskVisionTrackPtr track) override;
  void OnError(cros::mojom::KioskVisionError error) override;

 private:
  void EmitFakeDetection();

  DetectionProcessors processors_;

  bool fake_detection_flag_ = false;
  int fake_detection_offset_ = 0;
  base::RepeatingTimer fake_detection_timer_;
};

}  // namespace ash::kiosk_vision

#endif  // CHROMEOS_ASH_COMPONENTS_KIOSK_VISION_INTERNAL_DETECTION_OBSERVER_H_