From 8bf7ac300529bf148567a10498011bc6976937cc Mon Sep 17 00:00:00 2001 From: Devaev Maxim Date: Fri, 31 May 2019 01:10:53 +0300 Subject: [PATCH] refactoring --- src/device.c | 1 + src/encoder.c | 4 ++++ src/stream.c | 10 ++++------ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/device.c b/src/device.c index a765411..5f87266 100644 --- a/src/device.c +++ b/src/device.c @@ -287,6 +287,7 @@ int device_grab_buffer(struct device_t *dev) { dev->run->hw_buffers[buf_info.index].used = buf_info.bytesused; memcpy(&dev->run->hw_buffers[buf_info.index].buf_info, &buf_info, sizeof(struct v4l2_buffer)); + dev->run->pictures[buf_info.index].grab_time = get_now_monotonic(); return buf_info.index; } diff --git a/src/encoder.c b/src/encoder.c index a33c801..4b552c9 100644 --- a/src/encoder.c +++ b/src/encoder.c @@ -188,6 +188,8 @@ int encoder_compress_buffer(struct encoder_t *encoder, struct device_t *dev, uns assert(encoder->run->type != ENCODER_TYPE_UNKNOWN); + dev->run->pictures[buf_index].encode_begin_time = get_now_monotonic(); + if (encoder->run->type == ENCODER_TYPE_CPU) { cpu_encoder_compress_buffer(dev, buf_index, encoder->run->quality); } else if (encoder->run->type == ENCODER_TYPE_HW) { @@ -201,6 +203,8 @@ int encoder_compress_buffer(struct encoder_t *encoder, struct device_t *dev, uns } # endif + dev->run->pictures[buf_index].encode_end_time = get_now_monotonic(); + return 0; # pragma GCC diagnostic ignored "-Wunused-label" diff --git a/src/stream.c b/src/stream.c index c0f8e1c..d29dda8 100644 --- a/src/stream.c +++ b/src/stream.c @@ -118,7 +118,7 @@ void stream_loop(struct stream_t *stream) { } if (ready_worker == NULL) { - break; + break; // Если произошел сбой сжатия } if (atomic_load(&stream->proc->stop)) { @@ -165,7 +165,6 @@ void stream_loop(struct stream_t *stream) { if ((buf_index = device_grab_buffer(stream->dev)) < 0) { break; } - stream->dev->run->pictures[buf_index].grab_time = now; // Workaround for broken, corrupted frames: // Under low light conditions corrupted frames may get captured. @@ -173,7 +172,7 @@ void stream_loop(struct stream_t *stream) { // For example a VGA (640x480) webcam picture is normally >= 8kByte large, // corrupted frames are smaller. if (stream->dev->run->hw_buffers[buf_index].used < stream->dev->min_frame_size) { - LOG_DEBUG("Dropping too small frame sized %zu bytes, assuming it as broken", + LOG_DEBUG("Dropped too small frame sized %zu bytes, assuming it was broken", stream->dev->run->hw_buffers[buf_index].used); goto pass_frame; } @@ -355,6 +354,7 @@ static long double _stream_get_fluency_delay(struct device_t *dev, struct worker # undef WORKER } + avg_comp_time = sum_comp_time / dev->run->n_workers; // Среднее время работы воркеров min_delay = avg_comp_time / dev->run->n_workers; // Среднее время работы размазывается на N воркеров @@ -418,7 +418,7 @@ static void _stream_init_workers(struct stream_t *stream, struct workers_pool_t A_COND_INIT(&pool->free_workers_cond); for (unsigned number = 0; number < stream->dev->run->n_workers; ++number) { -# define WORKER(_next) pool->workers[number]._next +# define WORKER(_next) pool->workers[number]._next pool->free_workers += 1; @@ -474,11 +474,9 @@ static void *_stream_worker_thread(void *v_worker) { WORKER_GPIO_DEBUG_BUSY; - PICTURE(encode_begin_time) = get_now_monotonic(); if (encoder_compress_buffer(worker->encoder, worker->dev, worker->number, worker->buf_index) < 0) { worker->job_failed = false; } - PICTURE(encode_end_time) = get_now_monotonic(); if (device_release_buffer(worker->dev, worker->buf_index) == 0) { worker->job_start_time = PICTURE(encode_begin_time);