[flac-dev] Newbie question about those callbacks

Erik de Castro Lopo mle+la at mega-nerd.com
Sat Feb 9 17:37:47 PST 2013

Johnny Rosenberg wrote:

> For instance the write_callback thing:
> client_data – can it be a pointer to just about anything?

I assume you mean:


which defines the type:

    typedef FLAC__StreamDecoderWriteStatus
             (* FLAC__StreamDecoderWriteCallback)
                 (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame
                 , const FLAC__int32 *const buffer[], void *client_data) 

Yes, client_data can point at anything. You the callee are responsible
to cast your pointer_to_anything to and from 'void*'

> For instance a pointer to a two-dimensional array?

Yes. They can even be NULL.

Whatever pointer you pass as the client_data parameter in the finction
FLAC__stream_decoder_init_stream () will be passed back to you in the
callbacks client_data.

> Are those FLAC-WAV and WAV-FLAC examples the only examples available?

There are examples in the examples/ directory of the FLAC source code
tarball. They are in Git here:


> What would be the best approach to read a FLAC file to an array of
> some kind? Passing a pointer to the array as ”client_data”? I'd like
> to use a two-dimensional array, but it's a little tricky (for a
> newbie) to pass to functions as a pointer.

I agree, coding to the FLAC API is not something that is easy or obvious
for a newbie C programmer.

Erik de Castro Lopo

More information about the flac-dev mailing list