Ocean
Loading...
Searching...
No Matches
FrameCollection.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_MEDIA_FRAME_COLLECTION_H
9#define META_OCEAN_MEDIA_FRAME_COLLECTION_H
10
11#include "ocean/media/Media.h"
12
13#include "ocean/base/Frame.h"
14#include "ocean/base/RingMap.h"
16
18
19namespace Ocean
20{
21
22namespace Media
23{
24
25/**
26 * This class implements a simple buffer holding several frames combined with their timestamps and optional camera calibrations.
27 * @ingroup media
28 */
29class OCEAN_MEDIA_EXPORT FrameCollection
30{
31 protected:
32
33 /**
34 * Definition of a pair combining a frame with a camera profile.
35 */
36 using FrameCameraPair = std::pair<FrameRef, SharedAnyCamera>;
37
38 /**
39 * Definition of a ring map mapping timestamps to frame pairs.
40 */
41 using RingMap = RingMapT<Timestamp, FrameCameraPair, true /*thread-safe*/, true /*ordered keys*/>;
42
43 public:
44
45 /**
46 * Creates an empty frame collection able to hold one frame.
47 */
48 FrameCollection() = default;
49
50 /**
51 * Move constructor.
52 * @param frameCollection Frame collection to move
53 */
54 FrameCollection(FrameCollection&& frameCollection) = default;
55
56 /**
57 * Copy constructor.
58 * @param frameCollection Frame collection to copy
59 */
60 FrameCollection(const FrameCollection& frameCollection) = default;
61
62 /**
63 * Creates a new frame collection.
64 * @param capacity Number of maximal frames this object can store [1, infinity)
65 */
66 explicit FrameCollection(const size_t capacity);
67
68 /**
69 * Destructs a frame collection.
70 */
72
73 /**
74 * Returns the capacity of this frame collection object.
75 * @return The frame collection object's capacity, with range [0, infinity)
76 */
77 inline size_t capacity() const;
78
79 /**
80 * Returns the most recent frame.
81 * @param anyCamera Optional resulting camera if known; nullptr if not of interest
82 * @return Most recent frame
83 */
84 FrameRef recent(SharedAnyCamera* anyCamera = nullptr) const;
85
86 /**
87 * Returns the frame with a specific timestamp.
88 * If no frame with the given timestamp exists, the most recent frame will be returned.
89 * @param timestamp The timestamp of the frame to return
90 * @param anyCamera Optional resulting camera if known; nullptr if not of interest
91 * @return Frame with the specific timestamp
92 */
93 FrameRef get(const Timestamp timestamp, SharedAnyCamera* anyCamera = nullptr) const;
94
95 /**
96 * Returns whether a frame with specific timestamp is currently stored inside the frame collection.
97 * @param timestamp The timestamp to be checked
98 * @return True, if so
99 */
100 bool has(const Timestamp timestamp) const;
101
102 /**
103 * Sets a new frame and overwrites the oldest frame.
104 * @param frame The frame to set, a copy will be created
105 * @param anyCamera Optional camera profile associated with the given frame, nullptr if unknown
106 * @return Reference to the stored frame, if succeeded
107 */
108 FrameRef set(const Frame& frame, SharedAnyCamera anyCamera = nullptr);
109
110 /**
111 * Sets a new frame and overwrites the oldest frame.
112 * @param frame The frame to set
113 * @param anyCamera Optional camera profile associated with the given frame, nullptr if unknown
114 * @return Reference to the stored frame, if succeeded
115 */
116 FrameRef set(Frame&& frame, SharedAnyCamera anyCamera = nullptr);
117
118 /**
119 * Sets or changes the capacity of this frame collection.
120 * In case the capacity is reduced, the oldest frames will be removed
121 * @param capacity The capacity to set, with range [1, infinity)
122 * @return True, if succeeded
123 */
124 bool setCapacity(const size_t capacity);
125
126 /**
127 * Returns whether the frame collection is empty.
128 * @return True, if so
129 */
130 inline bool isNull() const;
131
132 /**
133 * Removes all frames from this frame collection.
134 * The capacity will be kept.
135 */
136 void clear();
137
138 /**
139 * Returns whether the frame collection is not empty.
140 * @return True, if so
141 */
142 explicit inline operator bool() const;
143
144 /**
145 * Default move operator.
146 * @param frameCollection Frame collection to move
147 */
148 FrameCollection& operator=(FrameCollection&& frameCollection) = default;
149
150 /**
151 * Default assign operator.
152 * @param frameCollection Frame collection to assign
153 */
154 FrameCollection& operator=(const FrameCollection& frameCollection) = default;
155
156 protected:
157
158 /// The ring map mapping timestamps to frame/camera pairs.
159 RingMap ringMap_ = RingMap(1);
160};
161
162inline size_t FrameCollection::capacity() const
163{
164 return ringMap_.capacity();
165}
166
167inline bool FrameCollection::isNull() const
168{
169 return ringMap_.isEmpty();
170}
171
172inline FrameCollection::operator bool() const
173{
174 return !ringMap_.isEmpty();
175}
176
177}
178
179}
180
181#endif // META_OCEAN_MEDIA_FRAME_COLLECTION_H
This class implements Ocean's image class.
Definition Frame.h:1808
This class implements a simple buffer holding several frames combined with their timestamps and optio...
Definition FrameCollection.h:30
~FrameCollection()
Destructs a frame collection.
FrameCollection()=default
Creates an empty frame collection able to hold one frame.
FrameRef set(const Frame &frame, SharedAnyCamera anyCamera=nullptr)
Sets a new frame and overwrites the oldest frame.
RingMap ringMap_
The ring map mapping timestamps to frame/camera pairs.
Definition FrameCollection.h:159
bool has(const Timestamp timestamp) const
Returns whether a frame with specific timestamp is currently stored inside the frame collection.
std::pair< FrameRef, SharedAnyCamera > FrameCameraPair
Definition of a pair combining a frame with a camera profile.
Definition FrameCollection.h:36
FrameCollection(FrameCollection &&frameCollection)=default
Move constructor.
bool setCapacity(const size_t capacity)
Sets or changes the capacity of this frame collection.
FrameCollection(const FrameCollection &frameCollection)=default
Copy constructor.
void clear()
Removes all frames from this frame collection.
FrameCollection & operator=(FrameCollection &&frameCollection)=default
Default move operator.
FrameCollection & operator=(const FrameCollection &frameCollection)=default
Default assign operator.
FrameCollection(const size_t capacity)
Creates a new frame collection.
size_t capacity() const
Returns the capacity of this frame collection object.
Definition FrameCollection.h:162
FrameRef get(const Timestamp timestamp, SharedAnyCamera *anyCamera=nullptr) const
Returns the frame with a specific timestamp.
bool isNull() const
Returns whether the frame collection is empty.
Definition FrameCollection.h:167
FrameRef recent(SharedAnyCamera *anyCamera=nullptr) const
Returns the most recent frame.
FrameRef set(Frame &&frame, SharedAnyCamera anyCamera=nullptr)
Sets a new frame and overwrites the oldest frame.
This template class implements a object reference with an internal reference counter.
Definition base/ObjectRef.h:58
size_t capacity() const
Returns the capacity of this storage container.
Definition RingMap.h:287
bool isEmpty() const
Returns whether this ring map holds at least one element.
Definition RingMap.h:597
This class implements a timestamp.
Definition Timestamp.h:36
std::shared_ptr< AnyCamera > SharedAnyCamera
Definition of a shared pointer holding an AnyCamera object with Scalar precision.
Definition AnyCamera.h:60
The namespace covering the entire Ocean framework.
Definition Accessor.h:15