Просмотр исходного кода

rtmp-services: Add specifiable max cx/cy/fps in json

jp9000 5 лет назад
Родитель
Сommit
000806fe81
1 измененных файлов с 31 добавлено и 3 удалено
  1. 31 3
      plugins/rtmp-services/rtmp-common.c

+ 31 - 3
plugins/rtmp-services/rtmp-common.c

@@ -16,6 +16,9 @@ struct rtmp_common {
 	char *key;
 
 	char *output;
+	int max_cx;
+	int max_cy;
+	int max_fps;
 
 	bool supports_additional_audio_track;
 };
@@ -31,6 +34,7 @@ static inline json_t *find_service(json_t *root, const char *name,
 				   const char **p_new_name);
 static inline bool get_bool_val(json_t *service, const char *key);
 static inline const char *get_string_val(json_t *service, const char *key);
+static inline int get_int_val(json_t *service, const char *key);
 
 extern void twitch_ingests_refresh(int seconds);
 
@@ -67,6 +71,17 @@ static void ensure_valid_url(struct rtmp_common *service, json_t *json,
 	}
 }
 
+static void update_recommendations(struct rtmp_common *service, json_t *rec)
+{
+	const char *out = get_string_val(rec, "output");
+	if (out)
+		service->output = bstrdup(out);
+
+	service->max_cx = get_int_val(rec, "max width");
+	service->max_cy = get_int_val(rec, "max height");
+	service->max_fps = get_int_val(rec, "max fps");
+}
+
 static void rtmp_common_update(void *data, obs_data_t *settings)
 {
 	struct rtmp_common *service = data;
@@ -81,6 +96,9 @@ static void rtmp_common_update(void *data, obs_data_t *settings)
 	service->key = bstrdup(obs_data_get_string(settings, "key"));
 	service->supports_additional_audio_track = false;
 	service->output = NULL;
+	service->max_cx = 0;
+	service->max_cy = 0;
+	service->max_fps = 0;
 
 	json_t *root = open_services_file();
 	if (root) {
@@ -95,9 +113,7 @@ static void rtmp_common_update(void *data, obs_data_t *settings)
 		if (serv) {
 			json_t *rec = json_object_get(serv, "recommended");
 			if (json_is_object(rec)) {
-				const char *out = get_string_val(rec, "output");
-				if (out)
-					service->output = bstrdup(out);
+				update_recommendations(service, rec);
 			}
 
 			service->supports_additional_audio_track = get_bool_val(
@@ -663,6 +679,17 @@ static bool supports_multitrack(void *data)
 	return service->supports_additional_audio_track;
 }
 
+static void rtmp_common_get_max_res_fps(void *data, int *cx, int *cy, int *fps)
+{
+	struct rtmp_common *service = data;
+	if (cx)
+		*cx = service->max_cx;
+	if (cy)
+		*cy = service->max_cy;
+	if (fps)
+		*fps = service->max_fps;
+}
+
 struct obs_service_info rtmp_common_service = {
 	.id = "rtmp_common",
 	.get_name = rtmp_common_getname,
@@ -674,4 +701,5 @@ struct obs_service_info rtmp_common_service = {
 	.get_key = rtmp_common_key,
 	.apply_encoder_settings = rtmp_common_apply_settings,
 	.get_output_type = rtmp_common_get_output_type,
+	.get_max_res_fps = rtmp_common_get_max_res_fps,
 };