git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4546 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.8
@@ -214,7 +214,7 @@ extern "C" | |||||
jack_position_t *pos); | jack_position_t *pos); | ||||
LIB_EXPORT jack_nframes_t jack_get_current_transport_frame(const jack_client_t *client); | LIB_EXPORT jack_nframes_t jack_get_current_transport_frame(const jack_client_t *client); | ||||
LIB_EXPORT int jack_transport_reposition(jack_client_t *client, | LIB_EXPORT int jack_transport_reposition(jack_client_t *client, | ||||
jack_position_t *pos); | |||||
const jack_position_t *pos); | |||||
LIB_EXPORT void jack_transport_start(jack_client_t *client); | LIB_EXPORT void jack_transport_start(jack_client_t *client); | ||||
LIB_EXPORT void jack_transport_stop(jack_client_t *client); | LIB_EXPORT void jack_transport_stop(jack_client_t *client); | ||||
LIB_EXPORT void jack_get_transport_info(jack_client_t *client, | LIB_EXPORT void jack_get_transport_info(jack_client_t *client, | ||||
@@ -1626,7 +1626,7 @@ LIB_EXPORT jack_nframes_t jack_get_current_transport_frame(const jack_client_t* | |||||
} | } | ||||
} | } | ||||
LIB_EXPORT int jack_transport_reposition(jack_client_t* ext_client, jack_position_t* pos) | |||||
LIB_EXPORT int jack_transport_reposition(jack_client_t* ext_client, const jack_position_t* pos) | |||||
{ | { | ||||
#ifdef __CLIENTDEBUG__ | #ifdef __CLIENTDEBUG__ | ||||
JackGlobals::CheckContext("jack_transport_reposition"); | JackGlobals::CheckContext("jack_transport_reposition"); | ||||
@@ -848,14 +848,14 @@ void JackClient::TransportLocate(jack_nframes_t frame) | |||||
GetEngineControl()->fTransport.RequestNewPos(&pos); | GetEngineControl()->fTransport.RequestNewPos(&pos); | ||||
} | } | ||||
int JackClient::TransportReposition(jack_position_t* pos) | |||||
int JackClient::TransportReposition(const jack_position_t* pos) | |||||
{ | { | ||||
jack_position_t tmp = *pos; | jack_position_t tmp = *pos; | ||||
jack_log("JackClient::TransportReposition pos = %ld", pos->frame); | jack_log("JackClient::TransportReposition pos = %ld", pos->frame); | ||||
if (tmp.valid & ~JACK_POSITION_MASK) { | if (tmp.valid & ~JACK_POSITION_MASK) { | ||||
return EINVAL; | return EINVAL; | ||||
} else { | } else { | ||||
GetEngineControl()->fTransport.RequestNewPos(pos); | |||||
GetEngineControl()->fTransport.RequestNewPos(&tmp); | |||||
return 0; | return 0; | ||||
} | } | ||||
} | } | ||||
@@ -164,7 +164,7 @@ class SERVER_EXPORT JackClient : public JackClientInterface, public JackRunnable | |||||
virtual void TransportLocate(jack_nframes_t frame); | virtual void TransportLocate(jack_nframes_t frame); | ||||
virtual jack_transport_state_t TransportQuery(jack_position_t* pos); | virtual jack_transport_state_t TransportQuery(jack_position_t* pos); | ||||
virtual jack_nframes_t GetCurrentTransportFrame(); | virtual jack_nframes_t GetCurrentTransportFrame(); | ||||
virtual int TransportReposition(jack_position_t* pos); | |||||
virtual int TransportReposition(const jack_position_t* pos); | |||||
virtual void TransportStart(); | virtual void TransportStart(); | ||||
virtual void TransportStop(); | virtual void TransportStop(); | ||||
@@ -30,10 +30,10 @@ extern "C" | |||||
{ | { | ||||
#endif | #endif | ||||
LIB_EXPORT jack_nframes_t jack_midi_get_event_count(void* port_buffer); | |||||
LIB_EXPORT uint32_t jack_midi_get_event_count(void* port_buffer); | |||||
LIB_EXPORT int jack_midi_event_get(jack_midi_event_t* event, | LIB_EXPORT int jack_midi_event_get(jack_midi_event_t* event, | ||||
void* port_buffer, jack_nframes_t event_index); | |||||
void* port_buffer, uint32_t event_index); | |||||
LIB_EXPORT void jack_midi_clear_buffer(void* port_buffer); | LIB_EXPORT void jack_midi_clear_buffer(void* port_buffer); | ||||
@@ -54,7 +54,7 @@ extern "C" | |||||
using namespace Jack; | using namespace Jack; | ||||
LIB_EXPORT | LIB_EXPORT | ||||
jack_nframes_t jack_midi_get_event_count(void* port_buffer) | |||||
uint32_t jack_midi_get_event_count(void* port_buffer) | |||||
{ | { | ||||
JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; | JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; | ||||
if (!buf || !buf->IsValid()) { | if (!buf || !buf->IsValid()) { | ||||
@@ -64,7 +64,7 @@ jack_nframes_t jack_midi_get_event_count(void* port_buffer) | |||||
} | } | ||||
LIB_EXPORT | LIB_EXPORT | ||||
int jack_midi_event_get(jack_midi_event_t *event, void* port_buffer, jack_nframes_t event_index) | |||||
int jack_midi_event_get(jack_midi_event_t *event, void* port_buffer, uint32_t event_index) | |||||
{ | { | ||||
JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; | JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; | ||||
if (!buf || !buf->IsValid()) { | if (!buf || !buf->IsValid()) { | ||||
@@ -143,7 +143,7 @@ int jack_midi_event_write(void* port_buffer, | |||||
} | } | ||||
LIB_EXPORT | LIB_EXPORT | ||||
jack_nframes_t jack_midi_get_lost_event_count(void* port_buffer) | |||||
uint32_t jack_midi_get_lost_event_count(void* port_buffer) | |||||
{ | { | ||||
JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; | JackMidiBuffer *buf = (JackMidiBuffer*)port_buffer; | ||||
if (buf && buf->IsValid()) | if (buf && buf->IsValid()) | ||||
@@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU Lesser General Public License for more details. | GNU Lesser General Public License for more details. | ||||
You should have received a copy of the GNU Lesser General Public License | You should have received a copy of the GNU Lesser General Public License | ||||
along with this program; if not, write to the Free Software | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | */ | ||||
@@ -38,7 +38,7 @@ JackTransportEngine::JackTransportEngine(): JackAtomicArrayState<jack_position_t | |||||
{ | { | ||||
fTransportState = JackTransportStopped; | fTransportState = JackTransportStopped; | ||||
fTransportCmd = fPreviousCmd = TransportCommandStop; | fTransportCmd = fPreviousCmd = TransportCommandStop; | ||||
fSyncTimeout = 10000000; /* 10 seconds default... | |||||
fSyncTimeout = 10000000; /* 10 seconds default... | |||||
in case of big netjack1 roundtrip */ | in case of big netjack1 roundtrip */ | ||||
fSyncTimeLeft = 0; | fSyncTimeLeft = 0; | ||||
fTimeBaseMaster = -1; | fTimeBaseMaster = -1; | ||||
@@ -112,8 +112,8 @@ void JackTransportEngine::MakeAllStartingLocating(JackClientInterface** table) | |||||
JackClientControl* control = client->GetClientControl(); | JackClientControl* control = client->GetClientControl(); | ||||
// Inactive clients don't have their process function called at all, so they must appear as already "rolling" for the transport.... | // Inactive clients don't have their process function called at all, so they must appear as already "rolling" for the transport.... | ||||
control->fTransportState = (control->fActive && control->fCallback[kRealTimeCallback]) ? JackTransportStarting : JackTransportRolling; | control->fTransportState = (control->fActive && control->fCallback[kRealTimeCallback]) ? JackTransportStarting : JackTransportRolling; | ||||
control->fTransportSync = true; | |||||
control->fTransportTimebase = true; | |||||
control->fTransportSync = true; | |||||
control->fTransportTimebase = true; | |||||
jack_log("MakeAllStartingLocating ref = %ld", i); | jack_log("MakeAllStartingLocating ref = %ld", i); | ||||
} | } | ||||
} | } | ||||
@@ -127,8 +127,8 @@ void JackTransportEngine::MakeAllStopping(JackClientInterface** table) | |||||
if (client) { | if (client) { | ||||
JackClientControl* control = client->GetClientControl(); | JackClientControl* control = client->GetClientControl(); | ||||
control->fTransportState = JackTransportStopped; | control->fTransportState = JackTransportStopped; | ||||
control->fTransportSync = false; | |||||
control->fTransportTimebase = false; | |||||
control->fTransportSync = false; | |||||
control->fTransportTimebase = false; | |||||
jack_log("MakeAllStopping ref = %ld", i); | jack_log("MakeAllStopping ref = %ld", i); | ||||
} | } | ||||
} | } | ||||
@@ -142,8 +142,8 @@ void JackTransportEngine::MakeAllLocating(JackClientInterface** table) | |||||
if (client) { | if (client) { | ||||
JackClientControl* control = client->GetClientControl(); | JackClientControl* control = client->GetClientControl(); | ||||
control->fTransportState = JackTransportStopped; | control->fTransportState = JackTransportStopped; | ||||
control->fTransportSync = true; | |||||
control->fTransportTimebase = true; | |||||
control->fTransportSync = true; | |||||
control->fTransportTimebase = true; | |||||
jack_log("MakeAllLocating ref = %ld", i); | jack_log("MakeAllLocating ref = %ld", i); | ||||
} | } | ||||
} | } | ||||
@@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU Lesser General Public License for more details. | GNU Lesser General Public License for more details. | ||||
You should have received a copy of the GNU Lesser General Public License | You should have received a copy of the GNU Lesser General Public License | ||||
along with this program; if not, write to the Free Software | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | */ | ||||
@@ -48,43 +48,43 @@ We have: | |||||
The current position can be read by clients. | The current position can be read by clients. | ||||
We use a JackAtomicArrayState pattern that allows to manage several "next" states independantly. | We use a JackAtomicArrayState pattern that allows to manage several "next" states independantly. | ||||
In jack1 implementation, transport code (jack_transport_cycle_end) was not called if the graph could not be locked (see jack_run_one_cycle). | In jack1 implementation, transport code (jack_transport_cycle_end) was not called if the graph could not be locked (see jack_run_one_cycle). | ||||
Here transport cycle (CycleBegin, CycleEnd) has to run in the RT thread concurrently with code executed from the "command" thread. | Here transport cycle (CycleBegin, CycleEnd) has to run in the RT thread concurrently with code executed from the "command" thread. | ||||
Each client maintains a state in it's shared memory area defined by: | Each client maintains a state in it's shared memory area defined by: | ||||
- it's current transport state | - it's current transport state | ||||
- a boolean that is "true" when slow-sync cb has to be called | - a boolean that is "true" when slow-sync cb has to be called | ||||
- a boolean that is "true" when timebase cb is called with new_pos on | - a boolean that is "true" when timebase cb is called with new_pos on | ||||
Several operations set the "slow-sync cb" flag to true: | Several operations set the "slow-sync cb" flag to true: | ||||
- setting a new cb (client) | - setting a new cb (client) | ||||
- activate (client) | - activate (client) | ||||
- transport start (server) | - transport start (server) | ||||
- new pos (server) | - new pos (server) | ||||
Slow-sync cb calls stops when: | Slow-sync cb calls stops when: | ||||
- the cb return true (client) | - the cb return true (client) | ||||
- desactivate (client) | - desactivate (client) | ||||
- transport stop (server) | - transport stop (server) | ||||
Several operations set the "timebase cb" flag to true: | Several operations set the "timebase cb" flag to true: | ||||
- setting a new cb (client) | - setting a new cb (client) | ||||
- activate (client) | - activate (client) | ||||
- transport start (server) ?? | - transport start (server) ?? | ||||
- new pos (server) | - new pos (server) | ||||
Timebase cb "new_pos" argument calls stops when: | Timebase cb "new_pos" argument calls stops when: | ||||
- after one cb call with "new_pos" argument true (client) | - after one cb call with "new_pos" argument true (client) | ||||
- desactivate (client) | - desactivate (client) | ||||
- release (client) | - release (client) | ||||
- transport stop (server) | - transport stop (server) | ||||
*/ | */ | ||||
class JackClientInterface; | class JackClientInterface; | ||||
@@ -109,7 +109,7 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState<jack_posit | |||||
void MakeAllStartingLocating(JackClientInterface** table); | void MakeAllStartingLocating(JackClientInterface** table); | ||||
void MakeAllStopping(JackClientInterface** table); | void MakeAllStopping(JackClientInterface** table); | ||||
void MakeAllLocating(JackClientInterface** table); | void MakeAllLocating(JackClientInterface** table); | ||||
void SyncTimeout(jack_nframes_t frame_rate, jack_nframes_t buffer_size); | void SyncTimeout(jack_nframes_t frame_rate, jack_nframes_t buffer_size); | ||||
public: | public: | ||||
@@ -128,22 +128,22 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState<jack_posit | |||||
{ | { | ||||
return fTransportState; | return fTransportState; | ||||
} | } | ||||
void SetState(jack_transport_state_t state) | void SetState(jack_transport_state_t state) | ||||
{ | { | ||||
fTransportState = state; | fTransportState = state; | ||||
} | } | ||||
/* | /* | ||||
\brief | |||||
\brief | |||||
*/ | */ | ||||
int ResetTimebase(int refnum); | int ResetTimebase(int refnum); | ||||
/* | /* | ||||
\brief | |||||
\brief | |||||
*/ | */ | ||||
int SetTimebaseMaster(int refnum, bool conditionnal); | int SetTimebaseMaster(int refnum, bool conditionnal); | ||||
void GetTimebaseMaster(int& refnum, bool& conditionnal) | void GetTimebaseMaster(int& refnum, bool& conditionnal) | ||||
{ | { | ||||
refnum = fTimeBaseMaster; | refnum = fTimeBaseMaster; | ||||
@@ -151,17 +151,17 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState<jack_posit | |||||
} | } | ||||
/* | /* | ||||
\brief | |||||
\brief | |||||
*/ | */ | ||||
void CycleBegin(jack_nframes_t frame_rate, jack_time_t time); | void CycleBegin(jack_nframes_t frame_rate, jack_time_t time); | ||||
/* | /* | ||||
\brief | |||||
\brief | |||||
*/ | */ | ||||
void CycleEnd(JackClientInterface** table, jack_nframes_t frame_rate, jack_nframes_t buffer_size); | void CycleEnd(JackClientInterface** table, jack_nframes_t frame_rate, jack_nframes_t buffer_size); | ||||
/* | /* | ||||
\brief | |||||
\brief | |||||
*/ | */ | ||||
void SetSyncTimeout(jack_time_t timeout) | void SetSyncTimeout(jack_time_t timeout) | ||||
{ | { | ||||
@@ -174,20 +174,20 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState<jack_posit | |||||
{ | { | ||||
return (jack_unique_t)INC_ATOMIC(&fWriteCounter); | return (jack_unique_t)INC_ATOMIC(&fWriteCounter); | ||||
} | } | ||||
void RequestNewPos(jack_position_t* pos); | void RequestNewPos(jack_position_t* pos); | ||||
jack_transport_state_t Query(jack_position_t* pos); | jack_transport_state_t Query(jack_position_t* pos); | ||||
jack_nframes_t GetCurrentFrame(); | jack_nframes_t GetCurrentFrame(); | ||||
static void CopyPosition(jack_position_t* from, jack_position_t* to); | static void CopyPosition(jack_position_t* from, jack_position_t* to); | ||||
bool GetNetworkSync() const | bool GetNetworkSync() const | ||||
{ | { | ||||
return fNetworkSync; | return fNetworkSync; | ||||
} | } | ||||
void SetNetworkSync(bool sync) | void SetNetworkSync(bool sync) | ||||
{ | { | ||||
fNetworkSync = sync; | fNetworkSync = sync; | ||||
@@ -53,7 +53,7 @@ typedef struct _jack_midi_event | |||||
* @param port_buffer Port buffer from which to retrieve event. | * @param port_buffer Port buffer from which to retrieve event. | ||||
* @return number of events inside @a port_buffer | * @return number of events inside @a port_buffer | ||||
*/ | */ | ||||
jack_nframes_t | |||||
uint32_t | |||||
jack_midi_get_event_count(void* port_buffer) JACK_OPTIONAL_WEAK_EXPORT; | jack_midi_get_event_count(void* port_buffer) JACK_OPTIONAL_WEAK_EXPORT; | ||||
@@ -70,8 +70,8 @@ jack_midi_get_event_count(void* port_buffer) JACK_OPTIONAL_WEAK_EXPORT; | |||||
*/ | */ | ||||
int | int | ||||
jack_midi_event_get(jack_midi_event_t *event, | jack_midi_event_get(jack_midi_event_t *event, | ||||
void *port_buffer, | |||||
jack_nframes_t event_index) JACK_OPTIONAL_WEAK_EXPORT; | |||||
void *port_buffer, | |||||
uint32_t event_index) JACK_OPTIONAL_WEAK_EXPORT; | |||||
/** Clear an event buffer. | /** Clear an event buffer. | ||||
@@ -158,7 +158,7 @@ jack_midi_event_write(void *port_buffer, | |||||
* @param port_buffer Port to receive count for. | * @param port_buffer Port to receive count for. | ||||
* @returns Number of events that could not be written to @a port_buffer. | * @returns Number of events that could not be written to @a port_buffer. | ||||
*/ | */ | ||||
jack_nframes_t | |||||
uint32_t | |||||
jack_midi_get_lost_event_count(void *port_buffer) JACK_OPTIONAL_WEAK_EXPORT; | jack_midi_get_lost_event_count(void *port_buffer) JACK_OPTIONAL_WEAK_EXPORT; | ||||
/*@}*/ | /*@}*/ | ||||
@@ -1,19 +1,19 @@ | |||||
/* | /* | ||||
Copyright (C) 2002 Paul Davis | Copyright (C) 2002 Paul Davis | ||||
Copyright (C) 2003 Jack O'Quin | Copyright (C) 2003 Jack O'Quin | ||||
This program is free software; you can redistribute it and/or modify | 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 | 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 | the Free Software Foundation; either version 2.1 of the License, or | ||||
(at your option) any later version. | (at your option) any later version. | ||||
This program is distributed in the hope that it will be useful, | This program is distributed in the hope that it will be useful, | ||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
GNU Lesser General Public License for more details. | GNU Lesser General Public License for more details. | ||||
You should have received a copy of the GNU Lesser General Public License | You should have received a copy of the GNU Lesser General Public License | ||||
along with this program; if not, write to the Free Software | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | */ | ||||
@@ -135,7 +135,7 @@ int jack_set_timebase_callback (jack_client_t *client, | |||||
* sync_callbacks until ready. This function is realtime-safe. | * sync_callbacks until ready. This function is realtime-safe. | ||||
* | * | ||||
* @see jack_transport_reposition, jack_set_sync_callback | * @see jack_transport_reposition, jack_set_sync_callback | ||||
* | |||||
* | |||||
* @param client the JACK client structure. | * @param client the JACK client structure. | ||||
* @param frame frame number of new transport position. | * @param frame frame number of new transport position. | ||||
* | * | ||||
@@ -170,7 +170,7 @@ jack_transport_state_t jack_transport_query (const jack_client_t *client, | |||||
* @param client the JACK client structure | * @param client the JACK client structure | ||||
*/ | */ | ||||
jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client) JACK_OPTIONAL_WEAK_EXPORT; | jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client) JACK_OPTIONAL_WEAK_EXPORT; | ||||
/** | /** | ||||
* Request a new transport position. | * Request a new transport position. | ||||
* | * | ||||
@@ -181,14 +181,14 @@ jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client) JA | |||||
* sync_callbacks until ready. This function is realtime-safe. | * sync_callbacks until ready. This function is realtime-safe. | ||||
* | * | ||||
* @see jack_transport_locate, jack_set_sync_callback | * @see jack_transport_locate, jack_set_sync_callback | ||||
* | |||||
* | |||||
* @param client the JACK client structure. | * @param client the JACK client structure. | ||||
* @param pos requested new transport position. | * @param pos requested new transport position. | ||||
* | * | ||||
* @return 0 if valid request, EINVAL if position structure rejected. | * @return 0 if valid request, EINVAL if position structure rejected. | ||||
*/ | */ | ||||
int jack_transport_reposition (jack_client_t *client, | int jack_transport_reposition (jack_client_t *client, | ||||
jack_position_t *pos) JACK_OPTIONAL_WEAK_EXPORT; | |||||
const jack_position_t *pos) JACK_OPTIONAL_WEAK_EXPORT; | |||||
/** | /** | ||||
* Start the JACK transport rolling. | * Start the JACK transport rolling. | ||||
@@ -239,7 +239,7 @@ void jack_set_transport_info (jack_client_t *client, | |||||
jack_transport_info_t *tinfo) JACK_OPTIONAL_WEAK_EXPORT; | jack_transport_info_t *tinfo) JACK_OPTIONAL_WEAK_EXPORT; | ||||
/*@}*/ | /*@}*/ | ||||
#ifdef __cplusplus | #ifdef __cplusplus | ||||
} | } | ||||
#endif | #endif | ||||
@@ -6170,6 +6170,7 @@ | |||||
isa = PBXProject; | isa = PBXProject; | ||||
buildConfigurationList = 4B699DD5097D427F00A18468 /* Build configuration list for PBXProject "Jackdmp" */; | buildConfigurationList = 4B699DD5097D427F00A18468 /* Build configuration list for PBXProject "Jackdmp" */; | ||||
compatibilityVersion = "Xcode 2.4"; | compatibilityVersion = "Xcode 2.4"; | ||||
developmentRegion = English; | |||||
hasScannedForEncodings = 1; | hasScannedForEncodings = 1; | ||||
knownRegions = ( | knownRegions = ( | ||||
English, | English, | ||||