Files
gk-sdk/sample/uvc_app/camera.c
T

139 lines
2.4 KiB
C

/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#include <stdio.h>
#include <pthread.h>
#include "camera.h"
#include "uvc.h"
#include "uac.h"
/* -------------------------------------------------------------------------- */
extern unsigned int g_uvc;
extern unsigned int g_uac;
static uvc_t* g_uvc_dev = NULL;
static uac_t* g_uac_dev = NULL;
static int __camera_init(void)
{
if (g_uvc) {
g_uvc_dev = get_uvc();
if (g_uvc_dev && g_uvc_dev->init) {
g_uvc_dev->init();
}
}
if (g_uac) {
g_uac_dev = get_uac();
if (g_uac_dev && g_uac_dev->init) {
g_uac_dev->init();
}
}
return 0;
}
static int __camera_deinit(void)
{
if (g_uac) {
if (g_uac_dev && g_uac_dev->deinit) {
g_uac_dev->deinit();
}
}
if (g_uvc) {
if (g_uvc_dev && g_uvc_dev->deinit) {
g_uvc_dev->deinit();
}
}
g_uvc_dev = NULL;
g_uac_dev = NULL;
return 0;
}
static int __camera_open(void)
{
if (g_uvc) {
if (g_uvc_dev && g_uvc_dev->open) {
g_uvc_dev->open();
}
}
if (g_uac) {
if (g_uac_dev && g_uac_dev->open) {
g_uac_dev->open();
}
}
return 0;
}
static int __camera_close(void)
{
if (g_uac) {
if (g_uac_dev && g_uac_dev->close) {
g_uac_dev->close();
}
}
if (g_uvc) {
if (g_uvc_dev && g_uvc_dev->close) {
g_uvc_dev->close();
}
}
return 0;
}
static int __camera_run(void)
{
if (g_uvc) {
if (g_uvc_dev && g_uvc_dev->run) {
g_uvc_dev->run();
}
}
if (g_uac) {
if (g_uac_dev && g_uac_dev->run) {
g_uac_dev->run();
}
}
return 0;
}
static int __camera_stop(void)
{
if (g_uvc) {
if (g_uvc_dev && g_uvc_dev->stop) {
g_uvc_dev->stop();
}
}
if (g_uac) {
if (g_uac_dev && g_uac_dev->stop) {
g_uac_dev->stop();
}
}
return 0;
}
/* -------------------------------------------------------------------------- */
static camera __camera =
{
.init = &__camera_init,
.deinit = &__camera_deinit,
.open = &__camera_open,
.close = &__camera_close,
.run = &__camera_run,
.stop = &__camera_stop,
};
camera *get_camera(void)
{
return &__camera;
}