diff options
author | Doubango Telecom <github@doubango.org> | 2016-08-08 22:25:31 +0200 |
---|---|---|
committer | Doubango Telecom <github@doubango.org> | 2016-08-08 22:25:31 +0200 |
commit | a35d94460560cce23ddb54b055b8e4298ad77309 (patch) | |
tree | 407ceb38b4f75819387e5916cbac20e125523a21 /tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c | |
parent | 15a5a3299de6327388b634c1208fcee875fe314a (diff) | |
parent | 554bc193f0039ec129b7ac2eb80934bc67815dda (diff) | |
download | doubango-a35d94460560cce23ddb54b055b8e4298ad77309.zip doubango-a35d94460560cce23ddb54b055b8e4298ad77309.tar.gz |
Merge branch 'master' of https://github.com/DoubangoTelecom/doubango
Diffstat (limited to 'tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c')
-rwxr-xr-x | tinyDAV/src/audio/coreaudio/tdav_producer_audiounit.c | 41 |
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; |