show encoder type in /stat

This commit is contained in:
Devaev Maxim
2019-03-03 19:02:20 +03:00
parent 3db57cfa42
commit 08aacdc9af
3 changed files with 26 additions and 6 deletions

View File

@@ -136,6 +136,15 @@ enum encoder_type_t encoder_parse_type(const char *str) {
return ENCODER_TYPE_UNKNOWN; return ENCODER_TYPE_UNKNOWN;
} }
const char *encoder_type_to_string(enum encoder_type_t type) {
for (unsigned index = 0; index < ARRAY_LEN(_ENCODER_TYPES); ++index) {
if (_ENCODER_TYPES[index].type == type) {
return _ENCODER_TYPES[index].name;
}
}
return _ENCODER_TYPES[0].name;
}
void encoder_prepare_live(struct encoder_t *encoder, struct device_t *dev) { void encoder_prepare_live(struct encoder_t *encoder, struct device_t *dev) {
assert(encoder->run->type != ENCODER_TYPE_UNKNOWN); assert(encoder->run->type != ENCODER_TYPE_UNKNOWN);

View File

@@ -72,6 +72,7 @@ struct encoder_t *encoder_init();
void encoder_destroy(struct encoder_t *encoder); void encoder_destroy(struct encoder_t *encoder);
enum encoder_type_t encoder_parse_type(const char *str); enum encoder_type_t encoder_parse_type(const char *str);
const char *encoder_type_to_string(enum encoder_type_t type);
void encoder_prepare(struct encoder_t *encoder, struct device_t *dev); void encoder_prepare(struct encoder_t *encoder, struct device_t *dev);
void encoder_prepare_live(struct encoder_t *encoder, struct device_t *dev); void encoder_prepare_live(struct encoder_t *encoder, struct device_t *dev);

View File

@@ -257,22 +257,28 @@ static void _http_callback_root(struct evhttp_request *request, UNUSED void *arg
static void _http_callback_state(struct evhttp_request *request, void *v_server) { static void _http_callback_state(struct evhttp_request *request, void *v_server) {
struct http_server_t *server = (struct http_server_t *)v_server; struct http_server_t *server = (struct http_server_t *)v_server;
struct evbuffer *buf; struct evbuffer *buf;
enum encoder_type_t encoder_run_type;
unsigned encoder_run_quality;
PROCESS_HEAD_REQUEST; PROCESS_HEAD_REQUEST;
A_PTHREAD_M_LOCK(&server->run->stream->encoder->run->mutex); # define ENCODER(_next) server->run->stream->encoder->_next
enum encoder_type_t encoder_run_type = server->run->stream->encoder->run->type;
unsigned encoder_run_quality = server->run->stream->encoder->run->quality; A_PTHREAD_M_LOCK(&ENCODER(run->mutex));
A_PTHREAD_M_UNLOCK(&server->run->stream->encoder->run->mutex); encoder_run_type = ENCODER(run->type);
encoder_run_quality = ENCODER(run->quality);
A_PTHREAD_M_UNLOCK(&ENCODER(run->mutex));
assert((buf = evbuffer_new())); assert((buf = evbuffer_new()));
assert(evbuffer_add_printf(buf, assert(evbuffer_add_printf(buf,
"{\"ok\": true, \"result\": {" "{\"ok\": true, \"result\": {"
" \"encoder\": {\"fallback\": %s, \"quality\": %u}," " \"encoder\": {\"type\": \"%s\", \"fallback\": %s, \"quality\": %u},"
" \"source\": {\"resolution\": {\"width\": %u, \"height\": %u}," " \"source\": {\"resolution\": {\"width\": %u, \"height\": %u},"
" \"online\": %s, \"desired_fps\": %u, \"captured_fps\": %u}," " \"online\": %s, \"desired_fps\": %u, \"captured_fps\": %u},"
" \"stream\": {\"queued_fps\": %u, \"clients\": %u, \"clients_stat\": {", " \"stream\": {\"queued_fps\": %u, \"clients\": %u, \"clients_stat\": {",
bool_to_string(server->run->stream->encoder->type != encoder_run_type), encoder_type_to_string(encoder_run_type),
bool_to_string(ENCODER(type) != encoder_run_type),
encoder_run_quality, encoder_run_quality,
(server->fake_width ? server->fake_width : server->run->exposed->width), (server->fake_width ? server->fake_width : server->run->exposed->width),
(server->fake_height ? server->fake_height : server->run->exposed->height), (server->fake_height ? server->fake_height : server->run->exposed->height),
@@ -282,6 +288,9 @@ static void _http_callback_state(struct evhttp_request *request, void *v_server)
server->run->exposed->queued_fps, server->run->exposed->queued_fps,
server->run->stream_clients_count server->run->stream_clients_count
)); ));
# undef ENCODER
for (struct stream_client_t * client = server->run->stream_clients; client != NULL; client = client->next) { for (struct stream_client_t * client = server->run->stream_clients; client != NULL; client = client->next) {
assert(evbuffer_add_printf(buf, assert(evbuffer_add_printf(buf,
"\"%s\": {\"fps\": %u, \"extra_headers\": %s, \"advance_headers\": %s, \"dual_final_frames\": %s}%s", "\"%s\": {\"fps\": %u, \"extra_headers\": %s, \"advance_headers\": %s, \"dual_final_frames\": %s}%s",
@@ -293,6 +302,7 @@ static void _http_callback_state(struct evhttp_request *request, void *v_server)
(client->next ? ", " : "") (client->next ? ", " : "")
)); ));
} }
assert(evbuffer_add_printf(buf, "}}}}")); assert(evbuffer_add_printf(buf, "}}}}"));
ADD_HEADER("Content-Type", "application/json"); ADD_HEADER("Content-Type", "application/json");