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:");
#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
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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