summaryrefslogtreecommitdiff
path: root/modules/coreaudio
diff options
context:
space:
mode:
Diffstat (limited to 'modules/coreaudio')
-rw-r--r--modules/coreaudio/coreaudio.c26
-rw-r--r--modules/coreaudio/coreaudio.h2
-rw-r--r--modules/coreaudio/player.c15
-rw-r--r--modules/coreaudio/recorder.c33
4 files changed, 12 insertions, 64 deletions
diff --git a/modules/coreaudio/coreaudio.c b/modules/coreaudio/coreaudio.c
index bb6ea64..0d21e2b 100644
--- a/modules/coreaudio/coreaudio.c
+++ b/modules/coreaudio/coreaudio.c
@@ -14,32 +14,6 @@ static struct auplay *auplay;
static struct ausrc *ausrc;
-int audio_fmt(enum aufmt fmt)
-{
- switch (fmt) {
-
- case AUFMT_S16LE: return kAudioFormatLinearPCM;
- case AUFMT_PCMA: return kAudioFormatALaw;
- case AUFMT_PCMU: return kAudioFormatULaw;
- default:
- warning("coreaudio: unknown format %d\n", fmt);
- return -1;
- }
-}
-
-
-int bytesps(enum aufmt fmt)
-{
- switch (fmt) {
-
- case AUFMT_S16LE: return 2;
- case AUFMT_PCMA: return 1;
- case AUFMT_PCMU: return 1;
- default: return 0;
- }
-}
-
-
#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_2_0
static void interruptionListener(void *data, UInt32 inInterruptionState)
{
diff --git a/modules/coreaudio/coreaudio.h b/modules/coreaudio/coreaudio.h
index 530e45e..67cb7d5 100644
--- a/modules/coreaudio/coreaudio.h
+++ b/modules/coreaudio/coreaudio.h
@@ -8,8 +8,6 @@
int audio_session_enable(void);
void audio_session_disable(void);
-int audio_fmt(enum aufmt fmt);
-int bytesps(enum aufmt fmt);
int coreaudio_player_alloc(struct auplay_st **stp, struct auplay *ap,
struct auplay_prm *prm, const char *device,
diff --git a/modules/coreaudio/player.c b/modules/coreaudio/player.c
index 68aca4e..fc53b8c 100644
--- a/modules/coreaudio/player.c
+++ b/modules/coreaudio/player.c
@@ -72,10 +72,7 @@ static void play_handler(void *userData, AudioQueueRef outQ,
if (!wh)
return;
- if (!wh(outQB->mAudioData, outQB->mAudioDataByteSize, arg)) {
- /* Set the buffer to silence */
- memset(outQB->mAudioData, 0, outQB->mAudioDataByteSize);
- }
+ wh(outQB->mAudioData, outQB->mAudioDataByteSize/2, arg);
AudioQueueEnqueueBuffer(outQ, outQB, 0, NULL);
}
@@ -110,17 +107,17 @@ int coreaudio_player_alloc(struct auplay_st **stp, struct auplay *ap,
goto out;
fmt.mSampleRate = (Float64)prm->srate;
- fmt.mFormatID = audio_fmt(prm->fmt);
+ fmt.mFormatID = kAudioFormatLinearPCM;
fmt.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger |
kAudioFormatFlagIsPacked;
#ifdef __BIG_ENDIAN__
fmt.mFormatFlags |= kAudioFormatFlagIsBigEndian;
#endif
fmt.mFramesPerPacket = 1;
- fmt.mBytesPerFrame = prm->ch * bytesps(prm->fmt);
- fmt.mBytesPerPacket = prm->ch * bytesps(prm->fmt);
+ fmt.mBytesPerFrame = prm->ch * 2;
+ fmt.mBytesPerPacket = prm->ch * 2;
fmt.mChannelsPerFrame = prm->ch;
- fmt.mBitsPerChannel = 8*bytesps(prm->fmt);
+ fmt.mBitsPerChannel = 16;
status = AudioQueueNewOutput(&fmt, play_handler, st, NULL,
kCFRunLoopCommonModes, 0, &st->queue);
@@ -131,7 +128,7 @@ int coreaudio_player_alloc(struct auplay_st **stp, struct auplay *ap,
}
sampc = prm->srate * prm->ch * prm->ptime / 1000;
- bytc = sampc * bytesps(prm->fmt);
+ bytc = sampc * 2;
for (i=0; i<ARRAY_SIZE(st->buf); i++) {
diff --git a/modules/coreaudio/recorder.c b/modules/coreaudio/recorder.c
index b1f91fc..40156fa 100644
--- a/modules/coreaudio/recorder.c
+++ b/modules/coreaudio/recorder.c
@@ -20,7 +20,6 @@ struct ausrc_st {
AudioQueueRef queue;
AudioQueueBufferRef buf[BUFC];
pthread_mutex_t mutex;
- struct mbuf *mb;
ausrc_read_h *rh;
void *arg;
unsigned int ptime;
@@ -49,7 +48,6 @@ static void ausrc_destructor(void *arg)
AudioQueueDispose(st->queue, true);
}
- mem_deref(st->mb);
mem_deref(st->as);
pthread_mutex_destroy(&st->mutex);
@@ -63,10 +61,8 @@ static void record_handler(void *userData, AudioQueueRef inQ,
const AudioStreamPacketDescription *inPacketDesc)
{
struct ausrc_st *st = userData;
- struct mbuf *mb = st->mb;
unsigned int ptime;
ausrc_read_h *rh;
- size_t sz, sp;
void *arg;
(void)inStartTime;
(void)inNumPackets;
@@ -81,18 +77,7 @@ static void record_handler(void *userData, AudioQueueRef inQ,
if (!rh)
return;
- sz = inQB->mAudioDataByteSize;
- sp = mbuf_get_space(mb);
-
- if (sz >= sp) {
- mbuf_write_mem(mb, inQB->mAudioData, sp);
- rh(mb->buf, (uint32_t)mb->size, arg);
- mb->pos = 0;
- mbuf_write_mem(mb, (uint8_t *)inQB->mAudioData + sp, sz - sp);
- }
- else {
- mbuf_write_mem(mb, inQB->mAudioData, sz);
- }
+ rh(inQB->mAudioData, inQB->mAudioDataByteSize/2, arg);
AudioQueueEnqueueBuffer(inQ, inQB, 0, NULL);
@@ -132,13 +117,7 @@ int coreaudio_recorder_alloc(struct ausrc_st **stp, struct ausrc *as,
st->arg = arg;
sampc = prm->srate * prm->ch * prm->ptime / 1000;
- bytc = sampc * bytesps(prm->fmt);
-
- st->mb = mbuf_alloc(bytc);
- if (!st->mb) {
- err = ENOMEM;
- goto out;
- }
+ bytc = sampc * 2;
err = pthread_mutex_init(&st->mutex, NULL);
if (err)
@@ -149,7 +128,7 @@ int coreaudio_recorder_alloc(struct ausrc_st **stp, struct ausrc *as,
goto out;
fmt.mSampleRate = (Float64)prm->srate;
- fmt.mFormatID = audio_fmt(prm->fmt);
+ fmt.mFormatID = kAudioFormatLinearPCM;
fmt.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger |
kAudioFormatFlagIsPacked;
#ifdef __BIG_ENDIAN__
@@ -157,10 +136,10 @@ int coreaudio_recorder_alloc(struct ausrc_st **stp, struct ausrc *as,
#endif
fmt.mFramesPerPacket = 1;
- fmt.mBytesPerFrame = prm->ch * bytesps(prm->fmt);
- fmt.mBytesPerPacket = prm->ch * bytesps(prm->fmt);
+ fmt.mBytesPerFrame = prm->ch * 2;
+ fmt.mBytesPerPacket = prm->ch * 2;
fmt.mChannelsPerFrame = prm->ch;
- fmt.mBitsPerChannel = 8*bytesps(prm->fmt);
+ fmt.mBitsPerChannel = 16;
status = AudioQueueNewInput(&fmt, record_handler, st, NULL,
kCFRunLoopCommonModes, 0, &st->queue);