refactoring

This commit is contained in:
Devaev Maxim
2019-05-31 01:10:53 +03:00
parent 6aebd7167e
commit 8bf7ac3005
3 changed files with 9 additions and 6 deletions

View File

@@ -287,6 +287,7 @@ int device_grab_buffer(struct device_t *dev) {
dev->run->hw_buffers[buf_info.index].used = buf_info.bytesused; 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)); 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; return buf_info.index;
} }

View File

@@ -188,6 +188,8 @@ int encoder_compress_buffer(struct encoder_t *encoder, struct device_t *dev, uns
assert(encoder->run->type != ENCODER_TYPE_UNKNOWN); 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) { if (encoder->run->type == ENCODER_TYPE_CPU) {
cpu_encoder_compress_buffer(dev, buf_index, encoder->run->quality); cpu_encoder_compress_buffer(dev, buf_index, encoder->run->quality);
} else if (encoder->run->type == ENCODER_TYPE_HW) { } 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 # endif
dev->run->pictures[buf_index].encode_end_time = get_now_monotonic();
return 0; return 0;
# pragma GCC diagnostic ignored "-Wunused-label" # pragma GCC diagnostic ignored "-Wunused-label"

View File

@@ -118,7 +118,7 @@ void stream_loop(struct stream_t *stream) {
} }
if (ready_worker == NULL) { if (ready_worker == NULL) {
break; break; // Если произошел сбой сжатия
} }
if (atomic_load(&stream->proc->stop)) { 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) { if ((buf_index = device_grab_buffer(stream->dev)) < 0) {
break; break;
} }
stream->dev->run->pictures[buf_index].grab_time = now;
// Workaround for broken, corrupted frames: // Workaround for broken, corrupted frames:
// Under low light conditions corrupted frames may get captured. // 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, // For example a VGA (640x480) webcam picture is normally >= 8kByte large,
// corrupted frames are smaller. // corrupted frames are smaller.
if (stream->dev->run->hw_buffers[buf_index].used < stream->dev->min_frame_size) { 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); stream->dev->run->hw_buffers[buf_index].used);
goto pass_frame; goto pass_frame;
} }
@@ -355,6 +354,7 @@ static long double _stream_get_fluency_delay(struct device_t *dev, struct worker
# undef WORKER # undef WORKER
} }
avg_comp_time = sum_comp_time / dev->run->n_workers; // Среднее время работы воркеров avg_comp_time = sum_comp_time / dev->run->n_workers; // Среднее время работы воркеров
min_delay = avg_comp_time / dev->run->n_workers; // Среднее время работы размазывается на N воркеров 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); A_COND_INIT(&pool->free_workers_cond);
for (unsigned number = 0; number < stream->dev->run->n_workers; ++number) { 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; pool->free_workers += 1;
@@ -474,11 +474,9 @@ static void *_stream_worker_thread(void *v_worker) {
WORKER_GPIO_DEBUG_BUSY; 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) { if (encoder_compress_buffer(worker->encoder, worker->dev, worker->number, worker->buf_index) < 0) {
worker->job_failed = false; worker->job_failed = false;
} }
PICTURE(encode_end_time) = get_now_monotonic();
if (device_release_buffer(worker->dev, worker->buf_index) == 0) { if (device_release_buffer(worker->dev, worker->buf_index) == 0) {
worker->job_start_time = PICTURE(encode_begin_time); worker->job_start_time = PICTURE(encode_begin_time);