mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-16 20:43:42 +00:00
refactoring
This commit is contained in:
@@ -84,6 +84,21 @@ static inline void frame_copy_meta(const frame_s *src, frame_s *dest) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
static inline void frame_encoding_begin(const frame_s *src, frame_s *dest, unsigned format) {
|
||||||
|
assert(src->used > 0);
|
||||||
|
frame_copy_meta(src, dest);
|
||||||
|
dest->encode_begin_ts = get_now_monotonic();
|
||||||
|
dest->format = format;
|
||||||
|
dest->stride = 0;
|
||||||
|
dest->used = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void frame_encoding_end(frame_s *dest) {
|
||||||
|
assert(dest->used > 0);
|
||||||
|
dest->encode_end_ts = get_now_monotonic();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
frame_s *frame_init(void);
|
frame_s *frame_init(void);
|
||||||
void frame_destroy(frame_s *frame);
|
void frame_destroy(frame_s *frame);
|
||||||
|
|
||||||
|
|||||||
@@ -204,13 +204,6 @@ static bool _worker_run_job(worker_s *wr) {
|
|||||||
LOG_DEBUG("Worker %s compressing JPEG from buffer index=%u ...", wr->name, job->hw->buf.index);
|
LOG_DEBUG("Worker %s compressing JPEG from buffer index=%u ...", wr->name, job->hw->buf.index);
|
||||||
|
|
||||||
assert(ER(type) != ENCODER_TYPE_UNKNOWN);
|
assert(ER(type) != ENCODER_TYPE_UNKNOWN);
|
||||||
assert(src->used > 0);
|
|
||||||
|
|
||||||
frame_copy_meta(src, dest);
|
|
||||||
dest->format = V4L2_PIX_FMT_JPEG;
|
|
||||||
dest->stride = 0;
|
|
||||||
dest->encode_begin_ts = get_now_monotonic();
|
|
||||||
dest->used = 0;
|
|
||||||
|
|
||||||
if (ER(type) == ENCODER_TYPE_CPU) {
|
if (ER(type) == ENCODER_TYPE_CPU) {
|
||||||
LOG_VERBOSE("Compressing buffer using CPU");
|
LOG_VERBOSE("Compressing buffer using CPU");
|
||||||
@@ -234,7 +227,6 @@ static bool _worker_run_job(worker_s *wr) {
|
|||||||
usleep(5000); // Просто чтобы работала логика desired_fps
|
usleep(5000); // Просто чтобы работала логика desired_fps
|
||||||
}
|
}
|
||||||
|
|
||||||
dest->encode_end_ts = get_now_monotonic();
|
|
||||||
LOG_VERBOSE("Compressed new JPEG: size=%zu, time=%0.3Lf, worker=%s, buffer=%u",
|
LOG_VERBOSE("Compressed new JPEG: size=%zu, time=%0.3Lf, worker=%s, buffer=%u",
|
||||||
job->dest->used,
|
job->dest->used,
|
||||||
job->dest->encode_end_ts - job->dest->encode_begin_ts,
|
job->dest->encode_end_ts - job->dest->encode_begin_ts,
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ static void _jpeg_term_destination(j_compress_ptr jpeg);
|
|||||||
void cpu_encoder_compress(const frame_s *src, frame_s *dest, unsigned quality) {
|
void cpu_encoder_compress(const frame_s *src, frame_s *dest, unsigned quality) {
|
||||||
// This function based on compress_image_to_jpeg() from mjpg-streamer
|
// This function based on compress_image_to_jpeg() from mjpg-streamer
|
||||||
|
|
||||||
|
frame_encoding_begin(src, dest, V4L2_PIX_FMT_JPEG);
|
||||||
|
|
||||||
struct jpeg_compress_struct jpeg;
|
struct jpeg_compress_struct jpeg;
|
||||||
struct jpeg_error_mgr jpeg_error;
|
struct jpeg_error_mgr jpeg_error;
|
||||||
|
|
||||||
@@ -85,7 +87,7 @@ void cpu_encoder_compress(const frame_s *src, frame_s *dest, unsigned quality) {
|
|||||||
jpeg_finish_compress(&jpeg);
|
jpeg_finish_compress(&jpeg);
|
||||||
jpeg_destroy_compress(&jpeg);
|
jpeg_destroy_compress(&jpeg);
|
||||||
|
|
||||||
assert(dest->used > 0);
|
frame_encoding_end(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _jpeg_set_dest_frame(j_compress_ptr jpeg, frame_s *frame) {
|
static void _jpeg_set_dest_frame(j_compress_ptr jpeg, frame_s *frame) {
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ void hw_encoder_compress(const frame_s *src, frame_s *dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _copy_plus_huffman(const frame_s *src, frame_s *dest) {
|
void _copy_plus_huffman(const frame_s *src, frame_s *dest) {
|
||||||
|
frame_encoding_begin(src, dest, V4L2_PIX_FMT_JPEG);
|
||||||
|
|
||||||
if (!_is_huffman(src->data)) {
|
if (!_is_huffman(src->data)) {
|
||||||
const uint8_t *src_ptr = src->data;
|
const uint8_t *src_ptr = src->data;
|
||||||
const uint8_t *src_end = src->data + src->used;
|
const uint8_t *src_end = src->data + src->used;
|
||||||
@@ -55,9 +57,12 @@ void _copy_plus_huffman(const frame_s *src, frame_s *dest) {
|
|||||||
frame_set_data(dest, src->data, paste);
|
frame_set_data(dest, src->data, paste);
|
||||||
frame_append_data(dest, HUFFMAN_TABLE, sizeof(HUFFMAN_TABLE));
|
frame_append_data(dest, HUFFMAN_TABLE, sizeof(HUFFMAN_TABLE));
|
||||||
frame_append_data(dest, src_ptr, src->used - paste);
|
frame_append_data(dest, src_ptr, src->used - paste);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
frame_set_data(dest, src->data, src->used);
|
frame_set_data(dest, src->data, src->used);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frame_encoding_end(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool _is_huffman(const uint8_t *data) {
|
static bool _is_huffman(const uint8_t *data) {
|
||||||
|
|||||||
@@ -321,10 +321,7 @@ int m2m_encoder_compress(m2m_encoder_s *enc, const frame_s *src, frame_s *dest,
|
|||||||
assert(enc->stride == src->stride);
|
assert(enc->stride == src->stride);
|
||||||
assert(enc->dma == (src->dma_fd >= 0));
|
assert(enc->dma == (src->dma_fd >= 0));
|
||||||
|
|
||||||
frame_copy_meta(src, dest);
|
frame_encoding_begin(src, dest, (enc->output_format == V4L2_PIX_FMT_MJPEG ? V4L2_PIX_FMT_JPEG : enc->output_format));
|
||||||
dest->encode_begin_ts = get_now_monotonic();
|
|
||||||
dest->format = (enc->output_format == V4L2_PIX_FMT_MJPEG ? V4L2_PIX_FMT_JPEG : enc->output_format);
|
|
||||||
dest->stride = 0;
|
|
||||||
|
|
||||||
force_key = (force_key || enc->last_online != src->online);
|
force_key = (force_key || enc->last_online != src->online);
|
||||||
|
|
||||||
@@ -334,7 +331,8 @@ int m2m_encoder_compress(m2m_encoder_s *enc, const frame_s *src, frame_s *dest,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dest->encode_end_ts = get_now_monotonic();
|
frame_encoding_end(dest);
|
||||||
|
|
||||||
E_LOG_VERBOSE("Compressed new frame: size=%zu, time=%0.3Lf, force_key=%d",
|
E_LOG_VERBOSE("Compressed new frame: size=%zu, time=%0.3Lf, force_key=%d",
|
||||||
dest->used, dest->encode_end_ts - dest->encode_begin_ts, force_key);
|
dest->used, dest->encode_end_ts - dest->encode_begin_ts, force_key);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user