mirror of
https://code.videolan.org/videolan/vlc
synced 2024-10-03 01:31:53 +02:00
audiounit: update device latency when the route changes
This commit fixes airplay delay that may not be updated.
This commit is contained in:
parent
44d007a9bb
commit
b46f49a81c
@ -154,6 +154,7 @@ enum port_type
|
||||
- (void)audioSessionRouteChange:(NSNotification *)notification
|
||||
{
|
||||
audio_output_t *p_aout = [self aout];
|
||||
struct aout_sys_t *p_sys = p_aout->sys;
|
||||
NSDictionary *userInfo = notification.userInfo;
|
||||
NSInteger routeChangeReason =
|
||||
[[userInfo valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
|
||||
@ -163,6 +164,13 @@ enum port_type
|
||||
if (routeChangeReason == AVAudioSessionRouteChangeReasonNewDeviceAvailable
|
||||
|| routeChangeReason == AVAudioSessionRouteChangeReasonOldDeviceUnavailable)
|
||||
aout_RestartRequest(p_aout, AOUT_RESTART_OUTPUT);
|
||||
else
|
||||
{
|
||||
const vlc_tick_t latency_us =
|
||||
vlc_tick_from_sec([p_sys->avInstance outputLatency]);
|
||||
ca_SetDeviceLatency(p_aout, latency_us);
|
||||
msg_Dbg(p_aout, "Current device has a new latency of %lld us", latency_us);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)handleInterruption:(NSNotification *)notification
|
||||
|
@ -411,6 +411,15 @@ ca_SetAliveState(audio_output_t *p_aout, bool alive)
|
||||
vlc_sem_post(&p_sys->flush_sem);
|
||||
}
|
||||
|
||||
void ca_SetDeviceLatency(audio_output_t *p_aout, vlc_tick_t i_dev_latency_us)
|
||||
{
|
||||
struct aout_sys_common *p_sys = (struct aout_sys_common *) p_aout->sys;
|
||||
|
||||
lock_lock(p_sys);
|
||||
p_sys->i_dev_latency_us = i_dev_latency_us;
|
||||
lock_unlock(p_sys);
|
||||
}
|
||||
|
||||
AudioUnit
|
||||
au_NewOutputInstance(audio_output_t *p_aout, OSType comp_sub_type)
|
||||
{
|
||||
|
@ -103,6 +103,8 @@ void ca_Uninitialize(audio_output_t *p_aout);
|
||||
|
||||
void ca_SetAliveState(audio_output_t *p_aout, bool alive);
|
||||
|
||||
void ca_SetDeviceLatency(audio_output_t *p_aout, vlc_tick_t i_dev_latency_us);
|
||||
|
||||
AudioUnit au_NewOutputInstance(audio_output_t *p_aout, OSType comp_sub_type);
|
||||
|
||||
int au_Initialize(audio_output_t *p_aout, AudioUnit au,
|
||||
|
Loading…
Reference in New Issue
Block a user