[flac-dev] Feedback on implementation of decoding of chained streams
Timothy B. Terriberry
tterribe at xiph.org
Fri Sep 13 10:23:08 UTC 2024
Martijn van Beurden wrote:
> Okay, I just came up with a possible solution. In the case of
> multiplexed streams, FLAC could not just keep track of its own serial
> number in that link, but also of the serial numbers of other streams
> in that link. That way, it could easily determine whether it is still
> in the current link, as any page will either have a known or unknown
> serial number. Is that also how opusfile works? I can't seem to find
> any reference to such a thing in the code.
Correct, that is how opusfile works. op_lookup_serialno() is the
function which determines if a serial number is in the list for the
current link. When it finds where the current link ends and a new link
starts, op_fetch_headers() builds a new list of serial numbers from the
BOS pages of all streams (which are all required to be together at the
start of the link):
https://gitlab.xiph.org/xiph/opusfile/-/blob/master/src/opusfile.c#L484
> seems a little much to read forward opportunistically. 1MB also seems
> the max Opus does while seeking in such a case, but I'm not sure I
> correctly understand the code.
Not sure where you got 1 MB. Different maximums are used in different
places, but for link enumeration:
https://gitlab.xiph.org/xiph/opusfile/-/blob/master/src/opusfile.c#L1202
last=op_get_next_page(_of,&og,_sr[nsr-1].offset);
The limit for reading forward, sr[nsr-1].offset, is the start of the
last seek record, which corresponds to the earliest page found so far
from a different link (i.e., there is essentially no limit). I suppose
you can argue about whether or not that is a good idea.
More information about the flac-dev
mailing list