vlc | branch: master | Thomas Guillem <[email protected]> | Thu Mar 2 10:10:17 2017 +0100| [f3d6aec4ea98d92cc2862215494a0d9b567b47a0] | committer: Thomas Guillem
coreaudio: rework initialization Rename ca_Init() to ca_Initialize() and ca_Clean() to ca_Uninitialize(). au_Initialize() calls now ca_Initialize(). Add au_Uninitialize() that calls ca_Uninitialize(). Functions starting with ca_ are generic and used by AudioUnit (auhal and audiounit_ios) or AudioDevice (only auhal for passthrough on macOS). > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f3d6aec4ea98d92cc2862215494a0d9b567b47a0 --- modules/audio_output/audiounit_ios.m | 19 ++----------------- modules/audio_output/auhal.c | 19 ++++--------------- modules/audio_output/coreaudio_common.c | 27 ++++++++++++++++++++++++--- modules/audio_output/coreaudio_common.h | 8 +++++--- 4 files changed, 35 insertions(+), 38 deletions(-) diff --git a/modules/audio_output/audiounit_ios.m b/modules/audio_output/audiounit_ios.m index de56c65..f85bd1e 100644 --- a/modules/audio_output/audiounit_ios.m +++ b/modules/audio_output/audiounit_ios.m @@ -50,8 +50,6 @@ vlc_module_end () #pragma mark - #pragma mark private declarations -#define AUDIO_BUFFER_SIZE_IN_SECONDS (AOUT_MAX_ADVANCE_TIME / CLOCK_FREQ) - /* aout wrapper: used as observer for notifications */ @interface AoutWrapper : NSObject - (instancetype)initWithAout:(audio_output_t *)aout; @@ -317,10 +315,7 @@ Stop(audio_output_t *p_aout) msg_Warn(p_aout, "AudioOutputUnitStop failed [%4.4s]", (const char *)&err); - err = AudioUnitUninitialize(p_sys->au_unit); - if (err != noErr) - msg_Warn(p_aout, "AudioUnitUninitialize failed [%4.4s]", - (const char *)&err); + au_Uninitialize(p_aout, p_sys->au_unit); err = AudioComponentInstanceDispose(p_sys->au_unit); if (err != noErr) @@ -329,8 +324,6 @@ Stop(audio_output_t *p_aout) avas_SetActive(p_aout, false, AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation); - - ca_Clean(p_aout); } static int @@ -378,13 +371,6 @@ Start(audio_output_t *p_aout, audio_sample_format_t *restrict fmt) if (ret != VLC_SUCCESS) goto error; - ret = ca_Init(p_aout, fmt, AUDIO_BUFFER_SIZE_IN_SECONDS * fmt->i_rate * - fmt->i_bytes_per_frame); - if (ret != VLC_SUCCESS) - { - AudioUnitUninitialize(p_sys->au_unit); - goto error; - } p_aout->play = Play; err = AudioOutputUnitStart(p_sys->au_unit); @@ -392,8 +378,7 @@ Start(audio_output_t *p_aout, audio_sample_format_t *restrict fmt) { msg_Err(p_aout, "AudioOutputUnitStart failed [%4.4s]", (const char *) &err); - AudioUnitUninitialize(p_sys->au_unit); - ca_Clean(p_aout); + au_Uninitialize(p_aout, p_sys->au_unit); goto error; } diff --git a/modules/audio_output/auhal.c b/modules/audio_output/auhal.c index 63b84cd..cd1c7d5 100644 --- a/modules/audio_output/auhal.c +++ b/modules/audio_output/auhal.c @@ -67,8 +67,6 @@ vlc_module_end () #define AOUT_VAR_SPDIF_FLAG 0xf00000 -#define AUDIO_BUFFER_SIZE_IN_SECONDS ((AOUT_MAX_ADVANCE_TIME + CLOCK_FREQ) / CLOCK_FREQ) - /***************************************************************************** * aout_sys_t: private audio output method descriptor ***************************************************************************** @@ -998,20 +996,12 @@ StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt) if (ret != VLC_SUCCESS) goto error; - ret = ca_Init(p_aout, fmt, AUDIO_BUFFER_SIZE_IN_SECONDS * fmt->i_rate * - fmt->i_bytes_per_frame); - if (ret != VLC_SUCCESS) - { - AudioUnitUninitialize(p_sys->au_unit); - goto error; - } - err = AudioOutputUnitStart(p_sys->au_unit); if (err != noErr) { - AudioUnitUninitialize(p_sys->au_unit); msg_Err(p_aout, "AudioUnitInitialize failed: [%4.4s]", (const char *)&err); + au_Uninitialize(p_aout, p_sys->au_unit); goto error; } @@ -1250,7 +1240,7 @@ StartSPDIF(audio_output_t * p_aout, audio_sample_format_t *fmt) return VLC_EGENERIC; } - ret = ca_Init(p_aout, fmt, 200 * AOUT_SPDIF_SIZE); + ret = ca_Initialize(p_aout, fmt, 200 * AOUT_SPDIF_SIZE); if (ret != VLC_SUCCESS) { AudioDeviceDestroyIOProcID(p_sys->i_selected_dev, p_sys->i_procID); @@ -1286,7 +1276,7 @@ Stop(audio_output_t *p_aout) if (p_sys->au_unit) { AudioOutputUnitStop(p_sys->au_unit); - AudioUnitUninitialize(p_sys->au_unit); + au_Uninitialize(p_aout, p_sys->au_unit); AudioComponentInstanceDispose(p_sys->au_unit); } @@ -1336,6 +1326,7 @@ Stop(audio_output_t *p_aout) msg_Err(p_aout, "failed to re-set mixmode [%4.4s]", (const char *)&err); } + ca_Uninitialize(p_aout); } if (p_sys->i_hog_pid == getpid()) @@ -1359,8 +1350,6 @@ Stop(audio_output_t *p_aout) kAudioDevicePropertyDeviceIsAlive, kAudioObjectPropertyScopeGlobal); - ca_Clean(p_aout); - p_sys->b_digital = false; } diff --git a/modules/audio_output/coreaudio_common.c b/modules/audio_output/coreaudio_common.c index 48afacd..ebfa342 100644 --- a/modules/audio_output/coreaudio_common.c +++ b/modules/audio_output/coreaudio_common.c @@ -30,6 +30,8 @@ #import <vlc_dialog.h> #endif +#define AUDIO_BUFFER_SIZE_IN_SECONDS ((AOUT_MAX_ADVANCE_TIME + CLOCK_FREQ) / CLOCK_FREQ) + static inline uint64_t BytesToFrames(struct aout_sys_common *p_sys, size_t i_bytes) { @@ -179,8 +181,8 @@ ca_Play(audio_output_t * p_aout, block_t * p_block) } int -ca_Init(audio_output_t *p_aout, const audio_sample_format_t *fmt, - size_t i_audio_buffer_size) +ca_Initialize(audio_output_t *p_aout, const audio_sample_format_t *fmt, + size_t i_audio_buffer_size) { struct aout_sys_common *p_sys = (struct aout_sys_common *) p_aout->sys; @@ -204,7 +206,7 @@ ca_Init(audio_output_t *p_aout, const audio_sample_format_t *fmt, } void -ca_Clean(audio_output_t *p_aout) +ca_Uninitialize(audio_output_t *p_aout) { struct aout_sys_common *p_sys = (struct aout_sys_common *) p_aout->sys; @@ -699,5 +701,24 @@ au_Initialize(audio_output_t *p_aout, AudioUnit au, audio_sample_format_t *fmt, return VLC_EGENERIC; } + ret = ca_Initialize(p_aout, fmt, AUDIO_BUFFER_SIZE_IN_SECONDS * + fmt->i_rate * fmt->i_bytes_per_frame); + if (ret != VLC_SUCCESS) + { + AudioUnitUninitialize(au); + return VLC_EGENERIC; + } + return VLC_SUCCESS; } + +void +au_Uninitialize(audio_output_t *p_aout, AudioUnit au) +{ + OSStatus err = AudioUnitUninitialize(au); + if (err != noErr) + msg_Warn(p_aout, "AudioUnitUninitialize failed [%4.4s]", + (const char *)&err); + + ca_Uninitialize(p_aout); +} diff --git a/modules/audio_output/coreaudio_common.h b/modules/audio_output/coreaudio_common.h index 8c71f76..330bd64 100644 --- a/modules/audio_output/coreaudio_common.h +++ b/modules/audio_output/coreaudio_common.h @@ -74,13 +74,15 @@ void ca_Pause(audio_output_t * p_aout, bool pause, mtime_t date); void ca_Play(audio_output_t * p_aout, block_t * p_block); -int ca_Init(audio_output_t *p_aout, const audio_sample_format_t *fmt, - size_t i_audio_buffer_size); +int ca_Initialize(audio_output_t *p_aout, const audio_sample_format_t *fmt, + size_t i_audio_buffer_size); -void ca_Clean(audio_output_t *p_aout); +void ca_Uninitialize(audio_output_t *p_aout); AudioUnit au_NewOutputInstance(audio_output_t *p_aout, OSType comp_sub_type); int au_Initialize(audio_output_t *p_aout, AudioUnit au, audio_sample_format_t *fmt, const AudioChannelLayout *outlayout); + +void au_Uninitialize(audio_output_t *p_aout, AudioUnit au); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
