diff options
Diffstat (limited to 'main/http_api.c')
| -rw-r--r-- | main/http_api.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/main/http_api.c b/main/http_api.c index cb6a8b3..85992b1 100644 --- a/main/http_api.c +++ b/main/http_api.c @@ -16,6 +16,7 @@ #include "mdns_service.h" #include "net_eth.h" #include "nvs_config.h" +#include "stream_server.h" #include "state_machine.h" #include "viewport_state.h" @@ -67,6 +68,35 @@ static esp_err_t state_get_handler(httpd_req_t *req) viewport_state_unlock(); + // Most recent closed window of live-stream stats. Populated every + // 30 painted stream frames; zero before the first window rolls. + // last_paint_event_us_low is the low 32 bits of the Scrypted + // host monotonic µs at camera-event arrival, passed verbatim + // through the stream header. Script computes glass-to-glass as + // (now_us_low - last_paint_event_us_low) with wrap. + stream_server_stats_t stream; + stream_server_snapshot_stats(&stream); + cJSON *s = cJSON_CreateObject(); + cJSON_AddNumberToObject(s, "frames", (double)stream.frames); + cJSON_AddNumberToObject(s, "bytes", (double)stream.bytes); + cJSON_AddNumberToObject(s, "window_us", (double)stream.window_us); + cJSON_AddNumberToObject(s, "window_end_us", (double)stream.window_end_us); + cJSON_AddNumberToObject(s, "recv_min_us", (double)stream.recv_min_us); + cJSON_AddNumberToObject(s, "recv_avg_us", (double)stream.recv_avg_us); + cJSON_AddNumberToObject(s, "recv_max_us", (double)stream.recv_max_us); + cJSON_AddNumberToObject(s, "dec_min_us", (double)stream.dec_min_us); + cJSON_AddNumberToObject(s, "dec_avg_us", (double)stream.dec_avg_us); + cJSON_AddNumberToObject(s, "dec_max_us", (double)stream.dec_max_us); + cJSON_AddNumberToObject(s, "paint_min_us", (double)stream.pnt_min_us); + cJSON_AddNumberToObject(s, "paint_avg_us", (double)stream.pnt_avg_us); + cJSON_AddNumberToObject(s, "paint_max_us", (double)stream.pnt_max_us); + cJSON_AddNumberToObject(s, "idle_min_us", (double)stream.idle_min_us); + cJSON_AddNumberToObject(s, "idle_avg_us", (double)stream.idle_avg_us); + cJSON_AddNumberToObject(s, "idle_max_us", (double)stream.idle_max_us); + cJSON_AddNumberToObject(s, "last_paint_event_us_low", + (double)stream.last_paint_event_us_low); + cJSON_AddItemToObject(root, "stream", s); + char *body = cJSON_PrintUnformatted(root); cJSON_Delete(root); if (!body) return ESP_ERR_NO_MEM; |
