[vlc-commits] xdfs
Rémi Denis-Courmont
git at videolan.org
Mon Nov 12 23:25:29 CET 2012
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Nov 12 23:06:26 2012 +0200| [f4cc645c9a1cfb90698603534f4f0bb9574a03eb] | committer: Rémi Denis-Courmont
xdfs
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f4cc645c9a1cfb90698603534f4f0bb9574a03eb
---
src/audio_output/dec.c | 27 +++++++++++++++++++++++++++
src/audio_output/output.c | 34 +++++++++-------------------------
2 files changed, 36 insertions(+), 25 deletions(-)
diff --git a/src/audio_output/dec.c b/src/audio_output/dec.c
index 54fa306..654ab43 100644
--- a/src/audio_output/dec.c
+++ b/src/audio_output/dec.c
@@ -381,6 +381,33 @@ int aout_DecPlay (audio_output_t *aout, block_t *block, int input_rate)
/* Output */
aout_OutputPlay (aout, block);
+
+ if (aout->time_get != NULL && aout->time_get (aout, &drift) == 0)
+ drift -= block->i_pts;
+ else
+ drift = 0;
+
+
+/**
+ * Notifies the audio input of the drift from the requested audio
+ * playback timestamp (@ref block_t.i_pts) to the anticipated playback time
+ * as reported by the audio output hardware.
+ * Depending on the drift amplitude, the input core may ignore the drift
+ * trigger upsampling or downsampling, or even discard samples.
+ * Future VLC versions may instead adjust the input decoding speed.
+ *
+ * The audio output plugin is responsible for estimating the time. Typically,
+ * the audio output can estimate the total buffer delay. Then:
+ * pts = mdate() + delay
+ */
+ if (drift < -AOUT_MAX_PTS_ADVANCE || +AOUT_MAX_PTS_DELAY < drift)
+ {
+ msg_Warn (aout, "not synchronized (%"PRId64" us), resampling",
+ drift);
+ if (date_Get (&owner->sync.date) != VLC_TS_INVALID)
+ date_Move (&owner->sync.date, drift);
+ }
+
out:
aout_unlock (aout);
return 0;
diff --git a/src/audio_output/output.c b/src/audio_output/output.c
index 102dbd4..cf71752 100644
--- a/src/audio_output/output.c
+++ b/src/audio_output/output.c
@@ -432,6 +432,15 @@ void aout_OutputDelete (audio_output_t *aout)
aout_FiltersPipelineDestroy (owner->converters, owner->nb_converters);
}
+int aout_OutputTimeGet (audio_output_t *aout, mtime_t *pts)
+{
+ aout_assert_locked (aout);
+
+ if (aout->time_get == NULL)
+ return -1;
+ return aout->time_get (aout, pts);
+}
+
/**
* Plays a decoded audio buffer.
* \note This can only be called after a succesful aout_OutputNew().
@@ -440,7 +449,6 @@ void aout_OutputDelete (audio_output_t *aout)
void aout_OutputPlay (audio_output_t *aout, block_t *block)
{
aout_owner_t *owner = aout_owner (aout);
- mtime_t drift;
aout_assert_locked (aout);
@@ -454,31 +462,7 @@ void aout_OutputPlay (audio_output_t *aout, block_t *block)
return;
}
- if (aout->time_get != NULL && aout->time_get (aout, &drift) == 0)
- drift -= block->i_pts;
- else
- drift = 0;
-
aout->play (aout, block);
-/**
- * Notifies the audio input of the drift from the requested audio
- * playback timestamp (@ref block_t.i_pts) to the anticipated playback time
- * as reported by the audio output hardware.
- * Depending on the drift amplitude, the input core may ignore the drift
- * trigger upsampling or downsampling, or even discard samples.
- * Future VLC versions may instead adjust the input decoding speed.
- *
- * The audio output plugin is responsible for estimating the time. Typically,
- * the audio output can estimate the total buffer delay. Then:
- * pts = mdate() + delay
- */
- if (drift < -AOUT_MAX_PTS_ADVANCE || +AOUT_MAX_PTS_DELAY < drift)
- {
- msg_Warn (aout, "not synchronized (%"PRId64" us), resampling",
- drift);
- if (date_Get (&owner->sync.date) != VLC_TS_INVALID)
- date_Move (&owner->sync.date, drift);
- }
}
/**
More information about the vlc-commits
mailing list