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_consumer_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_consumer_audiounit.c')
-rwxr-xr-x | tinyDAV/src/audio/coreaudio/tdav_consumer_audiounit.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/tinyDAV/src/audio/coreaudio/tdav_consumer_audiounit.c b/tinyDAV/src/audio/coreaudio/tdav_consumer_audiounit.c index 12ed8db..6cbe2b5 100755 --- a/tinyDAV/src/audio/coreaudio/tdav_consumer_audiounit.c +++ b/tinyDAV/src/audio/coreaudio/tdav_consumer_audiounit.c @@ -37,6 +37,8 @@ #define kRingPacketCount +10 static tsk_size_t tdav_consumer_audiounit_get(tdav_consumer_audiounit_t* self, void* data, tsk_size_t size); +static int tdav_consumer_audiounit_pause(tmedia_consumer_t* self); +static int tdav_consumer_audiounit_resume(tmedia_consumer_t* self); static OSStatus __handle_output_buffer(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, @@ -109,6 +111,10 @@ int tdav_consumer_audiounit_set(tmedia_consumer_t* self, const tmedia_param_t* p int32_t interrupt = *((uint8_t*)param->value) ? 1 : 0; return tdav_audiounit_handle_interrupt(consumer->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_consumer_audiounit_pause(self) : tdav_consumer_audiounit_resume(self); + } } } return tdav_consumer_audio_set(TDAV_CONSUMER_AUDIO(self), param); @@ -337,11 +343,43 @@ static int tdav_consumer_audiounit_pause(tmedia_consumer_t* self) TSK_DEBUG_ERROR("Invalid parameter"); return -1; } - consumer->paused = tsk_true; + if (!consumer->paused) { + consumer->paused = tsk_true; + if (consumer->started) { + int ret = tdav_audiounit_handle_stop(consumer->audioUnitHandle); + if(ret) { + TSK_DEBUG_ERROR("tdav_audiounit_handle_stop failed with error code=%d", ret); + } + consumer->started = false; + } + } + TSK_DEBUG_INFO("AudioUnit consumer paused"); return 0; } +static int tdav_consumer_audiounit_resume(tmedia_consumer_t* self) +{ + tdav_consumer_audiounit_t* consumer = (tdav_consumer_audiounit_t*)self; + if(!consumer) { + TSK_DEBUG_ERROR("Invalid parameter"); + return -1; + } + if (consumer->paused) { + consumer->paused = tsk_false; + if (!consumer->started) { + int ret = tdav_audiounit_handle_start(consumer->audioUnitHandle); + if(ret) { + TSK_DEBUG_ERROR("tdav_audiounit_handle_start failed with error code=%d", ret); + } + consumer->started = true; + } + } + + TSK_DEBUG_INFO("AudioUnit consumer resumed"); + return 0; +} + static int tdav_consumer_audiounit_stop(tmedia_consumer_t* self) { tdav_consumer_audiounit_t* consumer = (tdav_consumer_audiounit_t*)self; |