git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2702 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
| @@ -25,6 +25,7 @@ Romain Moret | |||
| * Correct audioadapter when a sample rate value different from jack server one is chosen. | |||
| * Cleanup in JackTransportEngine, move some code that was in JackClient class. | |||
| * Remove transport_type.h file, move transport types in types.h file. | |||
| 2008-07-12 Stephane Letz <letz@grame.fr> | |||
| @@ -127,7 +127,7 @@ namespace Jack | |||
| virtual int SetAudioSampleRate(jack_nframes_t sample_rate) | |||
| { | |||
| fSampleRate = sample_rate; | |||
| // Consummer (Audio) keeps the same SR | |||
| // Consumer keeps the same SR | |||
| fProducerDLL.Init(fBufferSize, fSampleRate); | |||
| return 0; | |||
| } | |||
| @@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
| #include "JackConstants.h" | |||
| #include "JackSynchro.h" | |||
| #include "types.h" | |||
| #include "transport_types.h" | |||
| #include "varargs.h" | |||
| #include <list> | |||
| @@ -25,7 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
| #include "JackPort.h" | |||
| #include "JackSynchro.h" | |||
| #include "JackNotification.h" | |||
| #include "transport_types.h" | |||
| namespace Jack | |||
| { | |||
| @@ -23,7 +23,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| #include "JackAudioDriver.h" | |||
| #include "JackNetTool.h" | |||
| #include "transport_types.h" | |||
| namespace Jack | |||
| { | |||
| @@ -23,6 +23,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| #include "JackError.h" | |||
| #include "JackTools.h" | |||
| #include "JackPlatformNetSocket.h" | |||
| #include "types.h" | |||
| #include <string> | |||
| #include <algorithm> | |||
| @@ -40,21 +41,21 @@ namespace Jack | |||
| struct _session_params | |||
| { | |||
| char fPacketType[7]; //packet type ('param') | |||
| char fProtocolVersion; //version | |||
| char fPacketType[7]; //packet type ('param') | |||
| char fProtocolVersion; //version | |||
| uint32_t fPacketID; //indicates the packet type | |||
| char fMasterNetName[256]; //master hostname (network) | |||
| char fSlaveNetName[256]; //slave hostname (network) | |||
| char fMasterNetName[256]; //master hostname (network) | |||
| char fSlaveNetName[256]; //slave hostname (network) | |||
| uint32_t fMtu; //connection mtu | |||
| uint32_t fID; //slave's ID | |||
| uint32_t fSendAudioChannels; //number of master->slave channels | |||
| uint32_t fReturnAudioChannels; //number of slave->master channels | |||
| uint32_t fSendAudioChannels; //number of master->slave channels | |||
| uint32_t fReturnAudioChannels; //number of slave->master channels | |||
| uint32_t fSendMidiChannels; //number of master->slave midi channels | |||
| uint32_t fReturnMidiChannels; //number of slave->master midi channels | |||
| uint32_t fReturnMidiChannels; //number of slave->master midi channels | |||
| uint32_t fSampleRate; //session sample rate | |||
| uint32_t fPeriodSize; //period size | |||
| uint32_t fFramesPerPacket; //complete frames per packet | |||
| uint32_t fBitdepth; //samples bitdepth (unused) | |||
| uint32_t fBitdepth; //samples bitdepth (unused) | |||
| char fName[JACK_CLIENT_NAME_SIZE]; //slave's name | |||
| }; | |||
| @@ -21,7 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
| #ifndef __JackTransportEngine__ | |||
| #define __JackTransportEngine__ | |||
| #include "transport_types.h" | |||
| #include "JackClientInterface.h" | |||
| #include "JackConstants.h" | |||
| #include "JackAtomicArrayState.h" | |||
| @@ -27,108 +27,6 @@ extern "C" { | |||
| #include <jack/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 */ | |||
| } 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|JackBBTFrameOffset|JackAudioVideoRatio|JackVideoFrameOffset) | |||
| #define EXTENDED_TIME_INFO | |||
| /** | |||
| * Struct for transport position information. | |||
| */ | |||
| 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; | |||
| /** | |||
| * Called by the timebase master to release itself from that | |||
| * responsibility. | |||
| @@ -147,31 +45,6 @@ typedef struct { | |||
| */ | |||
| int jack_release_timebase (jack_client_t *client); | |||
| /** | |||
| * 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); | |||
| /** | |||
| * Register (or unregister) as a slow-sync client, one that cannot | |||
| * respond immediately to transport position changes. | |||
| @@ -216,41 +89,6 @@ int jack_set_sync_callback (jack_client_t *client, | |||
| int jack_set_sync_timeout (jack_client_t *client, | |||
| jack_time_t timeout); | |||
| /** | |||
| * 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); | |||
| /** | |||
| * Register as timebase master for the JACK subsystem. | |||
| * | |||
| @@ -368,61 +206,6 @@ void jack_transport_start (jack_client_t *client); | |||
| * @param client the JACK client structure. | |||
| */ | |||
| void jack_transport_stop (jack_client_t *client); | |||
| /********************************************************************* | |||
| * 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; | |||
| /** | |||
| * Gets the current transport info structure (deprecated). | |||
| @@ -19,20 +19,20 @@ | |||
| */ | |||
| #ifndef __jack_types_h__ | |||
| #define __jack_types_h__ | |||
| #define __jack_types_h__ | |||
| #ifdef WIN32 | |||
| #ifdef WIN32 | |||
| #include <windows.h> | |||
| #ifndef __MINGW32__ | |||
| #define vsnprintf _vsnprintf | |||
| #define snprintf _snprintf | |||
| typedef char int8_t; | |||
| typedef unsigned char uint8_t; | |||
| typedef short int16_t; | |||
| typedef unsigned short uint16_t; | |||
| typedef long int32_t; | |||
| typedef unsigned long uint32_t; | |||
| typedef LONGLONG int64_t; | |||
| #ifndef __MINGW32__ | |||
| #define vsnprintf _vsnprintf | |||
| #define snprintf _snprintf | |||
| typedef char int8_t; | |||
| typedef unsigned char uint8_t; | |||
| typedef short int16_t; | |||
| typedef unsigned short uint16_t; | |||
| typedef long int32_t; | |||
| typedef unsigned long uint32_t; | |||
| typedef LONGLONG int64_t; | |||
| typedef ULONGLONG uint64_t; | |||
| #else | |||
| #include <stdint.h> | |||
| @@ -431,4 +431,219 @@ enum JackStatus { | |||
| */ | |||
| typedef enum JackStatus jack_status_t; | |||
| /** | |||
| * 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; | |||
| #endif /* __jack_types_h__ */ | |||
| @@ -1,252 +0,0 @@ | |||
| /* | |||
| Copyright (C) 2002 Paul Davis | |||
| Copyright (C) 2003 Jack O'Quin | |||
| This program is free software; you can redistribute it and/or modify | |||
| it under the terms of the GNU Lesser General Public License as published by | |||
| the Free Software Foundation; either version 2.1 of the License, or | |||
| (at your option) 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 FITNESS 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 program; if not, write to the Free Software | |||
| Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
| $Id: transport_types.h,v 1.1.2.2 2006/06/20 14:44:00 letz Exp $ | |||
| */ | |||
| #ifndef __jack_transport_aux_h__ | |||
| #define __jack_transport_aux_h__ | |||
| #ifdef __cplusplus | |||
| extern "C" | |||
| { | |||
| #endif | |||
| #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 */ | |||
| } 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; | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif | |||
| @@ -80,7 +80,7 @@ namespace Jack | |||
| jack_nframes_t capture_latency, | |||
| jack_nframes_t playback_latency) | |||
| { | |||
| PaError err; | |||
| PaError err = paNoError; | |||
| PaStreamParameters inputParameters; | |||
| PaStreamParameters outputParameters; | |||
| int in_max = 0; | |||