ext/wavpack/gstwavpackparse.c: Fix a off by one that leads to the duration reported as one sample less than it is

Original commit message from CVS:
* ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_src_query),
(gst_wavpack_parse_handle_seek_event),
(gst_wavpack_parse_create_src_pad):
Fix a off by one that leads to the duration reported as one
sample less than it is
This commit is contained in:
Sebastian Dröge 2007-01-31 08:32:59 +00:00
parent 5d004d2c32
commit 9387b181cc

View file

@ -276,7 +276,7 @@ gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query)
rate = parse->samplerate; rate = parse->samplerate;
GST_OBJECT_UNLOCK (parse); GST_OBJECT_UNLOCK (parse);
if (len <= 0 || rate == 0) { if (len < 0 || rate == 0) {
GST_DEBUG_OBJECT (parse, "haven't read header yet"); GST_DEBUG_OBJECT (parse, "haven't read header yet");
break; break;
} }
@ -534,9 +534,7 @@ gst_wavpack_parse_handle_seek_event (GstWavpackParse * wvparse,
/* if seek is to something after the end of the stream seek only /* if seek is to something after the end of the stream seek only
* to the end. this can be caused by rounding errors */ * to the end. this can be caused by rounding errors */
if (start >= wvparse->total_samples) if (start >= wvparse->total_samples)
start = wvparse->total_samples; start = wvparse->total_samples - 1;
flush = ((seek_flags & GST_SEEK_FLAG_FLUSH) != 0);
if (start < 0) { if (start < 0) {
GST_OBJECT_UNLOCK (wvparse); GST_OBJECT_UNLOCK (wvparse);
@ -544,6 +542,8 @@ gst_wavpack_parse_handle_seek_event (GstWavpackParse * wvparse,
return FALSE; return FALSE;
} }
flush = ((seek_flags & GST_SEEK_FLAG_FLUSH) != 0);
/* operate on segment copy until we know the seek worked */ /* operate on segment copy until we know the seek worked */
segment = wvparse->segment; segment = wvparse->segment;
@ -795,8 +795,6 @@ gst_wavpack_parse_create_src_pad (GstWavpackParse * wvparse, GstBuffer * buf,
wvparse->total_samples = header->total_samples; wvparse->total_samples = header->total_samples;
if (wvparse->total_samples == (int32_t) - 1) if (wvparse->total_samples == (int32_t) - 1)
wvparse->total_samples = 0; wvparse->total_samples = 0;
else
wvparse->total_samples--;
caps = gst_caps_new_simple ("audio/x-wavpack", caps = gst_caps_new_simple ("audio/x-wavpack",
"width", G_TYPE_INT, WavpackGetBitsPerSample (wpc), "width", G_TYPE_INT, WavpackGetBitsPerSample (wpc),