update the create function and MacOs Ios time stamp for input output...

This commit is contained in:
Edouard DUPIN 2015-05-11 21:33:58 +02:00
parent 5992923c88
commit 17d59cf370
21 changed files with 56 additions and 55 deletions

View File

@ -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
} }

View File

@ -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();
} }

View File

@ -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();

View File

@ -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();
} }

View File

@ -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();

View File

@ -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();
} }

View File

@ -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();

View File

@ -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;

View File

@ -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();

View File

@ -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;
}; };

View File

@ -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;
} }

View File

@ -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();
} }

View File

@ -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();

View File

@ -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();
} }

View File

@ -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() {

View File

@ -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();
} }

View File

@ -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();

View File

@ -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();
} }

View File

@ -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();

View File

@ -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();
} }

View File

@ -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();