[flac-dev] Crash when writing 32bit flac files, am I doing something wrong ?

Stéphane Damo stephane.damo at gmail.com
Sat Mar 24 11:09:59 UTC 2018


 Yes, you're right I didnt check for much return error codes from libFLAC.
I'll do that and limit the bit depth to 24 bit in my program. Thanks for
your help !

On 24 March 2018 at 11:34, lvqcl <lvqcl.mail at gmail.com> wrote:

> On Thu, Mar 22, 2018 at 3:41 AM, Stéphane Damo <stephane.damo at gmail.com>
> wrote:
> > Hello,
> >
> > I manage to successfully write 8, 16 and 24 bit, all stereo, FLAC files.
> But
> > when I try to write 32 bit FLACs my program crashes.
> >
> > FLAC__stream_encoder_set_bits_per_sample is called to match the desired
> bit
> > depth (8, 16, 24, 32)
> >
> > It's the same code for all bit depths, i provide a fixed-size signed int
> > buffer to the lib (size=16384), with values with appropriate ranges for
> each
> > bit depth (-128...+127 for 8 bit, etc.).
> >
> > The crash happens in stream_encoder.c line 2263 :
> >
> > encoder->private_->integer_signal[channel][i] = buffer[k++];
> >
> > It happens when I call FLAC__stream_encoder_process_interleaved(encoder,
> > out, 16384/2) in my code. Its working perfectly for all bit depth except
> 32
> > bit.
> >
> >
> > Output message: Unhandled exception at 0x00F98441 in fmcomposer.exe:
> > 0xC0000005: Access violation writing location 0x00000000.
> >
> >
> > I'm using the latest code from the github repository. Reading the docs
> > didn't noticed any thing special to do for writing 32 bit FLACs, it
> seems it
> > should be supported. Maybe I am missing something ?
>
> AFAIK: while FLAC format itself supports 32-bit PCM, the official
> encoder doesn't support it.
>
> from include/FLAC/format.h:
>
>
> /** The maximum sample resolution permitted by the format. */
> #define FLAC__MAX_BITS_PER_SAMPLE (32u)
>
> /** The maximum sample resolution permitted by libFLAC.
>  *
>  * \warning
>  * FLAC__MAX_BITS_PER_SAMPLE is the limit of the FLAC format.  However,
>  * the reference encoder/decoder is currently limited to 24 bits because
>  * of prevalent 32-bit math, so make sure and use this value when
>  * appropriate.
>  */
> #define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u)
>
> also, init_stream_internal_() function already checks bit depth:
>
>     if(encoder->protected_->bits_per_sample <
> FLAC__MIN_BITS_PER_SAMPLE || encoder->protected_->bits_per_sample >
> FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE)
>         return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE;
>
>
> so, maybe you forgot to check return value for errors?
> _______________________________________________
> flac-dev mailing list
> flac-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/flac-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xiph.org/pipermail/flac-dev/attachments/20180324/88a53f20/attachment.html>


More information about the flac-dev mailing list