oggstream: when the last keyframe position is not known, do not use -1

Instead, use either 0 or 1, depending on bitstream version, which give
the correct result for streams which aren't cut off at start.
This allows that function to not return negative granpos.

https://bugzilla.gnome.org/show_bug.cgi?id=638276
This commit is contained in:
Vincent Penquerc'h 2010-12-29 15:27:44 +00:00 committed by David Schleef
parent 133baf3a34
commit b03b223fb1

View file

@ -255,6 +255,11 @@ granule_to_granulepos_default (GstOggStream * pad, gint64 granule,
gint64 keyoffset; gint64 keyoffset;
if (pad->granuleshift != 0) { if (pad->granuleshift != 0) {
/* If we don't know where the previous keyframe is yet, assume it is
at 0 or 1, depending on bitstream version. If nothing else, this
avoids getting negative granpos back. */
if (keyframe_granule < 0)
keyframe_granule = pad->theora_has_zero_keyoffset ? 0 : 1;
keyoffset = granule - keyframe_granule; keyoffset = granule - keyframe_granule;
return (keyframe_granule << pad->granuleshift) | keyoffset; return (keyframe_granule << pad->granuleshift) | keyoffset;
} else { } else {