mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-12 02:23:43 +00:00
refactoring
This commit is contained in:
30
src/device.c
30
src/device.c
@@ -39,7 +39,7 @@
|
|||||||
static const struct {
|
static const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
const v4l2_std_id standard;
|
const v4l2_std_id standard;
|
||||||
} STANDARDS[] = {
|
} _STANDARDS[] = {
|
||||||
{"UNKNOWN", V4L2_STD_UNKNOWN},
|
{"UNKNOWN", V4L2_STD_UNKNOWN},
|
||||||
{"PAL", V4L2_STD_PAL},
|
{"PAL", V4L2_STD_PAL},
|
||||||
{"NTSC", V4L2_STD_NTSC},
|
{"NTSC", V4L2_STD_NTSC},
|
||||||
@@ -49,7 +49,7 @@ static const struct {
|
|||||||
static const struct {
|
static const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
const unsigned format;
|
const unsigned format;
|
||||||
} FORMATS[] = {
|
} _FORMATS[] = {
|
||||||
{"YUYV", V4L2_PIX_FMT_YUYV},
|
{"YUYV", V4L2_PIX_FMT_YUYV},
|
||||||
{"UYVY", V4L2_PIX_FMT_UYVY},
|
{"UYVY", V4L2_PIX_FMT_UYVY},
|
||||||
{"RGB565", V4L2_PIX_FMT_RGB565},
|
{"RGB565", V4L2_PIX_FMT_RGB565},
|
||||||
@@ -96,18 +96,18 @@ void device_destroy(struct device_t *dev) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int device_parse_format(const char *const str) {
|
int device_parse_format(const char *const str) {
|
||||||
for (unsigned index = 0; index < sizeof(FORMATS) / sizeof(FORMATS[0]); ++index) {
|
for (unsigned index = 0; index < sizeof(_FORMATS) / sizeof(_FORMATS[0]); ++index) {
|
||||||
if (!strcasecmp(str, FORMATS[index].name)) {
|
if (!strcasecmp(str, _FORMATS[index].name)) {
|
||||||
return FORMATS[index].format;
|
return _FORMATS[index].format;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FORMAT_UNKNOWN;
|
return FORMAT_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_std_id device_parse_standard(const char *const str) {
|
v4l2_std_id device_parse_standard(const char *const str) {
|
||||||
for (unsigned index = 1; index < sizeof(STANDARDS) / sizeof(STANDARDS[0]); ++index) {
|
for (unsigned index = 1; index < sizeof(_STANDARDS) / sizeof(_STANDARDS[0]); ++index) {
|
||||||
if (!strcasecmp(str, STANDARDS[index].name)) {
|
if (!strcasecmp(str, _STANDARDS[index].name)) {
|
||||||
return STANDARDS[index].standard;
|
return _STANDARDS[index].standard;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return STANDARD_UNKNOWN;
|
return STANDARD_UNKNOWN;
|
||||||
@@ -434,19 +434,19 @@ static const char *_format_to_string_auto(char *buf, const size_t size, const un
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const char *_format_to_string_null(const unsigned format) {
|
static const char *_format_to_string_null(const unsigned format) {
|
||||||
for (unsigned index = 0; index < sizeof(FORMATS) / sizeof(FORMATS[0]); ++index) {
|
for (unsigned index = 0; index < sizeof(_FORMATS) / sizeof(_FORMATS[0]); ++index) {
|
||||||
if (format == FORMATS[index].format) {
|
if (format == _FORMATS[index].format) {
|
||||||
return FORMATS[index].name;
|
return _FORMATS[index].name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *_standard_to_string(v4l2_std_id standard) {
|
static const char *_standard_to_string(v4l2_std_id standard) {
|
||||||
for (unsigned index = 0; index < sizeof(STANDARDS) / sizeof(STANDARDS[0]); ++index) {
|
for (unsigned index = 0; index < sizeof(_STANDARDS) / sizeof(_STANDARDS[0]); ++index) {
|
||||||
if (standard == STANDARDS[index].standard) {
|
if (standard == _STANDARDS[index].standard) {
|
||||||
return STANDARDS[index].name;
|
return _STANDARDS[index].name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return STANDARDS[0].name;
|
return _STANDARDS[0].name;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
static const struct {
|
static const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
const enum encoder_type_t type;
|
const enum encoder_type_t type;
|
||||||
} ENCODER_TYPES[] = {
|
} _ENCODER_TYPES[] = {
|
||||||
{"CPU", ENCODER_TYPE_CPU},
|
{"CPU", ENCODER_TYPE_CPU},
|
||||||
# ifdef OMX_ENCODER
|
# ifdef OMX_ENCODER
|
||||||
{"OMX", ENCODER_TYPE_OMX},
|
{"OMX", ENCODER_TYPE_OMX},
|
||||||
@@ -91,9 +91,9 @@ void encoder_destroy(struct encoder_t *encoder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum encoder_type_t encoder_parse_type(const char *const str) {
|
enum encoder_type_t encoder_parse_type(const char *const str) {
|
||||||
for (unsigned index = 0; index < sizeof(ENCODER_TYPES) / sizeof(ENCODER_TYPES[0]); ++index) {
|
for (unsigned index = 0; index < sizeof(_ENCODER_TYPES) / sizeof(_ENCODER_TYPES[0]); ++index) {
|
||||||
if (!strcasecmp(str, ENCODER_TYPES[index].name)) {
|
if (!strcasecmp(str, _ENCODER_TYPES[index].name)) {
|
||||||
return ENCODER_TYPES[index].type;
|
return _ENCODER_TYPES[index].type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ENCODER_TYPE_UNKNOWN;
|
return ENCODER_TYPE_UNKNOWN;
|
||||||
|
|||||||
@@ -38,10 +38,7 @@
|
|||||||
#include "encoder.h"
|
#include "encoder.h"
|
||||||
|
|
||||||
|
|
||||||
#define JPEG_OUTPUT_BUFFER_SIZE 4096
|
struct _mjpg_destination_mgr {
|
||||||
|
|
||||||
|
|
||||||
struct mjpg_destination_mgr {
|
|
||||||
struct jpeg_destination_mgr mgr; // Default manager
|
struct jpeg_destination_mgr mgr; // Default manager
|
||||||
JOCTET *buffer; // Start of buffer
|
JOCTET *buffer; // Start of buffer
|
||||||
unsigned char *outbuffer_cursor;
|
unsigned char *outbuffer_cursor;
|
||||||
@@ -114,15 +111,15 @@ void jpeg_encoder_compress_buffer(struct device_t *dev, const unsigned index, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void _jpeg_set_dest_picture(j_compress_ptr jpeg, unsigned char *picture, unsigned long *written) {
|
static void _jpeg_set_dest_picture(j_compress_ptr jpeg, unsigned char *picture, unsigned long *written) {
|
||||||
struct mjpg_destination_mgr *dest;
|
struct _mjpg_destination_mgr *dest;
|
||||||
|
|
||||||
if (jpeg->dest == NULL) {
|
if (jpeg->dest == NULL) {
|
||||||
assert((jpeg->dest = (struct jpeg_destination_mgr *)(*jpeg->mem->alloc_small)(
|
assert((jpeg->dest = (struct jpeg_destination_mgr *)(*jpeg->mem->alloc_small)(
|
||||||
(j_common_ptr) jpeg, JPOOL_PERMANENT, sizeof(struct mjpg_destination_mgr)
|
(j_common_ptr) jpeg, JPOOL_PERMANENT, sizeof(struct _mjpg_destination_mgr)
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
dest = (struct mjpg_destination_mgr *) jpeg->dest;
|
dest = (struct _mjpg_destination_mgr *) jpeg->dest;
|
||||||
dest->mgr.init_destination = _jpeg_init_destination;
|
dest->mgr.init_destination = _jpeg_init_destination;
|
||||||
dest->mgr.empty_output_buffer = _jpeg_empty_output_buffer;
|
dest->mgr.empty_output_buffer = _jpeg_empty_output_buffer;
|
||||||
dest->mgr.term_destination = _jpeg_term_destination;
|
dest->mgr.term_destination = _jpeg_term_destination;
|
||||||
@@ -222,8 +219,10 @@ static void _jpeg_write_scanlines_rgb565(struct jpeg_compress_struct *jpeg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define JPEG_OUTPUT_BUFFER_SIZE 4096
|
||||||
|
|
||||||
static void _jpeg_init_destination(j_compress_ptr jpeg) {
|
static void _jpeg_init_destination(j_compress_ptr jpeg) {
|
||||||
struct mjpg_destination_mgr *dest = (struct mjpg_destination_mgr *) jpeg->dest;
|
struct _mjpg_destination_mgr *dest = (struct _mjpg_destination_mgr *) jpeg->dest;
|
||||||
|
|
||||||
// Allocate the output buffer - it will be released when done with image
|
// Allocate the output buffer - it will be released when done with image
|
||||||
assert((dest->buffer = (JOCTET *)(*jpeg->mem->alloc_small)(
|
assert((dest->buffer = (JOCTET *)(*jpeg->mem->alloc_small)(
|
||||||
@@ -237,7 +236,7 @@ static void _jpeg_init_destination(j_compress_ptr jpeg) {
|
|||||||
static boolean _jpeg_empty_output_buffer(j_compress_ptr jpeg) {
|
static boolean _jpeg_empty_output_buffer(j_compress_ptr jpeg) {
|
||||||
// Called whenever local jpeg buffer fills up
|
// Called whenever local jpeg buffer fills up
|
||||||
|
|
||||||
struct mjpg_destination_mgr *dest = (struct mjpg_destination_mgr *) jpeg->dest;
|
struct _mjpg_destination_mgr *dest = (struct _mjpg_destination_mgr *) jpeg->dest;
|
||||||
|
|
||||||
memcpy(dest->outbuffer_cursor, dest->buffer, JPEG_OUTPUT_BUFFER_SIZE);
|
memcpy(dest->outbuffer_cursor, dest->buffer, JPEG_OUTPUT_BUFFER_SIZE);
|
||||||
dest->outbuffer_cursor += JPEG_OUTPUT_BUFFER_SIZE;
|
dest->outbuffer_cursor += JPEG_OUTPUT_BUFFER_SIZE;
|
||||||
@@ -253,7 +252,7 @@ static void _jpeg_term_destination(j_compress_ptr jpeg) {
|
|||||||
// Called by jpeg_finish_compress after all data has been written.
|
// Called by jpeg_finish_compress after all data has been written.
|
||||||
// Usually needs to flush buffer
|
// Usually needs to flush buffer
|
||||||
|
|
||||||
struct mjpg_destination_mgr *dest = (struct mjpg_destination_mgr *) jpeg->dest;
|
struct _mjpg_destination_mgr *dest = (struct _mjpg_destination_mgr *) jpeg->dest;
|
||||||
size_t data_count = JPEG_OUTPUT_BUFFER_SIZE - dest->mgr.free_in_buffer;
|
size_t data_count = JPEG_OUTPUT_BUFFER_SIZE - dest->mgr.free_in_buffer;
|
||||||
|
|
||||||
// Write any data remaining in the buffer
|
// Write any data remaining in the buffer
|
||||||
@@ -261,3 +260,5 @@ static void _jpeg_term_destination(j_compress_ptr jpeg) {
|
|||||||
dest->outbuffer_cursor += data_count;
|
dest->outbuffer_cursor += data_count;
|
||||||
*dest->written += data_count;
|
*dest->written += data_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef JPEG_OUTPUT_BUFFER_SIZE
|
||||||
|
|||||||
@@ -40,6 +40,8 @@
|
|||||||
|
|
||||||
int component_enable_port(OMX_HANDLETYPE *component, const OMX_U32 port);
|
int component_enable_port(OMX_HANDLETYPE *component, const OMX_U32 port);
|
||||||
int component_disable_port(OMX_HANDLETYPE *component, const OMX_U32 port);
|
int component_disable_port(OMX_HANDLETYPE *component, const OMX_U32 port);
|
||||||
|
|
||||||
int component_get_portdef(OMX_HANDLETYPE *component, OMX_PARAM_PORTDEFINITIONTYPE *portdef, const OMX_U32 port);
|
int component_get_portdef(OMX_HANDLETYPE *component, OMX_PARAM_PORTDEFINITIONTYPE *portdef, const OMX_U32 port);
|
||||||
int component_set_portdef(OMX_HANDLETYPE *component, OMX_PARAM_PORTDEFINITIONTYPE *portdef);
|
int component_set_portdef(OMX_HANDLETYPE *component, OMX_PARAM_PORTDEFINITIONTYPE *portdef);
|
||||||
|
|
||||||
int component_set_state(OMX_HANDLETYPE *component, const OMX_STATETYPE state);
|
int component_set_state(OMX_HANDLETYPE *component, const OMX_STATETYPE state);
|
||||||
|
|||||||
Reference in New Issue
Block a user