Hi Martijn,
Am 13.10.24 um 21:00 schrieb Martijn van Beurden:
There's actually quite a lot of documentation for this.
Please review
https://xiph.org/flac/api/group__flac__stream__encoder.html#ga80d57f9069e354cbf1a15a3e3ad9ca78
I quote:
SEEKTABLE blocks are handled specially. Since you will not know the
values for the seek point stream offsets, you should pass in a
SEEKTABLE 'template', that is, a SEEKTABLE object with the required
sample numbers (or placeholder points), with 0 for the frame_samples
and stream_offset fields for each point. If the client has specified
that it supports seeking by providing a seek callback to
FLAC__stream_encoder_init_stream() or both seek AND read callback to
FLAC__stream_encoder_init_ogg_stream() (or by using
FLAC__stream_encoder_init*_file() or
FLAC__stream_encoder_init*_FILE()), then while it is encoding the
encoder will fill the stream offsets in for you and when encoding is
finished, it will seek back and write the real values into the
SEEKTABLE block in the stream. There are helper routines for
manipulating seektable template blocks; see metadata.h:
FLAC__metadata_object_seektable_template_*(). If the client does not
support seeking, the SEEKTABLE will have inaccurate offsets which will
slow down or remove the ability to seek in the FLAC stream.
Also, take a look at this:
https://xiph.org/flac/api/group__flac__metadata__object.html#gab91c8b020a1da37d7524051ae82328cb
Hope that helps.
Thanks, I have looked at the wrong place (at the encoder documentation,
not the metadata).
Is the seektable written at the beginning of the file in the metadata
block or can there also be a second metadata block at the end?
If it's written at the end could I just call
FLAC__metadata_object_seektable_template_append_point() in the encoding
loop? Should the sample already exist at that point or should the
seekpoint appended before that data is passed to the encoder?
If it's at the beginning, would it possible to reserve space for N seek
points and during encoding remember a seek point after X samples,
resulting in M seek points when encoding is finished. If M <= N all seek
points are written, otherwise only every 2nd, 3rd etc.
Is it possible to do that? The functions all expect a a total_samples
argument, which is not known at the beginning.
Also, as I'm always extra curious when FLAC is used for non-audio
purposes: could you perhaps say a little bit about what kind of
signals you're compressing?
The signal is the FM-modulated video signal of video tapes (like VHS).
The idea is to capture the signal directly from the video head amplifier
in the VCR and later demodulate/decode it in software, providing higher
quality than traditional capture of analog video. See this project:
https://github.com/oyvindln/vhs-decode/
I started to design a capture device, as there is no 40 MHz continuous
sampling hardware available at consumer prices:
https://github.com/Stefan-Olt/MISRC
Best regards
Stefan Oltmanns
_______________________________________________
flac-dev mailing list
flac-dev@xiph.org
http://lists.xiph.org/mailman/listinfo/flac-dev