X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Faudioidevice.C;h=3156dab209ab77575e2c9d9de49df660ec3d7eb0;hb=502b6f3b6fd04f6b01c6d70dcb81aa304dd0db1c;hp=6d4e18324c3b08d272cad63f2658dcf80cdbc71a;hpb=49f85559268fc040fe7ba5611cc0520793cf728b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/audioidevice.C b/cinelerra-5.1/cinelerra/audioidevice.C index 6d4e1832..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); } @@ -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 ) {