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:");
|
ATA_DEBUG("Add interface:");
|
||||||
#if defined(ORCHESTRA_BUILD_JACK)
|
#if defined(ORCHESTRA_BUILD_JACK)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_ALSA)
|
#if defined(ORCHESTRA_BUILD_ALSA)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_PULSE)
|
#if defined(ORCHESTRA_BUILD_PULSE)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_OSS)
|
#if defined(ORCHESTRA_BUILD_OSS)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_ASIO)
|
#if defined(ORCHESTRA_BUILD_ASIO)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_DS)
|
#if defined(ORCHESTRA_BUILD_DS)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_MACOSX_CORE)
|
#if defined(ORCHESTRA_BUILD_MACOSX_CORE)
|
||||||
ATA_DEBUG(" CORE OSX");
|
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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_IOS_CORE)
|
#if defined(ORCHESTRA_BUILD_IOS_CORE)
|
||||||
ATA_DEBUG(" CORE IOS");
|
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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_JAVA)
|
#if defined(ORCHESTRA_BUILD_JAVA)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
#if defined(ORCHESTRA_BUILD_DUMMY)
|
#if defined(ORCHESTRA_BUILD_DUMMY)
|
||||||
ATA_DEBUG(" 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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::Alsa"
|
#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();
|
return new audio::orchestra::api::Alsa();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ namespace audio {
|
|||||||
class AlsaPrivate;
|
class AlsaPrivate;
|
||||||
class Alsa: public audio::orchestra::Api {
|
class Alsa: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Alsa();
|
Alsa();
|
||||||
virtual ~Alsa();
|
virtual ~Alsa();
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::Android"
|
#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 ... ");
|
ATA_INFO("Create Android device ... ");
|
||||||
return new audio::orchestra::api::Android();
|
return new audio::orchestra::api::Android();
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ namespace audio {
|
|||||||
namespace api {
|
namespace api {
|
||||||
class Android: public audio::orchestra::Api {
|
class Android: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Android();
|
Android();
|
||||||
virtual ~Android();
|
virtual ~Android();
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include <audio/orchestra/Interface.h>
|
#include <audio/orchestra/Interface.h>
|
||||||
#include <audio/orchestra/debug.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();
|
return new audio::orchestra::api::Asio();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ namespace audio {
|
|||||||
class AsioPrivate:
|
class AsioPrivate:
|
||||||
class Asio: public audio::orchestra::Api {
|
class Asio: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Asio();
|
Asio();
|
||||||
virtual ~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/Interface.h>
|
||||||
#include <audio/orchestra/debug.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();
|
return new audio::orchestra::api::Core();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,7 +386,15 @@ OSStatus audio::orchestra::api::Core::callbackEvent(AudioDeviceID _inDevice,
|
|||||||
const AudioTimeStamp* _inOutputTime,
|
const AudioTimeStamp* _inOutputTime,
|
||||||
void* _userData) {
|
void* _userData) {
|
||||||
audio::orchestra::api::Core* myClass = reinterpret_cast<audio::orchestra::api::Core*>(_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;
|
return kAudioHardwareUnspecifiedError;
|
||||||
} else {
|
} else {
|
||||||
return kAudioHardwareNoError;
|
return kAudioHardwareNoError;
|
||||||
|
@ -17,7 +17,7 @@ namespace audio {
|
|||||||
class CorePrivate;
|
class CorePrivate;
|
||||||
class Core: public audio::orchestra::Api {
|
class Core: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Core();
|
Core();
|
||||||
virtual ~Core();
|
virtual ~Core();
|
||||||
|
@ -15,7 +15,7 @@ namespace audio {
|
|||||||
class CoreIosPrivate;
|
class CoreIosPrivate;
|
||||||
class CoreIos: public audio::orchestra::Api {
|
class CoreIos: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
CoreIos();
|
CoreIos();
|
||||||
virtual ~CoreIos();
|
virtual ~CoreIos();
|
||||||
@ -46,7 +46,8 @@ namespace audio {
|
|||||||
const audio::orchestra::StreamOptions& _options);
|
const audio::orchestra::StreamOptions& _options);
|
||||||
public:
|
public:
|
||||||
void callBackEvent(void* _data,
|
void callBackEvent(void* _data,
|
||||||
int32_t _frameRate);
|
int32_t _nbChunk,
|
||||||
|
const audio::Time& _time);
|
||||||
public:
|
public:
|
||||||
std11::shared_ptr<CoreIosPrivate> m_private;
|
std11::shared_ptr<CoreIosPrivate> m_private;
|
||||||
};
|
};
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::CoreIos"
|
#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 ... ");
|
ATA_INFO("Create CoreIos device ... ");
|
||||||
return new audio::orchestra::api::CoreIos();
|
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,
|
void audio::orchestra::api::CoreIos::callBackEvent(void* _data,
|
||||||
int32_t _nbChunk) {
|
int32_t _nbChunk,
|
||||||
|
const audio::Time& _time) {
|
||||||
#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 doStopStream = 0;
|
int32_t doStopStream = 0;
|
||||||
audio::Time streamTime = getStreamTime();
|
|
||||||
std::vector<enum audio::orchestra::status> status;
|
std::vector<enum audio::orchestra::status> status;
|
||||||
if (m_doConvertBuffer[modeToIdTable(audio::orchestra::mode_output)] == true) {
|
if (m_doConvertBuffer[modeToIdTable(audio::orchestra::mode_output)] == true) {
|
||||||
doStopStream = m_callback(nullptr,
|
doStopStream = m_callback(nullptr,
|
||||||
streamTime,
|
audio::Time(),
|
||||||
&m_userBuffer[modeToIdTable(audio::orchestra::mode_output)][0],
|
&m_userBuffer[modeToIdTable(audio::orchestra::mode_output)][0],
|
||||||
streamTime,
|
_time,
|
||||||
_nbChunk,
|
_nbChunk,
|
||||||
status);
|
status);
|
||||||
convertBuffer((char*)_data, &m_userBuffer[modeToIdTable(audio::orchestra::mode_output)][0], m_convertInfo[modeToIdTable(audio::orchestra::mode_output)]);
|
convertBuffer((char*)_data, &m_userBuffer[modeToIdTable(audio::orchestra::mode_output)][0], m_convertInfo[modeToIdTable(audio::orchestra::mode_output)]);
|
||||||
} else {
|
} else {
|
||||||
doStopStream = m_callback(_data,
|
doStopStream = m_callback(_data,
|
||||||
streamTime,
|
_time,
|
||||||
nullptr,
|
nullptr,
|
||||||
streamTime,
|
audio::Time(),
|
||||||
_nbChunk,
|
_nbChunk,
|
||||||
status);
|
status);
|
||||||
}
|
}
|
||||||
@ -157,7 +143,7 @@ void audio::orchestra::api::CoreIos::callBackEvent(void* _data,
|
|||||||
|
|
||||||
static OSStatus playbackCallback(void *_userData,
|
static OSStatus playbackCallback(void *_userData,
|
||||||
AudioUnitRenderActionFlags* _ioActionFlags,
|
AudioUnitRenderActionFlags* _ioActionFlags,
|
||||||
const AudioTimeStamp* _inTimeStamp,
|
const AudioTimeStamp* _inTime,
|
||||||
uint32_t _inBusNumber,
|
uint32_t _inBusNumber,
|
||||||
uint32_t _inNumberFrames,
|
uint32_t _inNumberFrames,
|
||||||
AudioBufferList* _ioData) {
|
AudioBufferList* _ioData) {
|
||||||
@ -165,13 +151,17 @@ static OSStatus playbackCallback(void *_userData,
|
|||||||
ATA_ERROR("callback event ... nullptr pointer");
|
ATA_ERROR("callback event ... nullptr pointer");
|
||||||
return -1;
|
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);
|
audio::orchestra::api::CoreIos* myClass = static_cast<audio::orchestra::api::CoreIos*>(_userData);
|
||||||
// get all requested buffer :
|
// get all requested buffer :
|
||||||
for (int32_t iii=0; iii < _ioData->mNumberBuffers; iii++) {
|
for (int32_t iii=0; iii < _ioData->mNumberBuffers; iii++) {
|
||||||
AudioBuffer buffer = _ioData->mBuffers[iii];
|
AudioBuffer buffer = _ioData->mBuffers[iii];
|
||||||
int32_t numberFrame = buffer.mDataByteSize/2/*stereo*/ /sizeof(int16_t);
|
int32_t numberFrame = buffer.mDataByteSize/2/*stereo*/ /sizeof(int16_t);
|
||||||
ATA_VERBOSE("request data size: " << numberFrame << " busNumber=" << _inBusNumber);
|
ATA_VERBOSE("request data size: " << numberFrame << " busNumber=" << _inBusNumber);
|
||||||
myClass->callBackEvent(buffer.mData, numberFrame);
|
myClass->callBackEvent(buffer.mData, numberFrame, tmpTimeime);
|
||||||
}
|
}
|
||||||
return noErr;
|
return noErr;
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::Ds"
|
#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();
|
return new audio::orchestra::api::Ds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ namespace audio {
|
|||||||
class DsPrivate;
|
class DsPrivate;
|
||||||
class Ds: public audio::orchestra::Api {
|
class Ds: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Ds();
|
Ds();
|
||||||
virtual ~Ds();
|
virtual ~Ds();
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::Dummy"
|
#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();
|
return new audio::orchestra::api::Dummy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ namespace audio {
|
|||||||
namespace api {
|
namespace api {
|
||||||
class Dummy: public audio::orchestra::Api {
|
class Dummy: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Dummy();
|
Dummy();
|
||||||
enum audio::orchestra::type getCurrentApi() {
|
enum audio::orchestra::type getCurrentApi() {
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::Jack"
|
#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();
|
return new audio::orchestra::api::Jack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ namespace audio {
|
|||||||
class JackPrivate;
|
class JackPrivate;
|
||||||
class Jack: public audio::orchestra::Api {
|
class Jack: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Jack();
|
Jack();
|
||||||
virtual ~Jack();
|
virtual ~Jack();
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::Oss"
|
#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();
|
return new audio::orchestra::api::Oss();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ namespace audio {
|
|||||||
class OssPrivate;
|
class OssPrivate;
|
||||||
class Oss: public audio::orchestra::Api {
|
class Oss: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Oss();
|
Oss();
|
||||||
virtual ~Oss();
|
virtual ~Oss();
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "api::Pulse"
|
#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();
|
return new audio::orchestra::api::Pulse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ namespace audio {
|
|||||||
class PulsePrivate;
|
class PulsePrivate;
|
||||||
class Pulse: public audio::orchestra::Api {
|
class Pulse: public audio::orchestra::Api {
|
||||||
public:
|
public:
|
||||||
static audio::orchestra::Api* Create();
|
static audio::orchestra::Api* create();
|
||||||
public:
|
public:
|
||||||
Pulse();
|
Pulse();
|
||||||
virtual ~Pulse();
|
virtual ~Pulse();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user