AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
bytestream.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef AJA_BYTESTREAM_H
9 #define AJA_BYTESTREAM_H
10 
11 #include <stddef.h>
12 #include <string.h>
13 #include "ajabase/common/types.h"
14 
16  public:
17  AJAByteStream(void *buf = NULL, size_t pos = 0);
18 
19  size_t Pos() const;
20  void *Buffer() const;
21 
22  void Reset();
23  void Seek(size_t val); // Seeks to an absolute position
24  void SeekFwd(size_t val); // Seeks forward n bytes
25  void SeekRev(size_t val); // Seeks backwards n bytes
26 
27  void Set(uint8_t val, size_t bytes);
28  void Write(const void *buf, size_t bytes);
29  void Write8(uint8_t val);
30  void Write16LE(uint16_t val);
31  void Write16BE(uint16_t val);
32  void Write32LE(uint32_t val);
33  void Write32BE(uint32_t val);
34  void Write64LE(uint64_t val);
35  void Write64BE(uint64_t val);
36 
37  void Read(void *buf, size_t LEn);
38  uint8_t Read8();
39  uint16_t Read16LE();
40  uint16_t Read16BE();
41  uint32_t Read32LE();
42  uint32_t Read32BE();
43  uint64_t Read64LE();
44  uint64_t Read64BE();
45 
46  private:
47  uint8_t *b; // Beginning buffer position
48  uint8_t *c; // Current buffer position
49 };
50 
51 inline AJAByteStream::AJAByteStream(void *buf, size_t pos) : b((uint8_t *)buf) {
52  Seek(pos);
53 }
54 
55 inline size_t AJAByteStream::Pos() const {
56  return (size_t)(c - b);
57 }
58 
59 inline void *AJAByteStream::Buffer() const {
60  return b;
61 }
62 
63 inline void AJAByteStream::Reset() {
64  c = b;
65  return;
66 }
67 
68 inline void AJAByteStream::Seek(size_t val) {
69  c = b + val;
70  return;
71 }
72 
73 inline void AJAByteStream::SeekFwd(size_t val) {
74  c += val;
75  return;
76 }
77 
78 inline void AJAByteStream::SeekRev(size_t val) {
79  c -= val;
80  return;
81 }
82 
83 inline void AJAByteStream::Set(uint8_t val, size_t bytes) {
84  uint8_t *last = c + bytes;
85  while(c != last) *c++ = val;
86  return;
87 }
88 
89 inline void AJAByteStream::Write(const void *buf, size_t bytes) {
90  memcpy(c, buf, bytes);
91  c += bytes;
92  return;
93 }
94 
95 inline void AJAByteStream::Write8(uint8_t val) {
96  *c++ = val;
97  return;
98 }
99 
100 inline void AJAByteStream::Write16LE(uint16_t val) {
101  c[0] = val & 0xFF;
102  c[1] = (val >> 8) & 0xFF;
103  c += 2;
104  return;
105 }
106 
107 inline void AJAByteStream::Write16BE(uint16_t val) {
108  c[0] = (val >> 8) & 0xFF;
109  c[1] = val & 0xFF;
110  c += 2;
111  return;
112 }
113 
114 inline void AJAByteStream::Write32LE(uint32_t val) {
115  c[0] = val & 0xFF;
116  c[1] = (val >> 8) & 0xFF;
117  c[2] = (val >> 16) & 0xFF;
118  c[3] = (val >> 24) & 0xFF;
119  c += 4;
120  return;
121 }
122 
123 inline void AJAByteStream::Write32BE(uint32_t val) {
124  c[0] = (val >> 24) & 0xFF;
125  c[1] = (val >> 16) & 0xFF;
126  c[2] = (val >> 8) & 0xFF;
127  c[3] = val & 0xFF;
128  c += 4;
129  return;
130 }
131 
132 inline void AJAByteStream::Write64LE(uint64_t val) {
133  c[0] = val & 0xFF;
134  c[1] = (val >> 8) & 0xFF;
135  c[2] = (val >> 16) & 0xFF;
136  c[3] = (val >> 24) & 0xFF;
137  c[4] = (val >> 32) & 0xFF;
138  c[5] = (val >> 40) & 0xFF;
139  c[6] = (val >> 48) & 0xFF;
140  c[7] = (val >> 56) & 0xFF;
141  c += 8;
142  return;
143 }
144 
145 inline void AJAByteStream::Write64BE(uint64_t val) {
146  c[0] = (val >> 56) & 0xFF;
147  c[1] = (val >> 48) & 0xFF;
148  c[2] = (val >> 40) & 0xFF;
149  c[3] = (val >> 32) & 0xFF;
150  c[4] = (val >> 24) & 0xFF;
151  c[5] = (val >> 16) & 0xFF;
152  c[6] = (val >> 8) & 0xFF;
153  c[7] = val & 0xFF;
154  c += 8;
155  return;
156 }
157 
158 inline void AJAByteStream::Read(void *buf, size_t bytes) {
159  uint8_t *last = c + bytes, *o = (uint8_t *)buf;
160  while(c != last) *o++ = *c++;
161  return;
162 }
163 
164 inline uint8_t AJAByteStream::Read8() {
165  return *c++;
166 }
167 
168 inline uint16_t AJAByteStream::Read16LE() {
169  uint16_t ret;
170  ret = (uint16_t)c[0];
171  ret |= (uint16_t)c[1] << 8;
172  c += 2;
173  return ret;
174 }
175 
176 inline uint16_t AJAByteStream::Read16BE() {
177  uint16_t ret;
178  ret = (uint16_t)c[0] << 8;
179  ret |= (uint16_t)c[1];
180  c += 2;
181  return ret;
182 }
183 
184 inline uint32_t AJAByteStream::Read32LE() {
185  uint32_t ret;
186  ret = (uint32_t)c[0];
187  ret |= (uint32_t)c[1] << 8;
188  ret |= (uint32_t)c[2] << 16;
189  ret |= (uint32_t)c[3] << 24;
190  c += 4;
191  return ret;
192 }
193 
194 inline uint32_t AJAByteStream::Read32BE() {
195  uint32_t ret;
196  ret = (uint32_t)c[0] << 24;
197  ret |= (uint32_t)c[1] << 16;
198  ret |= (uint32_t)c[2] << 8;
199  ret |= (uint32_t)c[3];
200  c += 4;
201  return ret;
202 }
203 
204 inline uint64_t AJAByteStream::Read64LE() {
205  uint64_t ret;
206  ret = (uint64_t)c[0];
207  ret |= (uint64_t)c[1] << 8;
208  ret |= (uint64_t)c[2] << 16;
209  ret |= (uint64_t)c[3] << 24;
210  ret |= (uint64_t)c[4] << 32;
211  ret |= (uint64_t)c[5] << 40;
212  ret |= (uint64_t)c[6] << 48;
213  ret |= (uint64_t)c[7] << 56;
214  c += 8;
215  return ret;
216 }
217 
218 inline uint64_t AJAByteStream::Read64BE() {
219  uint64_t ret;
220  ret = (uint64_t)c[0] << 56;
221  ret |= (uint64_t)c[1] << 48;
222  ret |= (uint64_t)c[2] << 40;
223  ret |= (uint64_t)c[3] << 32;
224  ret |= (uint64_t)c[4] << 24;
225  ret |= (uint64_t)c[5] << 16;
226  ret |= (uint64_t)c[6] << 8;
227  ret |= (uint64_t)c[7];
228  c += 8;
229  return ret;
230 }
231 
232 #endif /* ifndef AJA_BYTESTREAM_H */
AJAByteStream::SeekFwd
void SeekFwd(size_t val)
Definition: bytestream.h:73
types.h
Declares common types used in the ajabase library.
NULL
#define NULL
Definition: ntv2caption608types.h:19
AJAByteStream::SeekRev
void SeekRev(size_t val)
Definition: bytestream.h:78
AJAByteStream::Set
void Set(uint8_t val, size_t bytes)
Definition: bytestream.h:83
AJAByteStream::Seek
void Seek(size_t val)
Definition: bytestream.h:68
AJAByteStream::AJAByteStream
AJAByteStream(void *buf=NULL, size_t pos=0)
Definition: bytestream.h:51
AJAByteStream::Pos
size_t Pos() const
Definition: bytestream.h:55
AJAByteStream::Read64LE
uint64_t Read64LE()
Definition: bytestream.h:204
AJAByteStream::Read32LE
uint32_t Read32LE()
Definition: bytestream.h:184
AJAByteStream::Write
void Write(const void *buf, size_t bytes)
Definition: bytestream.h:89
AJAByteStream::Write32LE
void Write32LE(uint32_t val)
Definition: bytestream.h:114
AJAByteStream::Read16LE
uint16_t Read16LE()
Definition: bytestream.h:168
AJAByteStream::Read16BE
uint16_t Read16BE()
Definition: bytestream.h:176
AJAByteStream::Write32BE
void Write32BE(uint32_t val)
Definition: bytestream.h:123
AJAByteStream::Read32BE
uint32_t Read32BE()
Definition: bytestream.h:194
AJAByteStream::Write16BE
void Write16BE(uint16_t val)
Definition: bytestream.h:107
AJAByteStream::Read64BE
uint64_t Read64BE()
Definition: bytestream.h:218
AJAByteStream::Write64BE
void Write64BE(uint64_t val)
Definition: bytestream.h:145
AJAByteStream::Reset
void Reset()
Definition: bytestream.h:63
AJAByteStream
Definition: bytestream.h:15
AJAByteStream::Write8
void Write8(uint8_t val)
Definition: bytestream.h:95
AJAByteStream::Write64LE
void Write64LE(uint64_t val)
Definition: bytestream.h:132
AJAByteStream::Write16LE
void Write16LE(uint16_t val)
Definition: bytestream.h:100
AJAByteStream::Buffer
void * Buffer() const
Definition: bytestream.h:59
AJAByteStream::Read
void Read(void *buf, size_t LEn)
Definition: bytestream.h:158
AJAByteStream::Read8
uint8_t Read8()
Definition: bytestream.h:164