Ocean
Loading...
Searching...
No Matches
FrameProviderInterface.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_CV_FRAME_PROVIDER_INTERFACE_H
9#define META_OCEAN_CV_FRAME_PROVIDER_INTERFACE_H
10
11#include "ocean/cv/CV.h"
12
13#include "ocean/base/Callback.h"
14#include "ocean/base/Frame.h"
16
17namespace Ocean
18{
19
20namespace CV
21{
22
23// Forward declaration.
24class FrameProviderInterface;
25
26/**
27 * Definition of an object reference holding a frame provider interface.
28 * @see FrameProviderInterface;
29 * @ingroup cv
30 */
32
33/**
34 * This class defines an abstract interface allowing to request frames from any kind of frame provider.
35 * @ingroup cv
36 */
37class OCEAN_CV_EXPORT FrameProviderInterface
38{
40
41 public:
42
43 /**
44 * Definition of a frame request callback function.
45 * A frame request callback is invoked by the interface whenever a requested frame arrives.
46 */
48
49 /**
50 * Definition of a frame number request callback function.
51 */
53
54 /**
55 * Definition of a frame type request callback function.
56 */
58
59 protected:
60
61 /**
62 * Definition of a list that stores frame request callbacks.
63 */
65
66 /**
67 * Definition of a list that stores frame number request callbacks.
68 */
70
71 /**
72 * Definition of a list that stores frame type request callbacks.
73 */
75
76 public:
77
78 /**
79 * Returns whether the internal information of this interface has been initialized already and whether request functions can be handled.
80 * No request function of this interface should be invoked before this interface has been initialized successfully.<br>
81 * @return True, if so
82 * @see synchronInitializationRequest(), setPreferredFrameType().
83 */
84 virtual bool isInitialized() = 0;
85
86 /**
87 * Waits until this interface has been initialized.
88 * @param timeout The time this functions waits at most for the initialization, in seconds, with range [0, infinity)
89 * @param abort Optional abort statement allowing to abort the frame type request at any time; set the value True to abort the request
90 * @return True, if the interface is initialized
91 * @see isInitialized().
92 */
93 virtual bool synchronInitializationRequest(const double timeout = 120.0, bool* abort = nullptr);
94
95 /**
96 * Sets a preferred frame type pixel format and pixel origin for this interface.
97 * If a preferred frame type is set and the native frame type can be converted into the requested frame type, all frames of this interface will have the requested type.<br>
98 * However, there is no guarantee that this interface will be able to provided the requested frame type.<br>
99 * Beware: Ensure that this interface has been initialized before calling this function.<br>
100 * @param pixelFormat The preferred pixel format
101 * @param pixelOrigin The preferred pixel origin
102 * @return True, if succeeded
103 * @see isInitialized().
104 */
105 virtual bool setPreferredFrameType(const FrameType::PixelFormat pixelFormat, const FrameType::PixelOrigin pixelOrigin) = 0;
106
107 /**
108 * Invokes an asynchronous frame request.
109 * The requested frame is identified by the index of the frame.<br>
110 * Even if not frame request callback has been registered, this function can be used to cache the requested frame inside the interface (this might speed up the synchronous frame request).<br>
111 * Beware: There is no guarantee that the requested frame will be delivered eventually, e.g. the requested frame might not exist.<br>
112 * @param index The index of the requested frame, should be in the range [0, synchronFrameNumberRequest())
113 * @param priority True, to request the frame with highest priority
114 * @see synchronFrameRequest().
115 */
116 virtual void asynchronFrameRequest(const unsigned int index, const bool priority = false) = 0;
117
118 /**
119 * Invokes a synchronous frame request.
120 * The requested frame is identified by the index of the frame.<br>
121 * This function returns an invalid frame if the requested frame cannot be delivered within a specified time frame or the abort statement has been set.<br>
122 * @param index The index of the requested frame, should be in the range [0, synchronFrameNumberRequest())
123 * @param timeout The time this functions waits at most for a requested frame, in seconds, with range [0, infinity)
124 * @param abort Optional abort statement allowing to abort the frame request at any time; set the value True to abort the request
125 * @return Resulting frame, if the frame can be delivered within the specified time frame
126 */
127 virtual FrameRef synchronFrameRequest(const unsigned int index, const double timeout = 10.0, bool* abort = nullptr) = 0;
128
129 /**
130 * Invokes a suggestion to pre-load or to cache some frames that might be requested soon.
131 * However, there is no guarantee that the requested frames will be pre-loaded.<br>
132 * Every provider is responsible to support the frame suggestions as best as possible regarding the overall system performance.<br>
133 * @param index The index of the next frame that is suggested, with range [0, asynchronFrameNumberRequest())
134 * @param range The positive or negative range of frames that are suggested; use a positive range to cache frame with increasing indices, use a negative range to cache frames with decreasing indices
135 */
136 virtual void frameCacheRequest(const unsigned int index, const int range);
137
138 /**
139 * Invokes an asynchronous frame number request.
140 * An already registered frame number request callback function is necessary so that the requested frame number can be delivered eventually.<br>
141 * Beware: There is no guarantee that the requested frame number will be delivered eventually.<br>
142 * @see synchronFrameNumberRequest().
143 */
144 virtual void asynchronFrameNumberRequest() = 0;
145
146 /**
147 * Invokes a synchronous frame number request.
148 * This function returns an invalid frame number if the requested frame number cannot be determined within a specified time frame or if the abort statement has been set.<br>
149 * @param timeout The time this functions waits at most for the requested frame number, in seconds, with range [0, infinity)
150 * @param abort Optional abort statement allowing to abort the frame number request at any time; set the value True to abort the request
151 * @return Resulting number of frames, 0xFFFFFFFF if the frame number is invalid
152 */
153 virtual unsigned int synchronFrameNumberRequest(const double timeout = 10.0, bool* abort = nullptr) = 0;
154
155 /**
156 * Invokes an asynchronous frame type request.
157 * An already registered frame type request callback function is necessary so that the requested frame type can be delivered eventually.<br>
158 * Beware: There is no guarantee that the requested frame type will be delivered eventually.<br>
159 * @see synchronFrameTypeRequest().
160 */
161 virtual void asynchronFrameTypeRequest() = 0;
162
163 /**
164 * Invokes a synchronous frame type request.
165 * This function returns an invalid frame type if the requested frame type cannot be determined within a specified time frame or if the abort statement has been set.<br>
166 * @param timeout The time this functions waits at most for the requested frame type, in seconds, with range [0, infinity)
167 * @param abort Optional abort statement allowing to abort the frame type request at any time; set the value True to abort the request
168 * @return Resulting frame type of this interface
169 */
170 virtual FrameType synchronFrameTypeRequest(const double timeout = 10.0, bool* abort = nullptr) = 0;
171
172 /**
173 * Registers a new callback function for asynchronous frame requests.
174 * All registered functions will be invoked whenever a requested frame arrives.<br>
175 * Each registered callback must be unregistered when it is not needed anymore or before the system is released.<br>
176 * @param callback Frame request callback function that will be registered
177 * @see unregisterFrameCallback().
178 */
180
181 /**
182 * Unregisters an already registered callback function for frame requests.
183 * @param callback The callback function that will be unregistered
184 * @see registerFrameCallback().
185 */
187
188 /**
189 * Registers a new callback function for asynchronous frame number requests.
190 * All registered functions will be invoked after a frame number request has been invoked.<br>
191 * Each registered callback must be unregistered when it is not needed anymore or before the system is released.<br>
192 * @param callback Frame request callback function that will be registered
193 * @see unregisterFrameCallback().
194 */
196
197 /**
198 * Unregisters an already registered callback function for frame number requests.
199 * @param callback The callback function that will be unregistered
200 * @see registerFrameNumberCallback().
201 */
203
204 /**
205 * Registers a new callback function for asynchronous frame type requests.
206 * All registered functions will be invoked after a frame type request has been invoked.<br>
207 * Each registered callback must be unregistered when it is not needed anymore or before the system is released.<br>
208 * @param callback Frame type request callback function that will be registered
209 * @see unregisterFrameTypeCallback().
210 */
212
213 /**
214 * Unregisters an already registered callback function for frame type requests.
215 * @param callback The callback function that will be unregistered
216 * @see registerFrameTypeCallback().
217 */
219
220 /**
221 * Releases all associated resources.
222 * Beware: The registered callback functions are not released.
223 */
224 virtual void release();
225
226 protected:
227
228 /**
229 * Protected default constructor.
230 */
232
233 /**
234 * Disabled copy constructor.
235 * @param frameProviderInterface Object which would be copied
236 */
237 FrameProviderInterface(const FrameProviderInterface& frameProviderInterface) = delete;
238
239 /**
240 * Releases the interface.
241 * At the moment this interface is released all registered resources (callback functions) must be unregistered.
242 */
244
245 /**
246 * Disabled copy constructor.
247 * @param frameProviderInterface Object which would be copied
248 * @return Reference to this object
249 */
250 FrameProviderInterface& operator=(const FrameProviderInterface& frameProviderInterface) = delete;
251
252 protected:
253
254 /// A list of frame request callbacks.
256
257 /// A list of frame number request callbacks.
259
260 /// A list of frame type request callbacks.
262};
263
264}
265
266}
267
268#endif // META_OCEAN_CV_FRAME_PROVIDER_INTERFACE_H
This class defines an abstract interface allowing to request frames from any kind of frame provider.
Definition FrameProviderInterface.h:38
FrameProviderInterface & operator=(const FrameProviderInterface &frameProviderInterface)=delete
Disabled copy constructor.
virtual bool isInitialized()=0
Returns whether the internal information of this interface has been initialized already and whether r...
virtual ~FrameProviderInterface()
Releases the interface.
void registerFrameTypeCallback(const FrameTypeCallback &callback)
Registers a new callback function for asynchronous frame type requests.
void unregisterFrameTypeCallback(const FrameTypeCallback &callback)
Unregisters an already registered callback function for frame type requests.
void registerFrameNumberCallback(const FrameNumberCallback &callback)
Registers a new callback function for asynchronous frame number requests.
FrameCallbacks frameCallbacks_
A list of frame request callbacks.
Definition FrameProviderInterface.h:255
ConcurrentCallbacks< FrameCallback > FrameCallbacks
Definition of a list that stores frame request callbacks.
Definition FrameProviderInterface.h:64
Callback< void, FrameRef, const unsigned int > FrameCallback
Definition of a frame request callback function.
Definition FrameProviderInterface.h:47
FrameProviderInterface(const FrameProviderInterface &frameProviderInterface)=delete
Disabled copy constructor.
ConcurrentCallbacks< FrameTypeCallback > FrameTypeCallbacks
Definition of a list that stores frame type request callbacks.
Definition FrameProviderInterface.h:74
Callback< void, unsigned int > FrameNumberCallback
Definition of a frame number request callback function.
Definition FrameProviderInterface.h:52
virtual bool setPreferredFrameType(const FrameType::PixelFormat pixelFormat, const FrameType::PixelOrigin pixelOrigin)=0
Sets a preferred frame type pixel format and pixel origin for this interface.
virtual unsigned int synchronFrameNumberRequest(const double timeout=10.0, bool *abort=nullptr)=0
Invokes a synchronous frame number request.
void registerFrameCallback(const FrameCallback &callback)
Registers a new callback function for asynchronous frame requests.
virtual FrameType synchronFrameTypeRequest(const double timeout=10.0, bool *abort=nullptr)=0
Invokes a synchronous frame type request.
Callback< void, const FrameType & > FrameTypeCallback
Definition of a frame type request callback function.
Definition FrameProviderInterface.h:57
FrameTypeCallbacks frameTypeCallbacks_
A list of frame type request callbacks.
Definition FrameProviderInterface.h:261
virtual bool synchronInitializationRequest(const double timeout=120.0, bool *abort=nullptr)
Waits until this interface has been initialized.
FrameNumberCallbacks frameNumberCallbacks_
A list of frame number request callbacks.
Definition FrameProviderInterface.h:258
void unregisterFrameCallback(const FrameCallback &callback)
Unregisters an already registered callback function for frame requests.
void unregisterFrameNumberCallback(const FrameNumberCallback &callback)
Unregisters an already registered callback function for frame number requests.
virtual void asynchronFrameRequest(const unsigned int index, const bool priority=false)=0
Invokes an asynchronous frame request.
ConcurrentCallbacks< FrameNumberCallback > FrameNumberCallbacks
Definition of a list that stores frame number request callbacks.
Definition FrameProviderInterface.h:69
FrameProviderInterface()=default
Protected default constructor.
virtual void asynchronFrameTypeRequest()=0
Invokes an asynchronous frame type request.
virtual void frameCacheRequest(const unsigned int index, const int range)
Invokes a suggestion to pre-load or to cache some frames that might be requested soon.
virtual void asynchronFrameNumberRequest()=0
Invokes an asynchronous frame number request.
virtual void release()
Releases all associated resources.
virtual FrameRef synchronFrameRequest(const unsigned int index, const double timeout=10.0, bool *abort=nullptr)=0
Invokes a synchronous frame request.
This class implements a container for callback functions.
Definition Callback.h:3456
This class implements an extended callbacks object and is also thread-safe.
Definition Callback.h:4124
Definition of a frame type composed by the frame dimension, pixel format and pixel origin.
Definition Frame.h:30
PixelFormat
Definition of all pixel formats available in the Ocean framework.
Definition Frame.h:183
PixelOrigin
Defines different types of frame origin positions.
Definition Frame.h:1046
This template class implements a object reference with an internal reference counter.
Definition base/ObjectRef.h:58
ObjectRef< FrameProviderInterface > FrameProviderInterfaceRef
Definition of an object reference holding a frame provider interface.
Definition FrameProviderInterface.h:31
The namespace covering the entire Ocean framework.
Definition Accessor.h:15