libltc  1.3.2
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 #if defined _WIN32 && !defined(__LITTLE_ENDIAN__)
44 #define __LITTLE_ENDIAN__
45 #endif
46 
47 #ifdef __BIG_ENDIAN__
48 # define LTC_BIG_ENDIAN
49 #elif defined _BIG_ENDIAN
50 # define LTC_BIG_ENDIAN
51 #elif defined __BYTE_ORDER__
52 # if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
53 # define LTC_BIG_ENDIAN
54 # endif
55 #elif !defined __LITTLE_ENDIAN__
56 # include <endian.h> // machine/endian.h
57 # if (defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__ && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
58 # define LTC_BIG_ENDIAN
59 # endif
60 #endif
61 
62 #if defined(__GNUC__) && __GNUC__ >= 4
63 # define DEPRECATED_EXPORT __attribute__((__deprecated__))
64 #else
65 # define DEPRECATED_EXPORT
66 #endif
67 
68 #include <stddef.h> /* size_t */
69 
70 #ifndef DOXYGEN_IGNORE
71 /* libltc version */
72 #define LIBLTC_VERSION "1.3.2"
73 #define LIBLTC_VERSION_MAJOR 1
74 #define LIBLTC_VERSION_MINOR 3
75 #define LIBLTC_VERSION_MICRO 2
76 
77 /* interface revision number
78  * http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
79  */
80 #define LIBLTC_CUR 13
81 #define LIBLTC_REV 0
82 #define LIBLTC_AGE 2
83 #endif /* end DOXYGEN_IGNORE */
84 
88 typedef unsigned char ltcsnd_sample_t;
89 
93 typedef long long int ltc_off_t;
94 
95 #define LTC_FRAME_BIT_COUNT 80
96 
187 #if (defined LTC_BIG_ENDIAN && !defined DOXYGEN_IGNORE)
188 // Big Endian version, bytes are "upside down"
189 struct LTCFrame {
190  unsigned int user1:4;
191  unsigned int frame_units:4;
192 
193  unsigned int user2:4;
194  unsigned int col_frame:1;
195  unsigned int dfbit:1;
196  unsigned int frame_tens:2;
197 
198  unsigned int user3:4;
199  unsigned int secs_units:4;
200 
201  unsigned int user4:4;
202  unsigned int biphase_mark_phase_correction:1;
203  unsigned int secs_tens:3;
204 
205  unsigned int user5:4;
206  unsigned int mins_units:4;
207 
208  unsigned int user6:4;
209  unsigned int binary_group_flag_bit0:1;
210  unsigned int mins_tens:3;
211 
212  unsigned int user7:4;
213  unsigned int hours_units:4;
214 
215  unsigned int user8:4;
216  unsigned int binary_group_flag_bit2:1;
217  unsigned int binary_group_flag_bit1:1;
218  unsigned int hours_tens:2;
219 
220  unsigned int sync_word:16;
221 };
222 #else
223 /* Little Endian version -- and doxygen doc */
224 struct LTCFrame {
225  unsigned int frame_units:4;
226  unsigned int user1:4;
227 
228  unsigned int frame_tens:2;
229  unsigned int dfbit:1;
230  unsigned int col_frame:1;
231  unsigned int user2:4;
232 
233  unsigned int secs_units:4;
234  unsigned int user3:4;
235 
236  unsigned int secs_tens:3;
238  unsigned int user4:4;
239 
240  unsigned int mins_units:4;
241  unsigned int user5:4;
242 
243  unsigned int mins_tens:3;
244  unsigned int binary_group_flag_bit0:1;
245  unsigned int user6:4;
246 
247  unsigned int hours_units:4;
248  unsigned int user7:4;
249 
250  unsigned int hours_tens:2;
251  unsigned int binary_group_flag_bit1:1;
252  unsigned int binary_group_flag_bit2:1;
253  unsigned int user8:4;
254 
255  unsigned int sync_word:16;
256 };
257 #endif
258 
268 };
269 
275  LTC_NO_PARITY = 8
276 };
277 
281 typedef struct LTCFrame LTCFrame;
282 
299 struct LTCFrameExt {
303  int reverse;
307  double volume;
308 };
309 
313 typedef struct LTCFrameExt LTCFrameExt;
314 
319  char timezone[6];
320  unsigned char years;
321  unsigned char months;
322  unsigned char days;
323 
324  unsigned char hours;
325  unsigned char mins;
326  unsigned char secs;
327  unsigned char frame;
328 };
329 
333 typedef struct SMPTETimecode SMPTETimecode;
334 
335 
340 typedef struct LTCDecoder LTCDecoder;
341 
346 typedef struct LTCEncoder LTCEncoder;
347 
357 void ltc_frame_to_time(SMPTETimecode* stime, LTCFrame* frame, int flags);
358 
371 void ltc_time_to_frame(LTCFrame* frame, SMPTETimecode* stime, enum LTC_TV_STANDARD standard, int flags);
372 
380 
395 int ltc_frame_increment(LTCFrame* frame, int fps, enum LTC_TV_STANDARD standard, int flags);
396 
412 int ltc_frame_decrement(LTCFrame* frame, int fps, enum LTC_TV_STANDARD standard, int flags);
413 
422 LTCDecoder * ltc_decoder_create(int apv, int queue_size);
423 
424 
430 
443  ltcsnd_sample_t *buf, size_t size,
444  ltc_off_t posinfo);
445 
455 void ltc_decoder_write_double(LTCDecoder *d, double *buf, size_t size, ltc_off_t posinfo);
456 
466 void ltc_decoder_write_float(LTCDecoder *d, float *buf, size_t size, ltc_off_t posinfo);
467 
477 void ltc_decoder_write_s16(LTCDecoder *d, short *buf, size_t size, ltc_off_t posinfo);
478 
488 void ltc_decoder_write_u16(LTCDecoder *d, unsigned short *buf, size_t size, ltc_off_t posinfo);
489 
499 
505 
512 
513 
514 
525 LTCEncoder* ltc_encoder_create(double sample_rate, double fps, enum LTC_TV_STANDARD standard, int flags);
526 
532 
546 
558 
568 void ltc_encoder_set_user_bits(LTCEncoder *e, unsigned long data);
569 
577 
583 
590 
601 
609 
623 
635 
647 
657 
663 
676 
703 int ltc_encoder_reinit(LTCEncoder *e, double sample_rate, double fps, enum LTC_TV_STANDARD standard, int flags);
704 
712 
732 int ltc_encoder_set_bufsize(LTCEncoder *e, double sample_rate, double fps) DEPRECATED_EXPORT;
733 
751 int ltc_encoder_set_buffersize(LTCEncoder *e, double sample_rate, double fps);
752 
760 
777 int ltc_encoder_set_volume(LTCEncoder *e, double dBFS);
778 
786 
803 void ltc_encoder_set_filter(LTCEncoder *e, double rise_time);
804 
827 int ltc_encoder_encode_byte(LTCEncoder *e, int byte, double speed);
828 
849 
864 
877 
895 void ltc_frame_set_parity(LTCFrame *frame, enum LTC_TV_STANDARD standard);
896 
908 
923 ltc_off_t ltc_frame_alignment(double samples_per_frame, enum LTC_TV_STANDARD standard);
924 
925 #ifdef __cplusplus
926 }
927 #endif
928 
929 #endif
ltc_off_t off_end
the sample in the stream corresponding to the end of the LTC frame.
Definition: ltc.h:302
LTCDecoder * ltc_decoder_create(int apv, int queue_size)
size_t ltc_encoder_get_buffersize(LTCEncoder *e)
int ltc_encoder_copy_buffer(LTCEncoder *e, ltcsnd_sample_t *buf)
void ltc_decoder_write_double(LTCDecoder *d, double *buf, size_t size, ltc_off_t posinfo)
int ltc_encoder_get_buffer(LTCEncoder *e, ltcsnd_sample_t *buf) DEPRECATED_EXPORT
void ltc_encoder_free(LTCEncoder *e)
void ltc_decoder_write_s16(LTCDecoder *d, short *buf, size_t size, ltc_off_t posinfo)
void ltc_encoder_get_timecode(LTCEncoder *e, SMPTETimecode *t)
unsigned char frame
sub-second frame 0..(FPS - 1)
Definition: ltc.h:327
unsigned char ltcsnd_sample_t
Definition: ltc.h:88
LTC_BG_FLAGS
Definition: ltc.h:271
@ LTC_TC_CLOCK
the Timecode is wall-clock aka freerun. This also sets BGF1 (unless LTC_BGF_DONT_TOUCH is given)
Definition: ltc.h:273
@ LTC_BGF_DONT_TOUCH
encoder init or re-init does not touch the BGF bits (initial values after initialization is zero)
Definition: ltc.h:274
@ LTC_USE_DATE
LTCFrame <> SMPTETimecode converter and LTCFrame increment/decrement use date, also set BGF2 to '1' w...
Definition: ltc.h:272
@ LTC_NO_PARITY
parity bit is left untouched when setting or in/decrementing the encoder frame-number
Definition: ltc.h:275
long long int ltc_off_t
Definition: ltc.h:93
int ltc_encoder_inc_timecode(LTCEncoder *e)
#define DEPRECATED_EXPORT
Definition: ltc.h:65
ltc_off_t ltc_frame_alignment(double samples_per_frame, enum LTC_TV_STANDARD standard)
unsigned int user7
Definition: ltc.h:248
int ltc_encoder_encode_byte(LTCEncoder *e, int byte, double speed)
void ltc_encoder_set_timecode(LTCEncoder *e, SMPTETimecode *t)
#define LTC_FRAME_BIT_COUNT
Definition: ltc.h:95
void ltc_encoder_set_user_bits(LTCEncoder *e, unsigned long data)
unsigned char months
valid months are 1..12
Definition: ltc.h:321
int ltc_encoder_dec_timecode(LTCEncoder *e)
unsigned int user4
Definition: ltc.h:238
unsigned int frame_units
SMPTE framenumber BCD unit 0..9.
Definition: ltc.h:225
unsigned int biphase_mark_phase_correction
see note on Bit 27 in description and ltc_frame_set_parity .
Definition: ltc.h:237
void ltc_encoder_buffer_flush(LTCEncoder *e)
unsigned char mins
minute 0..60
Definition: ltc.h:325
unsigned int user3
Definition: ltc.h:234
struct LTCEncoder LTCEncoder
Definition: ltc.h:346
int ltc_decoder_read(LTCDecoder *d, LTCFrameExt *frame)
void ltc_frame_set_parity(LTCFrame *frame, enum LTC_TV_STANDARD standard)
void ltc_encoder_get_frame(LTCEncoder *e, LTCFrame *f)
unsigned long ltc_frame_get_user_bits(LTCFrame *f)
unsigned char hours
hour 0..23
Definition: ltc.h:324
void ltc_decoder_write_float(LTCDecoder *d, float *buf, size_t size, ltc_off_t posinfo)
unsigned int frame_tens
SMPTE framenumber BCD tens 0..3.
Definition: ltc.h:228
unsigned int secs_units
SMPTE seconds BCD unit 0..9.
Definition: ltc.h:233
void ltc_encoder_set_filter(LTCEncoder *e, double rise_time)
ltcsnd_sample_t sample_max
the maximum input sample signal for this frame (0..255)
Definition: ltc.h:306
unsigned int user8
Definition: ltc.h:253
int ltc_frame_increment(LTCFrame *frame, int fps, enum LTC_TV_STANDARD standard, int flags)
void ltc_decoder_write_u16(LTCDecoder *d, unsigned short *buf, size_t size, ltc_off_t posinfo)
unsigned int hours_tens
SMPTE hours BCD tens 0..2.
Definition: ltc.h:250
ltc_off_t off_start
the approximate sample in the stream corresponding to the start of the LTC frame.
Definition: ltc.h:301
unsigned int binary_group_flag_bit0
indicate user-data char encoding, see table above - bit 43
Definition: ltc.h:244
int ltc_frame_decrement(LTCFrame *frame, int fps, enum LTC_TV_STANDARD standard, int flags)
void ltc_frame_to_time(SMPTETimecode *stime, LTCFrame *frame, int flags)
int ltc_frame_parse_bcg_flags(LTCFrame *frame, enum LTC_TV_STANDARD standard)
LTCEncoder * ltc_encoder_create(double sample_rate, double fps, enum LTC_TV_STANDARD standard, int flags)
unsigned int col_frame
colour-frame: timecode intentionally synchronized to a colour TV field sequence
Definition: ltc.h:230
LTC_TV_STANDARD
Definition: ltc.h:263
@ LTC_TV_FILM_24
24fps
Definition: ltc.h:267
@ LTC_TV_625_50
25fps
Definition: ltc.h:265
@ LTC_TV_525_60
30fps
Definition: ltc.h:264
@ LTC_TV_1125_60
30fps
Definition: ltc.h:266
unsigned int sync_word
Definition: ltc.h:255
void ltc_time_to_frame(LTCFrame *frame, SMPTETimecode *stime, enum LTC_TV_STANDARD standard, int flags)
unsigned int user2
Definition: ltc.h:231
void ltc_encoder_encode_reversed_frame(LTCEncoder *e)
unsigned int user6
Definition: ltc.h:245
int reverse
if non-zero, a reverse played LTC frame was detected. Since the frame was reversed,...
Definition: ltc.h:303
LTCFrame ltc
the actual LTC frame. see LTCFrame
Definition: ltc.h:300
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:304
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:252
ltcsnd_sample_t sample_min
the minimum input sample signal for this frame (0..255)
Definition: ltc.h:305
unsigned char days
day of month 1..31
Definition: ltc.h:322
unsigned int mins_units
SMPTE minutes BCD unit 0..9.
Definition: ltc.h:240
unsigned int dfbit
indicated drop-frame timecode
Definition: ltc.h:229
void ltc_encoder_reset(LTCEncoder *e)
void ltc_decoder_write(LTCDecoder *d, ltcsnd_sample_t *buf, size_t size, ltc_off_t posinfo)
void ltc_decoder_queue_flush(LTCDecoder *d)
void ltc_frame_reset(LTCFrame *frame)
char timezone[6]
the timezone 6bytes: "+HHMM" textual representation
Definition: ltc.h:319
void ltc_encoder_set_frame(LTCEncoder *e, LTCFrame *f)
unsigned int secs_tens
SMPTE seconds BCD tens 0..6.
Definition: ltc.h:236
unsigned int mins_tens
SMPTE minutes BCD tens 0..6.
Definition: ltc.h:243
unsigned char secs
second 0..60
Definition: ltc.h:326
int ltc_encoder_set_bufsize(LTCEncoder *e, double sample_rate, double fps) DEPRECATED_EXPORT
int ltc_encoder_get_bufferptr(LTCEncoder *e, ltcsnd_sample_t **buf, int flush)
unsigned int binary_group_flag_bit1
indicate timecode is local time wall-clock, see table above - bit 58
Definition: ltc.h:251
ltcsnd_sample_t * ltc_encoder_get_bufptr(LTCEncoder *e, int *size, int flush) DEPRECATED_EXPORT
struct LTCDecoder LTCDecoder
Definition: ltc.h:340
void ltc_encoder_encode_frame(LTCEncoder *e)
int ltc_decoder_free(LTCDecoder *d)
unsigned int user1
Definition: ltc.h:226
int ltc_encoder_end_encode(LTCEncoder *e)
double volume
the volume of the input signal in dbFS
Definition: ltc.h:307
unsigned int user5
Definition: ltc.h:241
unsigned char years
LTC-date uses 2-digit year 00.99.
Definition: ltc.h:320
int ltc_encoder_set_volume(LTCEncoder *e, double dBFS)
int ltc_decoder_queue_length(LTCDecoder *d)
double ltc_encoder_get_volume(LTCEncoder *e)
int ltc_encoder_set_buffersize(LTCEncoder *e, double sample_rate, double fps)
double ltc_encoder_get_filter(LTCEncoder *e)
unsigned int hours_units
SMPTE hours BCD unit 0..9.
Definition: ltc.h:247
Definition: ltc.h:224
Definition: ltc.h:299
Definition: ltc.h:318