Jack2 1.9.6

JackAudioAdapterFactory.cpp

00001 /*
00002 Copyright (C) 2008 Grame
00003 
00004 This program is free software; you can redistribute it and/or modify
00005 it under the terms of the GNU General Public License as published by
00006 the Free Software Foundation; either version 2 of the License, or
00007 (at your option) any later version.
00008 
00009 This program is distributed in the hope that it will be useful,
00010 but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 GNU General Public License for more details.
00013 
00014 You should have received a copy of the GNU General Public License
00015 along with this program; if not, write to the Free Software
00016 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 
00018 */
00019 
00020 #include "JackAudioAdapter.h"
00021 #include "JackArgParser.h"
00022 #include <stdio.h>
00023 #include <stdlib.h>
00024 #include <assert.h>
00025 
00026 #ifdef __linux__
00027 #include "JackAlsaAdapter.h"
00028 #endif
00029 
00030 #ifdef __APPLE__
00031 #include "JackCoreAudioAdapter.h"
00032 #endif
00033 
00034 #ifdef WIN32
00035 #include "JackPortAudioAdapter.h"
00036 #endif
00037 
00038 #if defined(__sun__) || defined(sun)
00039 #include "JackOSSAdapter.h"
00040 #endif
00041 
00042 #ifdef __cplusplus
00043 extern "C"
00044 {
00045 #endif
00046 
00047     using namespace Jack;
00048 
00049     SERVER_EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params)
00050     {
00051         jack_log("Loading audioadapter");
00052 
00053         Jack::JackAudioAdapter* adapter;
00054         jack_nframes_t buffer_size = jack_get_buffer_size(jack_client);
00055         jack_nframes_t sample_rate = jack_get_sample_rate(jack_client);
00056         
00057         try {
00058 
00059     #ifdef __linux__
00060             adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackAlsaAdapter(buffer_size, sample_rate, params));
00061     #endif
00062 
00063     #ifdef WIN32
00064             adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackPortAudioAdapter(buffer_size, sample_rate, params));
00065     #endif
00066 
00067     #ifdef __APPLE__
00068             adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackCoreAudioAdapter(buffer_size, sample_rate, params));
00069     #endif
00070 
00071     #if defined(__sun__) || defined(sun)
00072             adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackOSSAdapter(buffer_size, sample_rate, params));
00073     #endif
00074    
00075            assert(adapter);
00076            
00077             if (adapter->Open() == 0)
00078                 return 0;
00079             else
00080             {
00081                 delete adapter;
00082                 return 1;
00083             }
00084          
00085         } catch (...) {
00086             return 1;
00087         }
00088     }
00089 
00090     SERVER_EXPORT int jack_initialize(jack_client_t* jack_client, const char* load_init)
00091     {
00092         JSList* params = NULL;
00093         bool parse_params = true;
00094         int res = 1;
00095         jack_driver_desc_t* desc = jack_get_descriptor();
00096 
00097         Jack::JackArgParser parser ( load_init );
00098         if ( parser.GetArgc() > 0 )
00099             parse_params = parser.ParseParams ( desc, &params );
00100 
00101         if (parse_params) {
00102             res = jack_internal_initialize ( jack_client, params );
00103             parser.FreeParams ( params );
00104         }
00105         return res;
00106     }
00107 
00108     SERVER_EXPORT void jack_finish(void* arg)
00109     {
00110         Jack::JackAudioAdapter* adapter = static_cast<Jack::JackAudioAdapter*>(arg);
00111 
00112         if (adapter) {
00113             jack_log("Unloading audioadapter");
00114             adapter->Close();
00115             delete adapter;
00116         }
00117     }
00118 
00119 #ifdef __cplusplus
00120 }
00121 #endif