summaryrefslogtreecommitdiffstats
path: root/tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c
diff options
context:
space:
mode:
authorSystem Administrator <root@Mamadous-MacBook-Pro.local>2016-08-05 23:18:42 +0200
committerSystem Administrator <root@Mamadous-MacBook-Pro.local>2016-08-05 23:18:42 +0200
commit554bc193f0039ec129b7ac2eb80934bc67815dda (patch)
tree31d5e419d4235b0761128b11b8b36d8e7e3d2c7d /tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c
parente707bf0126d60cc0843f18db65704adc50547ec5 (diff)
downloaddoubango-554bc193f0039ec129b7ac2eb80934bc67815dda.zip
doubango-554bc193f0039ec129b7ac2eb80934bc67815dda.tar.gz
Add support for pause for iOS audioUnit
Diffstat (limited to 'tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c')
-rwxr-xr-xtinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c41
1 files changed, 40 insertions, 1 deletions
diff --git a/tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c b/tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c
index 7f8af7e..b2b60f7 100755
--- a/tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c
+++ b/tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c
@@ -35,6 +35,9 @@
#define kRingPacketCount 10
+static int tdav_producer_audiounit_pause(tmedia_producer_t* self);
+static int tdav_producer_audiounit_resume(tmedia_producer_t* self);
+
static OSStatus __handle_input_buffer(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
@@ -91,6 +94,10 @@ int tdav_producer_audiounit_set(tmedia_producer_t* self, const tmedia_param_t* p
int32_t interrupt = *((uint8_t*)param->value) ? 1 : 0;
return tdav_audiounit_handle_interrupt(producer->audioUnitHandle, interrupt);
}
+ else if (tsk_striequals(param->key, "pause") || tsk_striequals(param->key, "hold")) {
+ int32_t pause = *((uint8_t*)param->value) ? 1 : 0;
+ return pause ? tdav_producer_audiounit_pause(self) : tdav_producer_audiounit_resume(self);
+ }
}
}
return tdav_producer_audio_set(TDAV_PRODUCER_AUDIO(self), param);
@@ -319,11 +326,43 @@ static int tdav_producer_audiounit_pause(tmedia_producer_t* self)
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
- producer->paused = tsk_true;
+ if (!producer->paused) {
+ producer->paused = tsk_true;
+ if (producer->started) {
+ int ret = tdav_audiounit_handle_stop(producer->audioUnitHandle);
+ if(ret) {
+ TSK_DEBUG_ERROR("tdav_audiounit_handle_stop failed with error code=%d", ret);
+ // do not return even if failed => we MUST stop the thread!
+ }
+ producer->started = false;
+ }
+ }
TSK_DEBUG_INFO("AudioUnit producer paused");
return 0;
}
+static int tdav_producer_audiounit_resume(tmedia_producer_t* self)
+{
+ tdav_producer_audiounit_t* producer = (tdav_producer_audiounit_t*)self;
+ if(!producer) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return -1;
+ }
+ if (producer->paused) {
+ if (!producer->started) {
+ int ret = tdav_audiounit_handle_start(producer->audioUnitHandle);
+ if(ret) {
+ TSK_DEBUG_ERROR("tdav_audiounit_handle_start failed with error code=%d", ret);
+ // do not return even if failed => we MUST stop the thread!
+ }
+ }
+ producer->paused = false;
+ producer->started = true;
+ }
+ TSK_DEBUG_INFO("AudioUnit producer resumed");
+ return 0;
+}
+
static int tdav_producer_audiounit_stop(tmedia_producer_t* self)
{
tdav_producer_audiounit_t* producer = (tdav_producer_audiounit_t*)self;
OpenPOWER on IntegriCloud