RTK_mmp.c
3.4 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
#include <stdio.h>
#include "JZsdkLib.h"
#include "./Enc/RTK_mmp_enc.h"
#include "./Dec/RTK_mmp_dec.h"
#include "version_choose.h"
#include "MediaProc/VideoMgmt/VideoMgmt.h"
void *Kt_Irc_enc_index = NULL; //昆腾红外编码器的索引值
void *Kt_Cam_enc_index = NULL; //昆腾光学编码器的索引值
void *Kt_Cam_dec_index = NULL; //昆腾光学解码器的索引值
//昆腾红外相机的mmp初始化部分
T_JZsdkReturnCode JZsdk_Kt_IrcMMP_Init(int Irc_width, int Irc_height, int Irc_frame, int Irc_gop, int Cam_width, int Cam_height, int Cam_frame,int Cam_gop)
{
#if RTK_MPP_STATUS == VERSION_SWITCH_ON
//初始化红外数据的编码器
RTK_mmp_enc_Init(&Kt_Irc_enc_index, MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, Irc_width, Irc_height, Irc_frame, Irc_gop);
//RTK_mmp_enc_Init(&Kt_Irc_enc_index, MPP_VIDEO_CodingAVC, MPP_FMT_RGB888, Irc_width, Irc_height, Irc_frame);
//初始化光学数据的编解码器
RTK_mmp_dec_Init(&Kt_Cam_dec_index, MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, Cam_width, Cam_height);
RTK_mmp_enc_Init(&Kt_Cam_enc_index, MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, Cam_width, Cam_height, Cam_frame, Cam_gop);
#endif
}
//原始视频流通过rtkmmp转为h264
T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264(unsigned char *RawData, int data_len)
{
#if RTK_MPP_STATUS == VERSION_SWITCH_ON
MppPacket Packet = NULL;
RTK_mmp_enc_data_to_h264(&Kt_Irc_enc_index, RawData, data_len, &Packet);
int packet_len = mpp_packet_get_length(Packet);
void *ptr = mpp_packet_get_pos(Packet);
//EncCfg->Packet_eos = mpp_packet_get_eos(packet);
// printf("获取到编码内容 len:%d\n",packet_len);
//3、将h264流输出到视频流缓冲区
VideoMgmt_write_data(&VideoMgmt_FirstVideo_index, ptr, packet_len);
//释放掉packet
mpp_packet_deinit(&Packet);
#endif
}
//昆腾光学相机数据输入部分
T_JZsdkReturnCode JZsdk_Kt_CamMMP_Mjpeg_to_h264(unsigned char *data, int data_len)
{
#if RTK_MPP_STATUS == VERSION_SWITCH_ON
MppFrame yuv_data = NULL; //用于传递yuv数据的地址
MppPacket Packet = NULL;
//输入数据进入解码器
RTK_mmp_dec_input(&Kt_Cam_dec_index, data, data_len, &yuv_data);
// int width = mpp_frame_get_width(yuv_data);
// int height = mpp_frame_get_height(yuv_data);
// int h_stride = mpp_frame_get_hor_stride(yuv_data);
// int v_stride = mpp_frame_get_ver_stride(yuv_data);
// JZSDK_LOG_INFO("w:%d h:%d hor:%d ver:%d",width,height,h_stride,v_stride);
//将返回的数据输入进编码器
RTK_mmp_enc_yuv_to_h264_byFrame(&Kt_Cam_enc_index, yuv_data, &Packet);
//获取数据指针与长度
int packet_len = mpp_packet_get_length(Packet);
void *ptr = mpp_packet_get_pos(Packet);
//置入视频缓冲区
VideoMgmt_write_data(&VideoMgmt_SecondVideo_index, (unsigned char *)ptr, (unsigned int)packet_len);
//释放掉编码图像
mpp_packet_deinit(&Packet);
#endif
}
//昆腾相机设置下一帧为I帧
T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex)
{
#if RTK_MPP_STATUS == VERSION_SWITCH_ON
if (CameraIndex == 0)
{
RTK_mmp_enc_SetNextFrame_IDR(&Kt_Irc_enc_index);
}
else if(CameraIndex == 1)
{
RTK_mmp_enc_SetNextFrame_IDR(&Kt_Cam_enc_index);
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif
}