Jack2
1.9.10
|
00001 /* 00002 Copyright (C) 2008-2012 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 "JackPlatformPlug.h" 00022 #include "JackArgParser.h" 00023 00024 #include <stdio.h> 00025 #include <stdlib.h> 00026 #include <assert.h> 00027 00028 #ifdef __APPLE__ 00029 #include "JackCoreAudioAdapter.h" 00030 #define JackPlatformAdapter JackCoreAudioAdapter 00031 #endif 00032 00033 #ifdef __linux__ 00034 #include "JackAlsaAdapter.h" 00035 #define JackPlatformAdapter JackAlsaAdapter 00036 #endif 00037 00038 #if defined(__sun__) || defined(sun) 00039 #include "JackOSSAdapter.h" 00040 #define JackPlatformAdapter JackOSSAdapter 00041 #endif 00042 00043 #ifdef WIN32 00044 #include "JackPortAudioAdapter.h" 00045 #define JackPlatformAdapter JackPortAudioAdapter 00046 #endif 00047 00048 #ifdef __cplusplus 00049 extern "C" 00050 { 00051 #endif 00052 00053 using namespace Jack; 00054 00055 SERVER_EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params) 00056 { 00057 jack_log("Loading audioadapter"); 00058 00059 Jack::JackAudioAdapter* adapter; 00060 jack_nframes_t buffer_size = jack_get_buffer_size(jack_client); 00061 jack_nframes_t sample_rate = jack_get_sample_rate(jack_client); 00062 00063 try { 00064 00065 adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackPlatformAdapter(buffer_size, sample_rate, params), params); 00066 assert(adapter); 00067 00068 if (adapter->Open() == 0) { 00069 return 0; 00070 } else { 00071 delete adapter; 00072 return 1; 00073 } 00074 00075 } catch (...) { 00076 jack_info("audioadapter allocation error"); 00077 return 1; 00078 } 00079 } 00080 00081 SERVER_EXPORT int jack_initialize(jack_client_t* jack_client, const char* load_init) 00082 { 00083 JSList* params = NULL; 00084 bool parse_params = true; 00085 int res = 1; 00086 jack_driver_desc_t* desc = jack_get_descriptor(); 00087 00088 Jack::JackArgParser parser(load_init); 00089 if (parser.GetArgc() > 0) { 00090 parse_params = parser.ParseParams(desc, ¶ms); 00091 } 00092 00093 if (parse_params) { 00094 res = jack_internal_initialize(jack_client, params); 00095 parser.FreeParams(params); 00096 } 00097 return res; 00098 } 00099 00100 SERVER_EXPORT void jack_finish(void* arg) 00101 { 00102 Jack::JackAudioAdapter* adapter = static_cast<Jack::JackAudioAdapter*>(arg); 00103 00104 if (adapter) { 00105 jack_log("Unloading audioadapter"); 00106 adapter->Close(); 00107 delete adapter; 00108 } 00109 } 00110 00111 #ifdef __cplusplus 00112 } 00113 #endif