mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-18 05:23:43 +00:00
refactoring
This commit is contained in:
@@ -130,7 +130,7 @@ static int _wait_frame(_MemsinkObject *self) {
|
|||||||
if (mem->magic == US_MEMSINK_MAGIC && mem->version == US_MEMSINK_VERSION && mem->id != self->frame_id) {
|
if (mem->magic == US_MEMSINK_MAGIC && mem->version == US_MEMSINK_VERSION && mem->id != self->frame_id) {
|
||||||
if (self->drop_same_frames > 0) {
|
if (self->drop_same_frames > 0) {
|
||||||
if (
|
if (
|
||||||
US_FRAME_COMPARE_META_USED_NOTS(self->mem, self->frame)
|
US_FRAME_COMPARE_GEOMETRY(self->mem, self->frame)
|
||||||
&& (self->frame_ts + self->drop_same_frames > now_ts)
|
&& (self->frame_ts + self->drop_same_frames > now_ts)
|
||||||
&& !memcmp(self->frame->data, mem->data, mem->used)
|
&& !memcmp(self->frame->data, mem->data, mem->used)
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ void us_frame_copy(const us_frame_s *src, us_frame_s *dest) {
|
|||||||
bool us_frame_compare(const us_frame_s *a, const us_frame_s *b) {
|
bool us_frame_compare(const us_frame_s *a, const us_frame_s *b) {
|
||||||
return (
|
return (
|
||||||
a->allocated && b->allocated
|
a->allocated && b->allocated
|
||||||
&& US_FRAME_COMPARE_META_USED_NOTS(a, b)
|
&& US_FRAME_COMPARE_GEOMETRY(a, b)
|
||||||
&& !memcmp(a->data, b->data, b->used)
|
&& !memcmp(a->data, b->data, b->used)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -99,6 +99,10 @@ uint us_frame_get_padding(const us_frame_s *frame) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool us_is_jpeg(uint format) {
|
||||||
|
return (format == V4L2_PIX_FMT_JPEG || format == V4L2_PIX_FMT_MJPEG);
|
||||||
|
}
|
||||||
|
|
||||||
const char *us_fourcc_to_string(uint format, char *buf, uz size) {
|
const char *us_fourcc_to_string(uint format, char *buf, uz size) {
|
||||||
assert(size >= 8);
|
assert(size >= 8);
|
||||||
buf[0] = format & 0x7F;
|
buf[0] = format & 0x7F;
|
||||||
|
|||||||
@@ -22,8 +22,6 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <linux/videodev2.h>
|
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
@@ -41,7 +39,6 @@ typedef struct {
|
|||||||
// Stride is a bytesperline in V4L2
|
// Stride is a bytesperline in V4L2
|
||||||
// https://www.kernel.org/doc/html/v4.14/media/uapi/v4l/pixfmt-v4l2.html
|
// https://www.kernel.org/doc/html/v4.14/media/uapi/v4l/pixfmt-v4l2.html
|
||||||
// https://medium.com/@oleg.shipitko/what-does-stride-mean-in-image-processing-bba158a72bcd
|
// https://medium.com/@oleg.shipitko/what-does-stride-mean-in-image-processing-bba158a72bcd
|
||||||
|
|
||||||
bool online;
|
bool online;
|
||||||
bool key;
|
bool key;
|
||||||
uint gop;
|
uint gop;
|
||||||
@@ -65,11 +62,8 @@ typedef struct {
|
|||||||
x_dest->encode_end_ts = x_src->encode_end_ts; \
|
x_dest->encode_end_ts = x_src->encode_end_ts; \
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void us_frame_copy_meta(const us_frame_s *src, us_frame_s *dest) {
|
#define US_FRAME_COMPARE_GEOMETRY(x_a, x_b) ( \
|
||||||
US_FRAME_COPY_META(src, dest);
|
/* Compare the used size and significant meta (no timings) */ \
|
||||||
}
|
|
||||||
|
|
||||||
#define US_FRAME_COMPARE_META_USED_NOTS(x_a, x_b) ( \
|
|
||||||
x_a->used == x_b->used \
|
x_a->used == x_b->used \
|
||||||
&& x_a->width == x_b->width \
|
&& x_a->width == x_b->width \
|
||||||
&& x_a->height == x_b->height \
|
&& x_a->height == x_b->height \
|
||||||
@@ -83,7 +77,7 @@ static inline void us_frame_copy_meta(const us_frame_s *src, us_frame_s *dest) {
|
|||||||
|
|
||||||
static inline void us_frame_encoding_begin(const us_frame_s *src, us_frame_s *dest, uint format) {
|
static inline void us_frame_encoding_begin(const us_frame_s *src, us_frame_s *dest, uint format) {
|
||||||
assert(src->used > 0);
|
assert(src->used > 0);
|
||||||
us_frame_copy_meta(src, dest);
|
US_FRAME_COPY_META(src, dest);
|
||||||
dest->encode_begin_ts = us_get_now_monotonic();
|
dest->encode_begin_ts = us_get_now_monotonic();
|
||||||
dest->format = format;
|
dest->format = format;
|
||||||
dest->stride = 0;
|
dest->stride = 0;
|
||||||
@@ -108,8 +102,5 @@ bool us_frame_compare(const us_frame_s *a, const us_frame_s *b);
|
|||||||
|
|
||||||
uint us_frame_get_padding(const us_frame_s *frame);
|
uint us_frame_get_padding(const us_frame_s *frame);
|
||||||
|
|
||||||
|
bool us_is_jpeg(uint format);
|
||||||
const char *us_fourcc_to_string(uint format, char *buf, uz size);
|
const char *us_fourcc_to_string(uint format, char *buf, uz size);
|
||||||
|
|
||||||
static inline bool us_is_jpeg(uint format) {
|
|
||||||
return (format == V4L2_PIX_FMT_JPEG || format == V4L2_PIX_FMT_MJPEG);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ bool us_memsink_server_check(us_memsink_s *sink, const us_frame_s *frame) {
|
|||||||
US_LOG_PERROR("%s-sink: Can't unlock memory", sink->name);
|
US_LOG_PERROR("%s-sink: Can't unlock memory", sink->name);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (has_clients || !US_FRAME_COMPARE_META_USED_NOTS(sink->mem, frame));;
|
return (has_clients || !US_FRAME_COMPARE_GEOMETRY(sink->mem, frame));;
|
||||||
}
|
}
|
||||||
|
|
||||||
int us_memsink_server_put(us_memsink_s *sink, const us_frame_s *frame, bool *key_requested) {
|
int us_memsink_server_put(us_memsink_s *sink, const us_frame_s *frame, bool *key_requested) {
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ int us_unjpeg(const us_frame_s *src, us_frame_s *dest, bool decode) {
|
|||||||
|
|
||||||
jpeg_start_decompress(&jpeg);
|
jpeg_start_decompress(&jpeg);
|
||||||
|
|
||||||
us_frame_copy_meta(src, dest);
|
US_FRAME_COPY_META(src, dest);
|
||||||
dest->format = V4L2_PIX_FMT_RGB24;
|
dest->format = V4L2_PIX_FMT_RGB24;
|
||||||
dest->width = jpeg.output_width;
|
dest->width = jpeg.output_width;
|
||||||
dest->height = jpeg.output_height;
|
dest->height = jpeg.output_height;
|
||||||
|
|||||||
@@ -30,6 +30,8 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/sysmacros.h>
|
#include <sys/sysmacros.h>
|
||||||
|
|
||||||
|
#include <linux/videodev2.h>
|
||||||
|
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
#include <xf86drmMode.h>
|
#include <xf86drmMode.h>
|
||||||
#include <drm_fourcc.h>
|
#include <drm_fourcc.h>
|
||||||
|
|||||||
Reference in New Issue
Block a user