Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
ltc.h(3)			     libltc				ltc.h(3)

NAME
     ltc.h - libltc - en+decode linear timecode

SYNOPSIS
     #include <endian.h>
     #include <stddef.h>

   Data Structures
     struct LTCFrame
     struct LTCFrameExt
     struct SMPTETimecode

   Macros
     #define DEPRECATED_EXPORT
     #define LTC_FRAME_BIT_COUNT   80

   Typedefs
     typedef unsigned char ltcsnd_sample_t
     typedef long long int ltc_off_t
     typedef struct LTCFrame LTCFrame
     typedef struct LTCFrameExt LTCFrameExt
     typedef struct SMPTETimecode SMPTETimecode
     typedef struct LTCDecoder LTCDecoder
     typedef struct LTCEncoder LTCEncoder

   Enumerations
     enum   LTC_TV_STANDARD   {  LTC_TV_525_60,  LTC_TV_625_50,  LTC_TV_1125_60,
	 LTC_TV_FILM_24 }
     enum LTC_BG_FLAGS { LTC_USE_DATE = 1, LTC_TC_CLOCK = 2,  LTC_BGF_DONT_TOUCH
	 = 4, LTC_NO_PARITY = 8 }

   Functions
     void ltc_frame_to_time (SMPTETimecode *stime, LTCFrame *frame, int flags)
     void   ltc_time_to_frame	(LTCFrame  *frame,  SMPTETimecode  *stime,  enum
	 LTC_TV_STANDARD standard, int flags)
     void ltc_frame_reset (LTCFrame *frame)
     int ltc_frame_increment (LTCFrame *frame,	int  fps,  enum  LTC_TV_STANDARD
	 standard, int flags)
     int  ltc_frame_decrement  (LTCFrame  *frame,  int fps, enum LTC_TV_STANDARD
	 standard, int flags)
     LTCDecoder * ltc_decoder_create (int apv, int queue_size)
     int ltc_decoder_free (LTCDecoder *d)
     void ltc_decoder_write (LTCDecoder *d, ltcsnd_sample_t *buf,  size_t  size,
	 ltc_off_t posinfo)
     void  ltc_decoder_write_double  (LTCDecoder  *d,  double *buf, size_t size,
	 ltc_off_t posinfo)
     void ltc_decoder_write_float  (LTCDecoder	*d,  float  *buf,  size_t  size,
	 ltc_off_t posinfo)
     void   ltc_decoder_write_s16  (LTCDecoder	*d,  short  *buf,  size_t  size,
	 ltc_off_t posinfo)
     void ltc_decoder_write_u16 (LTCDecoder  *d,  unsigned  short  *buf,  size_t
	 size, ltc_off_t posinfo)
     int ltc_decoder_read (LTCDecoder *d, LTCFrameExt *frame)
     void ltc_decoder_queue_flush (LTCDecoder *d)
     int ltc_decoder_queue_length (LTCDecoder *d)
     LTCEncoder  *  ltc_encoder_create	(double  sample_rate,  double  fps, enum
	 LTC_TV_STANDARD standard, int flags)
     void ltc_encoder_free (LTCEncoder *e)
     void ltc_encoder_set_timecode (LTCEncoder *e, SMPTETimecode *t)
     void ltc_encoder_get_timecode (LTCEncoder *e, SMPTETimecode *t)
     void ltc_encoder_set_user_bits (LTCEncoder *e, unsigned long data)
     unsigned long ltc_frame_get_user_bits (LTCFrame *f)
     int ltc_encoder_inc_timecode (LTCEncoder *e)
     int ltc_encoder_dec_timecode (LTCEncoder *e)
     void ltc_encoder_set_frame (LTCEncoder *e, LTCFrame *f)
     void ltc_encoder_get_frame (LTCEncoder *e, LTCFrame *f)
     int ltc_encoder_get_buffer (LTCEncoder  *e,  ltcsnd_sample_t  *buf)  DEPRE-
	 CATED_EXPORT
     int ltc_encoder_copy_buffer (LTCEncoder *e, ltcsnd_sample_t *buf)
     ltcsnd_sample_t  *  ltc_encoder_get_bufptr  (LTCEncoder  *e, int *size, int
	 flush) DEPRECATED_EXPORT
     int ltc_encoder_get_bufferptr (LTCEncoder *e,  ltcsnd_sample_t  **buf,  int
	 flush)
     void ltc_encoder_buffer_flush (LTCEncoder *e)
     size_t ltc_encoder_get_buffersize (LTCEncoder *e)
     int ltc_encoder_reinit (LTCEncoder *e, double sample_rate, double fps, enum
	 LTC_TV_STANDARD standard, int flags)
     void ltc_encoder_reset (LTCEncoder *e)
     int ltc_encoder_set_bufsize (LTCEncoder *e, double sample_rate, double fps)
	 DEPRECATED_EXPORT
     int  ltc_encoder_set_buffersize  (LTCEncoder *e, double sample_rate, double
	 fps)
     double ltc_encoder_get_volume (LTCEncoder *e)
     int ltc_encoder_set_volume (LTCEncoder *e, double dBFS)
     double ltc_encoder_get_filter (LTCEncoder *e)
     void ltc_encoder_set_filter (LTCEncoder *e, double rise_time)
     int ltc_encoder_encode_byte (LTCEncoder *e, int byte, double speed)
     int ltc_encoder_end_encode (LTCEncoder *e)
     void ltc_encoder_encode_frame (LTCEncoder *e)
     void ltc_encoder_encode_reversed_frame (LTCEncoder *e)
     void ltc_frame_set_parity (LTCFrame *frame, enum LTC_TV_STANDARD standard)
     int ltc_frame_parse_bcg_flags (LTCFrame *frame, enum LTC_TV_STANDARD  stan-
	 dard)
     ltc_off_t	ltc_frame_alignment (double samples_per_frame, enum LTC_TV_STAN-
	 DARD standard)

Detailed Description
     libltc - en+decode linear timecode

     Linear (or Longitudinal) Timecode (LTC) is an encoding of timecode data  as
     a	Manchester-Biphase  encoded  audio  signal. The audio signal is commonly
     recorded on a VTR track or other storage media.

     libltc facilitates decoding and encoding of LTC from/to timecode, including
     SMPTE date support.

     Author
	 Robin Gareus robin@gareus.org

     Copyright

     Copyright (C) 2006-2022 Robin Gareus robin@gareus.org

     Copyright (C) 2008-2009 Jan WeiA jan@geheimwerk.de

     Inspired by SMPTE Decoder - Maarten de Boer mdeboer@iua.upf.es

     This program is free software; you can redistribute it and/or modify it un-
     der the terms of the GNU Lesser General Public License as published by  the
     Free  Software Foundation, either version 3 of the License, or (at your op-
     tion) any later version.

     This program is distributed in the hope that it will be useful, but WITHOUT
     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or  FIT-
     NESS  FOR	A  PARTICULAR PURPOSE. See the GNU Lesser General Public License
     for more details.

     You should have received a copy of the GNU Lesser	General  Public  License
     along with this library. If not, see http://www.gnu.org/licenses/.

Data Structure Documentation
struct LTCFrame
     Raw 80 bit LTC frame

     The  datastream  for  each video frame of Longitudinal Timecode consists of
     eighty bit-periods.

     At a frame-rate of 30 fps, the  bit-rate  corresponds  to	30  [fps]  *  80
     [bits/f]  = 2400 bits per second. The frequency for a stream of zeros would
     be 1.2 kHz and for a stream of ones it would be 2.4 kHz.  With all commonly
     used video-frame-rates and audio-sample-rates, LTC timecode can be recorded
     easily into a audio-track.

     In each frame, 26 of the eighty bits carry the SMPTE time in  binary  coded
     decimal (BCD).

     These  Bits are FRAME-UNITS, FRAME-TENS, SECS-UNITS, SECS-TENS, MINS-UNITS,
     MINS-TENS, HOURS-UNITS and HOURS-TENS. The BCD  digits  are  loaded  'least
     significant  bit  first'  (libltc	takes  care of the architecture specific
     alignment).

     32 bits are assigned as eight groups  of  four  USER-BITS	(also  sometimes
     called the 'Binary Groups'). This capacity is generally used to carry extra
     info such as reel number and/or date. The User Bits may be allocated howso-
     ever one wishes as long as both Binary Group Flag Bits are cleared.

     The  function  ltc_frame_to_time  can  interpret  the  user-bits  as  SMPTE
     Date+Timezone according to  SMPTE	309M-1999.  similarly  ltc_time_to_frame
     will do the reverse.

     The  last	16  Bits  make	up  the SYNC WORD. These bits indicate the frame
     boundary, the tape direction, and the bit-rate of the sync tone. The values
     of these Bits are fixed as 0011 1111 1111 1101

     The Bi-Phase Mark Phase Correction Bit (Bit 27 or 59) may be set or cleared
     so that that every 80-bit word contains an  even  number  of  zeroes.  This
     means  that  the  phase  of  the pulse train in every Sync Word will be the
     same.

     Bit 10 indicates drop-frame timecode. The Colour Frame Flag col.frm is  Bit
     11;  if  the  timecode  intentionally synchronized to a colour TV field se-
     quence, this bit is set.

     Bit 58 is not required for the BCD count for HOURS-TENS (which has a  maxi-
     mum  value  of two) and has not been given any other special purpose so re-
     mains unassigned. This Bit has been RESERVED for future assignment.

     The Binary Group Flag Bits (bits 43 and 59) are two bits indicate the  for-
     mat  of  the User Bits data. SMPTE 12M-1999 defines the previously reserved
     bit 58 to signals that the time is locked to wall-clock within a  tolerance
     of A+/- 0.5 seconds.

     SMPTE  12M-1999 also changes the numbering schema of the BGF. (BGF1 was re-
     named to BGF2 and bit 58 becomes BGFB1)

     To  further  complicate  matters,	the  BGFB  assignment  as  well  as  the
     biphase_mark_phase_correction (aka parity) bit depends on the timecode-for-
     mat used.

	      25 fps   24, 30 fps
      BGF0	27	  43
      BGF1	58	  58
      BGF2	43	  59
      Parity	59	  27

     The  variable  naming  chosen for the LTCFrame struct is based on the 24,30
     fps standard.

     The Binary Group Flag Bits should be used only as shown in the truth  table
     below.  The Unassigned entries in the table should not be used, as they may
     be allocated specific meanings in the future.

						     BGF0      BGF1    BGF2
	   user-bits			 timecode    Bit 43   Bit 58  Bit 59 (30fps, 24 fps)
					|	 |   Bit 27   Bit 58  Bit 43 (25fps)
      No User Bits format specified	|   ?	 |     0       0	0
      Eight-bit character set (1)	|   ?	 |     1       0	0
      Date and Timezone set		|   ?	 |     0       0	1
      Page/Line multiplex (2)		|   ?	 |     1       0	1
      Character set not specified	|  clk	 |     0       1	0
      Reserved				|   ?	 |     1       1	0
      Date and Timezone set		|  clk	 |     0       1	1
      Page/Line multiplex (2)		|  clk	 |     1       1	1

     (1) ISO/IEC 646 or ISO/IEC 2022 character set. If the seven-bit  ISO  codes
     are  being  used, they shall be converted to eight-bit codes by setting the
     eighth bit to zero. 4 ISO codes can be encoded, user7 and user8 are  to  be
     used  for	the  first code with LSB 7 and MSB in 8. the remaining ISO codes
     are to be distributed in the same manner to user5/6 user3/4 and user1/2 ac-
     cordingly.

     (2) The Page/Line indicates ANSI/SMPTE-262M is used for the  user-bits.  It
     is multiplex system that can be used to encode large amounts of data in the
     binary groups through the use of time multiplexing.

     libltc does not use any of the BGF - except for the Parity bit which can be
     calculated  and set with ltc_frame_set_parity. Setting and interpreting the
     BGF is left to the application using libltc. However libltc provides  func-
     tionality to parse or set date and timezoe according to SMPTE 309M-1999.

     further  information:  http://www.philrees.co.uk/articles/timecode.htm  and
     http://www.barney-wol.net/time/timecode.html

     Data Fields:
	 unsigned int binary_group_flag_bit0:1 indicate user-data char encoding,
	 see table above - bit 43

	 unsigned int binary_group_flag_bit1:1 indicate timecode is  local  time
	 wall-clock, see table above - bit 58

	 unsigned  int binary_group_flag_bit2:1 indicate user-data char encoding
	 (or parity with 25fps), see table above - bit 59

	 unsigned int biphase_mark_phase_correction:1 see note on Bit 27 in  de-
	 scription and ltc_frame_set_parity .

	 unsigned  int col_frame:1 colour-frame: timecode intentionally synchro-
	 nized to a colour TV field sequence

	 unsigned int dfbit:1 indicated drop-frame timecode

	 unsigned int frame_tens:2 SMPTE framenumber BCD tens 0..3.

	 unsigned int frame_units:4 SMPTE framenumber BCD unit 0..9.

	 unsigned int hours_tens:2 SMPTE hours BCD tens 0..2.

	 unsigned int hours_units:4 SMPTE hours BCD unit 0..9.

	 unsigned int mins_tens:3 SMPTE minutes BCD tens 0..6.

	 unsigned int mins_units:4 SMPTE minutes BCD unit 0..9.

	 unsigned int secs_tens:3 SMPTE seconds BCD tens 0..6.

	 unsigned int secs_units:4 SMPTE seconds BCD unit 0..9.

	 unsigned int sync_word:16

	 unsigned int user1:4

	 unsigned int user2:4

	 unsigned int user3:4

	 unsigned int user4:4

	 unsigned int user5:4

	 unsigned int user6:4

	 unsigned int user7:4

	 unsigned int user8:4

struct LTCFrameExt
     Extended LTC frame - includes audio-sample position offsets, volume, etc

     Note: For TV systems, the sample in the LTC audio data stream where the LTC
     Frame starts is not necessarily at the same time as the  video-frame  which
     is described by the LTC Frame.

     off_start	denotes  the  time  of	the first transition of bit 0 in the LTC
     frame.

     For 525/60 Television systems, the first transition shall occur at the  be-
     ginning  of  line 5 of the frame with which it is associated. The tolerance
     is A+/- 1.5 lines.

     For 625/50 systems, the first transition shall occur at  the  beginning  of
     line 2 A+/- 1.5 lines of the frame with which it is associated.

     Only for 1125/60 systems, the first transition occurs exactly at the verti-
     cal sync timing reference of the frame. A+/- 1 line.

     Examples
	 ltcdecode.c.

     Data Fields:
	 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-
	 frames. Summing all 80 values in the array will yield audio-frames/LTC-
	 frame = (off_end - off_start + 1).

	 LTCFrame ltc the actual LTC frame. see LTCFrame

	 ltc_off_t  off_end the sample in the stream corresponding to the end of
	 the LTC frame.

	 ltc_off_t off_start the approximate sample in the stream  corresponding
	 to the start of the LTC frame.

	 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  > off_start). (Note: in reverse playback the (reversed) sync-
	 word of the next/previous frame is detected, this offset is corrected).

	 ltcsnd_sample_t sample_max the maximum input  sample  signal  for  this
	 frame (0..255)

	 ltcsnd_sample_t  sample_min  the  minimum  input sample signal for this
	 frame (0..255)

	 double volume the volume of the input signal in dbFS

struct SMPTETimecode
     Human readable time representation, decimal values.

     Examples
	 example_encode.c, ltcdecode.c, and ltcencode.c.

     Data Fields:
	 unsigned char days day of month 1..31

	 unsigned char frame sub-second frame 0..(FPS - 1)

	 unsigned char hours hour 0..23

	 unsigned char mins minute 0..60

	 unsigned char months valid months are 1..12

	 unsigned char secs second 0..60

	 char timezone[6] the timezone 6bytes: '+HHMM' textual representation

	 unsigned char years LTC-date uses 2-digit year 00.99.

Macro Definition Documentation
   #define DEPRECATED_EXPORT
   #define LTC_FRAME_BIT_COUNT	 80
Typedef Documentation
   typedef long long int ltc_off_t
     sample-count offset - 64bit wide

   typedef struct LTCDecoder LTCDecoder
     Opaque structure see: ltc_decoder_create, ltc_decoder_free

   typedef struct LTCEncoder LTCEncoder
     Opaque structure see: ltc_encoder_create, ltc_encoder_free

   typedef struct LTCFrame LTCFrame
     see LTCFrame

   typedef struct LTCFrameExt LTCFrameExt
     see LTCFrameExt

   typedef unsigned char ltcsnd_sample_t
     default audio sample type: 8bit unsigned (mono)

   typedef struct SMPTETimecode SMPTETimecode
     see SMPTETimecode

Enumeration Type Documentation
   enum LTC_BG_FLAGS
     encoder and LTCframe <> timecode operation flags

     Enumerator

     LTC_USE_DATE
	    LTCFrame <> SMPTETimecode converter and LTCFrame increment/decrement
	    use date, also set BGF2 to '1' when encoder is  initialized  or  re-
	    initialized (unless LTC_BGF_DONT_TOUCH is given)

     LTC_TC_CLOCK
	    the  Timecode is wall-clock aka freerun. This also sets BGF1 (unless
	    LTC_BGF_DONT_TOUCH is given)

     LTC_BGF_DONT_TOUCH
	    encoder init or re-init does not touch the BGF bits (initial  values
	    after initialization is zero)

     LTC_NO_PARITY
	    parity bit is left untouched when setting or in/decrementing the en-
	    coder frame-number

   enum LTC_TV_STANDARD
     the standard defines the assignment of the binary-group-flag bits basically
     only 25fps is different, but other standards defined in the SMPTE spec have
     been included for completeness.

     Enumerator

     LTC_TV_525_60
	    30fps

     LTC_TV_625_50
	    25fps

     LTC_TV_1125_60
	    30fps

     LTC_TV_FILM_24
	    24fps

Function Documentation
   LTCDecoder* ltc_decoder_create (int apv, int queue_size)
     Create a new LTC decoder.

     Parameters
	 apv  audio-frames  per  video frame. This is just used for initial set-
	 tings, the speed is tracked dynamically.  setting  this  in  the  right
	 ballpark  is  needed  to  properly  decode the first LTC frame in a se-
	 quence.
	 queue_size length of the internal queue  to  store  decoded  frames  to
	 SMPTEDecoderWrite.

     Returns
	 decoder handle or NULL if out-of-memory

     Examples
	 ltcdecode.c.

   int ltc_decoder_free (LTCDecoder * d)
     Release memory of decoder.

     Parameters
	 d decoder handle

     Examples
	 ltcdecode.c.

   void ltc_decoder_queue_flush (LTCDecoder * d)
     Remove all LTC frames from the internal queue.

     Parameters
	 d decoder handle

   int ltc_decoder_queue_length (LTCDecoder * d)
     Count number of LTC frames currently in the queue.

     Parameters
	 d decoder handle

     Returns
	 number of queued frames

   int ltc_decoder_read (LTCDecoder * d, LTCFrameExt * frame)
     Decoded  LTC  frames are placed in a queue. This function retrieves a frame
     from the queue, and stores it at LTCFrameExt*

     Parameters
	 d decoder handle
	 frame the decoded LTC frame is copied there

     Returns
	 1 on success or 0 when no frames queued.

     Examples
	 ltcdecode.c.

   void ltc_decoder_write (LTCDecoder * d, ltcsnd_sample_t * buf,  size_t  size,
     ltc_off_t posinfo)
     Feed the LTC decoder with new audio samples.

     Parse  raw audio for LTC timestamps. Once a complete LTC frame has been de-
     coded it is pushed into a queue (ltc_decoder_read)

     Parameters
	 d decoder handle
	 buf pointer to ltcsnd_sample_t - unsigned 8 bit mono audio data
	 size size number of samples to parse
	 posinfo (optional, recommended) sample-offset in the  audio-stream.  It
	 is  added  to off_start, off_end in LTCFrameExt and should be monotonic
	 (ie incremented by size for every call to ltc_decoder_write)

     Examples
	 ltcdecode.c.

   void ltc_decoder_write_double (LTCDecoder * d, double  *  buf,  size_t  size,
     ltc_off_t posinfo)
     Wrapper  around  ltc_decoder_write that accepts 64-bit floating point audio
     samples. Note: internally libltc uses 8 bit only.

     Parameters
	 d decoder handle
	 buf pointer to audio sample data
	 size number of samples to parse
	 posinfo (optional, recommended) sample-offset in the audio-stream.

   void ltc_decoder_write_float (LTCDecoder *  d,  float  *  buf,  size_t  size,
     ltc_off_t posinfo)
     Wrapper  around  ltc_decoder_write that accepts 32-bit floating point audio
     samples. Note: internally libltc uses 8 bit only.

     Parameters
	 d decoder handle
	 buf pointer to audio sample data
	 size number of samples to parse
	 posinfo (optional, recommended) sample-offset in the audio-stream.

   void ltc_decoder_write_s16  (LTCDecoder  *  d,  short  *  buf,  size_t  size,
     ltc_off_t posinfo)
     Wrapper  around ltc_decoder_write that accepts signed 16 bit audio samples.
     Note: internally libltc uses 8 bit only.

     Parameters
	 d decoder handle
	 buf pointer to audio sample data
	 size number of samples to parse
	 posinfo (optional, recommended) sample-offset in the audio-stream.

   void ltc_decoder_write_u16 (LTCDecoder * d,	unsigned  short  *  buf,  size_t
     size, ltc_off_t posinfo)
     Wrapper  around  ltc_decoder_write  that accepts unsigned 16 bit audio sam-
     ples. Note: internally libltc uses 8 bit only.

     Parameters
	 d decoder handle
	 buf pointer to audio sample data
	 size number of samples to parse
	 posinfo (optional, recommended) sample-offset in the audio-stream.

   void ltc_encoder_buffer_flush (LTCEncoder * e)
     reset the write-pointer of the encoder-buffer

     Parameters
	 e encoder handle

   int ltc_encoder_copy_buffer (LTCEncoder * e, ltcsnd_sample_t * buf)
     Copy the accumulated encoded audio to the given sample-buffer and flush the
     internal buffer.

     Parameters
	 e encoder handle
	 buf place to store the audio-samples, needs to be large enough to  hold
	 ltc_encoder_get_buffersize bytes

     Returns
	 the number of bytes written to the memory area pointed to by buf.

     Examples
	 example_encode.c.

   LTCEncoder*	 ltc_encoder_create   (double	sample_rate,  double  fps,  enum
     LTC_TV_STANDARD standard, int flags)
     Allocate and initialize LTC audio encoder.

     calls ltc_encoder_reinit internally see, see notes there.

     Parameters
	 sample_rate audio sample rate (eg. 48000)
	 fps video-frames per second (e.g. 25.0)
	 standard the TV standard to use for Binary Group Flag bit position
	 flags binary combination of LTC_BG_FLAGS

     Examples
	 example_encode.c, and ltcencode.c.

   int ltc_encoder_dec_timecode (LTCEncoder * e)
     Move the encoder to the previous timecode frame. This is useful for  encod-
     ing reverse LTC. uses ltc_frame_decrement() internally.

   int ltc_encoder_encode_byte (LTCEncoder * e, int byte, double speed)
     Generate  LTC  audio  for given byte of the LTC-frame and place it into the
     internal buffer.

     see ltc_encoder_copy_buffer and ltc_encoder_get_bufferptr

     LTC has 10 bytes per frame: 0 <= bytecnt < 10 use SMPTESetTime(..)  to  set
     the current frame before Encoding. see tests/encoder.c for an example.

     The default output signal is @ -3dBFS (38..218 at 8 bit unsigned). see also
     ltc_encoder_set_volume

     if  speed is < 0, the bits are encoded in reverse. slowdown > 10.0 requires
     custom buffer sizes; see ltc_encoder_set_buffersize

     Parameters
	 e encoder handle
	 byte byte of the LTC-frame to encode 0..9
	 speed vari-speed, < 1.0 faster, > 1.0 slower ; must be != 0

     Returns
	 0 on success, -1 if byte is invalid or buffer overflow (speed > 10.0)

     Examples
	 example_encode.c.

   void ltc_encoder_encode_frame (LTCEncoder * e)
     Encode a full LTC frame at fixed  speed.  This  is  equivalent  to  calling
     ltc_encoder_encode_byte 10 times for bytes 0..9 with speed 1.0.

     Note:  The internal buffer must be empty before calling this function. Oth-
     erwise it may overflow. This is usually the case if it is read with ltc_en-
     coder_copy_buffer after calling this function.

     The default internal buffersize is exactly one full LTC frame at speed 1.0.

     Parameters
	 e encoder handle

     Examples
	 example_encode.c, and ltcencode.c.

   void ltc_encoder_encode_reversed_frame (LTCEncoder * e)
     Encode a full LTC frame at fixed speed -1. This is  equivalent  to  calling
     ltc_encoder_encode_byte  10  times  for  bytes  9..0, rolling in reverse at
     speed 1.

     Note: The internal buffer must be empty before calling this function.  Oth-
     erwise it may overflow. This is usually the case if it is read with ltc_en-
     coder_copy_buffer after calling this function.

     Parameters
	 e encoder handle

   int ltc_encoder_end_encode (LTCEncoder * e)
     Terminate encoding and add final transition

     Refer  to	the  image at LTCFrame. In this example, the encoded data starts
     and ends with a rising edge. The transition at the start of tne next  frame
     marks  the end of the previous frame. This transition is encoded at the be-
     ginning of a frame. However if there is no additional frame to be	encoded,
     a final terminating transition has to be added.

     Since LTC is usually sent as continuous stream, this is of no concern. How-
     ever  for a fixed, finite duration to be encoded, this method adds a termi-
     nating transition to the buffer.

     After this one must either call ltc_encoder_reset() or ltc_encoder_free.

     Parameters
	 e encoder handle

     Returns
	 0 on success, -1 if byte is invalid or buffer overflow (speed > 10.0)

   void ltc_encoder_free (LTCEncoder * e)
     Release memory of the encoder.

     Parameters
	 e encoder handle

     Examples
	 example_encode.c, and ltcencode.c.

   int ltc_encoder_get_buffer (LTCEncoder * e, ltcsnd_sample_t * buf)
     Copy the accumulated encoded audio to the given sample-buffer and flush the
     internal buffer.

     Parameters
	 e encoder handle
	 buf place to store the audio-samples, needs to be large enough to  hold
	 ltc_encoder_get_buffersize bytes

     Returns
	 the number of bytes written to the memory area pointed to by buf.

     Deprecated
	 please use ltc_encoder_copy_buffer() instead

   int	ltc_encoder_get_bufferptr  (LTCEncoder	* e, ltcsnd_sample_t ** buf, int
     flush)
     Retrieve a pointer to the accumulated encoded audio-data.

     Parameters
	 e encoder handle
	 buf if set, the pointer to encoder-buffer
	 flush call ltc_encoder_buffer_flush - reset the buffer write-pointer

     Returns
	 the number of valid bytes in the buffer

     Examples
	 example_encode.c, and ltcencode.c.

   size_t ltc_encoder_get_buffersize (LTCEncoder * e)
     Query the length of the internal buffer. It is  allocated	to  hold  audio-
     frames  for exactly one LTC frame for the given sample-rate and frame-rate.
     ie. (1 + sample-rate / fps) bytes

     Note this returns the total size of the buffer, not the used/free part. See
     also ltc_encoder_get_bufferptr

     Parameters
	 e encoder handle

     Returns
	 size of the allocated internal buffer.

     Examples
	 example_encode.c.

   ltcsnd_sample_t* ltc_encoder_get_bufptr (LTCEncoder *  e,  int  *  size,  int
     flush)
     Retrieve a pointer to the accumulated encoded audio-data.

     Parameters
	 e encoder handle
	 size if set, the number of valid bytes in the buffer is stored there
	 flush call ltc_encoder_buffer_flush - reset the buffer write-pointer

     Returns
	 pointer to encoder-buffer

     Deprecated
	 please use ltc_encoder_get_bufferptr() instead

   double ltc_encoder_get_filter (LTCEncoder * e)
     Get encoder signal rise-time / signal filtering

     Parameters
	 e encoder handle

     Returns
	 the signal rise-time in us (10^(-6) sec)

   void ltc_encoder_get_frame (LTCEncoder * e, LTCFrame * f)
     Low-level access to the encoder internal LTCFrame data

     Parameters
	 e encoder handle
	 f return LTC frame data

   void ltc_encoder_get_timecode (LTCEncoder * e, SMPTETimecode * t)
     Query the current encoder timecode.

     Note:  the decoder stores its internal state in an LTC-frame, this function
     converts that LTC-Frame into SMPTETimecode  on  demand.  see  also  ltc_en-
     coder_get_frame.

     Parameters
	 e encoder handle
	 t is set to current timecode

   double ltc_encoder_get_volume (LTCEncoder * e)
     Query the volume of the generated LTC signal

     Parameters
	 e encoder handle

     Returns
	 the volume in dB full-scale (<= 0.0)

   int ltc_encoder_inc_timecode (LTCEncoder * e)
     Move the encoder to the next timecode frame. uses ltc_frame_increment() in-
     ternally.

     Examples
	 example_encode.c, and ltcencode.c.

   int	ltc_encoder_reinit (LTCEncoder * e, double sample_rate, double fps, enum
     LTC_TV_STANDARD standard, int flags)
     Change the encoder settings without re-allocating any library internal data
     structure (realtime safe). changing the fps and or  sample-rate  implies  a
     buffer flush, and biphase state reset.

     This  call  will  fail if the internal buffer is too small to hold one full
     LTC frame. Use ltc_encoder_set_buffersize to  prepare  an	internal  buffer
     large  enough  to	accommodate  all  sample_rate, fps combinations that you
     would like to re-init to.

     The LTC frame payload data is not modified by this call, however, the flag-
     bits  of  the  LTC-Frame  are  updated:  If  fps	equals	 to   29.97   or
     30000.0/1001.0,  the  LTCFrame's  'dfbit' bit is set to 1 to indicate drop-
     frame timecode.

     Unless the LTC_BGF_DONT_TOUCH flag is set the BGF1 is set	or  cleared  de-
     pending  on LTC_TC_CLOCK and BGF0,2 according to LTC_USE_DATE and the given
     standard.	col_frame  is  cleared	and  the   parity   recomputed	 (unless
     LTC_NO_PARITY is given).

     Parameters
	 e encoder handle
	 sample_rate audio sample rate (eg. 48000)
	 fps video-frames per second (e.g. 25.0)
	 standard the TV standard to use for Binary Group Flag bit position
	 flags binary combination of LTC_BG_FLAGS

     Examples
	 ltcencode.c.

   void ltc_encoder_reset (LTCEncoder * e)
     reset ecoder state. flushes buffer, reset biphase state

     Parameters
	 e encoder handle

   int	ltc_encoder_set_buffersize  (LTCEncoder  * e, double sample_rate, double
     fps)
     Configure a custom size for the internal buffer.

     This is needed if you are planning to call ltc_encoder_reinit() or  if  you
     want  to  keep more than one LTC frame's worth of data in the library's in-
     ternal buffer.

     The buffer-size is (1 + sample_rate / fps)  bytes.  resizing  the	internal
     buffer will flush all existing data in it - alike ltc_encoder_buffer_flush.

     Parameters
	 e encoder handle
	 sample_rate audio sample rate (eg. 48000)
	 fps video-frames per second (e.g. 25.0)

     Returns
	 0 on success, -1 if allocation fails (which makes the encoder unusable,
	 call ltc_encoder_free or realloc the buffer)

     Examples
	 ltcencode.c.

   int ltc_encoder_set_bufsize (LTCEncoder * e, double sample_rate, double fps)
     Configure a custom size for the internal buffer.

     This  is  needed if you are planning to call ltc_encoder_reinit() or if you
     want to keep more than one LTC frame's worth of data in the  library's  in-
     ternal buffer.

     The  buffer-size  is  (1  + sample_rate / fps) bytes. resizing the internal
     buffer will flush all existing data in it - alike ltc_encoder_buffer_flush.

     Parameters
	 e encoder handle
	 sample_rate audio sample rate (eg. 48000)
	 fps video-frames per second (e.g. 25.0)

     Returns
	 0 on success, -1 if allocation fails (which makes the encoder unusable,
	 call ltc_encoder_free or realloc the buffer)

     Deprecated
	 please use ltc_encoder_set_buffersize() instead

   void ltc_encoder_set_filter (LTCEncoder * e, double rise_time)
     Set encoder signal rise-time / signal filtering

     LTC signal should have a rise time of 40us +/- 10 us. by  default	the  en-
     coder  honors this and low-pass filters the output depending on the sample-
     rate.

     If you want a perfect square wave, set 'rise_time' to 0.

     Note ltc_encoder_reinit resets the filter-time-constant to use the  default
     40us  for	the  given sample-rate, overriding any value previously set with
     ltc_encoder_set_filter

     Parameters
	 e encoder handle
	 rise_time the signal rise-time in us (10^(-6) sec), set to 0  for  per-
	 fect square wave, default 40.0

     Examples
	 ltcencode.c.

   void ltc_encoder_set_frame (LTCEncoder * e, LTCFrame * f)
     Low-level access to the internal LTCFrame data.

     Note:  be careful to about f->dfbit, the encoder sets this [only] upon ini-
     tialization.

     Parameters
	 e encoder handle
	 f LTC frame data to use

   void ltc_encoder_set_timecode (LTCEncoder * e, SMPTETimecode * t)
     Set the encoder LTC-frame to the given  SMPTETimecode.  The  next	call  to
     ltc_encoder_encode_byte  or  ltc_encoder_encode_frame will encode this time
     to LTC audio-samples.

     Internally this call uses ltc_time_to_frame because the LTCEncoder operates
     on LTCframes only. see als ltc_encoder_set_frame

     Parameters
	 e encoder handle
	 t timecode to set.

     Examples
	 example_encode.c, and ltcencode.c.

   void ltc_encoder_set_user_bits (LTCEncoder * e, unsigned long data)
     Set the user-bits of the frame to the given data.

     The data should be a 32-bits unsigned integer. It is written LSB first con-
     tiniously int the eight user fields.

     Parameters
	 e encoder handle
	 data the data to write

   int ltc_encoder_set_volume (LTCEncoder * e, double dBFS)
     Set the volume of the generated LTC signal

     typically LTC is sent at 0dBu ; in EBU callibrated systems that corresponds
     to -18dBFS. - by default libltc creates -3dBFS

     since libltc generated 8bit audio-data, the minimum  dBFS	is  about  -42dB
     which corresponds to 1 bit.

     0dB corresponds to a signal range of 127 1..255 with 128 at the center.

     Parameters
	 e encoder handle
	 dBFS the volume in dB full-scale (<= 0.0)

     Returns
	 0 on success, -1 if the value was out of range

     Examples
	 ltcencode.c.

   ltc_off_t ltc_frame_alignment (double samples_per_frame, enum LTC_TV_STANDARD
     standard)
     LTCFrame sample alignment offset.

     There  is	a  relative  offset of the LTC-Frame start and the TV-frame. The
     first bit of a LTC frame corresponds to a specific line in the actual video
     frame. When decoding this offset needs  to  be  subtracted  from  the  LTC-
     frame's audio-sample-time to match the TV-frame's start position.

     For film frames or HDV the offset is zero.

     Parameters
	 samples_per_frame   audio-samples   per   timecode-frame  (eg.  1920  =
	 48000/25)
	 standard the TV standard

     Returns
	 offset in samples

   int ltc_frame_decrement (LTCFrame *	frame,	int  fps,  enum  LTC_TV_STANDARD
     standard, int flags)
     Decrement	the  timecode  by  one	Frame  (1/framerate seconds) and set the
     Frame's parity bit accordingly (see ltc_frame_set_parity)

     Parameters
	 frame the LTC-timecode to decrement
	 fps integer framerate (for  drop-frame-timecode  set  frame->dfbit  and
	 round-up the fps).
	 standard  the	TV standard to use for parity bit assignment if set to 1
	 the 25fps standard is enabled and LTC Frame bit 59  instead  of  27  is
	 used  for  the  parity.  It  only  has  only  has  effect  flag  bit  4
	 (LTC_NO_PARITY) is cleared.
	 flags binary combination of LTC_BG_FLAGS - here only  LTC_USE_DATE  and
	 LTC_NO_PARITY are relevant. if the bit 0 is set (1) interpret user-data
	 as  date and decrement date if timecode wraps at 24h. (Note: leap-years
	 are taken into account, but since  the  year  is  two-digit  only,  the
	 100,400yr  rules are ignored. '00' is assumed to be year 2000 which was
	 a leap year.) bit 3 (8) indicates that the parity  bit  should  not  be
	 touched

     Returns
	 1 if timecode was wrapped around at 23:59:59:ff, 0 otherwise

   unsigned long ltc_frame_get_user_bits (LTCFrame * f)
     Get  the  32-bits unsigned integer from the user-data bits. The data should
     be written LSB first in the frame

     Parameters
	 f LTC frame data to parse

   int ltc_frame_increment (LTCFrame *	frame,	int  fps,  enum  LTC_TV_STANDARD
     standard, int flags)
     Increment	the  timecode  by  one	Frame  (1/framerate seconds) and set the
     Frame's parity bit accordingly (see ltc_frame_set_parity)

     Parameters
	 frame the LTC-timecode to increment
	 fps integer framerate (for  drop-frame-timecode  set  frame->dfbit  and
	 round-up the fps).
	 standard  the	TV standard to use for parity bit assignment if set to 1
	 the 25fps standard is enabled and LTC Frame bit 59  instead  of  27  is
	 used  for  the  parity.  It  only  has  only  has  effect  flag  bit  4
	 (LTC_NO_PARITY) is cleared.
	 flags binary combination of LTC_BG_FLAGS - here only  LTC_USE_DATE  and
	 LTC_NO_PARITY are relevant. If the bit 0 (1) is set (1) interpret user-
	 data  as  date  and  increment date if timecode wraps after 24h. (Note:
	 leap-years are taken into account, but  since	the  year  is  two-digit
	 only,	the 100,400yr rules are ignored. '00' is assumed to be year 2000
	 which was a leap year.)

     Returns
	 1 if timecode was wrapped around after 23:59:59:ff, 0 otherwise

   int ltc_frame_parse_bcg_flags (LTCFrame * frame, enum  LTC_TV_STANDARD  stan-
     dard)
     Parse  Binary Coded Group Flags into standard independent format: bit 0 (1)
     - BGF 0, bit 1 (2) - BGF 1, bit 2 (4) - BGF 2

     Parameters
	 frame LTC frame data analyze
	 standard the TV standard to use -- see LTCFrame for BGF assignment

     Returns
	 LTC Binary Group Flags

   void ltc_frame_reset (LTCFrame * frame)
     Reset all values of a LTC FRAME to zero, except for the sync-word	(0x3FFD)
     at  the end. The sync word is set according to architecture (big/little en-
     dian). Also set the Frame's parity bit accordingly (see  ltc_frame_set_par-
     ity)

     Parameters
	 frame the LTCFrame to reset

   void ltc_frame_set_parity (LTCFrame * frame, enum LTC_TV_STANDARD standard)
     Set the parity of the LTC frame.

     Bi-Phase  Mark  Phase Correction bit (bit 27 - or 59) may be set or cleared
     so that that every 80-bit word contains an  even  number  of  zeroes.  This
     means that the phase in every Sync Word will be the same.

     This  is  merely cosmetic; the motivation to keep the polarity of the wave-
     form constant is to make finding the Sync Word visibly (on a scope) easier.

     There is usually no need to call this function directly. The encoder  util-
     ity  functions  ltc_time_to_frame, ltc_frame_increment and ltc_frame_decre-
     ment include a call to it.

     Parameters
	 frame the LTC to analyze and set or clear  the  biphase_mark_phase_cor-
	 rection bit.
	 standard  If  1  (aka LTC_TV_625_50) , the 25fps mode (bit 59 - aka bi-
	 nary_group_flag_bit2) is used, otherwise the 30fps, 24fps mode (bit  27
	 -- biphase_mark_phase_correction) is set or cleared.

   void ltc_frame_to_time (SMPTETimecode * stime, LTCFrame * frame, int flags)
     Convert binary LTCFrame into SMPTETimecode struct

     Parameters
	 stime output
	 frame input
	 flags	binary	combination  of LTC_BG_FLAGS - here only LTC_USE_DATE is
	 relevant. if LTC_USE_DATE is set, the user-fields in LTCFrame	will  be
	 parsed  into the date variable of SMPTETimecode. otherwise the date in-
	 formation in the SMPTETimecode is set to zero.

     Examples
	 ltcdecode.c.

   void  ltc_time_to_frame  (LTCFrame  *  frame,  SMPTETimecode  *  stime,  enum
     LTC_TV_STANDARD standard, int flags)
     Translate	SMPTETimecode  struct into its binary LTC representation and set
     the LTC frame's parity bit accordingly (see ltc_frame_set_parity)

     Parameters
	 frame output - the frame to be set
	 stime input - timecode input
	 standard the TV standard to use for parity bit assignment
	 flags binary combination of LTC_BG_FLAGS - here only  LTC_USE_DATE  and
	 LTC_NO_PARITY	are  relevant.	if LTC_USE_DATE is given, user-fields in
	 LTCFrame will be set from the	date  in  SMPTETimecode,  otherwise  the
	 user-bits  are not modified. All non-timecode fields remain untouched -
	 except for the parity bit unless LTC_NO_PARITY is given.

Author
     Generated automatically by Doxygen for libltc from the source code.

Version 1.3.2			 Sun Sep 4 2022 			ltc.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ltc.h&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help