mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 00:01:23 +00:00
webrtcdsp: Offset timestamp with duration
The saved timestamp is used to compute the delay of the probe data. As it's used at the following incoming buffer, it needs to be offset with the duration of the buffer to represent the end position. Also, properly initialize the saved timestamp and protect against TIME_NONE.
This commit is contained in:
parent
86aa3b5f9c
commit
c551a853b3
1 changed files with 11 additions and 3 deletions
|
@ -256,6 +256,10 @@ gst_webrtc_dsp_sync_reverse_stream (GstWebrtcDsp * self,
|
|||
GstClockTimeDiff diff;
|
||||
guint64 distance;
|
||||
|
||||
/* We need to wait for a time reference */
|
||||
if (!GST_CLOCK_TIME_IS_VALID (self->timestamp))
|
||||
return FALSE;
|
||||
|
||||
probe_timestamp = gst_adapter_prev_pts (probe->adapter, &distance);
|
||||
|
||||
if (!GST_CLOCK_TIME_IS_VALID (probe_timestamp)) {
|
||||
|
@ -359,8 +363,10 @@ gst_webrtc_dsp_process_stream (GstWebrtcDsp * self)
|
|||
frame.samples_per_channel_ = self->period_size / self->info.bpf;
|
||||
|
||||
timestamp = gst_adapter_prev_pts (self->adapter, &distance);
|
||||
timestamp += gst_util_uint64_scale_int (distance / self->info.bpf,
|
||||
GST_SECOND, self->info.rate);
|
||||
|
||||
if (GST_CLOCK_TIME_IS_VALID (timestamp))
|
||||
timestamp += gst_util_uint64_scale_int (distance / self->info.bpf,
|
||||
GST_SECOND, self->info.rate);
|
||||
|
||||
buffer = gst_adapter_take_buffer (self->adapter, self->period_size);
|
||||
|
||||
|
@ -390,7 +396,8 @@ gst_webrtc_dsp_process_stream (GstWebrtcDsp * self)
|
|||
else
|
||||
GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
|
||||
|
||||
self->timestamp = timestamp;
|
||||
if (GST_CLOCK_TIME_IS_VALID (timestamp))
|
||||
self->timestamp = timestamp + GST_BUFFER_DURATION (buffer);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
@ -488,6 +495,7 @@ gst_webrtc_dsp_setup (GstAudioFilter * filter, const GstAudioInfo * info)
|
|||
GST_OBJECT_LOCK (self);
|
||||
|
||||
gst_adapter_clear (self->adapter);
|
||||
self->timestamp = GST_CLOCK_TIME_NONE;
|
||||
self->delay_ms = 0;
|
||||
self->info = *info;
|
||||
apm = self->apm;
|
||||
|
|
Loading…
Reference in a new issue