VideoStream_ShootPhoto.c
3.9 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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <time.h>
#include "JZsdkLib.h"
#include "../VideoMgmt.h"
#include "version_choose.h"
#include "BaseConfig.h"
#include "../VideoStreamTransCode/VideoStreamTransCode.h"
#define PHOTO_TEMP_FILE "/root/sdcard/DCIM/Photos/temp.h264"
static int ShootPhotoNum = 0;
int ShootModeFlag = JZ_FLAGCODE_OFF;
extern JZ_VideoStreamUseStatus g_VideoStreamDealStatus ; //视频流的处理状态
//拍摄计数
T_JZsdkReturnCode VideoStreamPhoto_SetShootPhotoNum(int num)
{
//如果传入数量值不为0
if (num > 0)
{
//如果相机处于空闲状态
if (g_VideoStreamDealStatus == VIDEO_STREAM_IDLE)
{
//拍摄计数值
ShootPhotoNum += num;
ShootModeFlag = JZ_FLAGCODE_ON;
//将视频流的状态改为拍照
g_VideoStreamDealStatus = VIDEO_STREAM_SHOOTPHOTO;
JZSDK_LOG_INFO("单拍模式已开启");
}
//如果处于录像中
else if (g_VideoStreamDealStatus == VIDEO_STREAM_RECORD)
{
JZSDK_LOG_ERROR("相机已经处于录像中,请勿重复打开单拍功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于拍摄中
else if (g_VideoStreamDealStatus == VIDEO_STREAM_SHOOTPHOTO)
{
//则增加拍摄的数量
ShootPhotoNum += num;
JZSDK_LOG_INFO("拍摄中,单拍数量增加%d 当前为未拍摄数量为%d",num,ShootPhotoNum);
}
//如果处于连拍中
else if (g_VideoStreamDealStatus == VIDEO_STREAM_BRUSTSHOORPHOTO)
{
JZSDK_LOG_ERROR("相机已经处于连拍中,请勿重复打开单拍功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果处于转码中
else if (g_VideoStreamDealStatus == VIDEO_STREAM_TRANSCODE)
{
//如果不处于拍摄转码
if (ShootModeFlag != JZ_FLAGCODE_ON)
{
JZSDK_LOG_ERROR("相机已经处于转码中,请勿重复打开单拍功能");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果是拍摄转码状态
ShootPhotoNum += num;
JZSDK_LOG_INFO("转码中,单拍数量增加%d 当前为未拍摄数量为%d",num,ShootPhotoNum);
}
}
//如果传入的是0张
else if(num == 0)
{
JZSDK_LOG_ERROR("单拍数量传入为0");
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;
}
/******************************
*
* 将拍照数据存入临时文件
* 并通知转码线程处理
*
* *********************************/
T_JZsdkReturnCode VideoStramPhoto_PhotoDataIn(unsigned char *h264_data, unsigned int data_len)
{
T_JZsdkReturnCode ret;
if (g_VideoStreamDealStatus != VIDEO_STREAM_SHOOTPHOTO || ShootModeFlag != JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if(h264_data[4] == 0x67)
{
JZSDK_LOG_INFO("是I帧 拍照一次");
}
else
{
VideoStramPhoto_DevelopH264FlowGenerateIDR();
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 照片先用h264流保存
FILE *FrameDeal_ShootPhoto_fp = NULL;
FrameDeal_ShootPhoto_fp = fopen(PHOTO_TEMP_FILE, "wb");
fwrite(h264_data, data_len, 1, FrameDeal_ShootPhoto_fp);
fclose(FrameDeal_ShootPhoto_fp);
//如果数量为0,关闭拍摄模式
ShootPhotoNum--;
if (ShootPhotoNum == 0)
{
ShootModeFlag = JZ_FLAGCODE_OFF;
}
//调用转码线程
VideoStream_TransCodeIn(SHOOT_TRANSCODE,1);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}