X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Faudioidevice.C;h=3156dab209ab77575e2c9d9de49df660ec3d7eb0;hp=7cd858be603ce510330e2f5e57b50e28329bd611;hb=a19a685a46ddc630010788707d9e5b9d2342af46;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd diff --git a/cinelerra-5.1/cinelerra/audioidevice.C b/cinelerra-5.1/cinelerra/audioidevice.C index 7cd858be..3156dab2 100644 --- a/cinelerra-5.1/cinelerra/audioidevice.C +++ b/cinelerra-5.1/cinelerra/audioidevice.C @@ -2,21 +2,21 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #include "audiodevice.h" @@ -42,9 +42,9 @@ #define GET_8BIT(i) ((double)(buffer[(i)])) #define GET_16BIT(i) ((double)(*(int16_t*)&buffer[(i)])) -#define GET_24BIT(i) (zi=(i), ((zi&1) ? \ - ((double)((*(uint8_t*)&buffer[zi]) | (*(int16_t*)&buffer[zi+1] << 8))) : \ - ((double)((*(uint16_t*)&buffer[zi]) | (*(int8_t*)&buffer[zi+2] << 16))))) +#define GET_24BIT(i) ((i&1) ? \ + ((double)((*(uint8_t*)&buffer[i]) | (*(int16_t*)&buffer[i+1] << 8))) : \ + ((double)((*(uint16_t*)&buffer[i]) | (*(int8_t*)&buffer[i+2] << 16)))) #define GET_32BIT(i) ((double)(*(int32_t *)&buffer[(i)])) #define GET_8BITS(j,k) { double sample = gain*GET_8BIT(k); STORE(j); } @@ -103,7 +103,6 @@ int AudioDevice::read_buffer(Samples **data, int channels, int xfr_samples = xfr_size / frame_size; for( int ich=0; ichget_data() + input_offset; if( map51_2 ) { @@ -200,6 +199,7 @@ while( is_recording ) { else { --input_buffer_count; printf("AudioDevice::run_input: buffer overflow\n"); + result = 1; } ibfr = &input[input_buffer_in]; ibfr->size = 0; @@ -208,7 +208,7 @@ while( is_recording ) { buffer_lock->unlock(); polling_lock->unlock(); } - else { + if( result ) { perror("AudioDevice::run_input"); usleep(250000); } @@ -219,7 +219,7 @@ void AudioDevice::end_input() { is_recording = 0; polling_lock->unlock(); - buffer_lock->unlock(); + buffer_lock->reset(); } int AudioDevice::reset_input() @@ -302,7 +302,7 @@ void AudioDevice::monitor_buffer(Samples **data, int channels, delete lowlevel_out; lowlevel_out = 0; } - int ret = open_output(out_config, + int ret = open_output(out_config, in_samplerate, in_samples, channels, in_realtime ); monitor_open = !ret ? 1 : 0; if( monitor_open ) {