CVB++ 15.0
decl_vin_device.hpp
1#pragma once
2
3#include <limits>
4#include <memory>
5#include <utility>
6
7#include "../../_cexports/c_img.h"
8
9#include "../../global.hpp"
10#include "../../string.hpp"
11
12#include "../_decl/decl_buffer_image.hpp"
13#include "../_decl/decl_stream.hpp"
14
15#include "../../_decl/decl_device.hpp"
16
17#include "../vin_connection_information.hpp"
18
19namespace Cvb
20{
21
22 CVB_BEGIN_INLINE_NS
23
24 namespace Driver
25 {
26
28
29 class VinDevice : public Device
30 {
31
32 public:
33 VinDevice(HandleGuard<Device> &&guard, const String &fileName) noexcept
34 : Device(std::move(guard), fileName)
35 {
36 AnnounceStreams(1);
37 }
38
40
45
46 protected:
47 void ChangeHandle(HandleGuard<Device> &&guard, DeviceUpdateMode mode) override;
48
49 DeviceImagePtr CreateDeviceImage() const override;
50
51 StreamBasePtr CreateStream(int, StreamType) const override;
52
53 private:
54 class VinStream : public Stream
55 {
56 public:
57 explicit VinStream(const DevicePtr &device)
58 : Stream(device)
59 {
60 }
61 };
62
63 class NonRingBufferVinStream : public VinStream
64 {
65 public:
66 explicit NonRingBufferVinStream(const DevicePtr &device);
67
68 StreamImagePtr MakeStreamImage() override
69 {
70 return MakeSnapshotImage();
71 }
72
73 StreamImagePtr MakeSnapshotImage() override;
74
75 private:
77 };
78
79 class RingBufferVinStream : public VinStream
80 {
81 public:
82 explicit RingBufferVinStream(const DevicePtr &device);
83
84 StreamImagePtr MakeStreamImage() override;
85
86 StreamImagePtr MakeSnapshotImage() override;
87
88 RingBufferPtr RingBuffer() const noexcept override;
89
90 private:
91 RingBufferPtr ringBuffer_;
92 };
93 };
94
95 } // namespace Driver
96
98
99 CVB_END_INLINE_NS
100
101} // namespace Cvb
virtual StreamPtr Stream() const
Get the stream for this device.
Definition detail_device.hpp:24
Ring buffer operations on a device.
Definition decl_ring_buffer.hpp:18
Contains the board and port information of a device or its access token.
Definition vin_connection_information.hpp:24
A device representing a video interface driver (vin).
Definition decl_vin_device.hpp:30
Cvb::Driver::VinConnectionInformation VinConnectionInformation() const
Gets the board and port information of this device.
Definition detail_vin_device.hpp:23
T move(T... args)
Namespace for driver or device related operations.
Definition decl_composite.hpp:28
std::shared_ptr< StreamImage > StreamImagePtr
Convenience shared pointer for StreamImage.
Definition driver.hpp:93
@ String
String value.
Definition driver.hpp:366
std::shared_ptr< DeviceImage > DeviceImagePtr
Convenience shared pointer for DeviceImage.
Definition driver.hpp:61
std::shared_ptr< StreamBase > StreamBasePtr
Convenience shared pointer for StreamBase.
Definition driver.hpp:113
std::shared_ptr< RingBuffer > RingBufferPtr
Convenience shared pointer for RingBuffer.
Definition driver.hpp:41
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::shared_ptr< Device > DevicePtr
Convenience shared pointer for Device.
Definition global.hpp:98
DeviceUpdateMode
Defines how to treat the optional device image, when the device itself is updated.
Definition global.hpp:252