mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
After replacing the remaining include guards with `#pragma once`, I was able to merge all the wpiformat configs into one file in the repo root. This should make the config easier to reason about and maintain in the future.
53 lines
1.5 KiB
C++
53 lines
1.5 KiB
C++
// Copyright (c) FIRST and other WPILib contributors.
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
// the WPILib BSD license file in the root directory of this project.
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <atomic>
|
|
#include <functional>
|
|
#include <string_view>
|
|
#include <thread>
|
|
|
|
#include "Frame.hpp"
|
|
#include "SinkImpl.hpp"
|
|
#include "wpi/cs/cscore_raw.h"
|
|
#include "wpi/util/condition_variable.hpp"
|
|
|
|
namespace wpi::cs {
|
|
|
|
class SourceImpl;
|
|
|
|
class RawSinkImpl : public SinkImpl {
|
|
public:
|
|
RawSinkImpl(std::string_view name, wpi::util::Logger& logger,
|
|
Notifier& notifier, Telemetry& telemetry);
|
|
RawSinkImpl(std::string_view name, wpi::util::Logger& logger,
|
|
Notifier& notifier, Telemetry& telemetry,
|
|
std::function<void(uint64_t time)> processFrame);
|
|
~RawSinkImpl() override;
|
|
|
|
void Stop();
|
|
|
|
uint64_t GrabFrame(WPI_RawFrame& frame);
|
|
uint64_t GrabFrame(WPI_RawFrame& frame, double timeout);
|
|
// Wait for a frame with a time other than lastFrameTime
|
|
uint64_t GrabFrame(WPI_RawFrame& frame, double timeout,
|
|
uint64_t lastFrameTime);
|
|
|
|
private:
|
|
void ThreadMain();
|
|
|
|
// Copies the image from incomingFrame into rawFrame, converting where
|
|
// necessary to the resolution of rawFrame
|
|
uint64_t GrabFrameImpl(WPI_RawFrame& rawFrame, Frame& incomingFrame);
|
|
|
|
std::atomic_bool m_active; // set to false to terminate threads
|
|
std::thread m_thread;
|
|
std::function<void(uint64_t time)> m_processFrame;
|
|
};
|
|
|
|
} // namespace wpi::cs
|