diff --git a/plugins/linux-v4l2/v4l2-input.c b/plugins/linux-v4l2/v4l2-input.c index 923a3648e04db268e968436c25c1177d6324dc8f..a0d13ada4e3e9d13aafbd3a1716c6d6b8543dbe1 100644 --- a/plugins/linux-v4l2/v4l2-input.c +++ b/plugins/linux-v4l2/v4l2-input.c @@ -551,12 +551,34 @@ static bool format_selected(obs_properties_t *props, obs_property_t *p, if (dev == -1) return false; - obs_property_t *prop = obs_properties_get(props, "resolution"); - v4l2_resolution_list(dev, obs_data_get_int(settings, "pixelformat"), - prop); + int input = (int) obs_data_get_int(settings, "input"); + uint32_t caps = 0; + if (v4l2_get_input_caps(dev, input, &caps) < 0) + return false; + caps &= V4L2_IN_CAP_STD; + + obs_property_t *resolution = obs_properties_get(props, "resolution"); + obs_property_t *framerate = obs_properties_get(props, "framerate"); + obs_property_t *standard = obs_properties_get(props, "standard"); + + obs_property_set_visible(resolution, (!caps) ? true : false); + obs_property_set_visible(framerate, (!caps) ? true : false); + obs_property_set_visible(standard, + (caps & V4L2_IN_CAP_STD) ? true : false); + + if (!caps) { + v4l2_resolution_list(dev, obs_data_get_int( + settings, "pixelformat"), resolution); + } + if (caps & V4L2_IN_CAP_STD) + v4l2_standard_list(dev, standard); + v4l2_close(dev); - obs_property_modified(prop, settings); + if (!caps) + obs_property_modified(resolution, settings); + if (caps & V4L2_IN_CAP_STD) + obs_property_modified(standard, settings); return true; }