I have added LibFlac in xcode project . Then I added decode/main.c from Libflac in my project.
I passed infile.flac and run executable of project but it is giving following error
decoding: FAILED state: FLAC__STREAM_DECODER_END_OF_STREAM logou
t
Here is main.c
int main(int argc, char *argv[])
{
FLAC__bool ok = true;
FLAC__StreamDecoder *decoder = 0;
FLAC__StreamDecoderInitStatus init_status;
FILE *fout;
const char *infile = "infile.flac";
const char *outfile = "outfile.wav";
/*
if(argc != 3) {
fprintf(stderr, "usage: %s infile.flac outfile.wav\n", argv[0]);
return 1;
}
*/
if((fout = fopen("infile.flac", "wb")) == NULL) {
fprintf(stderr, "ERROR: opening %s for output\n", argv[2]);
return 1;
}
if((decoder = FLAC__stream_decoder_new()) == NULL) {
fprintf(stderr, "ERROR: allocating decoder\n");
fclose(fout);
return 1;
}
(void)FLAC__stream_decoder_set_md5_checking(decoder, true);
init_status = FLAC__stream_decoder_init_file(decoder, infile, write_callback, metadata_callback, error_callback, /*client_data=*/fout);
if(init_status != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
fprintf(stderr, "ERROR: initializing decoder: %s\n", FLAC__StreamDecoderInitStatusString[init_status]);
ok = false;
}
if(ok) {
ok = FLAC__stream_decoder_process_until_end_of_stream(decoder);
fprintf(stderr, "decoding: %s\n", ok? "succeeded" : "FAILED");
fprintf(stderr, " state: %s\n", FLAC__StreamDecoderStateString[FLAC__stream_decoder_get_state(decoder)]);
}
FLAC__stream_decoder_delete(decoder);
fclose(fout);
return 0;
}
Please help me. why I am getting this error ?
fopening your input file with “wb” will truncate your infile on opening it. That can’t be what you want, right?
I think you really mean;
There seems to be some confusion how the FLAC sample works.
opens the file you give it the filename to for decoding and sets up callbacks for the decoding.
decodes the file and for every decoded frame it calls the write_callback function provided in the call to FLAC__stream_decoder_init_file with the parameter given as last parameter to it.
In other words, all the work of writing the file is done in write_callback. That’s where you are provided with the decoded data and you should generate and write the output file, frame by frame. If you look at the sample at http://flac.cvs.sourceforge.net/viewvc/flac/flac/examples/c/decode/file/main.c?view=markup which seems to be what you’ve copied to start with, that’s exactly what it does.