diff --git a/dxt_compress/dxt_encoder.c b/dxt_compress/dxt_encoder.c index f0313fd7d..45e806c47 100644 --- a/dxt_compress/dxt_encoder.c +++ b/dxt_compress/dxt_encoder.c @@ -97,7 +97,8 @@ int dxt_prepare_yuv422_shader(struct dxt_encoder *encoder) { glUseProgramObjectARB(encoder->yuv422_to_444_program); glUniform1i(glGetUniformLocation(encoder->yuv422_to_444_program, "image"), 0); - glUniform2f(glGetUniformLocation(encoder->yuv422_to_444_program, "imageSize"), encoder->width, encoder->height); + glUniform1f(glGetUniformLocation(encoder->yuv422_to_444_program, "imageWidth"), + (GLfloat) encoder->width); // Create fbo glGenFramebuffersEXT(1, &encoder->fbo444_id); diff --git a/dxt_compress/yuv422_to_yuv444.glsl b/dxt_compress/yuv422_to_yuv444.glsl index 6eb3c0a2f..95bbbab12 100644 --- a/dxt_compress/yuv422_to_yuv444.glsl +++ b/dxt_compress/yuv422_to_yuv444.glsl @@ -6,12 +6,12 @@ in vec4 TEX0; uniform sampler2D image; -uniform vec2 imageSize; +uniform float imageWidth; out vec4 color; void main() { color.rgba = texture(image, TEX0.xy).grba; // store Y0UVY1 ro rgba - if(TEX0.x * imageSize.x / 2 - floor(TEX0.x * imageSize.x / 2) > 0.25) + if(TEX0.x * imageWidth / 2.0f - floor(TEX0.x * imageWidth / 2.0f) > 0.5f) // 'odd' pixel color.r = color.a; // use Y1 instead of Y0 } diff --git a/ultragrid/src/audio/audio.c b/ultragrid/src/audio/audio.c index 81a632af7..c9054db45 100644 --- a/ultragrid/src/audio/audio.c +++ b/ultragrid/src/audio/audio.c @@ -176,7 +176,10 @@ void print_audio_devices(enum audio_device_kind kind) #endif } -struct state_audio * audio_cfg_init(char *addrs[], char *send_cfg, char *recv_cfg, char *jack_cfg) +/** + * take care that addrs can also be comma-separated list of addresses ! + */ +struct state_audio * audio_cfg_init(char *addrs, char *send_cfg, char *recv_cfg, char *jack_cfg) { struct state_audio *s; char *tmp, *unused; @@ -202,7 +205,7 @@ struct state_audio * audio_cfg_init(char *addrs[], char *send_cfg, char *recv_cf gettimeofday(&s->start_time, NULL); - tmp = strdup(addrs[0]); + tmp = strdup(addrs); s->audio_participants = pdb_init(); addr = strtok_r(tmp, ",", &unused); if ((s->audio_network_device = diff --git a/ultragrid/src/audio/audio.h b/ultragrid/src/audio/audio.h index e25e97099..faa4bc932 100644 --- a/ultragrid/src/audio/audio.h +++ b/ultragrid/src/audio/audio.h @@ -80,7 +80,7 @@ typedef struct audio_frame } audio_frame; -struct state_audio * audio_cfg_init(char *addrs[], char *send_cfg, char *recv_cfg, char *jack_cfg); +struct state_audio * audio_cfg_init(char *addrs, char *send_cfg, char *recv_cfg, char *jack_cfg); void audio_done(struct state_audio *s); void audio_join(struct state_audio *s); diff --git a/ultragrid/src/main.c b/ultragrid/src/main.c index f8e5460a5..80e1ef5a0 100644 --- a/ultragrid/src/main.c +++ b/ultragrid/src/main.c @@ -147,7 +147,7 @@ static void usage(void) { /* TODO -c -p -b are deprecated options */ printf("Usage: uv [-d ] [-g ] [-t ] [-g ]\n"); - printf(" [-m ] [-r [-s ] [-c] [-i] address(es)\n\n"); + printf(" [-m ] [-r ] [-s ] [-c] [-i] address(es)\n\n"); printf ("\t-d \tselect display device, use '-d help' to get\n"); printf("\t \tlist of supported devices\n"); @@ -193,7 +193,7 @@ static struct display *initialize_video_display(const char *requested_display, { struct display *d; display_type_t *dt; - display_id_t id; + display_id_t id = 0; int i; if(!strcmp(requested_display, "none")) @@ -249,7 +249,7 @@ static struct vidcap *initialize_video_capture(const char *requested_capture, char *fmt, unsigned int flags) { struct vidcap_type *vt; - vidcap_id_t id; + vidcap_id_t id = 0; int i; if(!strcmp(requested_capture, "none")) @@ -539,6 +539,8 @@ int main(int argc, char *argv[]) #ifdef HAVE_SCHED_SETSCHEDULER struct sched_param sp; #endif + char *network_device = NULL; + char *capture_cfg = NULL; char *display_cfg = NULL; char *audio_send = NULL; @@ -546,7 +548,7 @@ int main(int argc, char *argv[]) char *jack_cfg = NULL; struct state_uv *uv; - char *compress_options; + char *compress_options = NULL; int ch; int prev_option_set = 0; @@ -554,6 +556,11 @@ int main(int argc, char *argv[]) unsigned vidcap_flags = 0, display_flags = 0; + if (argc == 1) { + usage(); + return EXIT_FAIL_USAGE; + } + uv_argc = argc; uv_argv = argv; @@ -585,6 +592,7 @@ int main(int argc, char *argv[]) uv->requested_mtu = 0; uv->use_ihdtv_protocol = 0; uv->participants = NULL; + uv->tx = NULL; perf_init(); perf_record(UVP_INIT, 0); @@ -679,21 +687,25 @@ int main(int argc, char *argv[]) argc -= optind; argv += optind; - uv->audio = audio_cfg_init (&argv[0], audio_send, audio_recv, jack_cfg); - if(audio_does_send_sdi(uv->audio)) - vidcap_flags |= VIDCAP_FLAG_ENABLE_AUDIO; - if(audio_does_receive_sdi(uv->audio)) - display_flags |= DISPLAY_FLAG_ENABLE_AUDIO; if (uv->use_ihdtv_protocol) { if ((argc != 0) && (argc != 1) && (argc != 2)) { usage(); return EXIT_FAIL_USAGE; } - } else if (argc != 1) { - usage(); - return EXIT_FAIL_USAGE; + } else { + if (argc == 0) { + network_device = "localhost"; + } else { + network_device = (char *) argv[0]; + } } + + uv->audio = audio_cfg_init (network_device, audio_send, audio_recv, jack_cfg); + if(audio_does_send_sdi(uv->audio)) + vidcap_flags |= VIDCAP_FLAG_ENABLE_AUDIO; + if(audio_does_receive_sdi(uv->audio)) + display_flags |= DISPLAY_FLAG_ENABLE_AUDIO; printf("%s\n", ULTRAGRID_VERSION); printf("Display device: %s\n", uv->requested_display); @@ -845,7 +857,7 @@ int main(int argc, char *argv[]) } else { if ((uv->network_devices = - initialize_network(argv[0], uv->participants)) == NULL) { + initialize_network(network_device, uv->participants)) == NULL) { printf("Unable to open network\n"); return EXIT_FAIL_NETWORK; } else {