00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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, ¶ms );
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