diff --git a/src/virtual-output/hflip.cpp b/src/virtual-output/hflip.cpp index 21db399..7f4303f 100644 --- a/src/virtual-output/hflip.cpp +++ b/src/virtual-output/hflip.cpp @@ -21,8 +21,13 @@ bool init_flip_filter(FlipContext* ctx,int width, int height, int format) sprintf(args, "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d", width, height, format, 1, 30, 1, 1); - ret = avfilter_graph_create_filter(&ctx->buffersrc_ctx, buffersrc, "in", - args, NULL, ctx->filter_graph); + + + if ((ret = avfilter_graph_create_filter(&ctx->buffersrc_ctx, buffersrc, "in", + args, NULL, ctx->filter_graph) < 0)){ + avfilter_graph_free(&ctx->filter_graph); + return false; + } buffersink_params = av_buffersink_params_alloc(); buffersink_params->pixel_fmts = pix_fmts; @@ -30,6 +35,11 @@ bool init_flip_filter(FlipContext* ctx,int width, int height, int format) NULL, buffersink_params, ctx->filter_graph); av_free(buffersink_params); + if (ret < 0) { + avfilter_graph_free(&ctx->filter_graph); + return false; + } + outputs->name = av_strdup("in"); outputs->filter_ctx = ctx->buffersrc_ctx; outputs->pad_idx = 0; diff --git a/src/virtual-output/virtual_filter.cpp b/src/virtual-output/virtual_filter.cpp index 7e142f8..436170e 100644 --- a/src/virtual-output/virtual_filter.cpp +++ b/src/virtual-output/virtual_filter.cpp @@ -170,6 +170,7 @@ static bool virtual_filter_start(obs_properties_t *props, obs_property_t *p, AV_PIX_FMT_BGRA, filter->base_width, filter->base_height, interval, filter->delay + 10); } else { + blog(LOG_WARNING, "virtual-filter target size error"); filter->active = false; } @@ -179,6 +180,11 @@ static bool virtual_filter_start(obs_properties_t *props, obs_property_t *p, obs_property_set_visible(stop, true); shared_queue_set_delay(&filter->video_queue, filter->delay); obs_add_main_render_callback(virtual_filter_video, data); + blog(LOG_INFO, "starting virtual-filter on VirtualCam'%d'", + filter->mode + 1); + } else { + blog(LOG_WARNING, "starting virtual-filter failed on VirtualCam'%d'", + filter->mode + 1); } return filter->active; @@ -194,6 +200,7 @@ static bool virtual_filter_stop(obs_properties_t *props, obs_property_t *p, filter->active = false; obs_property_set_visible(p, false); obs_property_set_visible(start, true); + blog(LOG_INFO, "virtual-filter stop"); return true; } diff --git a/src/virtual-output/virtual_output.cpp b/src/virtual-output/virtual_output.cpp index 2dc4dfc..99a3017 100644 --- a/src/virtual-output/virtual_output.cpp +++ b/src/virtual-output/virtual_output.cpp @@ -106,8 +106,11 @@ static bool virtual_output_start(void *data) if (start) { - init_flip_filter(&out_data->flip_ctx, out_data->width, - out_data->height, fmt); + if (!init_flip_filter(&out_data->flip_ctx, out_data->width, + out_data->height, fmt)) { + blog(LOG_WARNING, "avfilter hflip init failed"); + } + output_running = true; shared_queue_set_delay(&out_data->video_queue, out_data->delay); shared_queue_set_delay(&out_data->audio_queue, out_data->delay); @@ -120,11 +123,18 @@ static bool virtual_output_start(void *data) conv.speakers = SPEAKERS_STEREO; obs_output_set_audio_conversion(out_data->output, &conv); } + + blog(LOG_INFO, "starting virtual-output on VirtualCam'%d'", + out_data->video_mode + 1); + } else { output_running = false; virtual_signal_stop("stop", true); shared_queue_write_close(&out_data->video_queue); - shared_queue_write_close(&out_data->audio_queue); + shared_queue_write_close(&out_data->audio_queue); + + blog(LOG_WARNING, "starting virtual-output failed on VirtualCam'%d'", + out_data->video_mode + 1); } return start; @@ -142,6 +152,8 @@ static void virtual_output_stop(void *data, uint64_t ts) virtual_signal_stop("stop", false); output_running = false; audio_running = false; + + blog(LOG_INFO, "virtual-output stop"); } static void virtual_video(void *param, struct video_data *frame) @@ -152,7 +164,7 @@ static void virtual_video(void *param, struct video_data *frame) virtual_out_data *out_data = (virtual_out_data*)param; out_data->last_video_ts = frame->timestamp; pthread_mutex_lock(&out_data->mutex); - if (out_data->hori_flip) { + if (out_data->hori_flip && out_data->flip_ctx.init) { flip_frame(&out_data->flip_ctx, frame->data, frame->linesize); shared_queue_push_video(&out_data->video_queue, (uint32_t*)out_data->flip_ctx.frame_out->linesize, out_data->width,