Changeset 3917

Show
Ignore:
Timestamp:
02/18/10 01:08:09 (5 months ago)
Author:
sletz
Message:

rebase from trunk 3899:3916

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • jack2/branches/libjacknet/ChangeLog

    r3900 r3917  
    3030--------------------------- 
    3131 
     322010-02-15 Gabriel M. Beddingfield <gabriel@teuton.org> 
     33 
     34        * Version 1.9.6 started. 
     35 
    32362010-01-29 Gabriel M. Beddingfield <gabriel@teuton.org> 
    3337 
  • jack2/branches/libjacknet/common/jack/types.h

    r3900 r3917  
    296296     * their ports. 
    297297     */ 
    298     JackPortIsTerminal = 0x10 
     298    JackPortIsTerminal = 0x10, 
     299     
     300    /** 
     301     * JackPortIsActive means the port has been registered and the  
     302     * client is "active", that is jack_activate has been called 
     303     *  
     304     * JackPortIsActive is on between jack_activate and jack_deactivate. 
     305     */ 
     306    JackPortIsActive = 0x20 
    299307}; 
    300308 
  • jack2/branches/libjacknet/common/jack/weakmacros.h

    r3900 r3917  
    4444#else 
    4545/* Add other things here for non-gcc platforms */ 
     46#define JACK_WEAK_EXPORT 
    4647#endif 
    4748#endif 
     
    5657#else 
    5758/* Add other things here for non-gcc platforms */ 
     59#define  JACK_OPTIONAL_WEAK_DEPRECATED_EXPORT 
    5860#endif /* __GNUC__ */ 
    5961#endif 
  • jack2/branches/libjacknet/common/JackAudioDriver.cpp

    r3639 r3917  
    102102    char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    103103    char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    104     unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    105104    int i; 
    106105 
     
    110109        snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, i + 1); 
    111110        snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, i + 1); 
    112         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     111        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, CaptureDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    113112            jack_error("driver: cannot register port for %s", name); 
    114113            return -1; 
     
    121120    } 
    122121 
    123     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    124  
    125122    for (i = 0; i < fPlaybackChannels; i++) { 
    126123        snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, i + 1); 
    127124        snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); 
    128         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     125        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, PlaybackDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    129126            jack_error("driver: cannot register port for %s", name); 
    130127            return -1; 
  • jack2/branches/libjacknet/common/JackClient.cpp

    r3900 r3917  
    253253                 
    254254             case kPortRenameCallback: 
    255                 jack_log("JackClient::kPortRenameCallback port = %ld"); 
     255                jack_log("JackClient::kPortRenameCallback port = %ld", value1); 
    256256                if (fPortRename) { 
    257257                    fPortRename(value1, message, GetGraphManager()->GetPort(value1)->GetName(), fPortRenameArg); 
  • jack2/branches/libjacknet/common/JackConstants.h

    r3900 r3917  
    2525#endif 
    2626 
    27 #define VERSION "1.9.5
     27#define VERSION "1.9.6
    2828 
    2929#define BUFFER_SIZE_MAX 8192 
  • jack2/branches/libjacknet/common/JackDriver.h

    r3685 r3917  
    110110 \brief The base class for drivers. 
    111111 */ 
     112  
     113#define CaptureDriverFlags  static_cast<JackPortFlags>(JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal | JackPortIsActive) 
     114#define PlaybackDriverFlags static_cast<JackPortFlags>(JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal | JackPortIsActive) 
     115#define MonitorDriverFlags static_cast<JackPortFlags>(JackPortIsOutput | JackPortIsActive) 
    112116 
    113117class SERVER_EXPORT JackDriver : public JackDriverClientInterface 
  • jack2/branches/libjacknet/common/JackEngine.cpp

    r3900 r3917  
    3535namespace Jack 
    3636{ 
    37  
    38 #define AssertRefnum(ref) assert(ref >= 0 && ref < CLIENT_NUM); 
    3937 
    4038JackEngine::JackEngine(JackGraphManager* manager, 
     
    214212 
    215213    // The client may be notified by the RT thread while closing 
    216     if (!client) { 
    217         jack_log("JackEngine::NotifyClient: client not available anymore"); 
    218     } else if (client->GetClientControl()->fCallback[event]) { 
    219         if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, message, value1, value2) < 0) 
    220             jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); 
    221     } else { 
    222         jack_log("JackEngine::NotifyClient: no callback for event = %ld", event); 
    223     } 
    224 
    225  
    226 void JackEngine::NotifyClients(int event, int sync, const char*  message, int value1, int value2) 
     214    if (client) { 
     215     
     216        if (client && client->GetClientControl()->fCallback[event]) { 
     217            /* 
     218                Important for internal clients : unlock before calling the notification callbacks. 
     219            */ 
     220            bool res = fMutex.Unlock(); 
     221            if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, message, value1, value2) < 0) 
     222                jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); 
     223            if (res) 
     224                fMutex.Lock(); 
     225        
     226        } else { 
     227            jack_log("JackEngine::NotifyClient: no callback for event = %ld", event); 
     228        } 
     229    } 
     230
     231 
     232void JackEngine::NotifyClients(int event, int sync, const char* message, int value1, int value2) 
    227233{ 
    228234    for (int i = 0; i < CLIENT_NUM; i++) { 
    229         JackClientInterface* client = fClientTable[i]; 
    230         if (client) { 
    231             if (client->GetClientControl()->fCallback[event]) { 
    232                 if (client->ClientNotify(i, client->GetClientControl()->fName, event, sync, message, value1, value2) < 0) 
    233                     jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); 
    234             } else { 
    235                 jack_log("JackEngine::NotifyClients: no callback for event = %ld", event); 
    236             } 
    237         } 
     235        NotifyClient(i, event, sync, message, value1, value2); 
    238236    } 
    239237} 
     
    275273{ 
    276274    // Use the audio thread => request thread communication channel 
    277     fEngineControl->ResetFrameTime(callback_usecs); 
    278     fEngineControl->NotifyXRun(delayed_usecs); 
     275    fEngineControl->NotifyXRun(callback_usecs, delayed_usecs); 
    279276    fChannel.Notify(ALL_CLIENTS, kXRunCallback, 0); 
    280277} 
     
    349346int JackEngine::GetInternalClientName(int refnum, char* name_res) 
    350347{ 
    351     AssertRefnum(refnum); 
    352348    JackClientInterface* client = fClientTable[refnum]; 
    353     if (client) { 
    354         strncpy(name_res, client->GetClientControl()->fName, JACK_CLIENT_NAME_SIZE); 
    355         return 0; 
    356     } else { 
    357         return -1; 
    358     } 
     349    strncpy(name_res, client->GetClientControl()->fName, JACK_CLIENT_NAME_SIZE); 
     350    return 0; 
    359351} 
    360352 
     
    379371int JackEngine::InternalClientUnload(int refnum, int* status) 
    380372{ 
    381     AssertRefnum(refnum); 
    382373    JackClientInterface* client = fClientTable[refnum]; 
    383374    if (client) { 
     
    593584int JackEngine::ClientExternalClose(int refnum) 
    594585{ 
    595     AssertRefnum(refnum); 
    596586    JackClientInterface* client = fClientTable[refnum]; 
    597  
    598     if (client) { 
    599         fEngineControl->fTransport.ResetTimebase(refnum); 
    600         int res = ClientCloseAux(refnum, client, true); 
    601         client->Close(); 
    602         delete client; 
    603         return res; 
    604     } else { 
    605         return -1; 
    606     } 
     587    fEngineControl->fTransport.ResetTimebase(refnum); 
     588    int res = ClientCloseAux(refnum, client, true); 
     589    client->Close(); 
     590    delete client; 
     591    return res; 
    607592} 
    608593 
     
    610595int JackEngine::ClientInternalClose(int refnum, bool wait) 
    611596{ 
    612     AssertRefnum(refnum); 
    613597    JackClientInterface* client = fClientTable[refnum]; 
    614     return (client)    ? ClientCloseAux(refnum, client, wait) : -1
     598    return ClientCloseAux(refnum, client, wait)
    615599} 
    616600 
     
    657641int JackEngine::ClientActivate(int refnum, bool is_real_time) 
    658642{ 
    659     AssertRefnum(refnum); 
    660643    JackClientInterface* client = fClientTable[refnum]; 
    661     assert(fClientTable[refnum]); 
    662  
    663644    jack_log("JackEngine::ClientActivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); 
     645     
    664646    if (is_real_time) 
    665647        fGraphManager->Activate(refnum); 
     
    670652        return -1; 
    671653    } else { 
     654        jack_int_t input_ports[PORT_NUM_FOR_CLIENT]; 
     655        jack_int_t output_ports[PORT_NUM_FOR_CLIENT]; 
     656        fGraphManager->GetInputPorts(refnum, input_ports); 
     657        fGraphManager->GetOutputPorts(refnum, output_ports); 
     658         
     659        // First add port state to JackPortIsActive 
     660        for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (input_ports[i] != EMPTY); i++) { 
     661            fGraphManager->ActivatePort(input_ports[i]); 
     662        } 
     663        for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (output_ports[i] != EMPTY); i++) { 
     664            fGraphManager->ActivatePort(output_ports[i]); 
     665        } 
     666         
     667        // Notify client 
    672668        NotifyActivate(refnum); 
     669         
     670        // Then issue port registration notification 
     671        for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (input_ports[i] != EMPTY); i++) { 
     672            NotifyPortRegistation(input_ports[i], true); 
     673        } 
     674        for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (output_ports[i] != EMPTY); i++) { 
     675            NotifyPortRegistation(output_ports[i], true); 
     676        } 
     677 
    673678        return 0; 
    674679    } 
     
    678683int JackEngine::ClientDeactivate(int refnum) 
    679684{ 
    680     AssertRefnum(refnum); 
    681685    JackClientInterface* client = fClientTable[refnum]; 
    682     if (client == NULL) 
    683         return -1; 
    684  
    685686    jack_log("JackEngine::ClientDeactivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); 
    686687 
    687     // Disconnect all ports ==> notifications are sent 
    688     jack_int_t ports[PORT_NUM_FOR_CLIENT]; 
    689     int i; 
    690  
    691     fGraphManager->GetInputPorts(refnum, ports); 
    692     for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { 
    693         PortDisconnect(refnum, ports[i], ALL_PORTS); 
    694     } 
    695  
    696     fGraphManager->GetOutputPorts(refnum, ports); 
    697     for (i = 0; (i < PORT_NUM_FOR_CLIENT) && (ports[i] != EMPTY) ; i++) { 
    698         PortDisconnect(refnum, ports[i], ALL_PORTS); 
     688    jack_int_t input_ports[PORT_NUM_FOR_CLIENT]; 
     689    jack_int_t output_ports[PORT_NUM_FOR_CLIENT]; 
     690    fGraphManager->GetInputPorts(refnum, input_ports); 
     691    fGraphManager->GetOutputPorts(refnum, output_ports); 
     692 
     693    // First disconnect all ports and remove their JackPortIsActive state 
     694    for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (input_ports[i] != EMPTY); i++) { 
     695        PortDisconnect(refnum, input_ports[i], ALL_PORTS); 
     696        fGraphManager->DeactivatePort(input_ports[i]); 
     697    } 
     698    for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (output_ports[i] != EMPTY); i++) { 
     699        PortDisconnect(refnum, output_ports[i], ALL_PORTS); 
     700        fGraphManager->DeactivatePort(output_ports[i]); 
     701    } 
     702     
     703    // Then issue port registration notification 
     704    for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (input_ports[i] != EMPTY); i++) { 
     705        NotifyPortRegistation(input_ports[i], false); 
     706    } 
     707    for (int i = 0; (i < PORT_NUM_FOR_CLIENT) && (output_ports[i] != EMPTY); i++) { 
     708        NotifyPortRegistation(output_ports[i], false); 
    699709    } 
    700710 
     
    718728{ 
    719729    jack_log("JackEngine::PortRegister ref = %ld name = %s type = %s flags = %d buffer_size = %d", refnum, name, type, flags, buffer_size); 
    720     AssertRefnum(refnum); 
    721     assert(fClientTable[refnum]); 
     730    JackClientInterface* client = fClientTable[refnum]; 
    722731 
    723732    // Check if port name already exists 
     
    729738    *port_index = fGraphManager->AllocatePort(refnum, name, type, (JackPortFlags)flags, fEngineControl->fBufferSize); 
    730739    if (*port_index != NO_PORT) { 
    731         NotifyPortRegistation(*port_index, true); 
     740        if (client->GetClientControl()->fActive) 
     741            NotifyPortRegistation(*port_index, true); 
    732742        return 0; 
    733743    } else { 
     
    739749{ 
    740750    jack_log("JackEngine::PortUnRegister ref = %ld port_index = %ld", refnum, port_index); 
    741     AssertRefnum(refnum); 
    742     assert(fClientTable[refnum]); 
     751    JackClientInterface* client = fClientTable[refnum]; 
    743752 
    744753    // Disconnect port ==> notification is sent 
     
    746755 
    747756    if (fGraphManager->ReleasePort(refnum, port_index) == 0) { 
    748         NotifyPortRegistation(port_index, false); 
     757        if (client->GetClientControl()->fActive) 
     758            NotifyPortRegistation(port_index, false); 
    749759        return 0; 
    750760    } else { 
     
    756766{ 
    757767    jack_log("JackEngine::PortConnect src = %s dst = %s", src, dst); 
    758     AssertRefnum(refnum); 
    759768    jack_port_id_t port_src, port_dst; 
    760769 
     
    767776{ 
    768777    jack_log("JackEngine::PortConnect src = %d dst = %d", src, dst); 
    769     AssertRefnum(refnum); 
    770778    JackClientInterface* client; 
    771779    int ref; 
     
    803811{ 
    804812    jack_log("JackEngine::PortDisconnect src = %s dst = %s", src, dst); 
    805     AssertRefnum(refnum); 
    806813    jack_port_id_t port_src, port_dst; 
    807814 
     
    814821{ 
    815822    jack_log("JackEngine::PortDisconnect src = %d dst = %d", src, dst); 
    816     AssertRefnum(refnum); 
    817  
     823  
    818824    if (dst == ALL_PORTS) { 
    819825 
     
    851857int JackEngine::PortRename(int refnum, jack_port_id_t port, const char* name) 
    852858{ 
    853     AssertRefnum(refnum); 
    854859    char old_name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    855860    strcpy(old_name, fGraphManager->GetPort(port)->GetName()); 
  • jack2/branches/libjacknet/common/JackEngine.h

    r3900 r3917  
    2424#include "JackGraphManager.h" 
    2525#include "JackSynchro.h" 
     26#include "JackMutex.h" 
    2627#include "JackTransportEngine.h" 
    2728#include "JackPlatformPlug.h" 
     
    3839*/ 
    3940 
    40 class SERVER_EXPORT JackEngine  
     41class SERVER_EXPORT JackEngine : public JackLockAble 
    4142{ 
     43    friend class JackLockedEngine; 
     44     
    4245    private: 
    4346 
     
    7275        void NotifyPortRename(jack_port_id_t src, const char* old_name); 
    7376        void NotifyActivate(int refnum); 
     77         
     78        bool CheckClient(int refnum) 
     79        { 
     80            return (refnum >= 0 && refnum < CLIENT_NUM && fClientTable[refnum] != NULL); 
     81        } 
    7482 
    7583    public: 
  • jack2/branches/libjacknet/common/JackEngineControl.cpp

    r3529 r3917  
    8282} 
    8383     
    84 void JackEngineControl::NotifyXRun(float delayed_usecs) 
     84void JackEngineControl::NotifyXRun(jack_time_t callback_usecs, float delayed_usecs) 
    8585{ 
     86    ResetFrameTime(callback_usecs); 
    8687    fXrunDelayedUsecs = delayed_usecs; 
    8788    if (delayed_usecs > fMaxDelayedUsecs) 
  • jack2/branches/libjacknet/common/JackEngineControl.h

    r3814 r3917  
    163163     
    164164    // XRun 
    165     void NotifyXRun(float delayed_usecs); 
     165    void NotifyXRun(jack_time_t callback_usecs, float delayed_usecs); 
    166166    void ResetXRun() 
    167167    { 
  • jack2/branches/libjacknet/common/JackGraphManager.cpp

    r3900 r3917  
    377377} 
    378378 
     379void JackGraphManager::ActivatePort(jack_port_id_t port_index) 
     380{ 
     381    JackPort* port = GetPort(port_index); 
     382    port->fFlags = (JackPortFlags)(port->fFlags | JackPortIsActive); 
     383} 
     384 
     385void JackGraphManager::DeactivatePort(jack_port_id_t port_index) 
     386{ 
     387    JackPort* port = GetPort(port_index); 
     388    port->fFlags = (JackPortFlags)(port->fFlags | ~JackPortIsActive); 
     389} 
     390 
    379391void JackGraphManager::GetInputPorts(int refnum, jack_int_t* res) 
    380392{ 
  • jack2/branches/libjacknet/common/JackGraphManager.h

    r3900 r3917  
    6666        jack_port_id_t AllocatePort(int refnum, const char* port_name, const char* port_type, JackPortFlags flags, jack_nframes_t buffer_size); 
    6767        int ReleasePort(int refnum, jack_port_id_t port_index); 
     68        void ActivatePort(jack_port_id_t port_index); 
     69        void DeactivatePort(jack_port_id_t port_index); 
    6870        void GetInputPorts(int refnum, jack_int_t* res); 
    6971        void GetOutputPorts(int refnum, jack_int_t* res); 
     
    7678        int ComputeTotalLatencies(); 
    7779        int RequestMonitor(jack_port_id_t port_index, bool onoff); 
    78  
     80    
    7981        // Connections management 
    8082        int Connect(jack_port_id_t src_index, jack_port_id_t dst_index); 
  • jack2/branches/libjacknet/common/JackLockedEngine.h

    r3900 r3917  
    3838    // Assuming thread cancellation, must rethrow 
    3939    throw; 
    40      
    4140} 
    4241*/ 
     
    6362    }                                               \ 
    6463 
     64 
    6565/*! 
    6666\brief Locked Engine, access to methods is serialized using a mutex. 
    6767*/ 
    6868 
    69 class SERVER_EXPORT JackLockedEngine : public JackLockAble 
     69class SERVER_EXPORT JackLockedEngine  
    7070{ 
    7171    private: 
     
    100100        { 
    101101            TRY_CALL 
    102             JackLock lock(this); 
     102            JackLock lock(&fEngine); 
    103103            return fEngine.ClientCheck(name, name_res, protocol, options, status); 
    104104            CATCH_EXCEPTION_RETURN 
     
    107107        { 
    108108            TRY_CALL 
    109             JackLock lock(this); 
     109            JackLock lock(&fEngine); 
    110110            return fEngine.ClientExternalOpen(name, pid, ref, shared_engine, shared_client, shared_graph_manager); 
    111111            CATCH_EXCEPTION_RETURN 
     
    114114        { 
    115115            TRY_CALL 
    116             JackLock lock(this); 
     116            JackLock lock(&fEngine); 
    117117            return fEngine.ClientInternalOpen(name, ref, shared_engine, shared_manager, client, wait); 
    118118            CATCH_EXCEPTION_RETURN 
     
    122122        { 
    123123            TRY_CALL 
    124             JackLock lock(this); 
    125             return fEngine.ClientExternalClose(refnum)
     124            JackLock lock(&fEngine); 
     125            return (fEngine.CheckClient(refnum)) ? fEngine.ClientExternalClose(refnum) : - 1
    126126            CATCH_EXCEPTION_RETURN 
    127127        } 
     
    129129        { 
    130130            TRY_CALL 
    131             JackLock lock(this); 
    132             return fEngine.ClientInternalClose(refnum, wait)
     131            JackLock lock(&fEngine); 
     132            return (fEngine.CheckClient(refnum)) ? fEngine.ClientInternalClose(refnum, wait) : -1
    133133            CATCH_EXCEPTION_RETURN 
    134134        } 
     
    137137        { 
    138138            TRY_CALL 
    139             JackLock lock(this); 
    140             return fEngine.ClientActivate(refnum, is_real_time)
     139            JackLock lock(&fEngine); 
     140            return (fEngine.CheckClient(refnum)) ? fEngine.ClientActivate(refnum, is_real_time) : -1
    141141            CATCH_EXCEPTION_RETURN 
    142142        } 
     
    144144        { 
    145145            TRY_CALL 
    146             JackLock lock(this); 
    147             return fEngine.ClientDeactivate(refnum)
     146            JackLock lock(&fEngine); 
     147            return (fEngine.CheckClient(refnum)) ? fEngine.ClientDeactivate(refnum) : -1
    148148            CATCH_EXCEPTION_RETURN 
    149149        } 
     
    153153        { 
    154154            TRY_CALL 
    155             JackLock lock(this); 
     155            JackLock lock(&fEngine); 
    156156            return fEngine.GetInternalClientName(int_ref, name_res); 
    157157            CATCH_EXCEPTION_RETURN 
     
    160160        { 
    161161            TRY_CALL 
    162             JackLock lock(this); 
     162            JackLock lock(&fEngine); 
    163163            return fEngine.InternalClientHandle(client_name, status, int_ref); 
    164164            CATCH_EXCEPTION_RETURN 
     
    167167        { 
    168168            TRY_CALL 
    169             JackLock lock(this); 
     169            JackLock lock(&fEngine); 
     170            // Client is tested in fEngine.InternalClientUnload 
    170171            return fEngine.InternalClientUnload(refnum, status); 
    171172            CATCH_EXCEPTION_RETURN 
     
    176177        { 
    177178            TRY_CALL 
    178             JackLock lock(this); 
    179             return fEngine.PortRegister(refnum, name, type, flags, buffer_size, port)
     179            JackLock lock(&fEngine); 
     180            return (fEngine.CheckClient(refnum)) ? fEngine.PortRegister(refnum, name, type, flags, buffer_size, port) : -1
    180181            CATCH_EXCEPTION_RETURN 
    181182        } 
     
    183184        { 
    184185            TRY_CALL 
    185             JackLock lock(this); 
    186             return fEngine.PortUnRegister(refnum, port)
     186            JackLock lock(&fEngine); 
     187            return (fEngine.CheckClient(refnum)) ? fEngine.PortUnRegister(refnum, port) : -1
    187188            CATCH_EXCEPTION_RETURN 
    188189        } 
     
    191192        { 
    192193            TRY_CALL 
    193             JackLock lock(this); 
    194             return fEngine.PortConnect(refnum, src, dst)
     194            JackLock lock(&fEngine); 
     195            return (fEngine.CheckClient(refnum)) ? fEngine.PortConnect(refnum, src, dst) : -1
    195196            CATCH_EXCEPTION_RETURN 
    196197        } 
     
    198199        { 
    199200            TRY_CALL 
    200             JackLock lock(this); 
    201             return fEngine.PortDisconnect(refnum, src, dst)
     201            JackLock lock(&fEngine); 
     202            return (fEngine.CheckClient(refnum)) ? fEngine.PortDisconnect(refnum, src, dst) : -1
    202203            CATCH_EXCEPTION_RETURN 
    203204        } 
     
    206207        { 
    207208            TRY_CALL 
    208             JackLock lock(this); 
    209             return fEngine.PortConnect(refnum, src, dst)
     209            JackLock lock(&fEngine); 
     210            return (fEngine.CheckClient(refnum)) ? fEngine.PortConnect(refnum, src, dst) : -1
    210211            CATCH_EXCEPTION_RETURN 
    211212        } 
     
    213214        { 
    214215            TRY_CALL 
    215             JackLock lock(this); 
    216             return fEngine.PortDisconnect(refnum, src, dst)
     216            JackLock lock(&fEngine); 
     217            return (fEngine.CheckClient(refnum)) ? fEngine.PortDisconnect(refnum, src, dst) : -1
    217218            CATCH_EXCEPTION_RETURN 
    218219        } 
     
    221222        { 
    222223            TRY_CALL 
    223             JackLock lock(this); 
    224             return fEngine.PortRename(refnum, port, name)
     224            JackLock lock(&fEngine); 
     225            return (fEngine.CheckClient(refnum)) ? fEngine.PortRename(refnum, port, name) : -1
    225226            CATCH_EXCEPTION_RETURN 
    226227        } 
     
    242243        void NotifyXRun(int refnum) 
    243244        { 
    244             TRY_CALL 
    245             JackLock lock(this); 
     245            // RT : no lock 
    246246            fEngine.NotifyXRun(refnum); 
    247             CATCH_EXCEPTION 
    248         } 
     247        } 
     248         
    249249        void NotifyGraphReorder() 
    250250        { 
    251251            TRY_CALL 
    252             JackLock lock(this); 
     252            JackLock lock(&fEngine); 
    253253            fEngine.NotifyGraphReorder(); 
    254254            CATCH_EXCEPTION 
     
    257257        { 
    258258            TRY_CALL 
    259             JackLock lock(this); 
     259            JackLock lock(&fEngine); 
    260260            fEngine.NotifyBufferSize(buffer_size); 
    261261            CATCH_EXCEPTION 
     
    264264        { 
    265265            TRY_CALL 
    266             JackLock lock(this); 
     266            JackLock lock(&fEngine); 
    267267            fEngine.NotifySampleRate(sample_rate); 
    268268            CATCH_EXCEPTION 
     
    271271        { 
    272272            TRY_CALL 
    273             JackLock lock(this); 
     273            JackLock lock(&fEngine); 
    274274            fEngine.NotifyFreewheel(onoff); 
    275275            CATCH_EXCEPTION 
     
    279279        { 
    280280            TRY_CALL 
    281             JackLock lock(this); 
     281            JackLock lock(&fEngine); 
    282282            fEngine.NotifyFailure(code, reason); 
    283283            CATCH_EXCEPTION 
     
    287287        { 
    288288            TRY_CALL 
    289             JackLock lock(this); 
     289            JackLock lock(&fEngine); 
    290290            return fEngine.GetClientPID(name); 
    291291            CATCH_EXCEPTION_RETURN 
     
    295295        { 
    296296            TRY_CALL 
    297             JackLock lock(this); 
     297            JackLock lock(&fEngine); 
    298298            return fEngine.GetClientRefNum(name); 
    299299            CATCH_EXCEPTION_RETURN 
     
    303303        { 
    304304            TRY_CALL 
    305             JackLock lock(this); 
     305            JackLock lock(&fEngine); 
    306306            return fEngine.NotifyQuit(); 
    307307            CATCH_EXCEPTION 
  • jack2/branches/libjacknet/common/JackMidiDriver.cpp

    r3503 r3917  
    7575    char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    7676    char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    77     unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    7877    int i; 
    7978 
     
    8382        snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, i + 1); 
    8483        snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, i + 1); 
    85         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     84        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, CaptureDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    8685            jack_error("driver: cannot register port for %s", name); 
    8786            return -1; 
     
    9392    } 
    9493 
    95     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    96  
    9794    for (i = 0; i < fPlaybackChannels; i++) { 
    9895        snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, i + 1); 
    9996        snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); 
    100         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     97        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, PlaybackDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    10198            jack_error("driver: cannot register port for %s", name); 
    10299            return -1; 
  • jack2/branches/libjacknet/common/JackMutex.h

    r2907 r3917  
    3737{ 
    3838 
    39     private
    40  
     39    protected
     40     
    4141        JackMutex fMutex; 
    42  
    43     protected: 
    4442 
    4543        JackLockAble() 
  • jack2/branches/libjacknet/common/JackNetOneDriver.cpp

    r3900 r3917  
    139139        char buf[64]; 
    140140        unsigned int chn; 
    141         int port_flags; 
    142  
    143141 
    144142        //if (netj.handle_transport_sync) 
    145143        //    jack_set_sync_callback(netj.client, (JackSyncCallback) net_driver_sync_cb, NULL); 
    146144 
    147         port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    148  
    149145        for (chn = 0; chn < netj.capture_channels_audio; chn++) { 
    150146            snprintf (buf, sizeof(buf) - 1, "system:capture_%u", chn + 1); 
    151147 
    152148            if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, 
    153                              static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) 
     149                             CaptureDriverFlags, fEngineControl->fBufferSize ) ) == NO_PORT ) 
    154150            { 
    155151                jack_error ( "driver: cannot register port for %s", buf ); 
     
    185181 
    186182            if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, buf, JACK_DEFAULT_MIDI_TYPE, 
    187                              static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) 
     183                             CaptureDriverFlags, fEngineControl->fBufferSize ) ) == NO_PORT ) 
    188184            { 
    189185                jack_error ( "driver: cannot register port for %s", buf ); 
     
    196192        } 
    197193 
    198         port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    199  
    200194        for (chn = 0; chn < netj.playback_channels_audio; chn++) { 
    201195            snprintf (buf, sizeof(buf) - 1, "system:playback_%u", chn + 1); 
    202196 
    203197            if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, 
    204                              static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) 
     198                             PlaybackDriverFlags, fEngineControl->fBufferSize ) ) == NO_PORT ) 
    205199            { 
    206200                jack_error ( "driver: cannot register port for %s", buf ); 
     
    232226 
    233227            if ( ( port_id = fGraphManager->AllocatePort ( fClientControl.fRefNum, buf, JACK_DEFAULT_MIDI_TYPE, 
    234                              static_cast<JackPortFlags> ( port_flags ), fEngineControl->fBufferSize ) ) == NO_PORT ) 
     228                             PlaybackDriverFlags, fEngineControl->fBufferSize ) ) == NO_PORT ) 
    235229            { 
    236230                jack_error ( "driver: cannot register port for %s", buf ); 
  • jack2/branches/libjacknet/doxyfile

    r3900 r3917  
    2424# if some version control system is used. 
    2525 
    26 PROJECT_NUMBER         = 1.9.5 
     26PROJECT_NUMBER         = 1.9.6 
    2727 
    2828# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)  
  • jack2/branches/libjacknet/example-clients/lsp.c

    r2489 r3917  
    209209                                        fputs ("terminal,", stdout); 
    210210                                } 
     211                 
     212                if (flags & JackPortIsActive) { 
     213                    fputs ("active,", stdout); 
     214                } else { 
     215                    fputs ("non-active,", stdout); 
     216                } 
    211217                                putc ('\n', stdout); 
    212218                        } 
  • jack2/branches/libjacknet/linux/alsa/alsa_rawmidi.c

    r3230 r3917  
    433433 
    434434        port->jack = jack_port_register(midi->client, name, JACK_DEFAULT_MIDI_TYPE, 
    435                 type | JackPortIsPhysical|JackPortIsTerminal, 0); 
     435                type | JackPortIsPhysical | JackPortIsTerminal | JackPortIsActive, 0); 
    436436                 
    437437        if (port->jack)  
  • jack2/branches/libjacknet/linux/alsa/alsa_seqmidi.c

    r3229 r3917  
    489489 
    490490        if (snd_seq_port_info_get_type (info) & (SND_SEQ_PORT_TYPE_HARDWARE|SND_SEQ_PORT_TYPE_PORT|SND_SEQ_PORT_TYPE_SPECIFIC)) { 
    491                 jack_caps |= (JackPortIsPhysical|JackPortIsTerminal); 
     491                jack_caps |= (JackPortIsPhysical | JackPortIsTerminal | JackPortIsActive); 
    492492        } 
    493493 
  • jack2/branches/libjacknet/linux/alsa/JackAlsaDriver.cpp

    r3900 r3917  
    20882088    assert(fPlaybackChannels < DRIVER_PORT_NUM); 
    20892089 
    2090     port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal
     2090    port_flags = (unsigned long)CaptureDriverFlags
    20912091 
    20922092    alsa_driver_t* alsa_driver = (alsa_driver_t*)fDriver; 
     
    21152115    } 
    21162116 
    2117     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal
     2117    port_flags = (unsigned long)PlaybackDriverFlags
    21182118 
    21192119    for (int i = 0; i < fPlaybackChannels; i++) { 
     
    21362136            jack_log("Create monitor port "); 
    21372137            snprintf(name, sizeof(name) - 1, "%s:monitor_%d", fClientControl.fName, i + 1); 
    2138             if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { 
     2138            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, MonitorDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    21392139                jack_error ("ALSA: cannot register monitor port for %s", name); 
    21402140            } else { 
  • jack2/branches/libjacknet/linux/firewire/JackFFADODriver.cpp

    r3900 r3917  
    360360    JackPort* port; 
    361361    int port_index; 
    362     unsigned long port_flags; 
    363  
    364362    char buf[JACK_PORT_NAME_SIZE]; 
    365363    char portname[JACK_PORT_NAME_SIZE]; 
     
    419417 
    420418    // capture 
    421     port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    422  
    423419    driver->capture_nchannels = ffado_streaming_get_nb_capture_streams(driver->dev); 
    424420    driver->capture_channels = (ffado_capture_channel_t *)calloc(driver->capture_nchannels, sizeof(ffado_capture_channel_t)); 
     
    434430        driver->capture_channels[chn].stream_type = ffado_streaming_get_capture_stream_type(driver->dev, chn); 
    435431        if (driver->capture_channels[chn].stream_type == ffado_stream_type_audio) { 
    436             snprintf(buf, sizeof(buf) - 1, "%s:AC%d_%s", fClientControl.fName, (int)chn, portname); 
     432            snprintf(buf, sizeof(buf) - 1, "%s:%s", fClientControl.fName, portname); 
    437433            printMessage ("Registering audio capture port %s", buf); 
    438434            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, buf, 
    439435                              JACK_DEFAULT_AUDIO_TYPE, 
    440                               (JackPortFlags)port_flags, 
     436                              CaptureDriverFlags, 
    441437                              fEngineControl->fBufferSize)) == NO_PORT) { 
    442438                jack_error("driver: cannot register port for %s", buf); 
     
    452448            port = fGraphManager->GetPort(port_index); 
    453449            port->SetLatency(driver->period_size + driver->capture_frame_latency); 
     450            // capture port aliases (jackd1 style port names) 
     451            snprintf(buf, sizeof(buf) - 1, "%s:capture_%i", fClientControl.fName, (int) chn + 1); 
     452            port->SetAlias(buf); 
    454453            fCapturePortList[chn] = port_index; 
    455454            jack_log("JackFFADODriver::Attach fCapturePortList[i] %ld ", port_index); 
     
    457456 
    458457        } else if (driver->capture_channels[chn].stream_type == ffado_stream_type_midi) { 
    459             snprintf(buf, sizeof(buf) - 1, "%s:MC%d_%s", fClientControl.fName, (int)chn, portname); 
     458            snprintf(buf, sizeof(buf) - 1, "%s:%s", fClientControl.fName, portname); 
    460459            printMessage ("Registering midi capture port %s", buf); 
    461460            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, buf, 
    462461                              JACK_DEFAULT_MIDI_TYPE, 
    463                               (JackPortFlags)port_flags, 
     462                              CaptureDriverFlags, 
    464463                              fEngineControl->fBufferSize)) == NO_PORT) { 
    465464                jack_error("driver: cannot register port for %s", buf); 
     
    490489 
    491490    // playback 
    492     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    493  
    494491    driver->playback_nchannels = ffado_streaming_get_nb_playback_streams(driver->dev); 
    495492    driver->playback_channels = (ffado_playback_channel_t *)calloc(driver->playback_nchannels, sizeof(ffado_playback_channel_t)); 
     
    506503 
    507504        if (driver->playback_channels[chn].stream_type == ffado_stream_type_audio) { 
    508             snprintf(buf, sizeof(buf) - 1, "%s:AP%d_%s", fClientControl.fName, (int)chn, portname); 
     505            snprintf(buf, sizeof(buf) - 1, "%s:%s", fClientControl.fName, portname); 
    509506            printMessage ("Registering audio playback port %s", buf); 
    510507            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, buf, 
    511508                              JACK_DEFAULT_AUDIO_TYPE, 
    512                               (JackPortFlags)port_flags, 
     509                              PlaybackDriverFlags, 
    513510                              fEngineControl->fBufferSize)) == NO_PORT) { 
    514511                jack_error("driver: cannot register port for %s", buf); 
     
    527524            // Add one buffer more latency if "async" mode is used... 
    528525            port->SetLatency((driver->period_size * (driver->device_options.nb_buffers - 1)) + ((fEngineControl->fSyncMode) ? 0 : fEngineControl->fBufferSize) + driver->playback_frame_latency); 
     526            // playback port aliases (jackd1 style port names) 
     527            snprintf(buf, sizeof(buf) - 1, "%s:playback_%i", fClientControl.fName, (int) chn + 1); 
     528            port->SetAlias(buf); 
    529529            fPlaybackPortList[chn] = port_index; 
    530530            jack_log("JackFFADODriver::Attach fPlaybackPortList[i] %ld ", port_index); 
    531531            fPlaybackChannels++; 
    532532        } else if (driver->playback_channels[chn].stream_type == ffado_stream_type_midi) { 
    533             snprintf(buf, sizeof(buf) - 1, "%s:MP%d_%s", fClientControl.fName, (int)chn, portname); 
     533            snprintf(buf, sizeof(buf) - 1, "%s:%s", fClientControl.fName, portname); 
    534534            printMessage ("Registering midi playback port %s", buf); 
    535535            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, buf, 
    536536                              JACK_DEFAULT_MIDI_TYPE, 
    537                               (JackPortFlags)port_flags, 
     537                              PlaybackDriverFlags, 
    538538                              fEngineControl->fBufferSize)) == NO_PORT) { 
    539539                jack_error("driver: cannot register port for %s", buf); 
  • jack2/branches/libjacknet/linux/freebob/JackFreebobDriver.cpp

    r3551 r3917  
    668668    JackPort* port; 
    669669    int port_index; 
    670     unsigned long port_flags; 
    671  
     670   
    672671    char buf[JACK_PORT_NAME_SIZE]; 
    673672    char portname[JACK_PORT_NAME_SIZE]; 
     
    718717 
    719718    // capture 
    720     port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    721  
    722719    driver->capture_nchannels = freebob_streaming_get_nb_capture_streams(driver->dev); 
    723720    driver->capture_nchannels_audio = 0; 
     
    735732            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, buf, 
    736733                              JACK_DEFAULT_AUDIO_TYPE, 
    737                               (JackPortFlags)port_flags, 
     734                              CaptureDriverFlags, 
    738735                              fEngineControl->fBufferSize)) == NO_PORT) { 
    739736                jack_error("driver: cannot register port for %s", buf); 
     
    749746 
    750747    // playback 
    751     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    752  
    753748    driver->playback_nchannels = freebob_streaming_get_nb_playback_streams(driver->dev); 
    754749    driver->playback_nchannels_audio = 0; 
     
    765760            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, buf, 
    766761                              JACK_DEFAULT_AUDIO_TYPE, 
    767                               (JackPortFlags)port_flags, 
     762                              PlaybackDriverFlags, 
    768763                              fEngineControl->fBufferSize)) == NO_PORT) { 
    769764                jack_error("driver: cannot register port for %s", buf); 
  • jack2/branches/libjacknet/macosx/coreaudio/JackCoreAudioDriver.cpp

    r3900 r3917  
    15611561    char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    15621562    char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    1563     unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    1564  
     1563  
    15651564    jack_log("JackCoreAudioDriver::Attach fBufferSize %ld fSampleRate %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); 
    15661565 
     
    15811580        snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, i + 1); 
    15821581 
    1583         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     1582        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, CaptureDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    15841583            jack_error("Cannot register port for %s", name); 
    15851584            return -1; 
     
    16011600        fCapturePortList[i] = port_index; 
    16021601    } 
    1603  
    1604     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    16051602 
    16061603    for (int i = 0; i < fPlaybackChannels; i++) { 
     
    16201617        snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); 
    16211618 
    1622         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     1619        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, PlaybackDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    16231620            jack_error("Cannot register port for %s", name); 
    16241621            return -1; 
     
    16451642            jack_log("Create monitor port "); 
    16461643            snprintf(name, sizeof(name) - 1, "%s:monitor_%u", fClientControl.fName, i + 1); 
    1647             if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { 
     1644            if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, MonitorDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    16481645                jack_error("Cannot register monitor port for %s", name); 
    16491646                return -1; 
  • jack2/branches/libjacknet/macosx/coremidi/JackCoreMidiDriver.cpp

    r3900 r3917  
    223223    char endpoint_name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    224224    char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    225     unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    226225    int i; 
    227226 
     
    240239         
    241240        snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, i + 1); 
    242         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     241        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, CaptureDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    243242            jack_error("driver: cannot register port for %s", name); 
    244243            return -1; 
     
    249248        jack_log("JackCoreMidiDriver::Attach fCapturePortList[i] port_index = %ld", port_index); 
    250249    } 
    251  
    252     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    253250 
    254251    for (i = 0; i < fPlaybackChannels; i++) { 
     
    264261         
    265262        snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); 
    266         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     263        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, PlaybackDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    267264            jack_error("driver: cannot register port for %s", name); 
    268265            return -1; 
  • jack2/branches/libjacknet/macosx/Jack-Info.plist

    r3900 r3917  
    88        <string>Jackservermp</string> 
    99        <key>CFBundleGetInfoString</key> 
    10         <string>Jackdmp 1.9.5, @03-09 Paul Davis, Grame</string> 
     10        <string>Jackdmp 1.9.6, @03-10 Paul Davis, Grame</string> 
    1111        <key>CFBundleIdentifier</key> 
    1212        <string>com.grame.Jackmp</string> 
     
    2020        <string>????</string> 
    2121        <key>CFBundleVersion</key> 
    22         <string>1.9.5</string> 
     22        <string>1.9.6</string> 
    2323</dict> 
    2424</plist> 
  • jack2/branches/libjacknet/macosx/Jackdmp.xcodeproj/project.pbxproj

    r3900 r3917  
    581581                4B80D7EC0BA0D17400F035BB /* JackMidiPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B80D7E60BA0D17400F035BB /* JackMidiPort.cpp */; }; 
    582582                4B80D7ED0BA0D17400F035BB /* JackMidiAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B80D7E70BA0D17400F035BB /* JackMidiAPI.cpp */; }; 
     583                4B88D03B11298BEE007A87C1 /* weakjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03911298BEE007A87C1 /* weakjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     584                4B88D03C11298BEE007A87C1 /* weakmacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03A11298BEE007A87C1 /* weakmacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     585                4B88D03D11298BEE007A87C1 /* weakjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03911298BEE007A87C1 /* weakjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     586                4B88D03E11298BEE007A87C1 /* weakmacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03A11298BEE007A87C1 /* weakmacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     587                4B88D03F11298BEE007A87C1 /* weakjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03911298BEE007A87C1 /* weakjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     588                4B88D04011298BEE007A87C1 /* weakmacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03A11298BEE007A87C1 /* weakmacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     589                4B88D04111298BEE007A87C1 /* weakjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03911298BEE007A87C1 /* weakjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     590                4B88D04211298BEE007A87C1 /* weakmacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03A11298BEE007A87C1 /* weakmacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     591                4B88D04311298BEE007A87C1 /* weakjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03911298BEE007A87C1 /* weakjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     592                4B88D04411298BEE007A87C1 /* weakmacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03A11298BEE007A87C1 /* weakmacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     593                4B88D04511298BEE007A87C1 /* weakjack.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03911298BEE007A87C1 /* weakjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
     594                4B88D04611298BEE007A87C1 /* weakmacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B88D03A11298BEE007A87C1 /* weakmacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 
    583595                4B93F1990E87992100E4ECCD /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC3B6A20E703B2E0066E42F /* JackPosixThread.cpp */; }; 
    584596                4B93F19A0E87992200E4ECCD /* JackPosixThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3B6A30E703B2E0066E42F /* JackPosixThread.h */; }; 
     
    15681580                4B869B4208C8D22F001CF041 /* JackDriverLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackDriverLoader.h; path = ../common/JackDriverLoader.h; sourceTree = SOURCE_ROOT; }; 
    15691581                4B869D7F08C9CB00001CF041 /* JackDriverLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackDriverLoader.cpp; path = ../common/JackDriverLoader.cpp; sourceTree = SOURCE_ROOT; }; 
     1582                4B88D03911298BEE007A87C1 /* weakjack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weakjack.h; path = ../common/jack/weakjack.h; sourceTree = SOURCE_ROOT; }; 
     1583                4B88D03A11298BEE007A87C1 /* weakmacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weakmacros.h; path = ../common/jack/weakmacros.h; sourceTree = SOURCE_ROOT; }; 
    15701584                4B89B759076B731100D170DE /* JackRPCClientUser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = JackRPCClientUser.c; path = RPC/JackRPCClientUser.c; sourceTree = SOURCE_ROOT; }; 
    15711585                4B89B769076B74D200D170DE /* JackRPCEngineUser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = JackRPCEngineUser.c; path = RPC/JackRPCEngineUser.c; sourceTree = SOURCE_ROOT; }; 
     
    27122726                                4B6C737E0CC60A6D001AFFD4 /* transport.h */, 
    27132727                                4B6C737F0CC60A6D001AFFD4 /* types.h */, 
     2728                                4B88D03911298BEE007A87C1 /* weakjack.h */, 
     2729                                4B88D03A11298BEE007A87C1 /* weakmacros.h */, 
    27142730                        ); 
    27152731                        name = jack; 
     
    31603176                                4B93F19E0E87998400E4ECCD /* JackPosixThread.h in Headers */, 
    31613177                                4BECB2FA0F4451C10091B70A /* JackProcessSync.h in Headers */, 
     3178                                4B88D03F11298BEE007A87C1 /* weakjack.h in Headers */, 
     3179                                4B88D04011298BEE007A87C1 /* weakmacros.h in Headers */, 
    31623180                        ); 
    31633181                        runOnlyForDeploymentPostprocessing = 0; 
     
    32283246                                4BCBCE6210C4FE3F00450FFE /* JackPhysicalMidiInput.h in Headers */, 
    32293247                                4BCBCE6410C4FE3F00450FFE /* JackPhysicalMidiOutput.h in Headers */, 
     3248                                4B88D04311298BEE007A87C1 /* weakjack.h in Headers */, 
     3249                                4B88D04411298BEE007A87C1 /* weakmacros.h in Headers */, 
    32303250                        ); 
    32313251                        runOnlyForDeploymentPostprocessing = 0; 
     
    35083528                                4B47ACAA10B5890100469C67 /* JackPosixThread.h in Headers */, 
    35093529                                4B47ACAB10B5890100469C67 /* JackProcessSync.h in Headers */, 
     3530                                4B88D04111298BEE007A87C1 /* weakjack.h in Headers */, 
     3531                                4B88D04211298BEE007A87C1 /* weakmacros.h in Headers */, 
    35103532                        ); 
    35113533                        runOnlyForDeploymentPostprocessing = 0; 
     
    35933615                                4BECB2F80F4451C10091B70A /* JackProcessSync.h in Headers */, 
    35943616                                4B94334A10A5E666002A187F /* systemdeps.h in Headers */, 
     3617                                4B88D03B11298BEE007A87C1 /* weakjack.h in Headers */, 
     3618                                4B88D03C11298BEE007A87C1 /* weakmacros.h in Headers */, 
    35953619                        ); 
    35963620                        runOnlyForDeploymentPostprocessing = 0; 
     
    36653689                                4BCBCE5E10C4FE3F00450FFE /* JackPhysicalMidiInput.h in Headers */, 
    36663690                                4BCBCE6010C4FE3F00450FFE /* JackPhysicalMidiOutput.h in Headers */, 
     3691                                4B88D03D11298BEE007A87C1 /* weakjack.h in Headers */, 
     3692                                4B88D03E11298BEE007A87C1 /* weakmacros.h in Headers */, 
    36673693                        ); 
    36683694                        runOnlyForDeploymentPostprocessing = 0; 
     
    38423868                                4BCBCE6610C4FE3F00450FFE /* JackPhysicalMidiInput.h in Headers */, 
    38433869                                4BCBCE6810C4FE3F00450FFE /* JackPhysicalMidiOutput.h in Headers */, 
     3870                                4B88D04511298BEE007A87C1 /* weakjack.h in Headers */, 
     3871                                4B88D04611298BEE007A87C1 /* weakmacros.h in Headers */, 
    38443872                        ); 
    38453873                        runOnlyForDeploymentPostprocessing = 0; 
  • jack2/branches/libjacknet/posix/JackNetUnixSocket.cpp

    r3306 r3917  
    100100        } 
    101101        fSockfd = socket ( AF_INET, SOCK_DGRAM, 0 ); 
     102         
     103        /* Enable address reuse */ 
     104        int res, on = 1; 
     105        if ((res = setsockopt( fSockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) < 0) { 
     106            StrError(NET_ERROR_CODE); 
     107        } 
     108             
    102109        return fSockfd; 
    103110    } 
  • jack2/branches/libjacknet/posix/JackPosixMutex.h

    r3685 r3917  
    104104        } 
    105105 
    106         void Lock() 
     106        bool Lock() 
    107107        { 
    108108            int res = pthread_mutex_lock(&fMutex); 
    109109            if (res != 0) 
    110110                jack_error("JackPosixMutex::Lock res = %d", res); 
     111            return (res == 0); 
    111112        } 
    112113 
     
    116117        } 
    117118 
    118         void Unlock() 
     119        bool Unlock() 
    119120        { 
    120121            int res = pthread_mutex_unlock(&fMutex); 
    121122            if (res != 0) 
    122123                jack_error("JackPosixMutex::Unlock res = %d", res); 
     124            return (res == 0); 
    123125        } 
    124126 
  • jack2/branches/libjacknet/README

    r3814 r3917  
    2152151.9.3 : New JackBoomerDriver class for Boomer driver on Solaris. Add mixed 32/64 bits mode (off by default). Native MIDI backend (JackCoreMidiDriver, JackWinMMEDriver). In ALSA audio card reservation code, tries to open the card even if reservation fails. Clock source setting on Linux. Add jackctl_server_switch_master API. Fix transport callback (timebase master, sync) issue when used after jack_activate (RT thread was not running). D-Bus access for jackctl_server_add_slave/jackctl_server_remove_slave API. Cleanup "loopback" stuff in server. Torben Hohn fix for InitTime and GetMicroSeconds in JackWinTime.c. New jack_free function added in jack.h. Reworked Torben Hohn fix for server restart issue on Windows. Correct jack_set_error_function, jack_set_info_function and jack_set_thread_creator functions. Correct JackFifo::TimedWait for EINTR handling. Move DBus based audio device reservation code in ALSA backend compilation. Correct JackTransportEngine::MakeAllLocating, sync callback has to be called in this case also. NetJack2 code : better error checkout, method renaming. Tim Bechmann patch : hammerfall, only release monitor thread, if it has been created. Tim Bechmann memops.c optimization patches. In combined --dbus and --classic compilation code, use PulseAudio acquire/release code. Big rewrite of Solaris boomer driver, seems to work in duplex mode at least. Loopback backend reborn as a dynamically loadable separated backend.  
    2162161.9.4 : Solaris boomer backend now working in capture or playback only mode. Add a -G parameter in CoreAudio backend (the computation value in RT thread expressed as percent of period). Use SNDCTL_DSP_SYNCGROUP/SNDCTL_DSP_SYNCSTART API to synchronize input and output in Solaris boomer backend. Big endian bug fix in memops.c. Fix issues in JackNetDriver::DecodeTransportData and JackNetDriver::Initialize. Correct CPU timing in JackNetDriver, now take cycle begin time after Read. Simplify transport in NetJack2: master only can control transport. Change CoreAudio notification thread setup for OSX Snow Leopard. Correct server temporary mode : now set a global and quit after server/client message handling is finished. Add a string parameter to server ==> client notification, add a new JackInfoShutdownCallback type. CoreAudio backend now issue a JackInfoShutdownCallback when an unrecoverable error is detected (sampling rate change, stream configuration changeÉ).  Correct jackdmp.cpp (failures case were not correct..). Improve JackCoreAudioDriver code. Raise default port number to 2048. Correct JackProcessSync::LockedTimedWait. Correct JACK_MESSAGE_SIZE value, particularly in OSX RPC code. Now start server channel thread only when backend has been started (so in JackServer::Start). Should solve race conditions at start time. jack_verbose moved to JackGlobals class. Improve aggregate device management in JackCoreAudioDriver : now a "private" device only and cleanup properly. Aggregate device code added to JackCoreAudioAdapter. Implement "hog mode" (exclusive access of the audio device) in JackCoreAudioDriver. Fix jack_set_sample_rate_callback to have he same behavior as in JACK1. Dynamic system version detection in JackCoreAudioDriver to either create public or private aggregate device. In JackCoreAudioDriver, force the SR value to the wanted one *before* creating aggregate device (otherwise creation will fail).  In JackCoreAudioDriver, better cleanup of AD when intermediate open failure. In JackCoreAudioDriver::Start, wait for the audio driver to effectively start (use the MeasureCallback). In JackCoreAudioDriver, improve management of input/output channels: -1 is now used internally to indicate a wanted max value. In JackCoreAudioDriver::OpenAUHAL, correct stream format setup and cleanup. Correct crash bug in JackAudioAdapterInterface when not input is used in adapter (temporary fixÉ). Sync JackCoreAudioAdapter code on JackCoreAudioDriver one. JACK_SCHED_POLICY switched to SCHED_FIFO. Now can aggregate device that are themselves AD. No reason to make jack_on_shutdown deprecated, so revert the incorrect change. Thread AcquireRealTime and DropRealTime were (incorrectly) using fThread field. Use pthread_self()) (or GetCurrentThread() on Windows) to get the calling thread. Correctly save and restore RT mode state in freewheel mode. Correct freewheel code on client side. Fix AcquireRealTime and DropRealTime: now distinguish when called from another thread (AcquireRealTime/DropRealTime) and from the thread itself (AcquireSelfRealTime/DropSelfRealTime). Correct JackPosixThread::StartImp : thread priority setting now done in the RT case only. Correct JackGraphManager::GetBuffer for the "client loop with one connection" case : buffer must be copied. Correct JackInfoShutdownCallback prototype, two new JackClientProcessFailure and JackClientZombie JackStatus code. Correct JackCoreAudio driver when empty strings are given as -C, -P or -d parameter. Better memory allocation error checking on client (library) side. Better memory allocation error checking in ringbuffer.c, weak import improvements. Memory allocation error checking for jack_client_new and jack_client_open (server and client side). Memory allocation error checking in server for RPC. Simplify server temporary mode : now use a JackTemporaryException. Lock/Unlock shared memory segments (to test...). Sync with JACK1 : -r parameter now used for no-realtime, realtime (-R) is now default, usable backend given vie platform. In JackCoreAudio driver, (possibly) clock drift compensation when needed in aggregated devices. In JackCoreAudio driver, clock drift compensation in aggregated devices working. In JackCoreAudio driver, clock drift compensation semantic changed a bit : when on, does not activate if not needed (same clock domain). Sync JackCoreAudioAdapter code with JackCoreAudioDriver. 
     2171.9.5 : Dynamic choice of maximum port number. More robust sample rate change handling code in JackCoreAudioDriver. Devin Anderson patch for Jack FFADO driver issues with lost MIDI bytes between periods (and more). Fix port_rename callback : now both old name and new name are given as parameters. Special code in JackCoreAudio driver to handle completely buggy Digidesign CoreAudio user-land driver. Ensure that client-side message buffer thread calls thread_init callback if/when it is set by the client (backport of JACK1 rev 3838). Check dynamic port-max value. Fix JackCoreMidiDriver::ReadProcAux when ring buffer is full (thanks Devin Anderson). Josh Green ALSA driver capture only patch. When threads are cancelled, the exception has to be rethrown.  Use a QUIT notification to properly quit the server channel, the server channel thread can then be 'stopped' instead of 'canceled'. Mario Lang alsa_io time calculation overflow patch. Shared memory manager was calling abort in case of fatal error, now return an error in caller. Change JackEngineProfiling and JackAudioAdapterInterface gnuplot scripts to output SVG instead of PDF.    
    217218 
    218219This is a work in progress but the implementation is now stable enough to be tested. jackdmp has been used successfully with the following applications : Ardour, Hydrogen, Jamin, Qjackctl, Jack-Rack, SooperLooper, AlsaPlayer...   
  • jack2/branches/libjacknet/tests/test.cpp

    r3900 r3917  
    184184int Jack_Port_Rename_Callback(jack_port_id_t port, const char* old_name, const char* new_name, void *arg) 
    185185{ 
    186      Log("Rename callback has been successfully called with old_name '%s' and new_name '%s'. (msg from callback)\n"); 
     186     Log("Rename callback has been successfully called with old_name '%s' and new_name '%s'. (msg from callback)\n", old_name, new_name); 
    187187     port_rename_clbk = 1; 
    188188     return 0; 
     
    823823    } 
    824824 
     825    port_callback_reg = 0;      // number of port registration received by the callback 
     826     
    825827    /** 
    826828     * Activate the client 
     
    841843    if (port_rename_clbk == 0) 
    842844        printf("!!! ERROR !!! Jack_Port_Rename_Callback was not called !!.\n"); 
     845         
     846         
     847    /** 
     848     * Test if portregistration callback have been called. 
     849     * 
     850     */ 
     851      
     852    jack_sleep(1 * 1000);  
     853 
     854    if (1 == port_callback_reg) { 
     855        Log("%i ports have been successfully created, and %i callback reg ports have been received... ok\n", 1, port_callback_reg); 
     856    } else { 
     857        printf("!!! ERROR !!! %i ports have been created, and %i callback reg ports have been received !\n", 1, port_callback_reg); 
     858    } 
    843859  
    844860    /** 
     
    10961112 
    10971113    jack_sleep(1 * 1000); // To hope all port registration and reorder callback have been received... 
     1114     
     1115    // Check port registration callback 
    10981116    if (j == port_callback_reg) { 
    10991117        Log("%i ports have been successfully created, and %i callback reg ports have been received... ok\n", j, port_callback_reg); 
    11001118    } else { 
    1101         printf("!!! ERROR !!! %i ports have been created, and %i callback reg ports have been received !\n", j, k); 
    1102     } 
     1119        printf("!!! ERROR !!! %i ports have been created, and %i callback reg ports have been received !\n", j, port_callback_reg); 
     1120    } 
     1121     
    11031122    if (reorder == (2 * j)) { 
    11041123        Log("%i graph reorder callback have been received... ok\n", reorder); 
     
    11481167     * 
    11491168     */ 
     1169    port_callback_reg = 0; // to check registration callback 
    11501170    Log("Deregistering all ports of the client...\n"); 
    11511171    inports = jack_get_ports(client1, NULL, NULL, 0); 
     
    11601180        } 
    11611181        a++; 
     1182    } 
     1183     
     1184    // Check port registration callback again 
     1185    if (j == port_callback_reg) {  
     1186        Log("%i ports have been successfully created, and %i callback reg ports have been received... ok\n", j, port_callback_reg); 
     1187    } else { 
     1188        printf("!!! ERROR !!! %i ports have been created, and %i callback reg ports have been received !\n", j, port_callback_reg); 
    11621189    } 
    11631190 
  • jack2/branches/libjacknet/windows/jackaudioadapter.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jackmp Audio Adapter for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "audioadapter\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "audioadapter.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "audioadapter\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/jackd.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_APP 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jack server for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "jackd\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "jackd.exe\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "jackd\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/jacknetadapter.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jackmp Net Adapter for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "netadapter\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "netadapter.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "netadapter\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/jacknetdriver.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jackmp Net Driver for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "jack_netdriver\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "jack_netdriver.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "jack_netdriver\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/jacknetmanager.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jackmp Net Manager for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "netmanager\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "netmanager.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "netmanager\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/jackportaudio.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jackmp PortAudio Driver for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "jack_portaudio\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "jack_portaudio.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "jack_portaudio\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/JackRouter/resource.rc

    r3863 r3917  
    2929 
    3030VS_VERSION_INFO VERSIONINFO 
    31  FILEVERSION 0,2,0,0 
    32  PRODUCTVERSION 0,2,0,0 
     31 FILEVERSION 0,2,1,0 
     32 PRODUCTVERSION 0,2,1,0 
    3333 FILEFLAGSMASK 0x3fL 
    3434#ifdef _DEBUG 
     
    4848            VALUE "CompanyName", "Grame\0" 
    4949            VALUE "FileDescription", "JackRouter ASIO driver\0" 
    50             VALUE "FileVersion", "0, 2, 0, 0\0" 
     50            VALUE "FileVersion", "0, 2, 1, 0\0" 
    5151            VALUE "InternalName", "JackRouter\0" 
    52             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     52            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    5353            VALUE "LegalTrademarks", "\0" 
    5454            VALUE "OriginalFilename", "JackRouter.dll\0" 
    5555            VALUE "PrivateBuild", "\0" 
    5656            VALUE "ProductName", "JackRouter\0" 
    57             VALUE "ProductVersion", "0, 2, 0, 0\0" 
     57            VALUE "ProductVersion", "0, 2, 1, 0\0" 
    5858            VALUE "SpecialBuild", "\0" 
    5959        END 
  • jack2/branches/libjacknet/windows/jackwinmme.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jackmp WinMMEo Driver for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "jack_portaudio\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "jack_winmme.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "jack_winmme\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/JackWinMutex.h

    r3319 r3917  
    4444            fMutex = (HANDLE)CreateMutex(0, FALSE, 0); 
    4545        } 
    46          
     46 
    4747        virtual ~JackWinMutex() 
    4848        { 
     
    5050        } 
    5151 
    52         void Lock() 
     52        bool Lock() 
    5353        { 
    54                        WaitForSingleObject(fMutex, INFINITE); 
     54            return (WAIT_OBJECT_0 == WaitForSingleObject(fMutex, INFINITE)); 
    5555        } 
    5656 
     
    6060        } 
    6161 
    62         void Unlock() 
     62        bool Unlock() 
    6363        { 
    64             ReleaseMutex(fMutex); 
     64            return(ReleaseMutex(fMutex) != 0); 
    6565        } 
    6666 
  • jack2/branches/libjacknet/windows/libjack.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jack client library for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 6, 0\0" 
    2727            VALUE "InternalName", "libjack\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "libjack.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "libjack\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/libjackserver.rc

    r3900 r3917  
    1212LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT 
    13131 VERSIONINFO 
    14     FILEVERSION     1,9,5,0 
    15     PRODUCTVERSION  1,9,5,0 
     14    FILEVERSION     1,9,6,0 
     15    PRODUCTVERSION  1,9,6,0 
    1616    FILEOS          VOS_UNKNOWN 
    1717    FILETYPE        VFT_DLL 
     
    2424            VALUE "CompanyName", "Grame\0" 
    2525            VALUE "FileDescription", "Jack server library for Windows\0" 
    26             VALUE "FileVersion", "1, 9, 5, 0\0" 
     26            VALUE "FileVersion", "1, 9, 56, 0\0" 
    2727            VALUE "InternalName", "libjackserver\0" 
    28             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     28            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    2929            VALUE "LegalTrademarks", "\0" 
    3030            VALUE "OriginalFilename", "libjackserver.dll\0" 
    3131            VALUE "PrivateBuild", "\0" 
    3232            VALUE "ProductName", "libjackserver\0" 
    33             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     33            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    3434            VALUE "SpecialBuild", "\0" 
    3535        END 
  • jack2/branches/libjacknet/windows/resource.rc

    r3900 r3917  
    1515#ifndef _MAC 
    1616VS_VERSION_INFO VERSIONINFO 
    17  FILEVERSION 1,9,5,0 
    18  PRODUCTVERSION 1,9,5,0 
     17 FILEVERSION 1,9,6,0 
     18 PRODUCTVERSION 1,9,6,0 
    1919 FILEFLAGSMASK 0x3fL 
    2020#ifdef _DEBUG 
     
    3434            VALUE "CompanyName", "Grame\0" 
    3535            VALUE "FileDescription", "Jackmp for Windows\0" 
    36             VALUE "FileVersion", "1, 9, 5, 0\0" 
     36            VALUE "FileVersion", "1, 9, 6, 0\0" 
    3737            VALUE "InternalName", "libjackmp\0" 
    38             VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" 
     38            VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" 
    3939            VALUE "LegalTrademarks", "\0" 
    4040            VALUE "OriginalFilename", "libjackmp.dll\0" 
    4141            VALUE "PrivateBuild", "\0" 
    4242            VALUE "ProductName", "libjackmp\0" 
    43             VALUE "ProductVersion", "1, 9, 5, 0\0" 
     43            VALUE "ProductVersion", "1, 9, 6, 0\0" 
    4444            VALUE "SpecialBuild", "\0" 
    4545        END 
  • jack2/branches/libjacknet/windows/Setup/jack.ci

    r3900 r3917  
    22      version = 4 civer = "Free v4.14.5" winver = "2.6/5.1.2600" >  
    33   <output> .</> 
    4    <exename> Jack_v1.9.5_setup.exe</> 
     4   <exename> Jack_v1.9.6_setup.exe</> 
    55   <digitsign> </> 
    6    <appname> Jack v1.9.5</> 
     6   <appname> Jack v1.9.6</> 
    77   <password> </> 
    88   <addlang> </> 
     
    9393<_><src>..\..\common\jack\types.h</><dest>inst</><custom>includes\jack</><ifexist>overnewer</><recurs>0</></> 
    9494<_><src>..\..\common\jack\systemdeps.h</><dest>inst</><custom>includes\jack</><ifexist>overnewer</><recurs>1</></> 
     95<_><src>..\..\common\jack\weakjack.h</><dest>inst</><custom>includes\jack</><ifexist>overnewer</><recurs>1</></> 
     96<_><src>..\..\common\jack\weakmacros.h</><dest>inst</><custom>includes\jack</><ifexist>overnewer</><recurs>1</></> 
    9597<_><src>.\JackRouter.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></> 
    9698<_><src>.\JackRouter.ini</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></> 
  • jack2/branches/libjacknet/windows/winmme/JackWinMMEDriver.cpp

    r3614 r3917  
    290290    char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    291291    char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 
    292     unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; 
    293292    MMRESULT res; 
    294293    int i; 
     
    306305        snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, i + 1); 
    307306 
    308         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     307        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, CaptureDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    309308            jack_error("driver: cannot register port for %s", name); 
    310309            return -1; 
     
    315314        jack_log("JackMidiDriver::Attach fCapturePortList[i] port_index = %ld", port_index); 
    316315    } 
    317  
    318     port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; 
    319316 
    320317    for (i = 0; i < fPlaybackChannels; i++) { 
     
    328325        snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); 
    329326 
    330         if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { 
     327        if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, PlaybackDriverFlags, fEngineControl->fBufferSize)) == NO_PORT) { 
    331328            jack_error("driver: cannot register port for %s", name); 
    332329            return -1; 
  • jack2/branches/libjacknet/wscript

    r3900 r3917  
    1212import Logs 
    1313 
    14 VERSION='1.9.4
     14VERSION='1.9.6
    1515APPNAME='jack' 
    1616JACK_API_VERSION = '0.1.0'