RecordVideo.c
4.3 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
#include <stdio.h>
#include "../CameraParameter.h"
#include "../V4L2/V4L2_Record.h"
#include "JZsdkLib.h"
#include "../VideoTranscode/VideoTranscode.h"
#include "../Camera_InAndOut.h"
FILE *FrameDeal_RecordVideo_fp = NULL;
extern int g_CameraStatus;
/*
录像部分
*/
//录像模式传递函数
static T_JZsdkReturnCode FrameDeal_RecordVideo_trans(int mode)
{
//如果传入的是录像开始
if (mode == JZ_FLAGCODE_ON)
{
//如果相机处于空闲状态
if (g_CameraStatus == CAMERA_IDLE)
{
//则为开启录像
FrameDeal_RecordVideo_fp = fopen("/root/sdcard/DCIM/Videos/temp.h264","wb");
if (FrameDeal_RecordVideo_fp == NULL)
{
JZSDK_LOG_ERROR("录像文件打开错误");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
g_CameraStatus = CAMERA_RECORD;
JZSDK_LOG_INFO("录像模式已开启");
}
//如果处于录像中
else if (g_CameraStatus == CAMERA_RECORD)
{
JZSDK_LOG_ERROR("相机已经处于录像中,请勿重复打开录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于拍摄中
else if (g_CameraStatus == CAMERA_SHOOTPHOTO)
{
JZSDK_LOG_ERROR("相机已经处于单拍中,请勿重复打开录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于拍摄中
else if (g_CameraStatus == CAMERA_BRUSTSHOORPHOTO)
{
JZSDK_LOG_ERROR("相机已经处于连拍中,请勿重复打开录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于转码中
else if (g_CameraStatus == CAMERA_BRUSTSHOORPHOTO)
{
JZSDK_LOG_ERROR("相机已经处于转码中,请勿重复打开录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
//如果传入的是录像关闭
else if(mode == JZ_FLAGCODE_OFF)
{
//如果相机处于空闲状态
if (g_CameraStatus == CAMERA_IDLE)
{
JZSDK_LOG_ERROR("相机空闲中,无法关闭录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于录像中
else if (g_CameraStatus == CAMERA_RECORD)
{
//关闭录像的文件
fclose(FrameDeal_RecordVideo_fp);
JZSDK_LOG_INFO("录像已保存");
//转码
//录像转码解锁函数
Video_TansCode_Trans(VIDEO_TRANSCODE, 0);
}
//如果处于拍摄中
else if (g_CameraStatus == CAMERA_SHOOTPHOTO)
{
JZSDK_LOG_ERROR("相机已经处于单拍中,无法关闭录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于连拍中
else if (g_CameraStatus == CAMERA_BRUSTSHOORPHOTO)
{
JZSDK_LOG_ERROR("相机已经处于连拍中,无法关闭录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于转码中
else if (g_CameraStatus == CAMERA_TRANSCODE)
{
JZSDK_LOG_ERROR("相机已经处于转码中,无法关闭录像功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
//传入的是其他参数
else
{
JZSDK_LOG_ERROR("错误的录像开关状态");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
int V4L2_RecordVedioDeal(char *h264_data, int dataLen)
{
if(g_CameraStatus != CAMERA_RECORD)
{
return -1;
}
//如果录像模式被打开,存入数据进临时h264文件
//录像函数
fwrite(h264_data, dataLen, 1, FrameDeal_RecordVideo_fp);
//JZSDK_LOG_INFO("录入一帧");
}
/**************
*
* 相机功能 录制功能传递函数
* 1开启录制 0关闭录制并进行转码
*
* ************/
T_JZsdkReturnCode CameraFeatures_VideoRecord_SetMode(int mode)
{
return FrameDeal_RecordVideo_trans(mode);
}