Camera_InAndOut.c
5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include "version_choose.h"
#include "UI_control.h"
#include "BaseConfig.h"
#include "JZsdkLib.h"
#include "./CameraParameter.h"
#include "./V4L2/V4L2_Record.h"
int Camera_PushVideoInitFlag = JZ_FLAGCODE_OFF;
/***********
*
* 检测是否有摄像头
*
* ************/
static T_JZsdkReturnCode Camera_CheckForThePresenceOfCameras()
{
//检测是否存在摄像头
if (CAMERA_DEVICE_NAME == NULL)
{
JZSDK_LOG_ERROR("无摄像头设备号设置");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if(access(CAMERA_DEVICE_NAME, F_OK ) == 0)
{
JZSDK_LOG_ERROR("摄像头存在");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else
{
JZSDK_LOG_ERROR("摄像头不存在,关闭推流模块");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
/***********
*
* 建立保存文件夹
*
* ************/
static T_JZsdkReturnCode Camera_MediaFolderBuild()
{
char RmCmdStr[256];
snprintf(RmCmdStr, 256,"mkdir /root/sdcard/DCIM/");
if( JZsdk_RunSystemCmd(RmCmdStr) ==-1)
{
JZSDK_LOG_INFO("已经存在DCIM文件夹");
}
snprintf(RmCmdStr, 256,"mkdir /root/sdcard/DCIM/Videos");
if( JZsdk_RunSystemCmd(RmCmdStr) ==-1)
{
JZSDK_LOG_INFO("已经存在Videos文件夹");
}
snprintf(RmCmdStr, 256,"mkdir /root/sdcard/DCIM/Photos");
if( JZsdk_RunSystemCmd(RmCmdStr) ==-1)
{
JZSDK_LOG_INFO("已经存在Photos文件夹");
}
snprintf(RmCmdStr, 256,"rm /root/sdcard/DCIM/Videos/temp.h264");
if( JZsdk_RunSystemCmd(RmCmdStr) ==-1)
{
JZSDK_LOG_INFO("Videos/temp.h264不存在");
}
snprintf(RmCmdStr, 256,"rm /root/sdcard/DCIM/Photos/temp.h264");
if( JZsdk_RunSystemCmd(RmCmdStr) ==-1)
{
JZSDK_LOG_INFO("Photos/temp.h264不存在");
}
}
/***********
*
* 相机初始化
*
* ************/
static T_JZsdkReturnCode JZsdk_CameraInit()
{
T_JZsdkReturnCode ret;
int dev_fd;
//1、摄像头录制初始化
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
ret = V4l2_Camarainit(&dev_fd);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("摄像头录制初始化失败");
return ret;
}
//2、摄像头参数调整
ret = V4L2_Parameter_Setting(dev_fd);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("摄像头参数调整失败");
return ret;
}
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_Camera_FrameDealThread_UnlockFun()
{
//解锁一次帧处理函数。以用于处理一帧视频流画面
FrameDeal_FrameDealThread_UnlockFun();
}
/***********
*
* 推流计时线程
*
* ************/
static void *JZsdk_Camera_PushFrame_TimerThread(void *args)
{
while (1)
{
delayMs(1000);
//解锁一次帧处理函数。以用于处理一帧视频流画面
FrameDeal_FrameDealThread_UnlockFun();
}
}
/***********
*
* 推流计时线程初始化
*
* ************/
static int JZsdk_Camera_PushFrame_TimerThread_Init()
{
pthread_t WriteDataTask;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
int opus_Protection = pthread_create(&WriteDataTask,&task_attribute,JZsdk_Camera_PushFrame_TimerThread,NULL); //线程
if(opus_Protection != 0)
{
JZSDK_LOG_ERROR("创建视频转码线程失败!");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
/***********
*
* 相机模块初始化
*
* ************/
T_JZsdkReturnCode JZsdk_CameraMuduleInit()
{
T_JZsdkReturnCode ret;
//1、建立保存文件夹
Camera_MediaFolderBuild();
//2、检测是否有摄像头
ret = Camera_CheckForThePresenceOfCameras();
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE)
{
JZSDK_LOG_ERROR("摄像头不存在,相机模块初始化失败");
return ret;
}
//3、摄像头初始化
ret = JZsdk_CameraInit();
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE)
{
JZSDK_LOG_ERROR("摄像头参数配置错误,摄像头初始化失败");
return ret;
}
//4、摄像头帧处理线程初始化
ret = JZsdk_CameraFrameDeal_thread_Init();
if (ret<0)
{
JZSDK_LOG_ERROR("4、摄像头帧处理线程初始化线程失败");
return ret;
}
//5、如果是串口模式,则进行推流,推流计时线程初始化
if (APP_VERSION == APP_UART)
{
JZsdk_Camera_PushFrame_TimerThread_Init();
}
//6、转码功能线程初始化
JZSDK_LOG_DEBUG("相机模块初始化完成");
Camera_PushVideoInitFlag = JZ_FLAGCODE_ON;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}