|  |  | @@ -29,225 +29,224 @@ extern "C" | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | #include "types.h" | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Transport states. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef enum { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /* the order matters for binary compatibility */ | 
		
	
		
			
			|  |  |  | JackTransportStopped = 0,  	/**< Transport halted */ | 
		
	
		
			
			|  |  |  | JackTransportRolling = 1,  	/**< Transport playing */ | 
		
	
		
			
			|  |  |  | JackTransportLooping = 2,  	/**< For OLD_TRANSPORT, now ignored */ | 
		
	
		
			
			|  |  |  | JackTransportStarting = 3, 	/**< Waiting for sync ready */ | 
		
	
		
			
			|  |  |  | //JackTransportSynching = 4	/**< temporary*/ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | } jack_transport_state_t; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | typedef uint64_t jack_unique_t;		/**< Unique ID (opaque) */ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Optional struct jack_position_t fields. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef enum { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | JackPositionBBT = 0x10,  	/**< Bar, Beat, Tick */ | 
		
	
		
			
			|  |  |  | JackPositionTimecode = 0x20,	/**< External timecode */ | 
		
	
		
			
			|  |  |  | JackBBTFrameOffset =      0x40,	/**< Frame offset of BBT information */ | 
		
	
		
			
			|  |  |  | JackAudioVideoRatio =     0x80, /**< audio frames per video frame */ | 
		
	
		
			
			|  |  |  | JackVideoFrameOffset =   0x100  /**< frame offset of first video frame */ | 
		
	
		
			
			|  |  |  | } jack_position_bits_t; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** all valid position bits */ | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Transport states. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef enum { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /* the order matters for binary compatibility */ | 
		
	
		
			
			|  |  |  | JackTransportStopped = 0,  	/**< Transport halted */ | 
		
	
		
			
			|  |  |  | JackTransportRolling = 1,  	/**< Transport playing */ | 
		
	
		
			
			|  |  |  | JackTransportLooping = 2,  	/**< For OLD_TRANSPORT, now ignored */ | 
		
	
		
			
			|  |  |  | JackTransportStarting = 3, 	/**< Waiting for sync ready */ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | } jack_transport_state_t; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | typedef uint64_t jack_unique_t;		/**< Unique ID (opaque) */ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Optional struct jack_position_t fields. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef enum { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | JackPositionBBT = 0x10,  	/**< Bar, Beat, Tick */ | 
		
	
		
			
			|  |  |  | JackPositionTimecode = 0x20,	/**< External timecode */ | 
		
	
		
			
			|  |  |  | JackBBTFrameOffset =      0x40,	/**< Frame offset of BBT information */ | 
		
	
		
			
			|  |  |  | JackAudioVideoRatio =     0x80, /**< audio frames per video frame */ | 
		
	
		
			
			|  |  |  | JackVideoFrameOffset =   0x100  /**< frame offset of first video frame */ | 
		
	
		
			
			|  |  |  | } jack_position_bits_t; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** all valid position bits */ | 
		
	
		
			
			|  |  |  | #define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode) | 
		
	
		
			
			|  |  |  | #define EXTENDED_TIME_INFO | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | typedef struct { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* these four cannot be set from clients: the server sets them */ | 
		
	
		
			
			|  |  |  | jack_unique_t	unique_1;	/**< unique ID */ | 
		
	
		
			
			|  |  |  | jack_time_t		usecs;		/**< monotonic, free-rolling */ | 
		
	
		
			
			|  |  |  | jack_nframes_t	frame_rate;	/**< current frame rate (per second) */ | 
		
	
		
			
			|  |  |  | jack_nframes_t	frame;		/**< frame number, always present */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_position_bits_t valid;		/**< which other fields are valid */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JackPositionBBT fields: */ | 
		
	
		
			
			|  |  |  | int32_t		bar;		/**< current bar */ | 
		
	
		
			
			|  |  |  | int32_t		beat;		/**< current beat-within-bar */ | 
		
	
		
			
			|  |  |  | int32_t		tick;		/**< current tick-within-beat */ | 
		
	
		
			
			|  |  |  | double		bar_start_tick; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | float		beats_per_bar;	/**< time signature "numerator" */ | 
		
	
		
			
			|  |  |  | float		beat_type;	/**< time signature "denominator" */ | 
		
	
		
			
			|  |  |  | double		ticks_per_beat; | 
		
	
		
			
			|  |  |  | double		beats_per_minute; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JackPositionTimecode fields:	(EXPERIMENTAL: could change) */ | 
		
	
		
			
			|  |  |  | double		frame_time;	/**< current time in seconds */ | 
		
	
		
			
			|  |  |  | double		next_time;	/**< next sequential frame_time | 
		
	
		
			
			|  |  |  | (unless repositioned) */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JackBBTFrameOffset fields: */ | 
		
	
		
			
			|  |  |  | jack_nframes_t	bbt_offset;	/**< frame offset for the BBT fields | 
		
	
		
			
			|  |  |  | (the given bar, beat, and tick | 
		
	
		
			
			|  |  |  | values actually refer to a time | 
		
	
		
			
			|  |  |  | frame_offset frames before the | 
		
	
		
			
			|  |  |  | start of the cycle), should | 
		
	
		
			
			|  |  |  | be assumed to be 0 if | 
		
	
		
			
			|  |  |  | JackBBTFrameOffset is not | 
		
	
		
			
			|  |  |  | set. If JackBBTFrameOffset is | 
		
	
		
			
			|  |  |  | set and this value is zero, the BBT | 
		
	
		
			
			|  |  |  | time refers to the first frame of this | 
		
	
		
			
			|  |  |  | cycle. If the value is positive, | 
		
	
		
			
			|  |  |  | the BBT time refers to a frame that | 
		
	
		
			
			|  |  |  | many frames before the start of the | 
		
	
		
			
			|  |  |  | cycle. */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JACK video positional data (experimental) */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | float               audio_frames_per_video_frame; /**< number of audio frames | 
		
	
		
			
			|  |  |  | per video frame. Should be assumed | 
		
	
		
			
			|  |  |  | zero if JackAudioVideoRatio is not | 
		
	
		
			
			|  |  |  | set. If JackAudioVideoRatio is set | 
		
	
		
			
			|  |  |  | and the value is zero, no video | 
		
	
		
			
			|  |  |  | data exists within the JACK graph */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_nframes_t      video_offset;   /**< audio frame at which the first video | 
		
	
		
			
			|  |  |  | frame in this cycle occurs. Should | 
		
	
		
			
			|  |  |  | be assumed to be 0 if JackVideoFrameOffset | 
		
	
		
			
			|  |  |  | is not set. If JackVideoFrameOffset is | 
		
	
		
			
			|  |  |  | set, but the value is zero, there is | 
		
	
		
			
			|  |  |  | no video frame within this cycle. */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* For binary compatibility, new fields should be allocated from | 
		
	
		
			
			|  |  |  | * this padding area with new valid bits controlling access, so | 
		
	
		
			
			|  |  |  | * the existing structure size and offsets are preserved. */ | 
		
	
		
			
			|  |  |  | int32_t		padding[7]; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* When (unique_1 == unique_2) the contents are consistent. */ | 
		
	
		
			
			|  |  |  | jack_unique_t	unique_2;	/**< unique ID */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } jack_position_t; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Prototype for the @a sync_callback defined by slow-sync clients. | 
		
	
		
			
			|  |  |  | * When the client is active, this callback is invoked just before | 
		
	
		
			
			|  |  |  | * process() in the same thread.  This occurs once after registration, | 
		
	
		
			
			|  |  |  | * then subsequently whenever some client requests a new position, or | 
		
	
		
			
			|  |  |  | * the transport enters the ::JackTransportStarting state.  This | 
		
	
		
			
			|  |  |  | * realtime function must not wait. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * The transport @a state will be: | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | *   - ::JackTransportStopped when a new position is requested; | 
		
	
		
			
			|  |  |  | *   - ::JackTransportStarting when the transport is waiting to start; | 
		
	
		
			
			|  |  |  | *   - ::JackTransportRolling when the timeout has expired, and the | 
		
	
		
			
			|  |  |  | *   position is now a moving target. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param state current transport state. | 
		
	
		
			
			|  |  |  | * @param pos new transport position. | 
		
	
		
			
			|  |  |  | * @param arg the argument supplied by jack_set_sync_callback(). | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @return TRUE (non-zero) when ready to roll. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef int (*JackSyncCallback)(jack_transport_state_t state, | 
		
	
		
			
			|  |  |  | jack_position_t *pos, | 
		
	
		
			
			|  |  |  | void *arg); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Prototype for the @a timebase_callback used to provide extended | 
		
	
		
			
			|  |  |  | * position information.  Its output affects all of the following | 
		
	
		
			
			|  |  |  | * process cycle.  This realtime function must not wait. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * This function is called immediately after process() in the same | 
		
	
		
			
			|  |  |  | * thread whenever the transport is rolling, or when any client has | 
		
	
		
			
			|  |  |  | * requested a new position in the previous cycle.  The first cycle | 
		
	
		
			
			|  |  |  | * after jack_set_timebase_callback() is also treated as a new | 
		
	
		
			
			|  |  |  | * position, or the first cycle after jack_activate() if the client | 
		
	
		
			
			|  |  |  | * had been inactive. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * The timebase master may not use its @a pos argument to set @a | 
		
	
		
			
			|  |  |  | * pos->frame.  To change position, use jack_transport_reposition() or | 
		
	
		
			
			|  |  |  | * jack_transport_locate().  These functions are realtime-safe, the @a | 
		
	
		
			
			|  |  |  | * timebase_callback can call them directly. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param state current transport state. | 
		
	
		
			
			|  |  |  | * @param nframes number of frames in current period. | 
		
	
		
			
			|  |  |  | * @param pos address of the position structure for the next cycle; @a | 
		
	
		
			
			|  |  |  | * pos->frame will be its frame number.  If @a new_pos is FALSE, this | 
		
	
		
			
			|  |  |  | * structure contains extended position information from the current | 
		
	
		
			
			|  |  |  | * cycle.  If TRUE, it contains whatever was set by the requester. | 
		
	
		
			
			|  |  |  | * The @a timebase_callback's task is to update the extended | 
		
	
		
			
			|  |  |  | * information here. | 
		
	
		
			
			|  |  |  | * @param new_pos TRUE (non-zero) for a newly requested @a pos, or for | 
		
	
		
			
			|  |  |  | * the first cycle after the @a timebase_callback is defined. | 
		
	
		
			
			|  |  |  | * @param arg the argument supplied by jack_set_timebase_callback(). | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef void (*JackTimebaseCallback)(jack_transport_state_t state, | 
		
	
		
			
			|  |  |  | jack_nframes_t nframes, | 
		
	
		
			
			|  |  |  | jack_position_t *pos, | 
		
	
		
			
			|  |  |  | int new_pos, | 
		
	
		
			
			|  |  |  | void *arg); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /********************************************************************* | 
		
	
		
			
			|  |  |  | * The following interfaces are DEPRECATED.  They are only provided | 
		
	
		
			
			|  |  |  | * for compatibility with the earlier JACK transport implementation. | 
		
	
		
			
			|  |  |  | *********************************************************************/ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Optional struct jack_transport_info_t fields. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @see jack_position_bits_t. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef enum { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | JackTransportState = 0x1,  	/**< Transport state */ | 
		
	
		
			
			|  |  |  | JackTransportPosition = 0x2,  	/**< Frame number */ | 
		
	
		
			
			|  |  |  | JackTransportLoop = 0x4,  	/**< Loop boundaries (ignored) */ | 
		
	
		
			
			|  |  |  | JackTransportSMPTE = 0x8,  	/**< SMPTE (ignored) */ | 
		
	
		
			
			|  |  |  | JackTransportBBT = 0x10	/**< Bar, Beat, Tick */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } jack_transport_bits_t; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Deprecated struct for transport position information. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @deprecated This is for compatibility with the earlier transport | 
		
	
		
			
			|  |  |  | * interface.  Use the jack_position_t struct, instead. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef struct { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* these two cannot be set from clients: the server sets them */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_nframes_t frame_rate;		/**< current frame rate (per second) */ | 
		
	
		
			
			|  |  |  | jack_time_t usecs;		/**< monotonic, free-rolling */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_transport_bits_t valid;	/**< which fields are legal to read */ | 
		
	
		
			
			|  |  |  | jack_transport_state_t transport_state; | 
		
	
		
			
			|  |  |  | jack_nframes_t frame; | 
		
	
		
			
			|  |  |  | jack_nframes_t loop_start; | 
		
	
		
			
			|  |  |  | jack_nframes_t loop_end; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | long smpte_offset;	/**< SMPTE offset (from frame 0) */ | 
		
	
		
			
			|  |  |  | float smpte_frame_rate;	/**< 29.97, 30, 24 etc. */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | int bar; | 
		
	
		
			
			|  |  |  | int beat; | 
		
	
		
			
			|  |  |  | int tick; | 
		
	
		
			
			|  |  |  | double bar_start_tick; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | float beats_per_bar; | 
		
	
		
			
			|  |  |  | float beat_type; | 
		
	
		
			
			|  |  |  | double ticks_per_beat; | 
		
	
		
			
			|  |  |  | double beats_per_minute; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | jack_transport_info_t; | 
		
	
		
			
			|  |  |  | typedef struct { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* these four cannot be set from clients: the server sets them */ | 
		
	
		
			
			|  |  |  | jack_unique_t	unique_1;	/**< unique ID */ | 
		
	
		
			
			|  |  |  | jack_time_t		usecs;		/**< monotonic, free-rolling */ | 
		
	
		
			
			|  |  |  | jack_nframes_t	frame_rate;	/**< current frame rate (per second) */ | 
		
	
		
			
			|  |  |  | jack_nframes_t	frame;		/**< frame number, always present */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_position_bits_t valid;		/**< which other fields are valid */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JackPositionBBT fields: */ | 
		
	
		
			
			|  |  |  | int32_t		bar;		/**< current bar */ | 
		
	
		
			
			|  |  |  | int32_t		beat;		/**< current beat-within-bar */ | 
		
	
		
			
			|  |  |  | int32_t		tick;		/**< current tick-within-beat */ | 
		
	
		
			
			|  |  |  | double		bar_start_tick; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | float		beats_per_bar;	/**< time signature "numerator" */ | 
		
	
		
			
			|  |  |  | float		beat_type;	/**< time signature "denominator" */ | 
		
	
		
			
			|  |  |  | double		ticks_per_beat; | 
		
	
		
			
			|  |  |  | double		beats_per_minute; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JackPositionTimecode fields:	(EXPERIMENTAL: could change) */ | 
		
	
		
			
			|  |  |  | double		frame_time;	/**< current time in seconds */ | 
		
	
		
			
			|  |  |  | double		next_time;	/**< next sequential frame_time | 
		
	
		
			
			|  |  |  | (unless repositioned) */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JackBBTFrameOffset fields: */ | 
		
	
		
			
			|  |  |  | jack_nframes_t	bbt_offset;	/**< frame offset for the BBT fields | 
		
	
		
			
			|  |  |  | (the given bar, beat, and tick | 
		
	
		
			
			|  |  |  | values actually refer to a time | 
		
	
		
			
			|  |  |  | frame_offset frames before the | 
		
	
		
			
			|  |  |  | start of the cycle), should | 
		
	
		
			
			|  |  |  | be assumed to be 0 if | 
		
	
		
			
			|  |  |  | JackBBTFrameOffset is not | 
		
	
		
			
			|  |  |  | set. If JackBBTFrameOffset is | 
		
	
		
			
			|  |  |  | set and this value is zero, the BBT | 
		
	
		
			
			|  |  |  | time refers to the first frame of this | 
		
	
		
			
			|  |  |  | cycle. If the value is positive, | 
		
	
		
			
			|  |  |  | the BBT time refers to a frame that | 
		
	
		
			
			|  |  |  | many frames before the start of the | 
		
	
		
			
			|  |  |  | cycle. */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* JACK video positional data (experimental) */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | float               audio_frames_per_video_frame; /**< number of audio frames | 
		
	
		
			
			|  |  |  | per video frame. Should be assumed | 
		
	
		
			
			|  |  |  | zero if JackAudioVideoRatio is not | 
		
	
		
			
			|  |  |  | set. If JackAudioVideoRatio is set | 
		
	
		
			
			|  |  |  | and the value is zero, no video | 
		
	
		
			
			|  |  |  | data exists within the JACK graph */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_nframes_t      video_offset;   /**< audio frame at which the first video | 
		
	
		
			
			|  |  |  | frame in this cycle occurs. Should | 
		
	
		
			
			|  |  |  | be assumed to be 0 if JackVideoFrameOffset | 
		
	
		
			
			|  |  |  | is not set. If JackVideoFrameOffset is | 
		
	
		
			
			|  |  |  | set, but the value is zero, there is | 
		
	
		
			
			|  |  |  | no video frame within this cycle. */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* For binary compatibility, new fields should be allocated from | 
		
	
		
			
			|  |  |  | * this padding area with new valid bits controlling access, so | 
		
	
		
			
			|  |  |  | * the existing structure size and offsets are preserved. */ | 
		
	
		
			
			|  |  |  | int32_t		padding[7]; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* When (unique_1 == unique_2) the contents are consistent. */ | 
		
	
		
			
			|  |  |  | jack_unique_t	unique_2;	/**< unique ID */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } jack_position_t; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Prototype for the @a sync_callback defined by slow-sync clients. | 
		
	
		
			
			|  |  |  | * When the client is active, this callback is invoked just before | 
		
	
		
			
			|  |  |  | * process() in the same thread.  This occurs once after registration, | 
		
	
		
			
			|  |  |  | * then subsequently whenever some client requests a new position, or | 
		
	
		
			
			|  |  |  | * the transport enters the ::JackTransportStarting state.  This | 
		
	
		
			
			|  |  |  | * realtime function must not wait. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * The transport @a state will be: | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | *   - ::JackTransportStopped when a new position is requested; | 
		
	
		
			
			|  |  |  | *   - ::JackTransportStarting when the transport is waiting to start; | 
		
	
		
			
			|  |  |  | *   - ::JackTransportRolling when the timeout has expired, and the | 
		
	
		
			
			|  |  |  | *   position is now a moving target. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param state current transport state. | 
		
	
		
			
			|  |  |  | * @param pos new transport position. | 
		
	
		
			
			|  |  |  | * @param arg the argument supplied by jack_set_sync_callback(). | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @return TRUE (non-zero) when ready to roll. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef int (*JackSyncCallback)(jack_transport_state_t state, | 
		
	
		
			
			|  |  |  | jack_position_t *pos, | 
		
	
		
			
			|  |  |  | void *arg); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Prototype for the @a timebase_callback used to provide extended | 
		
	
		
			
			|  |  |  | * position information.  Its output affects all of the following | 
		
	
		
			
			|  |  |  | * process cycle.  This realtime function must not wait. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * This function is called immediately after process() in the same | 
		
	
		
			
			|  |  |  | * thread whenever the transport is rolling, or when any client has | 
		
	
		
			
			|  |  |  | * requested a new position in the previous cycle.  The first cycle | 
		
	
		
			
			|  |  |  | * after jack_set_timebase_callback() is also treated as a new | 
		
	
		
			
			|  |  |  | * position, or the first cycle after jack_activate() if the client | 
		
	
		
			
			|  |  |  | * had been inactive. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * The timebase master may not use its @a pos argument to set @a | 
		
	
		
			
			|  |  |  | * pos->frame.  To change position, use jack_transport_reposition() or | 
		
	
		
			
			|  |  |  | * jack_transport_locate().  These functions are realtime-safe, the @a | 
		
	
		
			
			|  |  |  | * timebase_callback can call them directly. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param state current transport state. | 
		
	
		
			
			|  |  |  | * @param nframes number of frames in current period. | 
		
	
		
			
			|  |  |  | * @param pos address of the position structure for the next cycle; @a | 
		
	
		
			
			|  |  |  | * pos->frame will be its frame number.  If @a new_pos is FALSE, this | 
		
	
		
			
			|  |  |  | * structure contains extended position information from the current | 
		
	
		
			
			|  |  |  | * cycle.  If TRUE, it contains whatever was set by the requester. | 
		
	
		
			
			|  |  |  | * The @a timebase_callback's task is to update the extended | 
		
	
		
			
			|  |  |  | * information here. | 
		
	
		
			
			|  |  |  | * @param new_pos TRUE (non-zero) for a newly requested @a pos, or for | 
		
	
		
			
			|  |  |  | * the first cycle after the @a timebase_callback is defined. | 
		
	
		
			
			|  |  |  | * @param arg the argument supplied by jack_set_timebase_callback(). | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef void (*JackTimebaseCallback)(jack_transport_state_t state, | 
		
	
		
			
			|  |  |  | jack_nframes_t nframes, | 
		
	
		
			
			|  |  |  | jack_position_t *pos, | 
		
	
		
			
			|  |  |  | int new_pos, | 
		
	
		
			
			|  |  |  | void *arg); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /********************************************************************* | 
		
	
		
			
			|  |  |  | * The following interfaces are DEPRECATED.  They are only provided | 
		
	
		
			
			|  |  |  | * for compatibility with the earlier JACK transport implementation. | 
		
	
		
			
			|  |  |  | *********************************************************************/ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Optional struct jack_transport_info_t fields. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @see jack_position_bits_t. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef enum { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | JackTransportState = 0x1,  	/**< Transport state */ | 
		
	
		
			
			|  |  |  | JackTransportPosition = 0x2,  	/**< Frame number */ | 
		
	
		
			
			|  |  |  | JackTransportLoop = 0x4,  	/**< Loop boundaries (ignored) */ | 
		
	
		
			
			|  |  |  | JackTransportSMPTE = 0x8,  	/**< SMPTE (ignored) */ | 
		
	
		
			
			|  |  |  | JackTransportBBT = 0x10	/**< Bar, Beat, Tick */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } jack_transport_bits_t; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Deprecated struct for transport position information. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @deprecated This is for compatibility with the earlier transport | 
		
	
		
			
			|  |  |  | * interface.  Use the jack_position_t struct, instead. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | typedef struct { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /* these two cannot be set from clients: the server sets them */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_nframes_t frame_rate;		/**< current frame rate (per second) */ | 
		
	
		
			
			|  |  |  | jack_time_t usecs;		/**< monotonic, free-rolling */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | jack_transport_bits_t valid;	/**< which fields are legal to read */ | 
		
	
		
			
			|  |  |  | jack_transport_state_t transport_state; | 
		
	
		
			
			|  |  |  | jack_nframes_t frame; | 
		
	
		
			
			|  |  |  | jack_nframes_t loop_start; | 
		
	
		
			
			|  |  |  | jack_nframes_t loop_end; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | long smpte_offset;	/**< SMPTE offset (from frame 0) */ | 
		
	
		
			
			|  |  |  | float smpte_frame_rate;	/**< 29.97, 30, 24 etc. */ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | int bar; | 
		
	
		
			
			|  |  |  | int beat; | 
		
	
		
			
			|  |  |  | int tick; | 
		
	
		
			
			|  |  |  | double bar_start_tick; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | float beats_per_bar; | 
		
	
		
			
			|  |  |  | float beat_type; | 
		
	
		
			
			|  |  |  | double ticks_per_beat; | 
		
	
		
			
			|  |  |  | double beats_per_minute; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | jack_transport_info_t; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | #ifdef __cplusplus | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | #endif | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | #endif /* __jack_transport_aux_h__ */ | 
		
	
		
			
			|  |  |  | #endif |