fixed incorrect framerate and missing maxfps plist settings in raop_handler.h

and added  option to set these in the API through raop_set_display
(renamed from raop_set_display_size)..   Updated uxplay.cpp to include these
new options.   Moved version slightly to UxPlay-1.31

tested: confirmed to work using gstreamer videosink "fpsdisplaysink" to
explicitly show reduction of streaming fps when set below 30 fps.
This commit is contained in:
fduncanh
2021-08-09 18:37:58 -04:00
parent 00865c9023
commit cdcfb88510
6 changed files with 112 additions and 58 deletions

View File

@@ -52,7 +52,8 @@ struct raop_s {
unsigned short display_width;
unsigned short display_height;
unsigned short display_refresh_rate;
unsigned short display_max_fps;
};
struct raop_conn_s {
@@ -319,10 +320,12 @@ raop_init(int max_clients, raop_callbacks_t *callbacks) {
raop->data_lport = 0;
raop->mirror_data_lport = 0;
/* initialize display width, height */
/* initialize display width, height, refresh_rate, max_fps */
raop->display_width = 1920;
raop->display_height = 1080;
raop->display_refresh_rate = 60;
raop->display_max_fps = 30;
return raop;
}
@@ -354,11 +357,17 @@ raop_set_log_level(raop_t *raop, int level) {
logger_set_level(raop->logger, level);
}
void raop_set_display_size(raop_t *raop, unsigned short width, unsigned short height){
assert(raop);
void raop_set_display(raop_t *raop, unsigned short width, unsigned short height,
unsigned short refresh_rate, unsigned short max_fps){
assert(raop);
if (width) raop->display_width = width;
if (height) raop->display_height = height;
if (width) raop->display_width = width;
if (height) raop->display_height = height;
if (refresh_rate) raop->display_refresh_rate = refresh_rate;
if (max_fps) raop->display_max_fps = max_fps;
if (raop->display_max_fps > raop->display_refresh_rate) {
raop->display_max_fps = raop->display_refresh_rate;
}
}
void

View File

@@ -54,7 +54,8 @@ RAOP_API raop_t *raop_init(int max_clients, raop_callbacks_t *callbacks);
RAOP_API void raop_set_log_level(raop_t *raop, int level);
RAOP_API void raop_set_log_callback(raop_t *raop, raop_log_callback_t callback, void *cls);
RAOP_API void raop_set_display_size(raop_t *raop, unsigned short width, unsigned short height);
RAOP_API void raop_set_display(raop_t *raop, unsigned short width, unsigned short height,
unsigned short refresh_rate, unsigned short max_fps);
RAOP_API void raop_set_port(raop_t *raop, unsigned short port);
RAOP_API void raop_set_udp_ports(raop_t *raop, unsigned short port[3]);
RAOP_API void raop_set_tcp_ports(raop_t *raop, unsigned short port[2]);

View File

@@ -60,16 +60,16 @@ raop_handler_info(raop_conn_t *conn,
plist_t audio_formats_node = plist_new_array();
plist_t audio_format_0_node = plist_new_dict();
plist_t audio_format_0_type_node = plist_new_uint(100);
plist_t audio_format_0_audio_input_formats_node = plist_new_uint(67108860);
plist_t audio_format_0_audio_output_formats_node = plist_new_uint(67108860);
plist_t audio_format_0_audio_input_formats_node = plist_new_uint(0x3fffffc);
plist_t audio_format_0_audio_output_formats_node = plist_new_uint(0x3fffffc);
plist_dict_set_item(audio_format_0_node, "type", audio_format_0_type_node);
plist_dict_set_item(audio_format_0_node, "audioInputFormats", audio_format_0_audio_input_formats_node);
plist_dict_set_item(audio_format_0_node, "audioOutputFormats", audio_format_0_audio_output_formats_node);
plist_array_append_item(audio_formats_node, audio_format_0_node);
plist_t audio_format_1_node = plist_new_dict();
plist_t audio_format_1_type_node = plist_new_uint(101);
plist_t audio_format_1_audio_input_formats_node = plist_new_uint(67108860);
plist_t audio_format_1_audio_output_formats_node = plist_new_uint(67108860);
plist_t audio_format_1_audio_input_formats_node = plist_new_uint(0x3fffffc);
plist_t audio_format_1_audio_output_formats_node = plist_new_uint(0x3fffffc);
plist_dict_set_item(audio_format_1_node, "type", audio_format_1_type_node);
plist_dict_set_item(audio_format_1_node, "audioInputFormats", audio_format_1_audio_input_formats_node);
plist_dict_set_item(audio_format_1_node, "audioOutputFormats", audio_format_1_audio_output_formats_node);
@@ -102,20 +102,20 @@ raop_handler_info(raop_conn_t *conn,
plist_t audio_latencies_node = plist_new_array();
plist_t audio_latencies_0_node = plist_new_dict();
plist_t audio_latencies_0_output_latency_micros_node = plist_new_uint(0);
plist_t audio_latencies_0_output_latency_micros_node = plist_new_bool(0);
plist_t audio_latencies_0_type_node = plist_new_uint(100);
plist_t audio_latencies_0_audio_type_node = plist_new_string("default");
plist_t audio_latencies_0_input_latency_micros_node = plist_new_uint(0);
plist_t audio_latencies_0_input_latency_micros_node = plist_new_bool(0);
plist_dict_set_item(audio_latencies_0_node, "outputLatencyMicros", audio_latencies_0_output_latency_micros_node);
plist_dict_set_item(audio_latencies_0_node, "type", audio_latencies_0_type_node);
plist_dict_set_item(audio_latencies_0_node, "audioType", audio_latencies_0_audio_type_node);
plist_dict_set_item(audio_latencies_0_node, "inputLatencyMicros", audio_latencies_0_input_latency_micros_node);
plist_array_append_item(audio_latencies_node, audio_latencies_0_node);
plist_t audio_latencies_1_node = plist_new_dict();
plist_t audio_latencies_1_output_latency_micros_node = plist_new_uint(0);
plist_t audio_latencies_1_output_latency_micros_node = plist_new_bool(0);
plist_t audio_latencies_1_type_node = plist_new_uint(101);
plist_t audio_latencies_1_audio_type_node = plist_new_string("default");
plist_t audio_latencies_1_input_latency_micros_node = plist_new_uint(0);
plist_t audio_latencies_1_input_latency_micros_node = plist_new_bool(0);
plist_dict_set_item(audio_latencies_1_node, "outputLatencyMicros", audio_latencies_1_output_latency_micros_node);
plist_dict_set_item(audio_latencies_1_node, "type", audio_latencies_1_type_node);
plist_dict_set_item(audio_latencies_1_node, "audioType", audio_latencies_1_audio_type_node);
@@ -139,7 +139,8 @@ raop_handler_info(raop_conn_t *conn,
plist_t displays_0_width_pixels_node = plist_new_uint(conn->raop->display_width);
plist_t displays_0_height_pixels_node = plist_new_uint(conn->raop->display_height);
plist_t displays_0_rotation_node = plist_new_bool(0);
plist_t displays_0_refresh_rate_node = plist_new_real(1.0 / 60.0);
plist_t displays_0_refresh_rate_node = plist_new_uint(conn->raop->display_refresh_rate);
plist_t displays_0_max_fps_node = plist_new_uint(conn->raop->display_max_fps);
plist_t displays_0_overscanned_node = plist_new_bool(1);
plist_t displays_0_features = plist_new_uint(14);
@@ -152,6 +153,7 @@ raop_handler_info(raop_conn_t *conn,
plist_dict_set_item(displays_0_node, "heightPixels", displays_0_height_pixels_node);
plist_dict_set_item(displays_0_node, "rotation", displays_0_rotation_node);
plist_dict_set_item(displays_0_node, "refreshRate", displays_0_refresh_rate_node);
plist_dict_set_item(displays_0_node, "maxFPS", displays_0_max_fps_node);
plist_dict_set_item(displays_0_node, "overscanned", displays_0_overscanned_node);
plist_dict_set_item(displays_0_node, "features", displays_0_features);
plist_array_append_item(displays_node, displays_0_node);