obs_display_t obs_display_create(struct gs_init_data *graphics_data) { struct obs_display *display = bzalloc(sizeof(struct obs_display)); if (!obs_display_init(display, graphics_data)) { obs_display_destroy(display); display = NULL; } return display; }
static int obs_init_video(struct obs_video_info *ovi) { struct obs_core_video *video = &obs->video; struct video_output_info vi; int errorcode; make_video_info(&vi, ovi); video->base_width = ovi->base_width; video->base_height = ovi->base_height; video->output_width = ovi->output_width; video->output_height = ovi->output_height; video->gpu_conversion = ovi->gpu_conversion; errorcode = video_output_open(&video->video, &vi); if (errorcode != VIDEO_OUTPUT_SUCCESS) { if (errorcode == VIDEO_OUTPUT_INVALIDPARAM) { blog(LOG_ERROR, "Invalid video parameters specified"); return OBS_VIDEO_INVALID_PARAM; } else { blog(LOG_ERROR, "Could not open video output"); } return OBS_VIDEO_FAIL; } if (!obs_display_init(&video->main_display, NULL)) return OBS_VIDEO_FAIL; video->main_display.cx = ovi->window_width; video->main_display.cy = ovi->window_height; gs_enter_context(video->graphics); if (ovi->gpu_conversion && !obs_init_gpu_conversion(ovi)) return OBS_VIDEO_FAIL; if (!obs_init_textures(ovi)) return OBS_VIDEO_FAIL; gs_leave_context(); errorcode = pthread_create(&video->video_thread, NULL, obs_video_thread, obs); if (errorcode != 0) return OBS_VIDEO_FAIL; video->thread_initialized = true; return OBS_VIDEO_SUCCESS; }
obs_display_t *obs_display_create(const struct gs_init_data *graphics_data) { struct obs_display *display = bzalloc(sizeof(struct obs_display)); gs_enter_context(obs->video.graphics); if (!obs_display_init(display, graphics_data)) { obs_display_destroy(display); display = NULL; } else { pthread_mutex_lock(&obs->data.displays_mutex); display->prev_next = &obs->data.first_display; display->next = obs->data.first_display; obs->data.first_display = display; if (display->next) display->next->prev_next = &display->next; pthread_mutex_unlock(&obs->data.displays_mutex); } gs_leave_context(); return display; }