Improve handling of holes (corrupt pages).
Previously, when we encountered a hole (a gap in the page sequence numbers), we would save off all of the packets from the first page after the hole, but not timestamp them. That meant when they were actually decoded, op_pcm_tell() would report a timestamp of 0 until reaching the last packet on that page. Instead, handle holes just like a raw seek. We reset the granule position tracking, and attempt to timestamp packets backwards from the end of the page. If the first page after the hole is an EOS page, we just throw it away (rather than risk playing invalid samples due to incorrect end-trimming). We also throw away the first 80 ms of audio after a hole, to allow the decoder state to reconverge. This patch also updates the example to report the hole and continue decoding, rather than immediately stopping when a hole is encountered, in order to test the above features.
Showing with 32 additions and 7 deletions