blob: 259661e7d3511f64d1b3716d647756c96e42a329 [file] [log] [blame]
#include "lynq-qser-audio.h"
#include "mbtk_type.h"
#include "mbtk_log.h"
#include "mbtk_audio2.h"
#define AUDIO_DEV_PLAY "device1"
#define AUDIO_DEV_RECORDER "device2"
#define AUDIO_HDL_DEFAULT 0
static _cb_onPlayer play_cb = NULL;
static int play_hdl = -1;
static _cb_onPlayer recv_cb = NULL;
static int recv_hdl = -1;
int qser_AudPlayer_Open(char* device, _cb_onPlayer cb_fun)
{
UNUSED(device);
UNUSED(cb_fun);
if(device == NULL || strcmp(device, AUDIO_DEV_PLAY)) {
LOGE("device must be %s for play.", AUDIO_DEV_PLAY);
return -1;
}
if(mbtk_audio_wav_init()) {
LOGE("mbtk_audio_wav_init() fail.");
return -1;
}
play_cb = cb_fun;
return 0;
}
int qser_AudPlayer_PlayFrmFile(int hdl, const char *fd, int offset)
{
UNUSED(hdl);
UNUSED(fd);
UNUSED(offset);
if(play_hdl >= 0) {
LOGE("Play busy.");
if(play_cb) {
play_cb(-1);
}
return -1;
}
if(mbtk_audio_wav_play_start(fd)) {
LOGE("mbtk_audio_wav_play_start() fail.");
if(play_cb) {
play_cb(-2);
}
return -1;
}
play_hdl = hdl;
if(play_cb) {
play_cb(0);
}
return 0;
}
int qser_AudPlayer_PlayPcmBuf(const unsigned char *pcm_data, int data_size, int period_size,
int period_count, int num_channels, int sample_rate, int ownerid)
{
if(play_hdl >= 0) {
LOGE("Play busy.");
if(play_cb) {
play_cb(-1);
}
return -1;
}
if(mbtk_audio_wav_stream_play_start(pcm_data, data_size, sample_rate, num_channels)) {
LOGE("mbtk_audio_wav_stream_play_start() fail.");
if(play_cb) {
play_cb(-2);
}
return -1;
}
play_hdl = AUDIO_HDL_DEFAULT;
if(play_cb) {
play_cb(0);
}
return 0;
}
int qser_AudPlayer_Pause(int hdl)
{
UNUSED(hdl);
if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) {
LOGE("Play busy or hdl error.");
return -1;
}
if(mbtk_audio_wav_play_pause()) {
LOGE("mbtk_audio_wav_play_pause() fail.");
return -1;
}
return 0;
}
int qser_AudPlayer_Resume(int hdl)
{
UNUSED(hdl);
if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) {
LOGE("Play busy or hdl error.");
return -1;
}
if(mbtk_audio_wav_play_resume()) {
LOGE("mbtk_audio_wav_play_resume() fail.");
return -1;
}
return 0;
}
void qser_AudPlayer_Stop(int hdl)
{
UNUSED(hdl);
if((play_hdl != AUDIO_HDL_DEFAULT && hdl != play_hdl) || play_hdl < 0) {
LOGE("Play busy or hdl error.");
return;
}
if(mbtk_audio_wav_play_stop()) {
LOGE("mbtk_audio_wav_play_stop() fail.");
return;
}
play_hdl = -1;
}
void qser_AudPlayer_Close(int hdl)
{
UNUSED(hdl);
if(play_hdl >= 0) {
qser_AudPlayer_Stop(hdl);
}
if(mbtk_audio_wav_deinit()) {
LOGE("mbtk_audio_wav_deinit() fail.");
return;
}
play_cb = NULL;
}
int qser_AudRecorder_Open(char* device, _cb_onPlayer cb_fun)
{
UNUSED(device);
UNUSED(cb_fun);
if(device == NULL || strcmp(device, AUDIO_DEV_RECORDER)) {
LOGE("device must be %s for recv.", AUDIO_DEV_RECORDER);
return -1;
}
if(mbtk_audio_wav_init()) {
LOGE("mbtk_audio_wav_init() fail.");
return -1;
}
recv_cb = cb_fun;
return 0;
}
int qser_AudRecorder_StartRecord(int hdl, const char *fd, int offset)
{
UNUSED(hdl);
UNUSED(fd);
UNUSED(offset);
if(recv_hdl >= 0) {
LOGE("Recv busy.");
if(recv_cb) {
recv_cb(-1);
}
return -1;
}
if(mbtk_audio_wav_recorder_start(fd, MBTK_AUDIO_SAMPLE_RATE_8000)) {
LOGE("mbtk_audio_wav_recorder_start() fail.");
if(recv_cb) {
recv_cb(-2);
}
return -1;
}
recv_hdl = hdl;
if(recv_cb) {
recv_cb(0);
}
return 0;
}
int qser_AudRecorder_StartRecord_Custom(char *file, int period_size, int period_count,
int num_channels, int sample_rate)
{
return qser_AudRecorder_StartRecord(0, file, 0);
}
int qser_AudRecorder_Pause(void)
{
if(recv_hdl < 0) {
LOGE("Recv busy or hdl error.");
return -1;
}
if(mbtk_audio_wav_recorder_pause()) {
LOGE("mbtk_audio_wav_recorder_pause() fail.");
return -1;
}
return 0;
}
int qser_AudRecorder_Resume(void)
{
if(recv_hdl < 0) {
LOGE("Recv busy or hdl error.");
return -1;
}
if(mbtk_audio_wav_recorder_resume()) {
LOGE("mbtk_audio_wav_recorder_resume() fail.");
return -1;
}
return 0;
}
void qser_AudRecorder_Stop(void)
{
if(recv_hdl < 0) {
LOGE("Recv busy or hdl error.");
return;
}
if(mbtk_audio_wav_recorder_stop()) {
LOGE("mbtk_audio_wav_recorder_stop() fail.");
return;
}
recv_hdl = -1;
}
void qser_AudRecorder_Close(void)
{
if(recv_hdl >= 0) {
qser_AudRecorder_Stop();
}
if(mbtk_audio_wav_deinit()) {
LOGE("mbtk_audio_wav_deinit() fail.");
return;
}
recv_cb = NULL;
}
void qser_Audio_Deinit(void)
{
// Do nothing...
}