update the create function and MacOs Ios time stamp for input output...
This commit is contained in:
parent
5992923c88
commit
17d59cf370
@ -48,43 +48,43 @@ audio::orchestra::Interface::Interface() :
|
||||
ATA_DEBUG("Add interface:");
|
||||
#if defined(ORCHESTRA_BUILD_JACK)
|
||||
ATA_DEBUG(" JACK");
|
||||
addInterface(audio::orchestra::type_jack, audio::orchestra::api::Jack::Create);
|
||||
addInterface(audio::orchestra::type_jack, audio::orchestra::api::Jack::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_ALSA)
|
||||
ATA_DEBUG(" ALSA");
|
||||
addInterface(audio::orchestra::type_alsa, audio::orchestra::api::Alsa::Create);
|
||||
addInterface(audio::orchestra::type_alsa, audio::orchestra::api::Alsa::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_PULSE)
|
||||
ATA_DEBUG(" PULSE");
|
||||
addInterface(audio::orchestra::type_pulse, audio::orchestra::api::Pulse::Create);
|
||||
addInterface(audio::orchestra::type_pulse, audio::orchestra::api::Pulse::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_OSS)
|
||||
ATA_DEBUG(" OSS");
|
||||
addInterface(audio::orchestra::type_oss, audio::orchestra::api::Oss::Create);
|
||||
addInterface(audio::orchestra::type_oss, audio::orchestra::api::Oss::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_ASIO)
|
||||
ATA_DEBUG(" ASIO");
|
||||
addInterface(audio::orchestra::type_asio, audio::orchestra::api::Asio::Create);
|
||||
addInterface(audio::orchestra::type_asio, audio::orchestra::api::Asio::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_DS)
|
||||
ATA_DEBUG(" DS");
|
||||
addInterface(audio::orchestra::type_ds, audio::orchestra::api::Ds::Create);
|
||||
addInterface(audio::orchestra::type_ds, audio::orchestra::api::Ds::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_MACOSX_CORE)
|
||||
ATA_DEBUG(" CORE OSX");
|
||||
addInterface(audio::orchestra::type_coreOSX, audio::orchestra::api::Core::Create);
|
||||
addInterface(audio::orchestra::type_coreOSX, audio::orchestra::api::Core::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_IOS_CORE)
|
||||
ATA_DEBUG(" CORE IOS");
|
||||
addInterface(audio::orchestra::type_coreIOS, audio::orchestra::api::CoreIos::Create);
|
||||
addInterface(audio::orchestra::type_coreIOS, audio::orchestra::api::CoreIos::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_JAVA)
|
||||
ATA_DEBUG(" JAVA");
|
||||
addInterface(audio::orchestra::type_java, audio::orchestra::api::Android::Create);
|
||||
addInterface(audio::orchestra::type_java, audio::orchestra::api::Android::create);
|
||||
#endif
|
||||
#if defined(ORCHESTRA_BUILD_DUMMY)
|
||||
ATA_DEBUG(" DUMMY");
|
||||
addInterface(audio::orchestra::type_dummy, audio::orchestra::api::Dummy::Create);
|
||||
addInterface(audio::orchestra::type_dummy, audio::orchestra::api::Dummy::create);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::Alsa"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Alsa::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Alsa::create() {
|
||||
return new audio::orchestra::api::Alsa();
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ namespace audio {
|
||||
class AlsaPrivate;
|
||||
class Alsa: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Alsa();
|
||||
virtual ~Alsa();
|
||||
|
@ -16,7 +16,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::Android"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Android::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Android::create() {
|
||||
ATA_INFO("Create Android device ... ");
|
||||
return new audio::orchestra::api::Android();
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ namespace audio {
|
||||
namespace api {
|
||||
class Android: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Android();
|
||||
virtual ~Android();
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include <audio/orchestra/Interface.h>
|
||||
#include <audio/orchestra/debug.h>
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Asio::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Asio::create() {
|
||||
return new audio::orchestra::api::Asio();
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ namespace audio {
|
||||
class AsioPrivate:
|
||||
class Asio: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Asio();
|
||||
virtual ~Asio();
|
||||
|
@ -12,12 +12,14 @@
|
||||
//
|
||||
// *************************************************** //
|
||||
|
||||
#if defined(__MACOSX_CORE__) || defined(ORCHESTRA_BUILD_IOS_CORE)
|
||||
#if defined(__MACOSX_CORE__) || defined(ORCHESTRA_BUILD_MACOSX_CORE)
|
||||
|
||||
#include <audio/orchestra/Interface.h>
|
||||
#include <audio/orchestra/debug.h>
|
||||
#include <etk/thread.h>
|
||||
#include <etk/thread/tools.h>
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Core::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Core::create() {
|
||||
return new audio::orchestra::api::Core();
|
||||
}
|
||||
|
||||
@ -384,7 +386,15 @@ OSStatus audio::orchestra::api::Core::callbackEvent(AudioDeviceID _inDevice,
|
||||
const AudioTimeStamp* _inOutputTime,
|
||||
void* _userData) {
|
||||
audio::orchestra::api::Core* myClass = reinterpret_cast<audio::orchestra::api::Core*>(_userData);
|
||||
if (myClass->callbackEvent(_inDevice, _inInputData, _outOutputData) == false) {
|
||||
audio::Time inputTime;
|
||||
audio::Time outputTime;
|
||||
if (_inInputTime != nullptr) {
|
||||
inputTime = audio::Time(_inInputTime->mHostTime/1000000000LL, _inInputTime->mHostTime%1000000000LL);
|
||||
}
|
||||
if (_inOutputTime != nullptr) {
|
||||
outputTime = audio::Time(_inOutputTime->mHostTime/1000000000LL, _inOutputTime->mHostTime%1000000000LL);
|
||||
}
|
||||
if (myClass->callbackEvent(_inDevice, _inInputData, inputTime, _outOutputData, outputTime) == false) {
|
||||
return kAudioHardwareUnspecifiedError;
|
||||
} else {
|
||||
return kAudioHardwareNoError;
|
||||
|
@ -17,7 +17,7 @@ namespace audio {
|
||||
class CorePrivate;
|
||||
class Core: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Core();
|
||||
virtual ~Core();
|
||||
|
@ -15,7 +15,7 @@ namespace audio {
|
||||
class CoreIosPrivate;
|
||||
class CoreIos: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
CoreIos();
|
||||
virtual ~CoreIos();
|
||||
@ -46,7 +46,8 @@ namespace audio {
|
||||
const audio::orchestra::StreamOptions& _options);
|
||||
public:
|
||||
void callBackEvent(void* _data,
|
||||
int32_t _frameRate);
|
||||
int32_t _nbChunk,
|
||||
const audio::Time& _time);
|
||||
public:
|
||||
std11::shared_ptr<CoreIosPrivate> m_private;
|
||||
};
|
||||
|
@ -18,7 +18,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::CoreIos"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::CoreIos::Create(void) {
|
||||
audio::orchestra::Api* audio::orchestra::api::CoreIos::create() {
|
||||
ATA_INFO("Create CoreIos device ... ");
|
||||
return new audio::orchestra::api::CoreIos();
|
||||
}
|
||||
@ -113,37 +113,23 @@ enum audio::orchestra::error audio::orchestra::api::CoreIos::abortStream(void) {
|
||||
}
|
||||
|
||||
void audio::orchestra::api::CoreIos::callBackEvent(void* _data,
|
||||
int32_t _nbChunk) {
|
||||
|
||||
#if 0
|
||||
static double value=0;
|
||||
int16_t* vals = (int16_t*)_data;
|
||||
for (int32_t iii=0; iii<_frameRate; ++iii) {
|
||||
*vals++ = (int16_t)(sin(value) * 32760.0);
|
||||
*vals++ = (int16_t)(sin(value) * 32760.0);
|
||||
value += 0.09;
|
||||
if (value >= M_PI*2.0) {
|
||||
value -= M_PI*2.0;
|
||||
}
|
||||
}
|
||||
return;
|
||||
#endif
|
||||
int32_t _nbChunk,
|
||||
const audio::Time& _time) {
|
||||
int32_t doStopStream = 0;
|
||||
audio::Time streamTime = getStreamTime();
|
||||
std::vector<enum audio::orchestra::status> status;
|
||||
if (m_doConvertBuffer[modeToIdTable(audio::orchestra::mode_output)] == true) {
|
||||
doStopStream = m_callback(nullptr,
|
||||
streamTime,
|
||||
audio::Time(),
|
||||
&m_userBuffer[modeToIdTable(audio::orchestra::mode_output)][0],
|
||||
streamTime,
|
||||
_time,
|
||||
_nbChunk,
|
||||
status);
|
||||
convertBuffer((char*)_data, &m_userBuffer[modeToIdTable(audio::orchestra::mode_output)][0], m_convertInfo[modeToIdTable(audio::orchestra::mode_output)]);
|
||||
} else {
|
||||
doStopStream = m_callback(_data,
|
||||
streamTime,
|
||||
_time,
|
||||
nullptr,
|
||||
streamTime,
|
||||
audio::Time(),
|
||||
_nbChunk,
|
||||
status);
|
||||
}
|
||||
@ -157,7 +143,7 @@ void audio::orchestra::api::CoreIos::callBackEvent(void* _data,
|
||||
|
||||
static OSStatus playbackCallback(void *_userData,
|
||||
AudioUnitRenderActionFlags* _ioActionFlags,
|
||||
const AudioTimeStamp* _inTimeStamp,
|
||||
const AudioTimeStamp* _inTime,
|
||||
uint32_t _inBusNumber,
|
||||
uint32_t _inNumberFrames,
|
||||
AudioBufferList* _ioData) {
|
||||
@ -165,13 +151,17 @@ static OSStatus playbackCallback(void *_userData,
|
||||
ATA_ERROR("callback event ... nullptr pointer");
|
||||
return -1;
|
||||
}
|
||||
audio::Time tmpTimeime;
|
||||
if (_inTime != nullptr) {
|
||||
tmpTimeime = audio::Time(_inTime->mHostTime/1000000000LL, _inTime->mHostTime%1000000000LL);
|
||||
}
|
||||
audio::orchestra::api::CoreIos* myClass = static_cast<audio::orchestra::api::CoreIos*>(_userData);
|
||||
// get all requested buffer :
|
||||
for (int32_t iii=0; iii < _ioData->mNumberBuffers; iii++) {
|
||||
AudioBuffer buffer = _ioData->mBuffers[iii];
|
||||
int32_t numberFrame = buffer.mDataByteSize/2/*stereo*/ /sizeof(int16_t);
|
||||
ATA_VERBOSE("request data size: " << numberFrame << " busNumber=" << _inBusNumber);
|
||||
myClass->callBackEvent(buffer.mData, numberFrame);
|
||||
myClass->callBackEvent(buffer.mData, numberFrame, tmpTimeime);
|
||||
}
|
||||
return noErr;
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::Ds"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Ds::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Ds::create() {
|
||||
return new audio::orchestra::api::Ds();
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ namespace audio {
|
||||
class DsPrivate;
|
||||
class Ds: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Ds();
|
||||
virtual ~Ds();
|
||||
|
@ -12,7 +12,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::Dummy"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Dummy::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Dummy::create() {
|
||||
return new audio::orchestra::api::Dummy();
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ namespace audio {
|
||||
namespace api {
|
||||
class Dummy: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Dummy();
|
||||
enum audio::orchestra::type getCurrentApi() {
|
||||
|
@ -18,7 +18,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::Jack"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Jack::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Jack::create() {
|
||||
return new audio::orchestra::api::Jack();
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ namespace audio {
|
||||
class JackPrivate;
|
||||
class Jack: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Jack();
|
||||
virtual ~Jack();
|
||||
|
@ -21,7 +21,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::Oss"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Oss::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Oss::create() {
|
||||
return new audio::orchestra::api::Oss();
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ namespace audio {
|
||||
class OssPrivate;
|
||||
class Oss: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Oss();
|
||||
virtual ~Oss();
|
||||
|
@ -20,7 +20,7 @@
|
||||
#undef __class__
|
||||
#define __class__ "api::Pulse"
|
||||
|
||||
audio::orchestra::Api* audio::orchestra::api::Pulse::Create() {
|
||||
audio::orchestra::Api* audio::orchestra::api::Pulse::create() {
|
||||
return new audio::orchestra::api::Pulse();
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ namespace audio {
|
||||
class PulsePrivate;
|
||||
class Pulse: public audio::orchestra::Api {
|
||||
public:
|
||||
static audio::orchestra::Api* Create();
|
||||
static audio::orchestra::Api* create();
|
||||
public:
|
||||
Pulse();
|
||||
virtual ~Pulse();
|
||||
|
Loading…
x
Reference in New Issue
Block a user