summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mack <zonque@users.sourceforge.net>2004-06-12 23:13:56 +0000
committerDaniel Mack <zonque@users.sourceforge.net>2004-06-12 23:13:56 +0000
commitb5a4b3ead660e7ba0406751fe23209334b3a9b18 (patch)
tree269d67250d121f22818785d7a10cdc3af03a69f9
parentd9c6d7c2b4036966cff70f21ee57cbab7b45f9f3 (diff)
downloadxine-lib-b5a4b3ead660e7ba0406751fe23209334b3a9b18.tar.gz
xine-lib-b5a4b3ead660e7ba0406751fe23209334b3a9b18.tar.bz2
- removed evil exit() lines, they were meant for debugging purposes only,
of course. - replaced some hard coded values to make coreaudio work with other input formats than 48000/16/2 - coding style and comment cleanups CVS patchset: 6678 CVS date: 2004/06/12 23:13:56
-rw-r--r--src/audio_out/audio_coreaudio_out.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/audio_out/audio_coreaudio_out.c b/src/audio_out/audio_coreaudio_out.c
index 56d59f3bf..59de91cd3 100644
--- a/src/audio_out/audio_coreaudio_out.c
+++ b/src/audio_out/audio_coreaudio_out.c
@@ -120,7 +120,7 @@ static OSStatus ao_coreaudio_render_proc (coreaudio_driver_t *this,
this->buf_readpos += ioData->mBuffers[i].mDataByteSize;
}
- this->last_block_size = req_size;
+ this->last_block_size = req_size;
pthread_mutex_unlock (&this->mutex);
@@ -139,12 +139,20 @@ static int ao_coreaudio_open(ao_driver_t *this_gen, uint32_t bits, uint32_t rate
AudioStreamBasicDescription format;
AudioUnitConnection connection;
ComponentDescription desc;
+
+ switch (mode) {
+ case AO_CAP_MODE_MONO:
+ this->num_channels = 1;
+ break;
+ case AO_CAP_MODE_STEREO:
+ this->num_channels = 2;
+ break;
+ }
- this->sample_rate = rate;
+ this->sample_rate = rate;
this->bits_per_sample = bits;
- this->num_channels = 2;
this->capabilities = AO_CAP_16BITS | AO_CAP_MODE_STEREO | AO_CAP_MIXER_VOL;
- this->bytes_per_frame = 4;
+ this->bytes_per_frame = this->num_channels * (bits / 8);
this->buf_readpos = 0;
this->buf_writepos = 0;
this->last_block_size = 0;
@@ -193,7 +201,7 @@ static int ao_coreaudio_open(ao_driver_t *this_gen, uint32_t bits, uint32_t rate
kAudioUnitScope_Input,
0, &input, sizeof(input));
- /* connect the output unit to the audio output unit */
+ /* connect the converter unit to the audio output unit */
connection.sourceAudioUnit = this->converter_unit;
connection.sourceOutputNumber = 0;
connection.destInputNumber = 0;
@@ -203,16 +211,16 @@ static int ao_coreaudio_open(ao_driver_t *this_gen, uint32_t bits, uint32_t rate
&connection, sizeof(connection));
/* set up the audio format we want to use */
- format.mSampleRate = rate;
+ format.mSampleRate = rate;
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger
| kLinearPCMFormatFlagIsBigEndian
| kLinearPCMFormatFlagIsPacked;
- format.mBytesPerPacket = 4;
+ format.mBitsPerChannel = this->bits_per_sample;
+ format.mChannelsPerFrame = this->num_channels;
+ format.mBytesPerFrame = this->bytes_per_frame;
format.mFramesPerPacket = 1;
- format.mBytesPerFrame = 4;
- format.mChannelsPerFrame = 2;
- format.mBitsPerChannel = bits;
+ format.mBytesPerPacket = format.mBytesPerFrame;
AudioUnitSetProperty (this->converter_unit,
kAudioUnitProperty_StreamFormat,
@@ -224,7 +232,6 @@ static int ao_coreaudio_open(ao_driver_t *this_gen, uint32_t bits, uint32_t rate
if (err) {
xprintf (this->xine, XINE_VERBOSITY_DEBUG,
"audio_coreaudio_out: failed to AudioUnitInitialize(converter_unit)\n");
- exit (1);
return 0;
}
@@ -232,7 +239,6 @@ static int ao_coreaudio_open(ao_driver_t *this_gen, uint32_t bits, uint32_t rate
if (err) {
xprintf (this->xine, XINE_VERBOSITY_DEBUG,
"audio_coreaudio_out: failed to AudioUnitInitialize(au_unit)\n");
- exit (1);
return 0;
}
@@ -240,7 +246,6 @@ static int ao_coreaudio_open(ao_driver_t *this_gen, uint32_t bits, uint32_t rate
if (err) {
xprintf (this->xine, XINE_VERBOSITY_DEBUG,
"audio_coreaudio_out: failed to AudioOutputUnitStart(au_unit)\n");
- exit (1);
return 0;
}