From 993da08c6eec2c3877e3712b5ada6ca7bc5bc752 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Wed, 27 Jun 2012 18:07:06 +0200 Subject: [PATCH] Parameter to specify number of input audio channels --- ultragrid/configure.ac | 4 +-- ultragrid/src/audio/capture/alsa.c | 4 ++- ultragrid/src/audio/capture/coreaudio.c | 3 +- ultragrid/src/audio/capture/jack.c | 13 +++++++-- ultragrid/src/audio/capture/portaudio.c | 16 +++++++---- ultragrid/src/audio/capture/testcard.c | 20 ++++++------- ultragrid/src/host.h | 2 ++ ultragrid/src/main.c | 14 ++++++++- ultragrid/src/video_capture/decklink.cpp | 35 ++++++++++------------- ultragrid/src/video_capture/deltacast.cpp | 14 +++++++-- ultragrid/src/video_capture/dvs.c | 10 ++++--- ultragrid/src/video_capture/quad.c | 18 +++++++++++- ultragrid/src/video_capture/quicktime.c | 4 +++ ultragrid/src/video_capture/testcard.c | 9 +++--- ultragrid/src/video_capture/testcard2.c | 9 +++--- 15 files changed, 115 insertions(+), 60 deletions(-) diff --git a/ultragrid/configure.ac b/ultragrid/configure.ac index db7eaa9e3..44a37aca9 100644 --- a/ultragrid/configure.ac +++ b/ultragrid/configure.ac @@ -246,10 +246,10 @@ then fi video_display_abi_version=2 -video_capture_abi_version=1 +video_capture_abi_version=2 video_compress_abi_version=1 video_decompress_abi_version=2 -audio_capture_abi_version=2 +audio_capture_abi_version=3 audio_playback_abi_version=3 vo_pp_abi_version=1 AC_DEFINE_UNQUOTED([VIDEO_DISPLAY_ABI_VERSION], $video_display_abi_version, [Specifies ABI version for video displays]) diff --git a/ultragrid/src/audio/capture/alsa.c b/ultragrid/src/audio/capture/alsa.c index cc54405de..649819c47 100644 --- a/ultragrid/src/audio/capture/alsa.c +++ b/ultragrid/src/audio/capture/alsa.c @@ -47,6 +47,8 @@ */ #include "config.h" +#include "host.h" + #ifdef HAVE_ALSA #include "audio/audio.h" @@ -85,7 +87,7 @@ void * audio_cap_alsa_init(char *cfg) s->frame.bps = 2; s->frame.sample_rate = 48000; - s->frame.ch_count = 2; + s->frame.ch_count = audio_input_channels; if(cfg && strlen(cfg) > 0) { name = cfg; diff --git a/ultragrid/src/audio/capture/coreaudio.c b/ultragrid/src/audio/capture/coreaudio.c index ba058135a..11bdcb28a 100644 --- a/ultragrid/src/audio/capture/coreaudio.c +++ b/ultragrid/src/audio/capture/coreaudio.c @@ -47,6 +47,7 @@ */ #include "config.h" +#include "host.h" #ifdef HAVE_COREAUDIO @@ -257,7 +258,7 @@ void * audio_cap_ca_init(char *cfg) s->boss_waiting = FALSE; s->data_ready = FALSE; s->frame.bps = 2; - s->frame.ch_count = 2; + s->frame.ch_count = audio_input_channels; double rate; size = sizeof(double); diff --git a/ultragrid/src/audio/capture/jack.c b/ultragrid/src/audio/capture/jack.c index 29ab59e0a..ab2b046f3 100644 --- a/ultragrid/src/audio/capture/jack.c +++ b/ultragrid/src/audio/capture/jack.c @@ -50,7 +50,7 @@ #include "config.h" #endif #include "debug.h" - +#include "host.h" #include "audio/audio.h" #include "audio/utils.h" @@ -186,7 +186,14 @@ void * audio_cap_jack_init(char *cfg) i = 0; while(ports[i]) i++; - s->frame.ch_count = i; + if(i < audio_input_channels) { + fprintf(stderr, "[JACK capture] Requested channel count %d not found (matching pattern %s).\n", + audio_input_channels, cfg); + goto release_client; + + } + + s->frame.ch_count = audio_input_channels; s->frame.bps = 4; s->frame.sample_rate = jack_get_sample_rate (s->client); s->frame.max_size = s->frame.ch_count * s->frame.bps * s->frame.sample_rate; @@ -217,7 +224,7 @@ void * audio_cap_jack_init(char *cfg) int port; char name[32]; - for(port = 0; port < i; port++) { + for(port = 0; port < s->frame.ch_count; port++) { snprintf(name, 32, "capture_%02u", port); s->input_ports[port] = jack_port_register(s->client, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); /* attach ports */ diff --git a/ultragrid/src/audio/capture/portaudio.c b/ultragrid/src/audio/capture/portaudio.c index 3238cdfae..436be0914 100644 --- a/ultragrid/src/audio/capture/portaudio.c +++ b/ultragrid/src/audio/capture/portaudio.c @@ -58,6 +58,7 @@ #include "config.h" #include "config_unix.h" #include "debug.h" +#include "host.h" #include "utils/fs_lock.h" @@ -65,7 +66,6 @@ #define BPS 2 /* paInt16 */ #define SAMPLE_RATE 48000 #define SAMPLES_PER_FRAME 2048 -#define CHANNELS 2 #define SECONDS 5 #define MODULE_NAME "[Portaudio capture] " @@ -241,10 +241,16 @@ void * portaudio_capture_init(char *cfg) return NULL; } - if(CHANNELS <= device_info->maxInputChannels) - inputParameters.channelCount = CHANNELS; - else - inputParameters.channelCount = device_info->maxInputChannels; + if(audio_input_channels <= device_info->maxInputChannels) { + inputParameters.channelCount = audio_input_channels; + } else { + fprintf(stderr, MODULE_NAME "Requested %d input channels, devide offers only %d.\n", + audio_input_channels, + device_info->maxInputChannels); + fs_lock_unlock(s->portaudio_lock); /* safer with multiple threads */ + free(s); + return NULL; + } inputParameters.sampleFormat = paInt16; inputParameters.suggestedLatency = Pa_GetDeviceInfo( inputParameters.device )->defaultHighInputLatency ; inputParameters.hostApiSpecificStreamInfo = NULL; diff --git a/ultragrid/src/audio/capture/testcard.c b/ultragrid/src/audio/capture/testcard.c index 4d703ef28..7b21e758b 100644 --- a/ultragrid/src/audio/capture/testcard.c +++ b/ultragrid/src/audio/capture/testcard.c @@ -57,6 +57,7 @@ #include "config_unix.h" #endif #include "debug.h" +#include "host.h" #include "tv.h" #include @@ -67,10 +68,9 @@ #define AUDIO_SAMPLE_RATE 48000 #define AUDIO_BPS 2 -#define AUDIO_CHANNELS 2 #define BUFFER_SEC 1 #define AUDIO_BUFFER_SIZE (AUDIO_SAMPLE_RATE * AUDIO_BPS * \ - AUDIO_CHANNELS * BUFFER_SEC) + audio_input_channels * BUFFER_SEC) #define CHUNK 128 * 3 // has to be divisor of AUDIO_SAMLE_RATE @@ -109,7 +109,7 @@ void * audio_cap_testcard_init(char *cfg) s = (struct state_audio_capture_testcard *) malloc(sizeof(struct state_audio_capture_testcard)); printf(MODULE_NAME "Generating %d sec tone (%d Hz) / %d sec silence ", BUFFER_SEC, FREQUENCY, BUFFER_SEC); - printf("(channels: %d; bps: %d; sample rate: %d; frames per packet: %d).\n", AUDIO_CHANNELS, + printf("(channels: %d; bps: %d; sample rate: %d; frames per packet: %d).\n", audio_input_channels, AUDIO_BPS, AUDIO_SAMPLE_RATE, CHUNK); s->magic = AUDIO_CAPTURE_TESTCARD_MAGIC; assert(s != 0); @@ -119,17 +119,17 @@ void * audio_cap_testcard_init(char *cfg) s->audio_tone = calloc(1, AUDIO_BUFFER_SIZE /* 1 sec */); short int * data = (short int *) s->audio_tone; - for( i=0; i < AUDIO_BUFFER_SIZE/2; i+=AUDIO_CHANNELS ) + for( i=0; i < AUDIO_BUFFER_SIZE/2; i+=audio_input_channels ) { - for (int channel = 0; channel < AUDIO_CHANNELS; ++channel) - data[i + channel] = (float) sin( ((double)(i/AUDIO_CHANNELS)/((double)AUDIO_SAMPLE_RATE / FREQUENCY)) * M_PI * 2. ) * SHRT_MAX * VOLUME; + for (int channel = 0; channel < audio_input_channels; ++channel) + data[i + channel] = (float) sin( ((double)(i/audio_input_channels)/((double)AUDIO_SAMPLE_RATE / FREQUENCY)) * M_PI * 2. ) * SHRT_MAX * VOLUME; } s->audio.bps = AUDIO_BPS; - s->audio.ch_count = AUDIO_CHANNELS; + s->audio.ch_count = audio_input_channels; s->audio.sample_rate = AUDIO_SAMPLE_RATE; - s->audio.data_len = CHUNK * AUDIO_BPS * AUDIO_CHANNELS; + s->audio.data_len = CHUNK * AUDIO_BPS * audio_input_channels; s->current_sample = SILENCE; s->samples_played = 0; @@ -160,9 +160,9 @@ struct audio_frame *audio_cap_testcard_read(void *state) tv_add_usec(&s->next_audio_time, 1000 * 1000 * CHUNK / 48000); if(s->current_sample == TONE) { - s->audio.data = (char* )(s->audio_tone + s->samples_played * AUDIO_CHANNELS); // it is short so _not_ (* 2) + s->audio.data = (char* )(s->audio_tone + s->samples_played * audio_input_channels); // it is short so _not_ (* 2) } else { - s->audio.data = (char *)(s->audio_silence + s->samples_played * AUDIO_CHANNELS); + s->audio.data = (char *)(s->audio_silence + s->samples_played * audio_input_channels); } s->samples_played += CHUNK; diff --git a/ultragrid/src/host.h b/ultragrid/src/host.h index f41629aaf..dd656aea3 100644 --- a/ultragrid/src/host.h +++ b/ultragrid/src/host.h @@ -61,4 +61,6 @@ extern volatile int should_exit; extern void (*exit_uv)(int status); +extern unsigned int audio_input_channels; + #endif diff --git a/ultragrid/src/main.c b/ultragrid/src/main.c index 17b1c2c85..d167e9a4e 100644 --- a/ultragrid/src/main.c +++ b/ultragrid/src/main.c @@ -99,7 +99,9 @@ #define DEFAULT_AUDIO_FEC "mult:3" #define AUDIO_CHANNEL_MAP (('a' << 8) | 'm') +#define AUDIO_INPUT_CHANNELS (('a' << 8) | 'i') #define AUDIO_SCALE (('a' << 8) | 's') + struct state_uv { int recv_port_number; int send_port_number; @@ -145,6 +147,8 @@ volatile int wait_to_finish = FALSE; volatile int threads_joined = FALSE; static int exit_status = EXIT_SUCCESS; +unsigned int audio_input_channels = 2; + uint32_t RTT = 0; /* this is computed by handle_rr in rtp_callback */ struct video_frame *frame_buffer = NULL; uint32_t hd_color_spc = 0; @@ -250,6 +254,10 @@ static void usage(void) printf("\t \t\tnone - no scaling will be performed\n"); printf("\t \t\n"); printf("\n"); + printf("\t--audio-input-channels \n"); + printf("\t \tHow many of input channels should be captured (default 2).\n"); + printf("\t \t\n"); + printf("\n"); printf("\taddress(es) \tdestination address\n"); printf("\n"); printf("\t \tIf comma-separated list of addresses\n"); @@ -772,8 +780,8 @@ int main(int argc, char *argv[]) char *capture_cfg = NULL; char *display_cfg = NULL; - char *audio_send = NULL; char *audio_recv = NULL; + char *audio_send = NULL; char *jack_cfg = NULL; char *requested_fec = NULL; char *save_ptr = NULL; @@ -819,6 +827,7 @@ int main(int argc, char *argv[]) {"limit-bitrate", required_argument, 0, 'l'}, {"audio-channel-map", required_argument, 0, AUDIO_CHANNEL_MAP}, {"audio-scale", required_argument, 0, AUDIO_SCALE}, + {"audio-input-channels", required_argument, 0, AUDIO_INPUT_CHANNELS}, {0, 0, 0, 0} }; int option_index = 0; @@ -944,6 +953,9 @@ int main(int argc, char *argv[]) case AUDIO_SCALE: audio_scale = optarg; break; + case AUDIO_INPUT_CHANNELS: + audio_input_channels = atoi(optarg); + break; default: usage(); return EXIT_FAIL_USAGE; diff --git a/ultragrid/src/video_capture/decklink.cpp b/ultragrid/src/video_capture/decklink.cpp index 7350c6381..0ac8c10c7 100644 --- a/ultragrid/src/video_capture/decklink.cpp +++ b/ultragrid/src/video_capture/decklink.cpp @@ -127,7 +127,6 @@ struct vidcap_decklink_state { int frames; unsigned int grab_audio:1; /* wheather we process audio or not */ - unsigned int audio_channels; /* count of audio channels used */ unsigned int stereo:1; /* for eg. DeckLink HD Extreme, Quad doesn't set this !!! */ unsigned int use_timecode:1; /* use timecode when grabbing from multiple inputs */ unsigned int autodetect_mode:1; @@ -227,7 +226,7 @@ public: deckLinkInput->EnableAudioInput( bmdAudioSampleRate48kHz, bmdAudioSampleType16bitInteger, - s->audio_channels == 1 ? 2 : s->audio_channels); // BMD isn't able to grab single channel + audio_input_channels == 1 ? 2 : audio_input_channels); // BMD isn't able to grab single channel } //deckLinkInput->SetCallback(s->state[i].delegate); deckLinkInput->StartStreams(); @@ -272,14 +271,14 @@ VideoDelegate::VideoInputFrameArrived (IDeckLinkVideoInputFrame *arrivedFrame, I if(audioPacket) { audioPacket->GetBytes(&audioFrame); - if(s->audio_channels == 1) { // ther are actually 2 channels grabbed - demux_channel(s->audio.data, (char *) audioFrame, 2, audioPacket->GetSampleFrameCount() * s->audio_channels * 2, + if(audio_input_channels == 1) { // ther are actually 2 channels grabbed + demux_channel(s->audio.data, (char *) audioFrame, 2, audioPacket->GetSampleFrameCount() * audio_input_channels * 2, 2, /* channels (originally( */ 0 /* we want first channel */ ); s->audio.data_len = audioPacket->GetSampleFrameCount() * 1 * 2; } else { - s->audio.data_len = audioPacket->GetSampleFrameCount() * s->audio_channels * 2; + s->audio.data_len = audioPacket->GetSampleFrameCount() * audio_input_channels * 2; memcpy(s->audio.data, audioFrame, s->audio.data_len); } } else { @@ -582,15 +581,6 @@ settings_init(void *state, char *fmt) fprintf(stderr, "[DeckLink] Unrecognized connection %s.\n", connection); return 0; } - } else if(strncasecmp(tmp, "audio_channels=", strlen("audio_channels=")) == 0) { - s->audio_channels = atoi(tmp + strlen("connection=")); - if(s->audio_channels != 1 && - s->audio_channels != 2 && - s->audio_channels != 8 && - s->audio_channels != 16) { - fprintf(stderr, "[DeckLink] Decklink cannot grab %d audio channels. " - "Only 1, 2, 8 or 16 are poosible.", s->audio_channels); - } } else { fprintf(stderr, "[DeckLink] Warning, unrecognized trailing options in init string: %s", tmp); } @@ -761,9 +751,6 @@ vidcap_decklink_init(char *fmt, unsigned int flags) gettimeofday(&t0, NULL); - s->audio_channels = 2; // default - stereo - // may be overriden in settings_init - s->stereo = FALSE; s->use_timecode = FALSE; s->autodetect_mode = FALSE; @@ -794,8 +781,8 @@ vidcap_decklink_init(char *fmt, unsigned int flags) } s->audio.bps = 2; s->audio.sample_rate = 48000; - s->audio.ch_count = s->audio_channels; - s->audio.data = (char *) malloc (48000 * s->audio_channels * 2); + s->audio.ch_count = audio_input_channels; + s->audio.data = (char *) malloc (48000 * audio_input_channels * 2); } else { s->grab_audio = FALSE; } @@ -983,10 +970,18 @@ vidcap_decklink_init(char *fmt, unsigned int flags) fprintf(stderr, "[Decklink capture] Unable to set audio input!!! Please check if it is OK. Continuing anyway.\n"); } + if(audio_input_channels != 1 && + audio_input_channels != 2 && + audio_input_channels != 8 && + audio_input_channels != 16) { + fprintf(stderr, "[DeckLink] Decklink cannot grab %d audio channels. " + "Only 1, 2, 8 or 16 are poosible.", audio_input_channels); + goto error; + } deckLinkInput->EnableAudioInput( bmdAudioSampleRate48kHz, bmdAudioSampleType16bitInteger, - s->audio_channels == 1 ? 2 : s->audio_channels); + audio_input_channels == 1 ? 2 : audio_input_channels); } // set Callback which returns frames diff --git a/ultragrid/src/video_capture/deltacast.cpp b/ultragrid/src/video_capture/deltacast.cpp index 1b8d1c7ca..e7561e320 100644 --- a/ultragrid/src/video_capture/deltacast.cpp +++ b/ultragrid/src/video_capture/deltacast.cpp @@ -377,12 +377,21 @@ vidcap_deltacast_init(char *init_fmt, unsigned int flags) } if(flags & DISPLAY_FLAG_AUDIO_EMBEDDED) { + if(audio_input_channels != 1 && + audio_input_channels != 2) { + fprintf(stderr, "[DELTACAST capture] Unable to handle channel count other than 1 or 2.\n"); + goto no_audio; + } s->audio_frame.bps = 3; s->audio_frame.sample_rate = 48000; - s->audio_frame.ch_count = 2; + s->audio_frame.ch_count = audio_input_channels; memset(&s->AudioInfo, 0, sizeof(VHD_AUDIOINFO)); s->pAudioChn = &s->AudioInfo.pAudioGroups[0].pAudioChannels[0]; - s->pAudioChn->Mode = s->AudioInfo.pAudioGroups[0].pAudioChannels[1].Mode=VHD_AM_STEREO; + if(audio_input_channels == 1) { + s->pAudioChn->Mode = s->AudioInfo.pAudioGroups[0].pAudioChannels[1].Mode=VHD_AM_MONO; + } else if(audio_input_channels == 2) { + s->pAudioChn->Mode = s->AudioInfo.pAudioGroups[0].pAudioChannels[1].Mode=VHD_AM_STEREO; + } else abort(); s->pAudioChn->BufferFormat = s->AudioInfo.pAudioGroups[0].pAudioChannels[1].BufferFormat=VHD_AF_24; /* Get the biggest audio frame size */ @@ -408,6 +417,7 @@ vidcap_deltacast_init(char *init_fmt, unsigned int flags) } return s; +no_audio: stream_failed: no_pixfmt: no_format: diff --git a/ultragrid/src/video_capture/dvs.c b/ultragrid/src/video_capture/dvs.c index e3ab4c5ae..d89d50949 100644 --- a/ultragrid/src/video_capture/dvs.c +++ b/ultragrid/src/video_capture/dvs.c @@ -424,13 +424,15 @@ void *vidcap_dvs_init(char *fmt, unsigned int flags) if (res != SV_OK) { goto error; } - /* TODO: figure out real channels number - * for now it suffices stereo */ - res = sv_option(s->sv, SV_OPTION_AUDIOCHANNELS, 1); + if(audio_channel_count != 2) { + fprintf(stderr, "[DVS cap.] Invalid channel count %d. Currently only 2 channels are supported.\n"); + goto error; + } + res = sv_option(s->sv, SV_OPTION_AUDIOCHANNELS, audio_channel_count / 2); // in pairs if (res != SV_OK) { goto error; } - s->audio.ch_count = 2; + s->audio.ch_count = audio_input_channels; sv_query(s->sv, SV_QUERY_AUDIOBITS, 0, &i); s->audio.bps = i / 8; diff --git a/ultragrid/src/video_capture/quad.c b/ultragrid/src/video_capture/quad.c index 05a31fb46..b7681982d 100644 --- a/ultragrid/src/video_capture/quad.c +++ b/ultragrid/src/video_capture/quad.c @@ -329,6 +329,16 @@ static int open_audio(struct vidcap_quad_state *s) { return -1; } + unsigned long int channels; + snprintf (name, sizeof (name), fmt, num, "channels"); + if (util_strtoul (name, &channels) < 0) { + fprintf (stderr, "%s: ", audio_dev); + perror ("unable to get the receiver buffer size"); + return -1; + } + + s->audio.ch_count = channels; + /* Allocate some memory */ /*if ((s->audio.data = (char *)malloc (s->audio_bufsize)) == NULL) { fprintf (stderr, "%s: ", audio_dev); @@ -373,11 +383,17 @@ vidcap_quad_init(char *init_fmt, unsigned int flags) s->audio.bps = QUAD_AUDIO_BPS; s->audio.sample_rate = QUAD_AUDIO_SAMPLE_RATE; - s->audio.ch_count = QUAD_AUDIO_CHANNELS; + //s->audio.ch_count = QUAD_AUDIO_CHANNELS; s->audio.data = (char *) malloc(QUAD_AUDIO_BUFSIZE); s->audio_bytes_read = 0u; if(open_audio(s) != 0) s->grab_audio = FALSE; + if(s->audio.ch_count != audio_input_channels) { + fprintf(stderr, "[Quad] Unable to grab %d channels. Current value provided by driver is %d. " + "You can change this value by writing 2,4,6 or 8 to /sys/class/sdiaudio/sdiaudiotx1/bufsize.\n", + audio_input_channels, s->audio.ch_count); + s->grab_audio = FALSE; + } } else { s->grab_audio = FALSE; } diff --git a/ultragrid/src/video_capture/quicktime.c b/ultragrid/src/video_capture/quicktime.c index 41b23139a..748e7193f 100644 --- a/ultragrid/src/video_capture/quicktime.c +++ b/ultragrid/src/video_capture/quicktime.c @@ -784,6 +784,10 @@ static int qt_open_grabber(struct qt_grabber_state *s, char *fmt) &ch_count, &compression); s->audio.bps = bps; s->audio.ch_count = ch_count; + if(audio_input_channels != ch_count) { + fprintf(stderr, "[QuickTime cap.] Ignoring requested channel count. Capturing %d instead!!!\n", + ch_count); + } if(ret != noErr) { fprintf(stderr, "Quicktime: failed to get audio properties"); diff --git a/ultragrid/src/video_capture/testcard.c b/ultragrid/src/video_capture/testcard.c index b487269ff..84404c912 100644 --- a/ultragrid/src/video_capture/testcard.c +++ b/ultragrid/src/video_capture/testcard.c @@ -55,11 +55,11 @@ #include "config_win32.h" #include "debug.h" +#include "host.h" #include "tv.h" #include "video_codec.h" #include "video_capture.h" #include "video_capture/testcard.h" -#include "host.h" #include "song1.h" #include #include @@ -71,10 +71,9 @@ #define AUDIO_SAMPLE_RATE 48000 #define AUDIO_BPS 2 -#define AUDIO_CHANNELS 2 #define BUFFER_SEC 1 #define AUDIO_BUFFER_SIZE (AUDIO_SAMPLE_RATE * AUDIO_BPS * \ - AUDIO_CHANNELS * BUFFER_SEC) + audio_input_channels * BUFFER_SEC) struct testcard_rect { int x, y, w, h; @@ -342,7 +341,7 @@ static int configure_audio(struct testcard_state *s) SDL_Init(SDL_INIT_AUDIO); if( Mix_OpenAudio( AUDIO_SAMPLE_RATE, AUDIO_S16LSB, - AUDIO_CHANNELS, 4096 ) == -1 ) { + audio_input_channels, 4096 ) == -1 ) { fprintf(stderr,"[testcard] error initalizing sound\n"); return -1; } @@ -364,7 +363,7 @@ static int configure_audio(struct testcard_state *s) s->audio_start = 0; s->audio_end = 0; s->audio.bps = AUDIO_BPS; - s->audio.ch_count = AUDIO_CHANNELS; + s->audio.ch_count = audio_input_channels; s->audio.sample_rate = AUDIO_SAMPLE_RATE; // register grab as a postmix processor diff --git a/ultragrid/src/video_capture/testcard2.c b/ultragrid/src/video_capture/testcard2.c index b6022b28b..22f48f53c 100644 --- a/ultragrid/src/video_capture/testcard2.c +++ b/ultragrid/src/video_capture/testcard2.c @@ -76,10 +76,9 @@ #define AUDIO_SAMPLE_RATE 48000 #define AUDIO_BPS 2 -#define AUDIO_CHANNELS 2 #define BUFFER_SEC 1 #define AUDIO_BUFFER_SIZE (AUDIO_SAMPLE_RATE * AUDIO_BPS * \ - AUDIO_CHANNELS * BUFFER_SEC) + audio_input_channels * BUFFER_SEC) void * vidcap_testcard2_thread(void *args); void rgb2yuv422(unsigned char *in, unsigned int width, unsigned int height); @@ -123,14 +122,14 @@ static int configure_audio(struct testcard_state2 *s) s->audio_tone = calloc(1, AUDIO_BUFFER_SIZE /* 1 sec */); short int * data = (short int *) s->audio_tone; - for( i=0; i < AUDIO_BUFFER_SIZE/2; i+=2 ) + for( i=0; i < (int) AUDIO_BUFFER_SIZE/2; i+=2 ) { data[i] = data[i+1] = (float) sin( ((double)i/(double)200) * M_PI * 2. ) * SHRT_MAX; } s->audio.bps = AUDIO_BPS; - s->audio.ch_count = AUDIO_CHANNELS; + s->audio.ch_count = audio_input_channels; s->audio.sample_rate = AUDIO_SAMPLE_RATE; printf("[testcard2] playing audio\n"); @@ -519,7 +518,7 @@ static void grab_audio(struct testcard_state2 *s) s->audio_remained = (seconds + s->audio_remained) * AUDIO_SAMPLE_RATE - s->audio.data_len; s->audio_remained /= AUDIO_SAMPLE_RATE; - s->audio.data_len *= AUDIO_CHANNELS * AUDIO_BPS; + s->audio.data_len *= audio_input_channels * AUDIO_BPS; s->last_audio_time = curr_time; }