1
0
mirror of https://github.com/mstorsjo/fdk-aac.git synced 2025-02-19 20:40:36 +01:00

m4a-dec: return error_code + break on decoding error

This commit is contained in:
Dima 2019-08-01 15:10:21 +03:00 committed by Martin Storsjo
parent baad462a03
commit 7bcf0d3d55

View File

@ -40,6 +40,7 @@ int main(int argc, char *argv[]) {
AAC_DECODER_ERROR err; AAC_DECODER_ERROR err;
unsigned frame_size = 0, i; unsigned frame_size = 0, i;
UINT input_length; UINT input_length;
int status = 0;
if (argc < 3) { if (argc < 3) {
fprintf(stderr, "%s in.m4a out.wav\n", argv[0]); fprintf(stderr, "%s in.m4a out.wav\n", argv[0]);
return 1; return 1;
@ -104,6 +105,7 @@ int main(int argc, char *argv[]) {
err = aacDecoder_Fill(handle, &pkt.data, &input_length, &valid); err = aacDecoder_Fill(handle, &pkt.data, &input_length, &valid);
if (err != AAC_DEC_OK) { if (err != AAC_DEC_OK) {
fprintf(stderr, "Fill failed: %x\n", err); fprintf(stderr, "Fill failed: %x\n", err);
status = 1;
break; break;
} }
err = aacDecoder_DecodeFrame(handle, decode_buf, output_size / sizeof(INT_PCM), 0); err = aacDecoder_DecodeFrame(handle, decode_buf, output_size / sizeof(INT_PCM), 0);
@ -112,12 +114,14 @@ int main(int argc, char *argv[]) {
continue; continue;
if (err != AAC_DEC_OK) { if (err != AAC_DEC_OK) {
fprintf(stderr, "Decode failed: %x\n", err); fprintf(stderr, "Decode failed: %x\n", err);
continue; status = 1;
break;
} }
if (!wav) { if (!wav) {
CStreamInfo *info = aacDecoder_GetStreamInfo(handle); CStreamInfo *info = aacDecoder_GetStreamInfo(handle);
if (!info || info->sampleRate <= 0) { if (!info || info->sampleRate <= 0) {
fprintf(stderr, "No stream info\n"); fprintf(stderr, "No stream info\n");
status = 1;
break; break;
} }
frame_size = info->frameSize * info->numChannels; frame_size = info->frameSize * info->numChannels;
@ -125,6 +129,7 @@ int main(int argc, char *argv[]) {
wav = wav_write_open(outfile, info->sampleRate, 16, info->numChannels); wav = wav_write_open(outfile, info->sampleRate, 16, info->numChannels);
if (!wav) { if (!wav) {
perror(outfile); perror(outfile);
status = 1;
break; break;
} }
} }
@ -141,6 +146,6 @@ int main(int argc, char *argv[]) {
if (wav) if (wav)
wav_write_close(wav); wav_write_close(wav);
aacDecoder_Close(handle); aacDecoder_Close(handle);
return 0; return status;
} }