|
@@ -210,7 +210,14 @@ int VorbisDecoder::decode()
|
|
|
|
|
|
bool VorbisDecoder::seek(float s)
|
|
bool VorbisDecoder::seek(float s)
|
|
{
|
|
{
|
|
- int result = ov_time_seek(&handle, s);
|
|
|
|
|
|
+ int result = 0;
|
|
|
|
+
|
|
|
|
+ // Avoid ov_time_seek (which calls ov_pcm_seek) when seeking to 0, to avoid
|
|
|
|
+ // a bug in libvorbis <= 1.3.4 when seeking to PCM 0 in multiplexed streams.
|
|
|
|
+ if (s <= 0.000001)
|
|
|
|
+ result = ov_raw_seek(&handle, 0);
|
|
|
|
+ else
|
|
|
|
+ result = ov_time_seek(&handle, s);
|
|
|
|
|
|
if (result == 0)
|
|
if (result == 0)
|
|
{
|
|
{
|
|
@@ -223,7 +230,9 @@ bool VorbisDecoder::seek(float s)
|
|
|
|
|
|
bool VorbisDecoder::rewind()
|
|
bool VorbisDecoder::rewind()
|
|
{
|
|
{
|
|
- int result = ov_pcm_seek(&handle, 0);
|
|
|
|
|
|
+ // Avoid ov_time_seek to avoid a bug in libvorbis <= 1.3.4 when seeking to
|
|
|
|
+ // PCM 0 in multiplexed streams.
|
|
|
|
+ int result = ov_raw_seek(&handle, 0);
|
|
|
|
|
|
if (result == 0)
|
|
if (result == 0)
|
|
{
|
|
{
|