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; | |||