oggdemux: fix wrong first granule
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 4 Feb 2015 17:13:44 +0000 (17:13 +0000)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 11 Mar 2015 12:04:23 +0000 (12:04 +0000)
commitca136e3648d13fd81c54dc0fe7f5d018018a379d
treef08bda4b024e8a43e07598df8fea25f5125e1e7e
parent3cd2eb5847a08451bf011e3a6b338f8f975b8b51
oggdemux: fix wrong first granule

The code was using the first nonnegative granulepos to seed the
granule tracking, which appeared to work since headers have zero
granulepos. However, this does not work for files with a hole at
start, which are common in live streaming.

The correct behavior is to look for the first granule, and subtract
the duration of all the packets finishing on this page.

The function which does this relies on the fact that the ogg_stream
structure can be duplicated by shallow copy, in order to pull the
packets from the first page(s) on the copy without affecting the
original stream state.
ext/ogg/gstoggdemux.c