From: Paul Brossier Date: Fri, 24 Jan 2014 16:09:50 +0000 (-0300) Subject: src/io/*apple*: improve error messages X-Git-Tag: 0.4.1~71 X-Git-Url: https://git.aubio.org/?a=commitdiff_plain;h=98a38878b102b20a08c16c1efde89896e2d9e0d2;p=aubio.git src/io/*apple*: improve error messages --- diff --git a/src/io/sink_apple_audio.c b/src/io/sink_apple_audio.c index 6e3d8c8a..cd030c15 100644 --- a/src/io/sink_apple_audio.c +++ b/src/io/sink_apple_audio.c @@ -36,6 +36,7 @@ extern int createAubioBufferList(AudioBufferList *bufferList, int channels, int segmentSize); extern void freeAudioBufferList(AudioBufferList *bufferList); extern CFURLRef getURLFromPath(const char * path); +char_t *getPrintableOSStatusError(char_t *str, OSStatus error); #define MAX_SIZE 4096 // the maximum number of frames that can be written at a time @@ -78,11 +79,15 @@ aubio_sink_apple_audio_t * new_aubio_sink_apple_audio(char_t * uri, uint_t sampl err = ExtAudioFileCreateWithURL(fileURL, fileType, &clientFormat, NULL, overwrite ? kAudioFileFlags_EraseFile : 0, &s->audioFile); if (err) { - AUBIO_ERR("error when trying to create %s, in ExtAudioFileCreateWithURL, %d\n", s->path, (int)err); + char_t errorstr[20]; + AUBIO_ERR("sink_apple_audio: error when trying to create %s with " + "ExtAudioFileCreateWithURL (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); goto beach; } if (createAubioBufferList(&s->bufferList, s->channels, s->max_frames * s->channels)) { - AUBIO_ERR("error when creating buffer list for %s, out of memory? \n", s->path); + AUBIO_ERR("sink_apple_audio: error when creating buffer list for %s, " + "out of memory? \n", s->path); goto beach; } return s; @@ -114,8 +119,10 @@ void aubio_sink_apple_audio_do(aubio_sink_apple_audio_t * s, fvec_t * write_data err = ExtAudioFileWriteAsync(s->audioFile, write, &s->bufferList); if (err) { - AUBIO_ERROR("in aubio_sink_apple_audio_do, writing %s\n", s->path); - AUBIO_ERROR("ExtAudioFileWriteAsync failed with %d, switching to sync\n", (int)err); + char_t errorstr[20]; + AUBIO_ERROR("sink_apple_audio: error while writing %s " + "in ExtAudioFileWriteAsync (%s), switching to sync\n", s->path, + getPrintableOSStatusError(errorstr, err)); s->async = false; } else { return; @@ -125,8 +132,10 @@ void aubio_sink_apple_audio_do(aubio_sink_apple_audio_t * s, fvec_t * write_data err = ExtAudioFileWrite(s->audioFile, write, &s->bufferList); if (err) { - AUBIO_ERROR("in aubio_sink_apple_audio_do, writing %s\n", s->path); - AUBIO_ERROR("ExtAudioFileWrite failed with %d, aborting\n", (int)err); + char_t errorstr[20]; + AUBIO_ERROR("sink_apple_audio: error while writing %s " + "in ExtAudioFileWrite (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); } } return; @@ -135,11 +144,16 @@ void aubio_sink_apple_audio_do(aubio_sink_apple_audio_t * s, fvec_t * write_data void del_aubio_sink_apple_audio(aubio_sink_apple_audio_t * s) { OSStatus err = noErr; if (!s || !s->audioFile) { - AUBIO_ERR("failed erasing sink_apple_audio\n"); + AUBIO_ERR("sink_apple_audio: failed erasing\n"); return; } err = ExtAudioFileDispose(s->audioFile); - if (err) AUBIO_ERROR("error in ExtAudioFileDispose, %d\n", (int)err); + if (err) { + char_t errorstr[20]; + AUBIO_ERROR("sink_apple_audio: error while closing %s " + "in ExtAudioFileDispose (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); + } s->audioFile = NULL; freeAudioBufferList(&s->bufferList); AUBIO_FREE(s); diff --git a/src/io/source_apple_audio.c b/src/io/source_apple_audio.c index f9206ed6..e28d3e5f 100644 --- a/src/io/source_apple_audio.c +++ b/src/io/source_apple_audio.c @@ -50,6 +50,7 @@ struct _aubio_source_apple_audio_t { extern int createAubioBufferList(AudioBufferList *bufferList, int channels, int max_source_samples); extern void freeAudioBufferList(AudioBufferList *bufferList); extern CFURLRef getURLFromPath(const char * path); +char_t *getPrintableOSStatusError(char_t *str, OSStatus error); uint_t aubio_source_apple_audio_open (aubio_source_apple_audio_t *s, char_t * path); @@ -79,7 +80,17 @@ uint_t aubio_source_apple_audio_open (aubio_source_apple_audio_t *s, char_t * pa // open the resource url CFURLRef fileURL = getURLFromPath(path); err = ExtAudioFileOpenURL(fileURL, &s->audioFile); - if (err) { AUBIO_ERR("error when trying to access %s, in ExtAudioFileOpenURL, %d\n", s->path, (int)err); goto beach;} + if (err == -43) { + AUBIO_ERR("source_apple_audio: Failed opening %s, " + "file not found, or no read access\n", s->path); + goto beach; + } else if (err) { + char_t errorstr[20]; + AUBIO_ERR("source_apple_audio: Failed opening %s, " + "error in ExtAudioFileOpenURL (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); + goto beach; + } // create an empty AudioStreamBasicDescription AudioStreamBasicDescription fileFormat; @@ -89,7 +100,13 @@ uint_t aubio_source_apple_audio_open (aubio_source_apple_audio_t *s, char_t * pa // fill it with the file description err = ExtAudioFileGetProperty(s->audioFile, kExtAudioFileProperty_FileDataFormat, &propSize, &fileFormat); - if (err) { AUBIO_ERROR("error in ExtAudioFileGetProperty, %d\n", (int)err); goto beach;} + if (err) { + char_t errorstr[20]; + AUBIO_ERROR("source_apple_audio: Failed opening %s, " + "error in ExtAudioFileGetProperty (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); + goto beach; + } if (s->samplerate == 0) { s->samplerate = fileFormat.mSampleRate; @@ -116,7 +133,10 @@ uint_t aubio_source_apple_audio_open (aubio_source_apple_audio_t *s, char_t * pa err = ExtAudioFileSetProperty(s->audioFile, kExtAudioFileProperty_ClientDataFormat, propSize, &clientFormat); if (err) { - AUBIO_ERROR("error in ExtAudioFileSetProperty, %d\n", (int)err); + char_t errorstr[20]; + AUBIO_ERROR("source_apple_audio: Failed opening %s, " + "error in ExtAudioFileSetProperty (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); #if 1 // print client and format descriptions AUBIO_DBG("Opened %s\n", s->path); @@ -157,7 +177,13 @@ beach: void aubio_source_apple_audio_do(aubio_source_apple_audio_t *s, fvec_t * read_to, uint_t * read) { UInt32 c, v, loadedPackets = s->block_size; OSStatus err = ExtAudioFileRead(s->audioFile, &loadedPackets, &s->bufferList); - if (err) { AUBIO_ERROR("error in ExtAudioFileRead %s %d\n", s->path, (int)err); goto beach;} + if (err) { + char_t errorstr[20]; + AUBIO_ERROR("source_apple_audio: error while reading %s " + "with ExtAudioFileRead (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); + goto beach; + } short *data = (short*)s->bufferList.mBuffers[0].mData; @@ -187,7 +213,13 @@ beach: void aubio_source_apple_audio_do_multi(aubio_source_apple_audio_t *s, fmat_t * read_to, uint_t * read) { UInt32 c, v, loadedPackets = s->block_size; OSStatus err = ExtAudioFileRead(s->audioFile, &loadedPackets, &s->bufferList); - if (err) { AUBIO_ERROR("source_apple_audio: error in ExtAudioFileRead, %d\n", (int)err); goto beach;} + if (err) { + char_t errorstr[20]; + AUBIO_ERROR("source_apple_audio: error while reading %s " + "with ExtAudioFileRead (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); + goto beach; + } short *data = (short*)s->bufferList.mBuffers[0].mData; @@ -225,11 +257,17 @@ beach: uint_t aubio_source_apple_audio_close (aubio_source_apple_audio_t *s) { OSStatus err = noErr; - if (!s || !s->audioFile) { return 1; } + if (!s || !s->audioFile) { return AUBIO_FAIL; } err = ExtAudioFileDispose(s->audioFile); - if (err) AUBIO_ERROR("error in ExtAudioFileDispose, %d\n", (int)err); s->audioFile = NULL; - return err; + if (err) { + char_t errorstr[20]; + AUBIO_ERROR("source_apple_audio: error while closing %s " + "in ExtAudioFileDispose (%s)\n", s->path, + getPrintableOSStatusError(errorstr, err)); + return err; + } + return AUBIO_OK; } void del_aubio_source_apple_audio(aubio_source_apple_audio_t * s){ @@ -247,7 +285,12 @@ uint_t aubio_source_apple_audio_seek (aubio_source_apple_audio_t * s, uint_t pos smpl_t ratio = s->source_samplerate * 1. / s->samplerate; SInt64 resampled_pos = (SInt64)ROUND( pos * ratio ); OSStatus err = ExtAudioFileSeek(s->audioFile, resampled_pos); - if (err) AUBIO_ERROR("source_apple_audio: error in ExtAudioFileSeek (%d)\n", (int)err); + if (err) { + char_t errorstr[20]; + AUBIO_ERROR("source_apple_audio: error while seeking %s at %d " + "in ExtAudioFileSeek (%s)\n", s->path, pos, + getPrintableOSStatusError(errorstr, err)); + } return err; } diff --git a/src/io/utils_apple_audio.c b/src/io/utils_apple_audio.c index f0804159..1bd7a837 100644 --- a/src/io/utils_apple_audio.c +++ b/src/io/utils_apple_audio.c @@ -9,6 +9,7 @@ int createAubioBufferList(AudioBufferList *bufferList, int channels, int segmentSize); void freeAudioBufferList(AudioBufferList *bufferList); CFURLRef getURLFromPath(const char * path); +char_t *getPrintableOSStatusError(char_t *str, OSStatus error); int createAubioBufferList(AudioBufferList * bufferList, int channels, int max_source_samples) { bufferList->mNumberBuffers = 1; @@ -38,4 +39,17 @@ CFURLRef getURLFromPath(const char * path) { kCFURLPOSIXPathStyle, false); } +char_t *getPrintableOSStatusError(char_t *str, OSStatus error) +{ + // see if it appears to be a 4-char-code + *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error); + if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) { + str[0] = str[5] = '\''; + str[6] = '\0'; + } else + // no, format it as an integer + sprintf(str, "%d", (int)error); + return str; +} + #endif /* __APPLE__ */