[vlc-commits] auhal: factor bytes to us calculation
Thomas Guillem
git at videolan.org
Wed Feb 22 20:04:38 CET 2017
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Wed Feb 22 19:45:43 2017 +0100| [232a952dad24d01a1e6c7c7d098418e9db2f054a] | committer: Thomas Guillem
auhal: factor bytes to us calculation
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=232a952dad24d01a1e6c7c7d098418e9db2f054a
---
modules/audio_output/auhal.c | 38 ++++++++++++++++++++++----------------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/modules/audio_output/auhal.c b/modules/audio_output/auhal.c
index 8e0bf70..e4dc4dd 100644
--- a/modules/audio_output/auhal.c
+++ b/modules/audio_output/auhal.c
@@ -131,7 +131,8 @@ struct aout_sys_t
/* media sample rate */
int i_rate;
- int i_bytes_per_sample;
+ unsigned int i_bytes_per_frame;
+ unsigned int i_frame_length;
CFArrayRef device_list;
/* protects access to device_list */
@@ -941,6 +942,18 @@ MuteSet(audio_output_t * p_aout, bool mute)
#pragma mark -
#pragma mark actual playback
+static inline uint64_t
+BytesToFrames(aout_sys_t *p_sys, size_t i_bytes)
+{
+ return i_bytes * p_sys->i_frame_length / p_sys->i_bytes_per_frame;
+}
+
+static inline mtime_t
+FramesToUs(aout_sys_t *p_sys, uint64_t i_nb_frames)
+{
+ return i_nb_frames * CLOCK_FREQ / p_sys->i_rate;
+}
+
static void
CopyOutput(audio_output_t *p_aout, uint8_t *p_output, size_t i_requested)
{
@@ -1027,14 +1040,11 @@ TimeGet(audio_output_t *p_aout, mtime_t *delay)
{
struct aout_sys_t * p_sys = p_aout->sys;
- if (!p_sys->i_bytes_per_sample)
- return -1;
-
- int32_t availableBytes;
- TPCircularBufferTail(&p_sys->circular_buffer, &availableBytes);
+ int32_t i_bytes;
+ TPCircularBufferTail(&p_sys->circular_buffer, &i_bytes);
- *delay = ((availableBytes / p_sys->i_bytes_per_sample)
- + p_sys->i_device_latency) * CLOCK_FREQ / p_sys->i_rate;
+ int64_t i_frames = BytesToFrames(p_sys, i_bytes) + p_sys->i_device_latency;
+ *delay = FramesToUs(p_sys, i_frames);
return 0;
}
@@ -1099,10 +1109,6 @@ Play(audio_output_t * p_aout, block_t * p_block)
p_block->p_buffer,
p_block->i_buffer)))
msg_Warn(p_aout, "dropped buffer");
-
- if (!p_sys->i_bytes_per_sample)
- p_sys->i_bytes_per_sample = p_block->i_buffer
- / p_block->i_nb_samples;
}
block_Release(p_block);
@@ -1509,7 +1515,6 @@ StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
/* Set up the format to be used */
DeviceFormat.mSampleRate = fmt->i_rate;
DeviceFormat.mFormatID = kAudioFormatLinearPCM;
- p_sys->i_rate = fmt->i_rate;
/* We use float 32 since this is VLC's endorsed format */
fmt->i_format = VLC_CODEC_FL32;
@@ -1807,7 +1812,6 @@ StartSPDIF(audio_output_t * p_aout, audio_sample_format_t *fmt)
fmt->i_bytes_per_frame = AOUT_SPDIF_SIZE;
fmt->i_frame_length = A52_FRAME_NB;
fmt->i_rate = (unsigned int)desired_stream_format.mSampleRate;
- p_sys->i_rate = fmt->i_rate;
aout_FormatPrepare(fmt);
/* Add IOProc callback */
@@ -1927,7 +1931,6 @@ Stop(audio_output_t *p_aout)
kAudioDevicePropertyDeviceIsAlive,
kAudioObjectPropertyScopeGlobal);
- p_sys->i_bytes_per_sample = 0;
p_sys->b_digital = false;
/* clean-up circular buffer */
@@ -1956,7 +1959,6 @@ Start(audio_output_t *p_aout, audio_sample_format_t *restrict fmt)
p_sys->i_stream_index = -1;
p_sys->b_revert = false;
p_sys->b_changed_mixing = false;
- p_sys->i_bytes_per_sample = 0;
p_sys->b_paused = false;
p_sys->i_device_latency = 0;
@@ -2096,6 +2098,10 @@ Start(audio_output_t *p_aout, audio_sample_format_t *restrict fmt)
if (b_success)
{
+ p_sys->i_rate = fmt->i_rate;
+ p_sys->i_bytes_per_frame = fmt->i_bytes_per_frame;
+ p_sys->i_frame_length = fmt->i_frame_length;
+
p_aout->play = Play;
p_aout->flush = Flush;
p_aout->time_get = TimeGet;
More information about the vlc-commits
mailing list