AGX Dynamics 2.42.1.1
Loading...
Searching...
No Matches
FrameIO.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or having been
9advised so by Algoryx Simulation AB for a time limited evaluation, or having purchased a
10valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
17#ifndef AGXDATA_FRAMEIO_H
18#define AGXDATA_FRAMEIO_H
19
20#include <agxData/Frame.h>
22
23namespace agxData
24{
26
29
32
34
36 {
37 public:
41 bool isActive() const;
42
46 Track *getTrack();
47 const Track *getTrack() const;
48
58 void addDataBinding(const agx::Path& internalPath, const agx::Path& externalPath, bool recursive = false);
59
63 void addDataBinding(const agx::Path& path, bool recursive = false);
64
65
66 bool removeDataBinding( const agx::Path& path );
67 bool removeDataBinding( const agx::Path& internalPath, const agx::Path& externalPath );
68
69 // void addDataBinding(const agx::Path& storagePath, agx::UInt32 instanceId, const agx::String& attributeName);
70
81 void loadDataBindings(const agx::String& xmlFilePath);
82
83 bool loadDataBindingsJSON(const agx::String& jsonFilePath);
84
85
86
91 const Frame::DataBindingRefVector& getDataBindings() const;
92
97
98
100 SerializedFrame::HeaderFormat getHeaderFormat() const;
101
102 protected:
103 FrameIO(bool active);
104 virtual ~FrameIO();
105
106 void addDataBinding(Frame::DataBinding *binding);
107
108 private:
109 friend class Track;
110 void setTrack(Track *track);
111
112 // Implementations may override this
113 virtual Frame::DataBinding *createDataBinding(const agx::Path& internalPath, const agx::Path& externalPath);
114
115 private:
116 bool m_active;
117 Track *m_track;
118 Frame::DataBindingRefVector m_dataBindings;
119 SerializedFrame::HeaderFormat m_headerFormat;
120 };
121
122
127 {
128 public:
129 FrameReader(bool active);
130
131
132 // This was removed due to thread synchronizing issues
133 // virtual agx::UInt getNextFrameSize() = 0;
134
142 virtual Frame* readFrame() = 0;
143
145 virtual void advanceToNextFrame();
146
151 virtual bool jumpToFrame(agx::UInt frameIndex);
152 virtual bool jumpToTime(agx::Real time);
153
154
155 virtual bool shouldExtract(const agx::Path& path);
156
159
160 protected:
161 virtual ~FrameReader();
162 };
163
164
169 {
170 public:
173
174 public:
175 FrameWriter(bool active);
176
180 virtual void writeFrame(const Frame *frame) = 0;
181
182 // TODO: Clean redesign, this is ugly
183 virtual void forceFlush() {}
184
185
186 virtual void endOfStream() {}
187
188 agx::UInt getNumWrittenFrames() const;
189
190 bool isEOF() const;
191
192 protected:
193 virtual ~FrameWriter();
194
196 private:
197 friend class Track;
198 void setEOF(bool flag);
199
200 private:
201 bool m_eof;
202 };
203
204
209 {
210 public:
212
213 virtual void writeFrame(const agxData::Frame *frame) override;
214
215 protected:
217 };
218
219
220
221
226 {
227 public:
228 FrameChannel(FrameReader* reader, FrameWriter* writer) : m_reader(reader), m_writer(writer) {};
229
230 FrameReader* getReader() { return m_reader; }
231 FrameWriter* getWriter() { return m_writer; }
232
233 protected:
234 virtual ~FrameChannel() {};
235
236 private:
237 FrameReaderRef m_reader;
238 FrameWriterRef m_writer;
239 };
240
241
242
243 /* Implementation */
244
245 //---------------------------------------------------------------
246
247 AGX_FORCE_INLINE bool FrameIO::isActive() const { return m_active; }
249 AGX_FORCE_INLINE const Track *FrameIO::getTrack() const { return m_track; }
250
251 AGX_FORCE_INLINE const Frame::DataBindingRefVector& FrameIO::getDataBindings() const { return m_dataBindings; }
253
254 //---------------------------------------------------------------
255
256
257 //---------------------------------------------------------------
258
259 AGX_FORCE_INLINE bool FrameWriter::isEOF() const { return m_eof; }
261
262 //---------------------------------------------------------------
263
264}
265
266
267#endif /* AGXDATA_FRAMEIO_H */
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGXCORE_EXPORT
#define AGX_DECLARE_VECTOR_TYPES(type)
Definition: agx/Vector.h:34
The DebugFrameWriter prints the contents processed frames.
Definition: FrameIO.h:209
virtual void writeFrame(const agxData::Frame *frame) override
Convenience class that store a FrameReader and a FrameWriter.
Definition: FrameIO.h:226
virtual ~FrameChannel()
Definition: FrameIO.h:234
FrameWriter * getWriter()
Definition: FrameIO.h:231
FrameChannel(FrameReader *reader, FrameWriter *writer)
Definition: FrameIO.h:228
FrameReader * getReader()
Definition: FrameIO.h:230
void addDataBinding(Frame::DataBinding *binding)
FrameIO(bool active)
SerializedFrame::HeaderFormat getHeaderFormat() const
Definition: FrameIO.h:252
bool removeDataBinding(const agx::Path &internalPath, const agx::Path &externalPath)
void addDataBinding(const agx::Path &path, bool recursive=false)
Alias for addDataBinding(path, path)
void loadDataBindings(const agx::String &xmlFilePath)
Load bindings from an xml file.
void clearDataBindings()
Remove all data bindings.
bool loadDataBindingsJSON(const agx::String &jsonFilePath)
virtual ~FrameIO()
bool removeDataBinding(const agx::Path &path)
void addDataBinding(const agx::Path &internalPath, const agx::Path &externalPath, bool recursive=false)
Register a data binding.
const Frame::DataBindingRefVector & getDataBindings() const
Definition: FrameIO.h:251
bool isActive() const
Definition: FrameIO.h:247
void setHeaderFormat(SerializedFrame::HeaderFormat format)
Track * getTrack()
Definition: FrameIO.h:248
The FrameReader reads frames from an external source.
Definition: FrameIO.h:127
virtual agx::UInt getFrameStride()
virtual agx::UInt getNextFrameIndex()
FrameReader(bool active)
virtual bool jumpToTime(agx::Real time)
virtual agx::Real getTimeStep()
virtual void advanceToNextFrame()
virtual bool shouldExtract(const agx::Path &path)
virtual bool jumpToFrame(agx::UInt frameIndex)
Select which frame that should be returned by the next call to 'readFrame'.
virtual Frame * readFrame()=0
Reads the next frame from the stream and moves the stream forward one frame.
The FrameWriter writes frames to an external target.
Definition: FrameIO.h:169
virtual void writeFrame(const Frame *frame)=0
Export a frame the implementation-specific format.
bool isEOF() const
Definition: FrameIO.h:259
virtual void forceFlush()
Definition: FrameIO.h:183
WriteEvent writeEvent
Definition: FrameIO.h:172
agx::UInt getNumWrittenFrames() const
Definition: FrameIO.h:260
FrameWriter(bool active)
virtual void endOfStream()
Definition: FrameIO.h:186
agx::Event1< const Frame * > WriteEvent
Definition: FrameIO.h:171
agx::UInt m_numWrittenFrames
Definition: FrameIO.h:195
An event with one argument.
Definition: Event.h:103
agx::Object is a refcounted object with a name.
Definition: Object.h:59
Representation of a path, a list of name components.
Definition: Path.h:33
Base class providing referencing counted objects.
Definition: Referenced.h:120
#define AGX_FORCE_INLINE
Definition: macros.h:58
Contains classes for low level data storage for AGX.
Definition: Container.h:23
uint64_t UInt
Definition: Integer.h:27
double Real
Definition: Real.h:41