Fix Core Audio input to report and decode format native bits per sample, and report file bitrate
This commit is contained in:
parent
9f337dc41c
commit
04074f5d74
2 changed files with 28 additions and 4 deletions
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
#include <AudioToolbox/AudioFile.h>
|
||||||
#include <AudioToolbox/ExtendedAudioFile.h>
|
#include <AudioToolbox/ExtendedAudioFile.h>
|
||||||
|
|
||||||
#import "Plugin.h"
|
#import "Plugin.h"
|
||||||
|
|
|
@ -126,6 +126,7 @@ static SInt64 getSizeProc(void* clientData) {
|
||||||
OSStatus err;
|
OSStatus err;
|
||||||
UInt32 size;
|
UInt32 size;
|
||||||
AudioStreamBasicDescription asbd;
|
AudioStreamBasicDescription asbd;
|
||||||
|
AudioFileID afi;
|
||||||
|
|
||||||
// Get input file information
|
// Get input file information
|
||||||
size = sizeof(asbd);
|
size = sizeof(asbd);
|
||||||
|
@ -144,17 +145,39 @@ static SInt64 getSizeProc(void* clientData) {
|
||||||
}
|
}
|
||||||
totalFrames = total;
|
totalFrames = total;
|
||||||
|
|
||||||
//Is there a way to get bitrate with extAudioFile?
|
size = sizeof(afi);
|
||||||
bitrate = 0;
|
err = ExtAudioFileGetProperty(_in, kExtAudioFileProperty_AudioFile, &size, &afi);
|
||||||
|
if(err != noErr) {
|
||||||
|
err = ExtAudioFileDispose(_in);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
SInt32 formatBitsPerSample;
|
||||||
|
size = sizeof(formatBitsPerSample);
|
||||||
|
err = AudioFileGetProperty(afi, kAudioFilePropertySourceBitDepth, &size, &formatBitsPerSample);
|
||||||
|
if(err != noErr) {
|
||||||
|
err = ExtAudioFileDispose(_in);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
UInt32 _bitrate;
|
||||||
|
size = sizeof(_bitrate);
|
||||||
|
err = AudioFileGetProperty(afi, kAudioFilePropertyBitRate, &size, &_bitrate);
|
||||||
|
if(err != noErr) {
|
||||||
|
err = ExtAudioFileDispose(_in);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
bitrate = (_bitrate + 500) / 1000;
|
||||||
|
|
||||||
// Set our properties
|
// Set our properties
|
||||||
bitsPerSample = asbd.mBitsPerChannel;
|
bitsPerSample = formatBitsPerSample;
|
||||||
channels = asbd.mChannelsPerFrame;
|
channels = asbd.mChannelsPerFrame;
|
||||||
frequency = asbd.mSampleRate;
|
frequency = asbd.mSampleRate;
|
||||||
floatingPoint = NO;
|
floatingPoint = NO;
|
||||||
|
|
||||||
// mBitsPerChannel will only be set for lpcm formats
|
// mBitsPerChannel will only be set for lpcm formats
|
||||||
if(0 == bitsPerSample) {
|
if(bitsPerSample <= 0) {
|
||||||
bitsPerSample = 32;
|
bitsPerSample = 32;
|
||||||
floatingPoint = YES;
|
floatingPoint = YES;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue