#include <new>
#include "cpp_audio_io.h"
-#include <sound_manager_internal.h>
#include "audio_io.h"
#include "CAudioIODef.h"
using namespace std;
using namespace tizen_media_audio;
-
-/**
- * Defines Structures
- * type : struct
- * Name : audio_io_interrupted_cb_s
- * Declaration : Keeps user callback pointer and user data for delivering an interrupt event
- */
-typedef struct audio_io_interrupted_cb_s {
- void* user_data;
- audio_io_interrupted_cb onInterrupt;
-
- audio_io_interrupted_cb_s() : user_data(NULL), onInterrupt(NULL)
- {/* Empty Body */}
-} audio_io_interrupted_cb_s;
-
/**
* Defines Structures
* type : struct
*/
typedef struct audio_io_s {
CAudioIO* audioIoHandle;
- audio_io_interrupted_cb_s interrupt_callback;
audio_io_stream_cb_s stream_callback;
audio_io_state_changed_cb_s state_changed_callback;
return CAudioInfo(sampleRate, dstChannel, dstSampleType, dstAudioType, -1);
}
-static CAudioInfo __generate_audio_input_loopback_info(int sampleRate, audio_channel_e channel, audio_sample_type_e sample_type) {
- CAudioInfo::EChannel dstChannel;
- CAudioInfo::ESampleType dstSampleType;
- CAudioInfo::EAudioType dstAudioType = CAudioInfo::EAudioType::AUDIO_IN_TYPE_LOOPBACK;
-
- __convert_channel_2_audio_info_channel(channel, dstChannel);
- __convert_sample_type_2_audio_info_sample_type(sample_type, dstSampleType);
-
- return CAudioInfo(sampleRate, dstChannel, dstSampleType, dstAudioType, -1);
-}
-
static CAudioInfo __generate_audio_output_info(int sampleRate, audio_channel_e channel, audio_sample_type_e sample_type, sound_type_e sound_type) {
CAudioInfo::EChannel dstChannel;
CAudioInfo::ESampleType dstSampleType;
return CAudioInfo(sampleRate, dstChannel, dstSampleType, dstAudioType, -1);
}
-static audio_io_interrupted_code_e __convert_interrupted_code(IAudioSessionEventListener::EInterruptCode code) {
- switch (code) {
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_COMPLETED:
- return AUDIO_IO_INTERRUPTED_COMPLETED;
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_BY_CALL:
- return AUDIO_IO_INTERRUPTED_BY_CALL;
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_BY_EARJACK_UNPLUG:
- return AUDIO_IO_INTERRUPTED_BY_EARJACK_UNPLUG;
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_BY_RESOURCE_CONFLICT:
- return AUDIO_IO_INTERRUPTED_BY_RESOURCE_CONFLICT;
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_BY_ALARM:
- return AUDIO_IO_INTERRUPTED_BY_ALARM;
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_BY_EMERGENCY:
- return AUDIO_IO_INTERRUPTED_BY_EMERGENCY;
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_BY_NOTIFICATION:
- return AUDIO_IO_INTERRUPTED_BY_NOTIFICATION;
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_BY_MEDIA:
- case IAudioSessionEventListener::EInterruptCode::INTERRUPT_MAX:
- default:
- return AUDIO_IO_INTERRUPTED_BY_MEDIA;
- }
-}
-
static void __handle_safe_free(audio_io_s* handle, void *obj, bool is_output) {
VALID_POINTER_START(handle)
SAFE_FINALIZE(handle->audioIoHandle);
}
int cpp_audio_in_create_loopback(int sample_rate, audio_channel_e channel, audio_sample_type_e type , audio_in_h* input) {
- audio_io_s* handle = NULL;
- try {
- if (input == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL input:%p", input);
-
- __check_audio_param(sample_rate, channel, type);
- CAudioInfo audioInfo = __generate_audio_input_loopback_info(sample_rate, channel, type);
-
- handle = new audio_io_s;
- handle->audioIoHandle = new CAudioInput(audioInfo);
- handle->audioIoHandle->initialize();
-
- *input = handle;
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- __handle_safe_free(handle, (void *)input, false);
- return __convert_CAudioError(e);
- } catch (const std::bad_alloc&) {
- CAudioError e = CAudioError::EError::ERROR_OUT_OF_MEMORY;
- AUDIO_IO_LOGE("Failed to allocate handle");
- __handle_safe_free(handle, (void *)input, false);
- return __convert_CAudioError(e);
- }
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
int cpp_audio_in_destroy(audio_in_h input) {
return AUDIO_IO_ERROR_NONE;
}
-static void __interrupt_cb_internal(IAudioSessionEventListener::EInterruptCode _code, void* user_data) {
- audio_io_s* handle = static_cast<audio_io_s*>(user_data);
- audio_io_interrupted_code_e code = __convert_interrupted_code(_code);
-
- assert(handle);
-
- AUDIO_IO_LOGD("Calling interrupted callback for handle:[%p] code:[%d]", handle, code);
-
- if (handle->interrupt_callback.onInterrupt)
- handle->interrupt_callback.onInterrupt(code, handle->interrupt_callback.user_data);
-}
-
int cpp_audio_in_set_interrupted_cb(audio_in_h input, audio_io_interrupted_cb callback, void *user_data) {
- audio_io_s* handle = static_cast<audio_io_s*>(input);
-
- try {
- if (handle == NULL || callback == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL input:%p, callback:%p", input, callback);
- assert(handle->audioIoHandle);
- AUDIO_IO_LOGD("[%p], callback:[%p], user_data:[%p]", handle, callback, user_data);
-
- handle->interrupt_callback.onInterrupt = callback;
- handle->interrupt_callback.user_data = user_data;
-
- CAudioIO::SInterruptCallback cb = handle->audioIoHandle->getInterruptCallback();
- cb.mUserData = static_cast<void*>(handle);
- cb.onInterrupt = __interrupt_cb_internal;
-
- handle->audioIoHandle->setInterruptCallback(cb);
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- return __convert_CAudioError(e);
- }
-
- AUDIO_IO_LOGD("[%p] done", handle);
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
int cpp_audio_in_unset_interrupted_cb(audio_in_h input) {
- audio_io_s* handle = static_cast<audio_io_s*>(input);
-
- try {
- if (handle == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL input:%p", input);
- assert(handle->audioIoHandle);
- AUDIO_IO_LOGD("[%p]", handle);
-
- handle->interrupt_callback.onInterrupt = NULL;
- handle->interrupt_callback.user_data = NULL;
-
- CAudioIO::SInterruptCallback cb = handle->audioIoHandle->getInterruptCallback();
- cb.mUserData = NULL;
- cb.onInterrupt = NULL;
-
- handle->audioIoHandle->setInterruptCallback(cb);
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- return __convert_CAudioError(e);
- }
-
- AUDIO_IO_LOGD("[%p] done", handle);
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
int cpp_audio_in_ignore_session(audio_in_h input) {
- audio_io_s* handle = static_cast<audio_io_s*>(input);
-
- try {
- if (handle == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL input:%p", input);
- if (handle->stream_callback.onStream)
- THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_OPERATION,
- "Not support ignore session in async mode");
- assert(handle->audioIoHandle);
- AUDIO_IO_LOGD("[%p]", handle);
-
- handle->audioIoHandle->ignoreSession();
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- return __convert_CAudioError(e);
- }
-
- AUDIO_IO_LOGD("[%p] done", handle);
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
static void __stream_cb_internal(size_t nbytes, void *user_data) {
* Audio Out
*/
int cpp_audio_out_create(int sample_rate, audio_channel_e channel, audio_sample_type_e type, sound_type_e sound_type, audio_out_h *output) {
- audio_io_s* handle = NULL;
- try {
- if (output == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL output:%p", output);
-
- __check_audio_param(sample_rate, channel, type, sound_type);
-
- AUDIO_IO_LOGD("samplerate:[%d] channel:[0x%x] sample_type:[0x%x] sound_type:[%d]", sample_rate, channel, type, sound_type);
- CAudioInfo audioInfo = __generate_audio_output_info(sample_rate, channel, type, sound_type);
-
- handle = new audio_io_s;
- handle->audioIoHandle = new CAudioOutput(audioInfo);
- handle->audioIoHandle->initialize();
-
- AUDIO_IO_LOGD("[%p] created", handle);
- *output = handle;
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- __handle_safe_free(handle, (void *)output, true);
- return __convert_CAudioError(e);
- } catch (const std::bad_alloc&) {
- CAudioError e = CAudioError::EError::ERROR_OUT_OF_MEMORY;
- AUDIO_IO_LOGE("Failed to allocate handle");
- __handle_safe_free(handle, (void *)output, true);
- return __convert_CAudioError(e);
- }
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
int cpp_audio_out_create_new(int sample_rate, audio_channel_e channel, audio_sample_type_e type, audio_out_h *output) {
}
int cpp_audio_out_set_interrupted_cb(audio_out_h output, audio_io_interrupted_cb callback, void *user_data) {
- audio_io_s* handle = static_cast<audio_io_s*>(output);
-
- try {
- if (handle == NULL || callback == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL output:%p, callback:%p", output, callback);
- assert(handle->audioIoHandle);
- AUDIO_IO_LOGD("[%p], callback:[%p], user_data:[%p]", handle, callback, user_data);
-
- handle->interrupt_callback.onInterrupt = callback;
- handle->interrupt_callback.user_data = user_data;
-
- CAudioIO::SInterruptCallback cb = handle->audioIoHandle->getInterruptCallback();
- cb.mUserData = static_cast<void*>(handle);
- cb.onInterrupt = __interrupt_cb_internal;
-
- handle->audioIoHandle->setInterruptCallback(cb);
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- return __convert_CAudioError(e);
- }
-
- AUDIO_IO_LOGD("[%p] done", handle);
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
int cpp_audio_out_unset_interrupted_cb(audio_out_h output) {
- audio_io_s* handle = static_cast<audio_io_s*>(output);
-
- try {
- if (handle == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL output:%p", output);
- assert(handle->audioIoHandle);
- AUDIO_IO_LOGD("[%p]", handle);
-
- handle->interrupt_callback.onInterrupt = NULL;
- handle->interrupt_callback.user_data = NULL;
-
- CAudioIO::SInterruptCallback cb = handle->audioIoHandle->getInterruptCallback();
- cb.mUserData = NULL;
- cb.onInterrupt = NULL;
-
- handle->audioIoHandle->setInterruptCallback(cb);
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- return __convert_CAudioError(e);
- }
-
- AUDIO_IO_LOGD("[%p] done", handle);
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
int cpp_audio_out_ignore_session(audio_out_h output) {
- audio_io_s* handle = static_cast<audio_io_s*>(output);
-
- try {
- if (handle == NULL)
- THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT,
- "Parameters are NULL output:%p", output);
- if (handle->stream_callback.onStream)
- THROW_ERROR_MSG(CAudioError::EError::ERROR_INVALID_OPERATION,
- "Not support ignore session in async mode");
- assert(handle->audioIoHandle);
- AUDIO_IO_LOGD("[%p]", handle);
-
- handle->audioIoHandle->ignoreSession();
- } catch (CAudioError& e) {
- AUDIO_IO_LOGE("%s", e.getErrorMsg());
- return __convert_CAudioError(e);
- }
-
- AUDIO_IO_LOGD("[%p] done", handle);
-
- return AUDIO_IO_ERROR_NONE;
+ return AUDIO_IO_ERROR_NOT_SUPPORTED;
}
int cpp_audio_out_set_stream_cb(audio_out_h output, audio_out_stream_cb callback, void* user_data) {