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 "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