Improve camera open
This commit is contained in:
parent
1793c59818
commit
25af6875f4
23
cmd/camera.c
23
cmd/camera.c
@ -13,6 +13,9 @@ void camera_init(camera_t *camera)
|
|||||||
|
|
||||||
void camera_close(camera_t *camera)
|
void camera_close(camera_t *camera)
|
||||||
{
|
{
|
||||||
|
if (!camera)
|
||||||
|
return;
|
||||||
|
|
||||||
for (int i = MAX_DEVICES; i-- > 0; ) {
|
for (int i = MAX_DEVICES; i-- > 0; ) {
|
||||||
if (camera->devices[i]) {
|
if (camera->devices[i]) {
|
||||||
device_close(camera->devices[i]);
|
device_close(camera->devices[i]);
|
||||||
@ -21,13 +24,18 @@ void camera_close(camera_t *camera)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(camera->links, 0, sizeof(camera->links));
|
memset(camera->links, 0, sizeof(camera->links));
|
||||||
|
free(camera);
|
||||||
}
|
}
|
||||||
|
|
||||||
int camera_open(camera_t *camera)
|
camera_t *camera_open(camera_options_t *options)
|
||||||
{
|
{
|
||||||
|
camera_t *camera = calloc(1, sizeof(camera_t));
|
||||||
|
camera->name = "CAMERA";
|
||||||
|
camera->options = *options;
|
||||||
|
|
||||||
camera->camera = device_open(camera->name, camera->options.path);
|
camera->camera = device_open(camera->name, camera->options.path);
|
||||||
if (!camera->camera) {
|
if (!camera->camera) {
|
||||||
return -1;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
camera->camera->allow_dma = camera->options.allow_dma;
|
camera->camera->allow_dma = camera->options.allow_dma;
|
||||||
@ -40,7 +48,7 @@ int camera_open(camera_t *camera)
|
|||||||
device_set_pad_format(camera->camera, camera->options.width, camera->options.height, 0);
|
device_set_pad_format(camera->camera, camera->options.width, camera->options.height, 0);
|
||||||
|
|
||||||
if (device_open_buffer_list(camera->camera, true, camera->options.width, camera->options.height, camera->options.format, 0, camera->options.nbufs, true) < 0) {
|
if (device_open_buffer_list(camera->camera, true, camera->options.width, camera->options.height, camera->options.format, 0, camera->options.nbufs, true) < 0) {
|
||||||
return -1;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (camera->camera->capture_list->fmt_format) {
|
switch (camera->camera->capture_list->fmt_format) {
|
||||||
@ -74,10 +82,15 @@ int camera_open(camera_t *camera)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
if (camera_set_params(camera) < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return camera;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
return -1;
|
camera_close(camera);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int camera_set_params(camera_t *camera)
|
int camera_set_params(camera_t *camera)
|
||||||
|
@ -42,10 +42,9 @@ typedef struct camera_s {
|
|||||||
|
|
||||||
#define CAMERA(DEVICE) camera->devices[DEVICE]
|
#define CAMERA(DEVICE) camera->devices[DEVICE]
|
||||||
|
|
||||||
void camera_init(camera_t *camera);
|
camera_t *camera_open(camera_options_t *camera);
|
||||||
void camera_close(camera_t *camera);
|
|
||||||
int camera_open(camera_t *camera);
|
|
||||||
int camera_set_params(camera_t *camera);
|
int camera_set_params(camera_t *camera);
|
||||||
|
void camera_close(camera_t *camera);
|
||||||
int camera_run(camera_t *camera);
|
int camera_run(camera_t *camera);
|
||||||
|
|
||||||
int camera_configure_isp(camera_t *camera, float high_div, float low_div);
|
int camera_configure_isp(camera_t *camera, float high_div, float low_div);
|
||||||
|
16
cmd/main.c
16
cmd/main.c
@ -71,23 +71,17 @@ option_t all_options[] = {
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
camera_t camera;
|
|
||||||
int http_fd = -1;
|
int http_fd = -1;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
const char *env;
|
const char *env;
|
||||||
|
camera_t *camera;
|
||||||
|
|
||||||
if (parse_opts(all_options, argc, argv) < 0) {
|
if (parse_opts(all_options, argc, argv) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
camera_init(&camera);
|
camera = camera_open(&camera_options);
|
||||||
camera.options = camera_options;
|
if (!camera) {
|
||||||
|
|
||||||
if (camera_open(&camera) < 0) {
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (camera_set_params(&camera) < 0) {
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,10 +90,10 @@ int main(int argc, char *argv[])
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = camera_run(&camera);
|
ret = camera_run(camera);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
close(http_fd);
|
close(http_fd);
|
||||||
camera_close(&camera);
|
camera_close(camera);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user