source: src/io/utils_apple_audio.c @ a7f398d

feature/autosinkfeature/cnnfeature/cnn_orgfeature/constantqfeature/crepefeature/crepe_orgfeature/pitchshiftfeature/pydocstringsfeature/timestretchfix/ffmpeg5pitchshiftsamplertimestretchyinfft+
Last change on this file since a7f398d was 2da7526, checked in by Paul Brossier <piem@piem.org>, 9 years ago

src/io/{sink,source,utils}_apple_audio.c: fix memory leak calling CFRelease (closes #26, closes #27, and closes #28)

  • Property mode set to 100644
File size: 2.0 KB
Line 
1#include "config.h"
2
3#if defined(HAVE_SOURCE_APPLE_AUDIO) || defined(HAVE_SINK_APPLE_AUDIO)
4
5// CFURLRef, CFURLCreateWithFileSystemPath, ...
6#include <CoreFoundation/CoreFoundation.h>
7// ExtAudioFileRef, AudioStreamBasicDescription, AudioBufferList, ...
8#include <AudioToolbox/AudioToolbox.h>
9#include "aubio_priv.h"
10
11int createAubioBufferList(AudioBufferList *bufferList, int channels, int segmentSize);
12void freeAudioBufferList(AudioBufferList *bufferList);
13CFURLRef getURLFromPath(const char * path);
14char_t *getPrintableOSStatusError(char_t *str, OSStatus error);
15
16int createAubioBufferList(AudioBufferList * bufferList, int channels, int max_source_samples) {
17  bufferList->mNumberBuffers = 1;
18  bufferList->mBuffers[0].mNumberChannels = channels;
19  bufferList->mBuffers[0].mData = AUBIO_ARRAY(short, max_source_samples);
20  bufferList->mBuffers[0].mDataByteSize = max_source_samples * sizeof(short);
21  return 0;
22}
23
24void freeAudioBufferList(AudioBufferList *bufferList) {
25  UInt32 i = 0;
26  if (!bufferList) return;
27  for (i = 0; i < bufferList->mNumberBuffers; i++) {
28    if (bufferList->mBuffers[i].mData) {
29      AUBIO_FREE(bufferList->mBuffers[i].mData);
30      bufferList->mBuffers[i].mData = NULL;
31    }
32  }
33  bufferList = NULL;
34}
35
36CFURLRef createURLFromPath(const char * path) {
37  CFStringRef cfTotalPath = CFStringCreateWithCString (kCFAllocatorDefault,
38      path, kCFStringEncodingUTF8);
39
40  CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, cfTotalPath,
41      kCFURLPOSIXPathStyle, false);
42  CFRelease(cfTotalPath);
43  return url;
44}
45
46char_t *getPrintableOSStatusError(char_t *str, OSStatus error)
47{
48    // see if it appears to be a 4-char-code
49    *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error);
50    if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
51        str[0] = str[5] = '\'';
52        str[6] = '\0';
53    } else
54        // no, format it as an integer
55        sprintf(str, "%d", (int)error);
56    return str;
57}
58
59#endif /* defined(HAVE_SOURCE_APPLE_AUDIO) || defined(HAVE_SINK_APPLE_AUDIO) */
Note: See TracBrowser for help on using the repository browser.