FS#10434 - Rudimentary support for codec-specific buffering

Attached to Project: Rockbox
Opened by Bryan Jacobs (BryanJacobs) - Sunday, 12 July 2009, 22:48 GMT
Task Type Patches
Category Music playback
Status Unconfirmed
Assigned To No-one
Operating System All players
Severity Low
Priority Normal
Reported Version Version 3.3
Due in Version Undecided
Due Date Undecided
Percent Complete 0%
Votes 0
Private No


This patch adds does three related things:

- Adds *basic* support for seeking and buffering callbacks so different codecs may manage their buffer space differently
- Extends a few buffering and metadata structures to store information on two files rather than one
- Modifies the Wavpack codec to make use of these features to play back hybrid files with readable correction files losslessly.

This code should not in any way interfere with anything other than the situation where a Wavpack hybrid file is present AND its correction file is readable.

There are several things that need to be done before this patch may be committed:
1. Currently there are two ginormous linear buffers inside the Wavpack codec. They should be replaced with smaller dissimilarly-sized ring buffers.
2. The interspersal of primary and correction file chunks is currently 1/1/1/1. This should probably be more like 1/3/1/3 as that better matches the size rations of a .wv to its .wvc.
3. seek_wavpack needs to support seeking where rebuffering is required.
4. The wavpack hybrid decoding function needs to be modified to decode smaller chunks in a go so that the small ring buffers mentioned above won't overflow.
5. Gracefully handle the end of a hybrid lossless file (currently it freezes the sim)
This task depends upon