mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-05 02:02:26 +00:00
gst-libs/gst/audio/gstbaseaudiosrc.c: Fix duration when no clock was provided. Fixes #520300.
Original commit message from CVS: * gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_create): Fix duration when no clock was provided. Fixes #520300.
This commit is contained in:
parent
cf273d8add
commit
579949e2c5
3 changed files with 18 additions and 11 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2008-03-10 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
|
* gst-libs/gst/audio/gstbaseaudiosrc.c:
|
||||||
|
(gst_base_audio_src_create):
|
||||||
|
Fix duration when no clock was provided. Fixes #520300.
|
||||||
|
|
||||||
2008-03-07 Wim Taymans <wim.taymans@collabora.co.uk>
|
2008-03-07 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
Patch by: Olivier Crete <tester at tester ca>
|
Patch by: Olivier Crete <tester at tester ca>
|
||||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
||||||
Subproject commit e02bd43fe6b9e45536eccbf5b7a5f9eae62030fd
|
Subproject commit 170f8e91adc7157f6e708ffa58ca22d10e4e45da
|
|
@ -598,7 +598,7 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
|
||||||
GstRingBuffer *ringbuffer;
|
GstRingBuffer *ringbuffer;
|
||||||
GstRingBufferSpec *spec;
|
GstRingBufferSpec *spec;
|
||||||
guint read;
|
guint read;
|
||||||
GstClockTime timestamp;
|
GstClockTime timestamp, duration;
|
||||||
GstClock *clock;
|
GstClock *clock;
|
||||||
|
|
||||||
ringbuffer = src->ringbuffer;
|
ringbuffer = src->ringbuffer;
|
||||||
|
@ -669,18 +669,21 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
|
||||||
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
|
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
src->next_sample = sample + samples;
|
||||||
|
|
||||||
|
/* get the normal timestamp to get the duration. */
|
||||||
|
timestamp = gst_util_uint64_scale_int (sample, GST_SECOND, spec->rate);
|
||||||
|
duration = gst_util_uint64_scale_int (src->next_sample, GST_SECOND,
|
||||||
|
spec->rate) - timestamp;
|
||||||
|
|
||||||
GST_OBJECT_LOCK (src);
|
GST_OBJECT_LOCK (src);
|
||||||
clock = GST_ELEMENT_CLOCK (src);
|
clock = GST_ELEMENT_CLOCK (src);
|
||||||
if (clock == NULL || clock == src->clock) {
|
if (clock != NULL && clock != src->clock) {
|
||||||
/* timestamp against our own clock. We do this also when no external clock
|
|
||||||
* was provided to us. */
|
|
||||||
timestamp = gst_util_uint64_scale_int (sample, GST_SECOND, spec->rate);
|
|
||||||
} else {
|
|
||||||
GstClockTime base_time, latency;
|
GstClockTime base_time, latency;
|
||||||
|
|
||||||
/* We are slaved to another clock, take running time of the clock and just
|
/* We are slaved to another clock, take running time of the clock and just
|
||||||
* timestamp against it. Somebody else in the pipeline should figure out the
|
* timestamp against it. Somebody else in the pipeline should figure out the
|
||||||
* clock drift, for now. */
|
* clock drift, for now. We keep the duration we calculated above. */
|
||||||
timestamp = gst_clock_get_time (clock);
|
timestamp = gst_clock_get_time (clock);
|
||||||
base_time = GST_ELEMENT_CAST (src)->base_time;
|
base_time = GST_ELEMENT_CAST (src)->base_time;
|
||||||
|
|
||||||
|
@ -699,9 +702,7 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
|
||||||
GST_OBJECT_UNLOCK (src);
|
GST_OBJECT_UNLOCK (src);
|
||||||
|
|
||||||
GST_BUFFER_TIMESTAMP (buf) = timestamp;
|
GST_BUFFER_TIMESTAMP (buf) = timestamp;
|
||||||
src->next_sample = sample + samples;
|
GST_BUFFER_DURATION (buf) = duration;
|
||||||
GST_BUFFER_DURATION (buf) = gst_util_uint64_scale_int (src->next_sample,
|
|
||||||
GST_SECOND, spec->rate) - GST_BUFFER_TIMESTAMP (buf);
|
|
||||||
GST_BUFFER_OFFSET (buf) = sample;
|
GST_BUFFER_OFFSET (buf) = sample;
|
||||||
GST_BUFFER_OFFSET_END (buf) = sample + samples;
|
GST_BUFFER_OFFSET_END (buf) = sample + samples;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue