aout: pass system play time to play callback
authorRémi Denis-Courmont <remi@remlab.net>
Fri, 4 May 2018 17:45:05 +0000 (20:45 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Fri, 4 May 2018 17:48:15 +0000 (20:48 +0300)
22 files changed:
include/vlc_aout.h
modules/audio_output/adummy.c
modules/audio_output/alsa.c
modules/audio_output/amem.c
modules/audio_output/audiotrack.c
modules/audio_output/audiounit_ios.m
modules/audio_output/coreaudio_common.c
modules/audio_output/directsound.c
modules/audio_output/file.c
modules/audio_output/jack.c
modules/audio_output/kai.c
modules/audio_output/mmdevice.c
modules/audio_output/opensles_android.c
modules/audio_output/oss.c
modules/audio_output/pulse.c
modules/audio_output/sndio.c
modules/audio_output/tizen_audio.c
modules/audio_output/waveout.c
modules/audio_output/winstore.c
src/audio_output/aout_internal.h
src/audio_output/dec.c
src/audio_output/output.c

index e3153b8..a5c1c26 100644 (file)
@@ -146,8 +146,10 @@ struct audio_output
       * \return 0 on success, non-zero on failure or lack of data
       * \note A stream must have been started when called.
       */
-    void (*play)(audio_output_t *, block_t *);
+    void (*play)(audio_output_t *, block_t *block, mtime_t date);
     /**< Queues a block of samples for playback (mandatory, cannot be NULL).
+      * \param block block of audio samples
+      * \param date intended system time to render the first sample
       * \note A stream must have been started when called.
       */
     void (*pause)( audio_output_t *, bool pause, mtime_t date);
index 8c40bdd..fbec096 100644 (file)
@@ -42,10 +42,10 @@ vlc_module_end ()
 
 #define A52_FRAME_NB 1536
 
-static void Play(audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     block_Release( block );
-    (void) aout;
+    (void) aout; (void) date;
 }
 
 static void Flush(audio_output_t *aout, bool wait)
index acf3ed5..b9319de 100644 (file)
@@ -291,7 +291,7 @@ out:
 #endif
 
 static int TimeGet (audio_output_t *aout, mtime_t *);
-static void Play (audio_output_t *, block_t *);
+static void Play(audio_output_t *, block_t *, mtime_t);
 static void Pause (audio_output_t *, bool, mtime_t);
 static void PauseDummy (audio_output_t *, bool, mtime_t);
 static void Flush (audio_output_t *, bool);
@@ -647,7 +647,7 @@ static int TimeGet (audio_output_t *aout, mtime_t *restrict delay)
 /**
  * Queues one audio buffer to the hardware.
  */
-static void Play (audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
 
@@ -687,6 +687,7 @@ static void Play (audio_output_t *aout, block_t *block)
         }
     }
     block_Release (block);
+    (void) date;
 }
 
 /**
index 30535e1..7e0829e 100644 (file)
@@ -80,12 +80,11 @@ typedef struct
     bool ready;
 } aout_sys_t;
 
-static void Play (audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
 
-    sys->play (sys->opaque, block->p_buffer, block->i_nb_samples,
-               block->i_pts);
+    sys->play(sys->opaque, block->p_buffer, block->i_nb_samples, date);
     block_Release (block);
 }
 
index 934826d..3b36e47 100644 (file)
@@ -1727,7 +1727,7 @@ AudioTrack_Thread( void *p_data )
 }
 
 static void
-Play( audio_output_t *p_aout, block_t *p_buffer )
+Play( audio_output_t *p_aout, block_t *p_buffer, mtime_t i_date )
 {
     JNIEnv *env = NULL;
     size_t i_buffer_offset = 0;
@@ -1803,6 +1803,7 @@ Play( audio_output_t *p_aout, block_t *p_buffer )
 bailout:
     vlc_mutex_unlock( &p_sys->lock );
     block_Release( p_buffer );
+    (void) i_date;
 }
 
 static void
index 682ac1e..db6e122 100644 (file)
@@ -376,14 +376,14 @@ MuteSet(audio_output_t *p_aout, bool mute)
 }
 
 static void
-Play(audio_output_t * p_aout, block_t * p_block)
+Play(audio_output_t * p_aout, block_t * p_block, mtime_t date)
 {
     aout_sys_t * p_sys = p_aout->sys;
 
     if (p_sys->b_muted)
         block_Release(p_block);
     else
-        ca_Play(p_aout, p_block);
+        ca_Play(p_aout, p_block, date);
 }
 
 #pragma mark initialization
index da1ba1a..e43fcf6 100644 (file)
@@ -281,7 +281,7 @@ ca_Pause(audio_output_t * p_aout, bool pause, mtime_t date)
 }
 
 void
-ca_Play(audio_output_t * p_aout, block_t * p_block)
+ca_Play(audio_output_t * p_aout, block_t * p_block, mtime_t date)
 {
     struct aout_sys_common *p_sys = (struct aout_sys_common *) p_aout->sys;
 
@@ -350,6 +350,8 @@ ca_Play(audio_output_t * p_aout, block_t * p_block)
 
     if (i_underrun_size > 0)
         msg_Warn(p_aout, "underrun of %zu bytes", i_underrun_size);
+
+    (void) date;
 }
 
 int
index 707d2d9..df0bf51 100644 (file)
@@ -303,10 +303,11 @@ static HRESULT StreamPlay( aout_stream_t *s, block_t *block )
     return Play( VLC_OBJECT(s), s->sys, block );
 }
 
-static void OutputPlay( audio_output_t *aout, block_t *block )
+static void OutputPlay( audio_output_t *aout, block_t *block, mtime_t date )
 {
     aout_sys_t *sys = aout->sys;
     Play( VLC_OBJECT(aout), &sys->s, block );
+    (void) date;
 }
 
 static HRESULT Pause( aout_stream_sys_t *sys, bool pause )
index 6fe0083..77bca51 100644 (file)
@@ -74,7 +74,7 @@ static const int pi_channels_maps[CHANNELS_MAX+1] =
  * Local prototypes.
  *****************************************************************************/
 static int     Open        ( vlc_object_t * );
-static void    Play        ( audio_output_t *, block_t * );
+static void    Play        ( audio_output_t *, block_t *, mtime_t );
 static void    Flush       ( audio_output_t *, bool );
 
 /*****************************************************************************
@@ -315,7 +315,7 @@ static void Stop( audio_output_t *p_aout )
 /*****************************************************************************
  * Play: pretend to play a sound
  *****************************************************************************/
-static void Play( audio_output_t * p_aout, block_t *p_buffer )
+static void Play( audio_output_t * p_aout, block_t *p_buffer, mtime_t date )
 {
     aout_sys_t *p_sys = p_aout->sys;
     if( fwrite( p_buffer->p_buffer, p_buffer->i_buffer, 1,
@@ -331,6 +331,7 @@ static void Play( audio_output_t * p_aout, block_t *p_buffer )
     }
 
     block_Release( p_buffer );
+    (void) date;
 }
 
 static void Flush( audio_output_t *aout, bool wait )
index e995b10..e7696e0 100644 (file)
@@ -70,7 +70,7 @@ typedef struct
  *****************************************************************************/
 static int  Open         ( vlc_object_t * );
 static void Close        ( vlc_object_t * );
-static void Play         ( audio_output_t * p_aout, block_t * p_block );
+static void Play         ( audio_output_t * p_aout, block_t *, mtime_t );
 static void Pause        ( audio_output_t *aout, bool paused, mtime_t date );
 static void Flush        ( audio_output_t *p_aout, bool wait );
 static int  TimeGet      ( audio_output_t *, mtime_t * );
@@ -283,7 +283,7 @@ error_out:
     return status;
 }
 
-static void Play (audio_output_t * p_aout, block_t * p_block)
+static void Play(audio_output_t * p_aout, block_t * p_block, mtime_t date)
 {
     aout_sys_t *p_sys = p_aout->sys;
     jack_ringbuffer_t *rb = p_sys->p_jack_ringbuffer;
@@ -310,6 +310,7 @@ static void Play (audio_output_t * p_aout, block_t * p_block)
     }
 
     block_Release(p_block);
+    (void) date;
 }
 
 /**
index 99ea583..59706c1 100644 (file)
@@ -72,7 +72,7 @@ typedef struct
  *****************************************************************************/
 static int  Open    ( vlc_object_t * );
 static void Close   ( vlc_object_t * );
-static void Play    ( audio_output_t *_p_aout, block_t *block );
+static void Play    ( audio_output_t *_p_aout, block_t *block, mtime_t );
 static void Pause   ( audio_output_t *, bool, mtime_t );
 static void Flush   ( audio_output_t *, bool );
 static int  TimeGet ( audio_output_t *, mtime_t *restrict );
@@ -233,7 +233,7 @@ exit_kai_done :
 /*****************************************************************************
  * Play: play a sound samples buffer
  *****************************************************************************/
-static void Play (audio_output_t *p_aout, block_t *block)
+static void Play(audio_output_t *p_aout, block_t *block, mtime_t date)
 {
     aout_sys_t *p_sys = p_aout->sys;
 
@@ -242,6 +242,7 @@ static void Play (audio_output_t *p_aout, block_t *block)
     WriteBuffer( p_aout, block->p_buffer, block->i_buffer );
 
     block_Release( block );
+    (void) date;
 }
 
 /*****************************************************************************
index a4f99d3..4a07403 100644 (file)
@@ -136,7 +136,7 @@ static int TimeGet(audio_output_t *aout, mtime_t *restrict delay)
     return SUCCEEDED(hr) ? 0 : -1;
 }
 
-static void Play(audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
     HRESULT hr;
@@ -146,6 +146,7 @@ static void Play(audio_output_t *aout, block_t *block)
     LeaveMTA();
 
     vlc_FromHR(aout, hr);
+    (void) date;
 }
 
 static void Pause(audio_output_t *aout, bool paused, mtime_t date)
index 475ac93..a9d4512 100644 (file)
@@ -321,7 +321,7 @@ static int WriteBuffer(audio_output_t *aout)
 /*****************************************************************************
  * Play: play a sound
  *****************************************************************************/
-static void Play(audio_output_t *aout, block_t *p_buffer)
+static void Play(audio_output_t *aout, block_t *p_buffer, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
 
@@ -338,6 +338,7 @@ static void Play(audio_output_t *aout, block_t *p_buffer)
         ;
 
     vlc_mutex_unlock(&sys->lock);
+    (void) date;
 }
 
 static void PlayedCallback (SLAndroidSimpleBufferQueueItf caller, void *pContext)
index 1fb380e..7202e95 100644 (file)
@@ -88,7 +88,7 @@ vlc_module_begin ()
 vlc_module_end ()
 
 static int TimeGet (audio_output_t *, mtime_t *);
-static void Play (audio_output_t *, block_t *);
+static void Play(audio_output_t *, block_t *, mtime_t);
 static void Pause (audio_output_t *, bool, mtime_t);
 static void Flush (audio_output_t *, bool);
 
@@ -269,7 +269,7 @@ static int TimeGet (audio_output_t *aout, mtime_t *restrict pts)
 /**
  * Queues one audio buffer to the hardware.
  */
-static void Play (audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
     int fd = sys->fd;
@@ -286,6 +286,7 @@ static void Play (audio_output_t *aout, block_t *block)
             msg_Err (aout, "cannot write samples: %s", vlc_strerror_c(errno));
     }
     block_Release (block);
+    (void) date;
 }
 
 /**
index e216975..798bf2a 100644 (file)
@@ -485,7 +485,7 @@ static void *data_convert(block_t **pp)
 /**
  * Queue one audio frame to the playback stream
  */
-static void Play(audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
     pa_stream *s = sys->stream;
@@ -523,6 +523,7 @@ static void Play(audio_output_t *aout, block_t *block)
     }
 
     pa_threaded_mainloop_unlock(sys->mainloop);
+    (void) date;
 }
 
 /**
index 548b6e3..c240f50 100644 (file)
@@ -44,7 +44,7 @@ vlc_module_begin ()
 vlc_module_end ()
 
 static int TimeGet (audio_output_t *, mtime_t *);
-static void Play (audio_output_t *, block_t *);
+static void Play(audio_output_t *, block_t *, mtime_t);
 static void Flush (audio_output_t *, bool);
 static int VolumeSet (audio_output_t *, float);
 static int MuteSet (audio_output_t *, bool);
@@ -230,13 +230,14 @@ static int TimeGet (audio_output_t *aout, mtime_t *restrict delay)
     return 0;
 }
 
-static void Play (audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
 
     sio_write (sys->hdl, block->p_buffer, block->i_buffer);
     sys->delay += block->i_nb_samples;
     block_Release (block);
+    (void) date;
 }
 
 static void Flush (audio_output_t *aout, bool wait)
index b10265b..972bb66 100644 (file)
@@ -265,7 +265,7 @@ Stop( audio_output_t *p_aout )
 }
 
 static void
-Play( audio_output_t *p_aout, block_t *p_block )
+Play( audio_output_t *p_aout, block_t *p_block, mtime_t date )
 {
     aout_sys_t *p_sys = p_aout->sys;
 
@@ -295,6 +295,7 @@ Play( audio_output_t *p_aout, block_t *p_block )
             }
         }
     }
+    (void) date;
 }
 
 static void
index 5b67ddb..750bd78 100644 (file)
@@ -49,7 +49,7 @@
  *****************************************************************************/
 static int  Open         ( vlc_object_t * );
 static void Close        ( vlc_object_t * );
-static void Play         ( audio_output_t *, block_t * );
+static void Play         ( audio_output_t *, block_t *, mtime_t );
 
 /*****************************************************************************
  * notification_thread_t: waveOut event thread
@@ -343,7 +343,7 @@ static int Start( audio_output_t *p_aout, audio_sample_format_t *restrict fmt )
  * This doesn't actually play the buffer. This just stores the buffer so it
  * can be played by the callback thread.
  *****************************************************************************/
-static void Play( audio_output_t *p_aout, block_t *block )
+static void Play( audio_output_t *p_aout, block_t *block, mtime_t date )
 {
     aout_sys_t *sys = p_aout->sys;
 
@@ -380,6 +380,7 @@ static void Play( audio_output_t *p_aout, block_t *block )
     sys->i_frames++;
     sys->i_played_length += block->i_length;
     vlc_mutex_unlock( &sys->lock );
+    (void) date;
 }
 
 /*****************************************************************************
index 1990b89..494f61d 100644 (file)
@@ -150,7 +150,7 @@ static int TimeGet(audio_output_t *aout, mtime_t *restrict delay)
     return SUCCEEDED(hr) ? 0 : -1;
 }
 
-static void Play(audio_output_t *aout, block_t *block)
+static void Play(audio_output_t *aout, block_t *block, mtime_t date)
 {
     aout_sys_t *sys = aout->sys;
     if( unlikely( sys->client == NULL ) )
@@ -161,6 +161,7 @@ static void Play(audio_output_t *aout, block_t *block)
     LeaveMTA();
 
     vlc_FromHR(aout, hr);
+    (void) date;
 }
 
 static void Pause(audio_output_t *aout, bool paused, mtime_t date)
index 2aad079..19ad579 100644 (file)
@@ -130,7 +130,7 @@ void aout_Destroy (audio_output_t *);
 int aout_OutputNew(audio_output_t *, audio_sample_format_t *,
                    aout_filters_cfg_t *filters_cfg);
 int aout_OutputTimeGet(audio_output_t *, mtime_t *);
-void aout_OutputPlay(audio_output_t *, block_t *);
+void aout_OutputPlay(audio_output_t *, block_t *block, mtime_t date);
 void aout_OutputPause( audio_output_t * p_aout, bool, mtime_t );
 void aout_OutputFlush( audio_output_t * p_aout, bool );
 void aout_OutputDelete( audio_output_t * p_aout );
index 2d330c3..1357683 100644 (file)
@@ -221,7 +221,7 @@ static void aout_DecSilence (audio_output_t *aout, mtime_t length, mtime_t pts)
     block->i_pts = pts;
     block->i_dts = pts;
     block->i_length = length;
-    aout_OutputPlay (aout, block);
+    aout_OutputPlay(aout, block, pts);
 }
 
 static void aout_DecSynchronize(audio_output_t *aout, mtime_t dec_pts)
@@ -396,7 +396,7 @@ int aout_DecPlay(audio_output_t *aout, block_t *block)
     /* Output */
     owner->sync.end = block->i_pts + block->i_length + 1;
     owner->sync.discontinuity = false;
-    aout_OutputPlay (aout, block);
+    aout_OutputPlay(aout, block, block->i_pts);
     atomic_fetch_add_explicit(&owner->buffers_played, 1, memory_order_relaxed);
     return ret;
 drop:
@@ -451,7 +451,7 @@ void aout_DecFlush (audio_output_t *aout, bool wait)
         {
             block_t *block = aout_FiltersDrain (owner->filters);
             if (block)
-                aout_OutputPlay (aout, block);
+                aout_OutputPlay(aout, block, block->i_pts);
         }
         else
             aout_FiltersFlush (owner->filters);
index 1bbbe97..6939b08 100644 (file)
@@ -627,7 +627,7 @@ int aout_OutputTimeGet (audio_output_t *aout, mtime_t *delay)
  * \note This can only be called after a successful aout_OutputNew().
  * \warning The caller must NOT hold the audio output lock.
  */
-void aout_OutputPlay (audio_output_t *aout, block_t *block)
+void aout_OutputPlay(audio_output_t *aout, block_t *block, mtime_t date)
 {
 #ifndef NDEBUG
     aout_owner_t *owner = aout_owner (aout);
@@ -637,7 +637,7 @@ void aout_OutputPlay (audio_output_t *aout, block_t *block)
             owner->mixer_format.i_frame_length);
 #endif
     aout_OutputLock(aout);
-    aout->play (aout, block);
+    aout->play(aout, block, date);
     aout_OutputUnlock(aout);
 }