diff --git a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.cpp b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.cpp index 00146e893b..2e0ae6840d 100644 --- a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.cpp +++ b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.cpp @@ -1,7 +1,7 @@ /* * multiaudio replacement media addon for BeOS * - * Copyright (c) 2002, Jerome Duval (jerome.duval@free.fr) + * Copyright (c) 2002, 2003, Jerome Duval (jerome.duval@free.fr) * * All rights reserved. * Redistribution and use in source and binary forms, with or without modification, @@ -254,9 +254,9 @@ status_t MultiAudioDevice::InitDriver() // Set the sample rate // MFI.info_size = sizeof(MFI); - MFI.output.rate = select_multiaudio_rate(MD.output_rates); //B_SR_48000; + MFI.output.rate = select_multiaudio_rate(MD.output_rates); MFI.output.cvsr = 0; - MFI.output.format = select_multiaudio_format(MD.output_formats); //B_FMT_16BIT; + MFI.output.format = select_multiaudio_format(MD.output_formats); MFI.input.rate = MFI.output.rate; MFI.input.cvsr = MFI.output.cvsr; MFI.input.format = MFI.output.format; @@ -270,10 +270,10 @@ status_t MultiAudioDevice::InitDriver() // // Get the buffers // - play_buffer_desc[0] = play_buffer_list0; - play_buffer_desc[1] = play_buffer_list1; - record_buffer_desc[0] = record_buffer_list0; - record_buffer_desc[1] = record_buffer_list1; + for (i = 0; i < NB_BUFFERS; i++) { + play_buffer_desc[i] = &play_buffer_list[i * MAX_CHANNELS]; + record_buffer_desc[i] = &record_buffer_list[i * MAX_CHANNELS]; + } MBL.info_size = sizeof(MBL); MBL.request_playback_buffer_size = 0; //use the default...... MBL.request_playback_buffers = NB_BUFFERS; @@ -282,7 +282,8 @@ status_t MultiAudioDevice::InitDriver() MBL.request_record_buffer_size = 0; //use the default...... MBL.request_record_buffers = NB_BUFFERS; MBL.request_record_channels = num_inputs; - MBL.record_buffers = (buffer_desc **) record_buffer_desc; + MBL.record_buffers = (buffer_desc **) record_buffer_desc; + rval = DRIVER_GET_BUFFERS(&MBL, 0); if (B_OK != rval) @@ -292,34 +293,21 @@ status_t MultiAudioDevice::InitDriver() } for (i = 0; i < MBL.return_playback_buffers; i++) - { - for (int j=0; j < MBL.return_playback_channels; j++) - { - //fPlay[i][j] = (int32 *) MBL.playback_buffers[i][j].base; + for (int j=0; j < MBL.return_playback_channels; j++) { PRINT(("MBL.playback_buffers[%d][%d].base: %p\n", i,j,MBL.playback_buffers[i][j].base)); PRINT(("MBL.playback_buffers[%d][%d].stride: %i\n", i,j,MBL.playback_buffers[i][j].stride)); } - //memset(MBL.playback_buffers[i][0].base, 0, MBL.return_playback_buffer_size * 4 /*samps to bytes*/); - //PRINT(("Play buffers[%d] size : %li zeroed\n",i, MBL.return_playback_buffer_size * 4)); - } for (i = 0; i < MBL.return_record_buffers; i++) - { - for (int j=0; j < MBL.return_record_channels; j++) - { - /*fRecord[i][j] = (int32 *) MBL.record_buffers[i][j].base; - PRINT(("Record buffers[%d][%d]: %p\n",i,j,fRecord[i][j]));*/ + for (int j=0; j < MBL.return_record_channels; j++) { PRINT(("MBL.record_buffers[%d][%d].base: %p\n", i,j,MBL.record_buffers[i][j].base)); PRINT(("MBL.record_buffers[%d][%d].stride: %i\n", i,j,MBL.record_buffers[i][j].stride)); } - //memset(MBL.record_buffers[i][0].base, 0, MBL.return_record_buffer_size * 4 /*samps to bytes*/); - //PRINT(("Record buffers[%d] size : %li zeroed\n",i, MBL.return_record_buffer_size * 4)); - } - + MMCI.info_size = sizeof(MMCI); MMCI.control_count = MAX_CONTROLS; MMCI.controls = MMC; diff --git a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.h b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.h index 7ee89849cb..812523fcd1 100644 --- a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.h +++ b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioDevice.h @@ -1,7 +1,7 @@ /* * multiaudio replacement media addon for BeOS * - * Copyright (c) 2002, Jerome Duval (jerome.duval@free.fr) + * Copyright (c) 2002, 2003, Jerome Duval (jerome.duval@free.fr) * * All rights reserved. * Redistribution and use in source and binary forms, with or without modification, @@ -32,7 +32,7 @@ #define MAX_CONTROLS 128 #define MAX_CHANNELS 32 -#define NB_BUFFERS 2 +#define NB_BUFFERS 32 class MultiAudioDevice { @@ -70,15 +70,10 @@ public: multi_mix_control_info MMCI; multi_mix_control MMC[MAX_CONTROLS]; - - /*int32 *fPlay[NB_BUFFERS][MAX_CHANNELS]; - int32 *fRecord[NB_BUFFERS][MAX_CHANNELS];*/ - - buffer_desc play_buffer_list0[MAX_CHANNELS]; - buffer_desc play_buffer_list1[MAX_CHANNELS]; + + buffer_desc play_buffer_list[NB_BUFFERS * MAX_CHANNELS]; + buffer_desc record_buffer_list[NB_BUFFERS * MAX_CHANNELS]; buffer_desc *play_buffer_desc[NB_BUFFERS]; - buffer_desc record_buffer_list0[MAX_CHANNELS]; - buffer_desc record_buffer_list1[MAX_CHANNELS]; buffer_desc *record_buffer_desc[NB_BUFFERS]; private: diff --git a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp index f395ccb2ad..df8f242c87 100644 --- a/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp +++ b/src/add-ons/media/media-add-ons/multi_audio/MultiAudioNode.cpp @@ -143,7 +143,9 @@ MultiAudioNode::MultiAudioNode(BMediaAddOn *addon, char* name, MultiAudioDevice * (fPreferredFormat.u.raw_audio.format & media_raw_audio_format::B_AUDIO_SIZE_MASK) * fPreferredFormat.u.raw_audio.channel_count; - PRINT_OBJECT(*config); + if(config) { + PRINT_OBJECT(*config); + } fInitCheckStatus = B_OK; } @@ -1499,7 +1501,7 @@ MultiAudioNode::RunThread() && (input->fInput.source != media_source::null || input->fChannelId == 0)) { - //PRINT(("playback_buffer_cycle ok input : %i\n", i)); + //PRINT(("playback_buffer_cycle ok input : %i %d\n", i, MBI.playback_buffer_cycle)); input->fBufferCycle = (MBI.playback_buffer_cycle - 1 + fDevice->MBL.return_playback_buffers) % fDevice->MBL.return_playback_buffers; @@ -1769,7 +1771,7 @@ MultiAudioNode::StartThread() return B_OK; //allocate buffer free semaphore - fBuffer_free = create_sem( NB_BUFFERS - 1, "multi_audio out buffer free" ); + fBuffer_free = create_sem( fDevice->MBL.return_playback_buffers - 1, "multi_audio out buffer free" ); if ( fBuffer_free < B_OK ) { return B_ERROR; @@ -1879,6 +1881,9 @@ MultiAudioNode::GetConfigurationFor(BMessage * into_message) bigtime_t last_change; status_t err; + if(!into_message) + return B_BAD_VALUE; + buffer = malloc(size); for(int32 i=0; iCountParameters(); i++) {