libltc  1.1.3
Linear/Logitudinal Time Code (LTC) Library
ltc.h
Go to the documentation of this file.
1 
36 #ifndef LTC_H
37 #define LTC_H 1
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 #ifdef __BIG_ENDIAN__
44 # define LTC_BIG_ENDIAN
45 #elif defined _BIG_ENDIAN
46 # define LTC_BIG_ENDIAN
47 #else
48 # include <endian.h>
49 # if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
50 # define LTC_BIG_ENDIAN
51 # endif
52 #endif
53 
54 
55 #include <stddef.h> /* size_t */
56 
57 #ifndef DOXYGEN_IGNORE
58 /* libltc version */
59 #define LIBLTC_VERSION "1.1.3"
60 #define LIBLTC_VERSION_MAJOR 1
61 #define LIBLTC_VERSION_MINOR 1
62 #define LIBLTC_VERSION_MICRO 3
63 
64 /* interface revision number
65  * http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
66  */
67 #define LIBLTC_CUR 11
68 #define LIBLTC_REV 2
69 #define LIBLTC_AGE 0
70 #endif /* end DOXYGEN_IGNORE */
71 
75 typedef unsigned char ltcsnd_sample_t;
76 
80 typedef long long int ltc_off_t;
81 
82 #define LTC_FRAME_BIT_COUNT 80
83 
174 #if (defined LTC_BIG_ENDIAN && !defined DOXYGEN_IGNORE)
175 // Big Endian version, bytes are "upside down"
176 struct LTCFrame {
177  unsigned int user1:4;
178  unsigned int frame_units:4;
179 
180  unsigned int user2:4;
181  unsigned int col_frame:1;
182  unsigned int dfbit:1;
183  unsigned int frame_tens:2;
184 
185  unsigned int user3:4;
186  unsigned int secs_units:4;
187 
188  unsigned int user4:4;
189  unsigned int biphase_mark_phase_correction:1;
190  unsigned int secs_tens:3;
191 
192  unsigned int user5:4;
193  unsigned int mins_units:4;
194 
195  unsigned int user6:4;
196  unsigned int binary_group_flag_bit0:1;
197  unsigned int mins_tens:3;
198 
199  unsigned int user7:4;
200  unsigned int hours_units:4;
201 
202  unsigned int user8:4;
203  unsigned int binary_group_flag_bit2:1;
204  unsigned int binary_group_flag_bit1:1;
205  unsigned int hours_tens:2;
206 
207  unsigned int sync_word:16;
208 };
209 #else
210 /* Little Endian version -- and doxygen doc */
211 struct LTCFrame {
212  unsigned int frame_units:4;
213  unsigned int user1:4;
214 
215  unsigned int frame_tens:2;
216  unsigned int dfbit:1;
217  unsigned int col_frame:1;
218  unsigned int user2:4;
219 
220  unsigned int secs_units:4;
221  unsigned int user3:4;
222 
223  unsigned int secs_tens:3;
225  unsigned int user4:4;
226 
227  unsigned int mins_units:4;
228  unsigned int user5:4;
229 
230  unsigned int mins_tens:3;
231  unsigned int binary_group_flag_bit0:1;
232  unsigned int user6:4;
233 
234  unsigned int hours_units:4;
235  unsigned int user7:4;
236 
237  unsigned int hours_tens:2;
238  unsigned int binary_group_flag_bit1:1;
239  unsigned int binary_group_flag_bit2:1;
240  unsigned int user8:4;
241 
242  unsigned int sync_word:16;
243 };
244 #endif
245 
255 };
256 
263 };
264 
268 typedef struct LTCFrame LTCFrame;
269 
286 struct LTCFrameExt {
288  ltc_off_t off_start;
289  ltc_off_t off_end;
290  int reverse;
292  ltcsnd_sample_t sample_min;
293  ltcsnd_sample_t sample_max;
294  double volume;
295 };
296 
300 typedef struct LTCFrameExt LTCFrameExt;
301 
306  char timezone[6];
307  unsigned char years;
308  unsigned char months;
309  unsigned char days;
310 
311  unsigned char hours;
312  unsigned char mins;
313  unsigned char secs;
314  unsigned char frame;
315 };
316 
321 
322 
327 typedef struct LTCDecoder LTCDecoder;
328 
333 typedef struct LTCEncoder LTCEncoder;
334 
344 void ltc_frame_to_time(SMPTETimecode* stime, LTCFrame* frame, int flags);
345 
358 void ltc_time_to_frame(LTCFrame* frame, SMPTETimecode* stime, enum LTC_TV_STANDARD standard, int flags);
359 
366 void ltc_frame_reset(LTCFrame* frame);
367 
382 int ltc_frame_increment(LTCFrame* frame, int fps, enum LTC_TV_STANDARD standard, int flags);
383 
399 int ltc_frame_decrement(LTCFrame* frame, int fps, enum LTC_TV_STANDARD standard, int flags);
400 
409 LTCDecoder * ltc_decoder_create(int apv, int queue_size);
410 
411 
417 
430  ltcsnd_sample_t *buf, size_t size,
431  ltc_off_t posinfo);
432 
442 void ltc_decoder_write_float(LTCDecoder *d, float *buf, size_t size, ltc_off_t posinfo);
443 
453 void ltc_decoder_write_s16(LTCDecoder *d, short *buf, size_t size, ltc_off_t posinfo);
454 
464 void ltc_decoder_write_u16(LTCDecoder *d, unsigned short *buf, size_t size, ltc_off_t posinfo);
465 
474 int ltc_decoder_read(LTCDecoder *d, LTCFrameExt *frame);
475 
481 
488 
489 
490 
501 LTCEncoder* ltc_encoder_create(double sample_rate, double fps, enum LTC_TV_STANDARD standard, int flags);
502 
508 
522 
534 
540 
547 
558 
566 
577 int ltc_encoder_get_buffer(LTCEncoder *e, ltcsnd_sample_t *buf);
578 
579 
588 ltcsnd_sample_t *ltc_encoder_get_bufptr(LTCEncoder *e, int *size, int flush);
589 
595 
608 
635 int ltc_encoder_reinit(LTCEncoder *e, double sample_rate, double fps, enum LTC_TV_STANDARD standard, int flags);
636 
644 
662 int ltc_encoder_set_bufsize(LTCEncoder *e, double sample_rate, double fps);
663 
680 int ltc_encoder_set_volume(LTCEncoder *e, double dBFS);
681 
698 void ltc_encoder_set_filter(LTCEncoder *e, double rise_time);
699 
722 int ltc_encoder_encode_byte(LTCEncoder *e, int byte, double speed);
723 
738 
756 void ltc_frame_set_parity(LTCFrame *frame, enum LTC_TV_STANDARD standard);
757 
768 int parse_bcg_flags(LTCFrame *f, enum LTC_TV_STANDARD standard);
769 
784 ltc_off_t ltc_frame_alignment(double samples_per_frame, enum LTC_TV_STANDARD standard);
785 
786 #ifdef __cplusplus
787 }
788 #endif
789 
790 #endif
ltc_off_t ltc_frame_alignment(double samples_per_frame, enum LTC_TV_STANDARD standard)
unsigned char secs
second 0..60
Definition: ltc.h:313
void ltc_encoder_buffer_flush(LTCEncoder *e)
int ltc_encoder_inc_timecode(LTCEncoder *e)
void ltc_frame_to_time(SMPTETimecode *stime, LTCFrame *frame, int flags)
unsigned char ltcsnd_sample_t
Definition: ltc.h:75
void ltc_encoder_set_timecode(LTCEncoder *e, SMPTETimecode *t)
int ltc_encoder_dec_timecode(LTCEncoder *e)
int reverse
if non-zero, a reverse played LTC frame was detected. Since the frame was reversed, it started at off_end and finishes as off_start (off_end &gt; off_start). (Note: in reverse playback the (reversed) sync-word of the next/previous frame is detected, this offset is corrected).
Definition: ltc.h:290
int ltc_decoder_free(LTCDecoder *d)
int ltc_decoder_queue_length(LTCDecoder *d)
unsigned int sync_word
Definition: ltc.h:242
LTCEncoder * ltc_encoder_create(double sample_rate, double fps, enum LTC_TV_STANDARD standard, int flags)
unsigned int user8
Definition: ltc.h:240
struct LTCEncoder LTCEncoder
Definition: ltc.h:333
unsigned char months
valid months are 1..12
Definition: ltc.h:308
ltcsnd_sample_t * ltc_encoder_get_bufptr(LTCEncoder *e, int *size, int flush)
unsigned int user3
Definition: ltc.h:221
void ltc_encoder_get_timecode(LTCEncoder *e, SMPTETimecode *t)
unsigned char days
day of month 1..31
Definition: ltc.h:309
void ltc_encoder_set_filter(LTCEncoder *e, double rise_time)
LTC_BG_FLAGS
Definition: ltc.h:258
25fps
Definition: ltc.h:252
the Timecode is wall-clock aka freerun. This also sets BGF1 (unless LTC_BGF_DONT_TOUCH is given) ...
Definition: ltc.h:260
unsigned int frame_tens
SMPTE framenumber BCD tens 0..3.
Definition: ltc.h:215
unsigned int mins_tens
SMPTE minutes BCD tens 0..6.
Definition: ltc.h:230
int ltc_encoder_set_volume(LTCEncoder *e, double dBFS)
int ltc_frame_decrement(LTCFrame *frame, int fps, enum LTC_TV_STANDARD standard, int flags)
unsigned int binary_group_flag_bit1
indicate timecode is local time wall-clock, see table above - bit 58
Definition: ltc.h:238
unsigned int user4
Definition: ltc.h:225
unsigned int frame_units
SMPTE framenumber BCD unit 0..9.
Definition: ltc.h:212
#define LTC_FRAME_BIT_COUNT
Definition: ltc.h:82
unsigned int user2
Definition: ltc.h:218
void ltc_frame_reset(LTCFrame *frame)
void ltc_encoder_reset(LTCEncoder *e)
24fps
Definition: ltc.h:254
void ltc_decoder_write_s16(LTCDecoder *d, short *buf, size_t size, ltc_off_t posinfo)
unsigned char frame
sub-second frame 0..(FPS - 1)
Definition: ltc.h:314
ltc_off_t off_end
Definition: ltc.h:289
void ltc_decoder_write_u16(LTCDecoder *d, unsigned short *buf, size_t size, ltc_off_t posinfo)
30fps
Definition: ltc.h:253
void ltc_decoder_queue_flush(LTCDecoder *d)
unsigned int biphase_mark_phase_correction
see note on Bit 27 in description and ltc_frame_set_parity .
Definition: ltc.h:224
int parse_bcg_flags(LTCFrame *f, enum LTC_TV_STANDARD standard)
unsigned int col_frame
colour-frame: timecode intentionally synchronized to a colour TV field sequence
Definition: ltc.h:217
int ltc_encoder_get_buffer(LTCEncoder *e, ltcsnd_sample_t *buf)
float biphase_tics[LTC_FRAME_BIT_COUNT]
detailed timing info: phase of the LTC signal; the time between each bit in the LTC-frame in audio-fr...
Definition: ltc.h:291
int ltc_encoder_set_bufsize(LTCEncoder *e, double sample_rate, double fps)
int ltc_encoder_reinit(LTCEncoder *e, double sample_rate, double fps, enum LTC_TV_STANDARD standard, int flags)
unsigned int binary_group_flag_bit2
indicate user-data char encoding (or parity with 25fps), see table above - bit 59 ...
Definition: ltc.h:239
void ltc_decoder_write(LTCDecoder *d, ltcsnd_sample_t *buf, size_t size, ltc_off_t posinfo)
parity bit is left untouched when setting or in/decrementing the encoder frame-number ...
Definition: ltc.h:262
LTCFrame ltc
the actual LTC frame. see LTCFrame
Definition: ltc.h:287
Definition: ltc.h:286
void ltc_encoder_get_frame(LTCEncoder *e, LTCFrame *f)
void ltc_time_to_frame(LTCFrame *frame, SMPTETimecode *stime, enum LTC_TV_STANDARD standard, int flags)
void ltc_encoder_encode_frame(LTCEncoder *e)
void ltc_frame_set_parity(LTCFrame *frame, enum LTC_TV_STANDARD standard)
char timezone[6]
the timezone 6bytes: &quot;+HHMM&quot; textual representation
Definition: ltc.h:306
unsigned int user6
Definition: ltc.h:232
ltc_off_t off_start
Definition: ltc.h:288
unsigned char mins
minute 0..60
Definition: ltc.h:312
unsigned int dfbit
indicated drop-frame timecode
Definition: ltc.h:216
Definition: ltc.h:211
unsigned int hours_tens
SMPTE hours BCD tens 0..2.
Definition: ltc.h:237
unsigned int binary_group_flag_bit0
indicate user-data char encoding, see table above - bit 43
Definition: ltc.h:231
int ltc_frame_increment(LTCFrame *frame, int fps, enum LTC_TV_STANDARD standard, int flags)
encoder init or re-init does not touch the BGF bits (initial values after initialization is zero) ...
Definition: ltc.h:261
struct LTCDecoder LTCDecoder
Definition: ltc.h:327
int ltc_encoder_encode_byte(LTCEncoder *e, int byte, double speed)
ltcsnd_sample_t sample_max
the maximum input sample signal for this frame (0..255)
Definition: ltc.h:293
Definition: ltc.h:305
unsigned int mins_units
SMPTE minutes BCD unit 0..9.
Definition: ltc.h:227
double volume
the volume of the input signal in dbFS
Definition: ltc.h:294
unsigned char years
LTC-date uses 2-digit year 00.99.
Definition: ltc.h:307
void ltc_decoder_write_float(LTCDecoder *d, float *buf, size_t size, ltc_off_t posinfo)
unsigned int user1
Definition: ltc.h:213
void ltc_encoder_free(LTCEncoder *e)
unsigned int secs_units
SMPTE seconds BCD unit 0..9.
Definition: ltc.h:220
LTCFrame &lt;&gt; SMPTETimecode converter and LTCFrame increment/decrement use date, also set BGF2 to &#39;1&#39;...
Definition: ltc.h:259
unsigned int hours_units
SMPTE hours BCD unit 0..9.
Definition: ltc.h:234
unsigned int secs_tens
SMPTE seconds BCD tens 0..6.
Definition: ltc.h:223
LTCDecoder * ltc_decoder_create(int apv, int queue_size)
30fps
Definition: ltc.h:251
unsigned char hours
hour 0..23
Definition: ltc.h:311
void ltc_encoder_set_frame(LTCEncoder *e, LTCFrame *f)
ltcsnd_sample_t sample_min
the minimum input sample signal for this frame (0..255)
Definition: ltc.h:292
LTC_TV_STANDARD
Definition: ltc.h:250
unsigned int user5
Definition: ltc.h:228
int ltc_decoder_read(LTCDecoder *d, LTCFrameExt *frame)
long long int ltc_off_t
Definition: ltc.h:80
size_t ltc_encoder_get_buffersize(LTCEncoder *e)
unsigned int user7
Definition: ltc.h:235