作者 ookk303

10改动

@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #define MAJOR_VERSION 0x01 19 #define MAJOR_VERSION 0x01
20 #define MINOR_VERSION 0x03 20 #define MINOR_VERSION 0x03
21 #define MODIFY_VERSION 0x09 21 #define MODIFY_VERSION 0x09
22 -#define DEBUG_VERSION 0x07 22 +#define DEBUG_VERSION 0x06
23 23
24 //禁止修改行 滤波方式 24 //禁止修改行 滤波方式
25 #define FILTERING_TYPE HIGH_PASS_FILTERING 25 #define FILTERING_TYPE HIGH_PASS_FILTERING
@@ -45,6 +45,11 @@ typedef struct C1_RgaInfo @@ -45,6 +45,11 @@ typedef struct C1_RgaInfo
45 static C1_RgaInfo *g_C1_RgaIrcInfo = NULL; 45 static C1_RgaInfo *g_C1_RgaIrcInfo = NULL;
46 static C1_RgaInfo *g_C1_RgaOptInfo = NULL; 46 static C1_RgaInfo *g_C1_RgaOptInfo = NULL;
47 47
  48 +static unsigned char *g_MixedIrc_Buffer = NULL;
  49 +
  50 +static unsigned char *g_MixedOpt_Buffer = NULL;
  51 +static unsigned int g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF;
  52 +
48 #endif 53 #endif
49 54
50 #ifdef MEDIA_PROC_CONFIG_STATUS_ON 55 #ifdef MEDIA_PROC_CONFIG_STATUS_ON
@@ -88,7 +93,7 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un @@ -88,7 +93,7 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un
88 } 93 }
89 94
90 //红外相机 95 //红外相机
91 - if (currentIndex == 1 && CameraIndex == 1) 96 + if (currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST && CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST)
92 { 97 {
93 98
94 //推送数据到流转模块 99 //推送数据到流转模块
@@ -96,11 +101,19 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un @@ -96,11 +101,19 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un
96 } 101 }
97 102
98 //光学相机 103 //光学相机
99 - if(CameraIndex == 2 && currentIndex == 2) 104 + if(CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND && currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND)
  105 + {
  106 + //推送数据到流转模块
  107 + VideoMgmt_Single_FrameIn(data, data_len);
  108 + }
  109 +
  110 + //组合视频流
  111 + if (currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD && CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD)
100 { 112 {
101 //推送数据到流转模块 113 //推送数据到流转模块
102 VideoMgmt_Single_FrameIn(data, data_len); 114 VideoMgmt_Single_FrameIn(data, data_len);
103 } 115 }
  116 +
104 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 117 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
105 } 118 }
106 119
@@ -173,18 +186,17 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len @@ -173,18 +186,17 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len
173 memcpy(mpp_buffer_get_ptr(temp), temp_data, size); 186 memcpy(mpp_buffer_get_ptr(temp), temp_data, size);
174 187
175 free(temp_data); 188 free(temp_data);
176 -  
177 } 189 }
178 190
179 - //测试  
180 - MppBuffer temp = mpp_frame_get_buffer(yuv_data);  
181 - RK_U32 h = mpp_frame_get_hor_stride(yuv_data);  
182 - RK_U32 w = mpp_frame_get_ver_stride(yuv_data);  
183 191
184 - int size = (h * w * 1.5);  
185 -  
186 - unsigned char *temp_data = (unsigned char *)malloc(size);  
187 - memcpy(temp_data, mpp_buffer_get_ptr(temp), size); 192 + //将数据放入混合缓冲区
  193 + MppBuffer temp = mpp_frame_get_buffer(yuv_data);
  194 + if (g_MixedOpt_Buffer != NULL && g_MixedOptBuffer_UseFlag == JZ_FLAGCODE_OFF)
  195 + {
  196 + g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_ON;
  197 + memcpy(g_MixedOpt_Buffer, mpp_buffer_get_ptr(temp), (mpp_frame_get_hor_stride(yuv_data) * mpp_frame_get_ver_stride(yuv_data) * 1.5));
  198 + g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF;
  199 + }
188 200
189 201
190 //将返回的数据输入进编码器 202 //将返回的数据输入进编码器
@@ -266,7 +278,9 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len @@ -266,7 +278,9 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
266 break; 278 break;
267 279
268 case 3: 280 case 3:
269 - ZoomRatio = 8; 281 + //红外做不了8倍放大咧
  282 + ZoomRatio = 4;
  283 + //ZoomRatio = 8;
270 break; 284 break;
271 285
272 default: 286 default:
@@ -279,6 +293,12 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len @@ -279,6 +293,12 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
279 JZC1_RgaDeal(g_C1_RgaIrcInfo, ZoomRatio, raw_data, &raw_data_len); 293 JZC1_RgaDeal(g_C1_RgaIrcInfo, ZoomRatio, raw_data, &raw_data_len);
280 } 294 }
281 295
  296 + //将数据放入混合缓冲区
  297 + if (g_MixedIrc_Buffer != NULL)
  298 + {
  299 + memcpy(g_MixedIrc_Buffer, raw_data, raw_data_len);
  300 + }
  301 +
282 //将原始码流数据写入到编码器 并转换为h264 302 //将原始码流数据写入到编码器 并转换为h264
283 unsigned char *h264Data = NULL; 303 unsigned char *h264Data = NULL;
284 unsigned int h264DataLen = 0; 304 unsigned int h264DataLen = 0;
@@ -586,8 +606,6 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() @@ -586,8 +606,6 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init()
586 * 606 *
587 * ******************/ 607 * ******************/
588 608
589 -static unsigned char *g_MixedIrc_Buffer = NULL;  
590 -static unsigned char *g_MixedOpt_Buffer = NULL;  
591 609
592 /****************** 610 /******************
593 * 611 *
@@ -615,51 +633,102 @@ static void *MixedVideo_Thread(void *args) @@ -615,51 +633,102 @@ static void *MixedVideo_Thread(void *args)
615 //设置间隔时间 633 //设置间隔时间
616 long long period = NSEC_PER_SEC / TARGET_FPS; 634 long long period = NSEC_PER_SEC / TARGET_FPS;
617 635
618 - //混合视频缓冲区  
619 - unsigned char * MixedIrc_Buffer = (unsigned char *)malloc((JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2);  
620 - unsigned char * MixedOpt_Buffer = (unsigned char *)malloc(JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2);  
621 -  
622 - //初始化混合视频的rga  
623 - int Irc_width = JZ_ALIGN(FIRST_WIDTH, 16);  
624 - int Irc_height = JZ_ALIGN(FIRST_HEIGHT, 16);  
625 - int IRc_Rect_x = 0;  
626 - int IRc_Rect_y = 0;  
627 - int Irc_Rect_w = JZ_ALIGN(FIRST_WIDTH, 16);  
628 - int Irc_Rect_h = JZ_ALIGN(FIRST_HEIGHT, 16);  
629 - int Irc_Format = RK_FORMAT_YCbCr_420_SP;  
630 -  
631 - int Opt_width = JZ_ALIGN(SECOND_WIDTH, 16);  
632 - int Opt_height = JZ_ALIGN(SECOND_HEIGHT, 16);  
633 - int Opt_Rect_x = 0;  
634 - int Opt_Rect_y = 0;  
635 - int Opt_Rect_w = JZ_ALIGN(SECOND_WIDTH, 16);  
636 - int Opt_Rect_h = JZ_ALIGN(SECOND_HEIGHT, 16);  
637 - int Opt_Format = RK_FORMAT_YCbCr_420_SP; 636 +/***** 红外图像参数 **********************************************************************************************************/
  637 +
  638 + //红外源图像
  639 + im_rect Irc_Rect;
  640 + Irc_Rect.x = 0;
  641 + Irc_Rect.y = 0;
  642 + Irc_Rect.width = JZ_ALIGN(FIRST_WIDTH, 16);
  643 + Irc_Rect.height = JZ_ALIGN(FIRST_HEIGHT, 16);
  644 + int IRc_Format = RK_FORMAT_YCbCr_420_SP;
  645 +
  646 + //红外放大图像
  647 + im_rect Irc_ResizeRect;
  648 + Irc_ResizeRect.x = 0;
  649 + Irc_ResizeRect.y = 0;
  650 + Irc_ResizeRect.width = JZ_ALIGN(FIRST_WIDTH, 16) * 4;
  651 + Irc_ResizeRect.height = JZ_ALIGN(FIRST_HEIGHT, 16) * 4;
  652 +
  653 + //红外裁剪区域
  654 + im_rect Irc_CropRect;
  655 + Irc_CropRect.width = Irc_ResizeRect.width / 4 * 3;
  656 + Irc_CropRect.height = Irc_ResizeRect.height / 4 * 3;
  657 + Irc_CropRect.x = (Irc_ResizeRect.width - Irc_CropRect.width)/2;
  658 + Irc_CropRect.y = (Irc_ResizeRect.height - Irc_CropRect.height)/2;
638 659
639 //红外源图像 660 //红外源图像
640 RK_RgaImage *Irc_SrcImg = NULL; 661 RK_RgaImage *Irc_SrcImg = NULL;
641 - RK_Rga_ImageInit(&Irc_SrcImg, Irc_width, Irc_height, Irc_Format, IRc_Rect_x, IRc_Rect_y, Irc_Rect_w, Irc_Rect_h); 662 + RK_Rga_ImageInit(&Irc_SrcImg, Irc_Rect.width, Irc_Rect.height, IRc_Format, Irc_Rect.x, Irc_Rect.y, Irc_Rect.width, Irc_Rect.height);
642 663
643 //红外放大图像 664 //红外放大图像
644 RK_RgaImage *Irc_ResizeImg = NULL; 665 RK_RgaImage *Irc_ResizeImg = NULL;
645 - RK_Rga_ImageInit(&Irc_ResizeImg, Irc_width*4, Irc_height*4, Irc_Format, IRc_Rect_x, IRc_Rect_y, Irc_Rect_w*4, Irc_Rect_h*4); 666 + RK_Rga_ImageInit(&Irc_ResizeImg, Irc_ResizeRect.width, Irc_ResizeRect.height, IRc_Format, Irc_ResizeRect.x, Irc_ResizeRect.y, Irc_ResizeRect.width, Irc_ResizeRect.height);
646 667
647 //红外裁剪图像 668 //红外裁剪图像
648 RK_RgaImage *Irc_CropImg = NULL; 669 RK_RgaImage *Irc_CropImg = NULL;
649 - RK_Rga_ImageInit(&Irc_CropImg, (Irc_width*4) /4 *3, (Irc_height*4) /4 *3, Irc_Format, (Irc_width*4)/4, (Irc_height*4)/4, (Irc_width*4) /4 *3, (Irc_height*4) /4 *3); 670 + RK_Rga_ImageInit(&Irc_CropImg, Irc_CropRect.width, Irc_CropRect.height, IRc_Format, 0, 0, Irc_CropRect.width, Irc_CropRect.height);
  671 +
  672 +/***** 光学图像参数 **********************************************************************************************************/
  673 +
  674 + //光学源图像
  675 + im_rect Opt_Rect;
  676 + Opt_Rect.x = 0;
  677 + Opt_Rect.y = 0;
  678 + Opt_Rect.width = JZ_ALIGN(SECOND_WIDTH, 16);
  679 + Opt_Rect.height = JZ_ALIGN(SECOND_HEIGHT, 16);
  680 + int Opt_Format = RK_FORMAT_YCbCr_420_SP;
  681 +
  682 + //光学源缩小图像
  683 + im_rect Opt_ResizeRect;
  684 + Opt_ResizeRect.x = 0;
  685 + Opt_ResizeRect.y = 0;
  686 + Opt_ResizeRect.width = JZ_ALIGN(SECOND_WIDTH, 16) / 2;
  687 + Opt_ResizeRect.height = JZ_ALIGN(SECOND_HEIGHT, 16) / 2;
650 688
651 //光学源图像 689 //光学源图像
652 RK_RgaImage *Opt_SrcImg = NULL; 690 RK_RgaImage *Opt_SrcImg = NULL;
653 - RK_Rga_ImageInit(&Opt_SrcImg, Opt_width, Opt_height, Opt_Format, Opt_Rect_x, Opt_Rect_y, Opt_Rect_w, Opt_Rect_h); 691 + RK_Rga_ImageInit(&Opt_SrcImg, Opt_Rect.width, Opt_Rect.height, Opt_Format, Opt_Rect.x, Opt_Rect.y, Opt_Rect.width, Opt_Rect.height);
654 692
655 //光学的缩小图像 693 //光学的缩小图像
656 RK_RgaImage *Opt_ResizeImg = NULL; 694 RK_RgaImage *Opt_ResizeImg = NULL;
657 - RK_Rga_ImageInit(&Opt_ResizeImg, Opt_width/2, Opt_height/2, Opt_Format, Opt_Rect_x, Opt_Rect_y, Opt_Rect_w/2, Opt_Rect_h/2); 695 + RK_Rga_ImageInit(&Opt_ResizeImg, Opt_ResizeRect.width, Opt_ResizeRect.height, Opt_Format, Opt_ResizeRect.x, Opt_ResizeRect.y, Opt_ResizeRect.width, Opt_ResizeRect.height);
  696 +
  697 +
  698 +/***** 目标图像参数 ***************************************************************************************************/
  699 +
  700 + //目标图像的矩形
  701 + im_rect Dst_Rect;
  702 + Dst_Rect.x = 0;
  703 + Dst_Rect.y = 0;
  704 + Dst_Rect.width = JZ_ALIGN(SECOND_WIDTH, 16);
  705 + Dst_Rect.height = JZ_ALIGN(SECOND_HEIGHT, 16);
  706 + int Dst_Format = RK_FORMAT_YCbCr_420_SP;
  707 +
  708 + //目标图像中光学图像的矩形
  709 + im_rect Dst_OptRect;
  710 + Dst_OptRect.x = Dst_Rect.width / 2;
  711 + Dst_OptRect.y = Dst_Rect.height / 4;
  712 + Dst_OptRect.width = Opt_ResizeRect.width;
  713 + Dst_OptRect.height = Opt_ResizeRect.height;
  714 +
  715 + //目标图像中红外图像的矩形
  716 + im_rect Dst_IrcRect;
  717 + Dst_IrcRect.x = 0;
  718 + Dst_IrcRect.y = (Dst_Rect.height - Irc_CropRect.height) / 2;
  719 + Dst_IrcRect.width = Irc_CropRect.width;
  720 + Dst_IrcRect.height = Irc_CropRect.height;
658 721
659 //目标图像 722 //目标图像
660 RK_RgaImage *DstImg = NULL; 723 RK_RgaImage *DstImg = NULL;
661 - RK_Rga_ImageInit(&DstImg, Irc_width, Irc_height, Irc_Format, IRc_Rect_x, IRc_Rect_y, Irc_Rect_w, Irc_Rect_h); 724 + RK_Rga_ImageInit(&DstImg, Dst_Rect.width, Dst_Rect.height, Dst_Format, Dst_Rect.x, Dst_Rect.y, Dst_Rect.width, Dst_Rect.height);
  725 + JZSDK_LOG_DEBUG("Dstimg witdh :%d height:%d DstImg->buf_size:%d", DstImg->width, DstImg->height, DstImg->buf_size);
662 726
  727 + //空缓冲区
  728 + rga_buffer_t EmptyImg = {0};
  729 + im_rect EmptyRect = {0};
  730 +
  731 +//开始绘制画面,待优化,如多步骤合成为一个步骤
663 while (1) 732 while (1)
664 { 733 {
665 //获取当前时间 734 //获取当前时间
@@ -672,23 +741,31 @@ static void *MixedVideo_Thread(void *args) @@ -672,23 +741,31 @@ static void *MixedVideo_Thread(void *args)
672 //超过33ms 741 //超过33ms
673 if (elapsed_time >= period) 742 if (elapsed_time >= period)
674 { 743 {
675 - // while (FrameBuffer_UseFlag == JZ_FLAGCODE_ON)  
676 - // {  
677 - // delayUs(100);  
678 - // } 744 + if (g_MixedIrc_Buffer == NULL || g_MixedOpt_Buffer == NULL)
  745 + {
  746 + delayMs(100);
  747 + continue;
  748 + }
  749 +
  750 + while (g_MixedOptBuffer_UseFlag == JZ_FLAGCODE_ON)
  751 + {
  752 + delayUs(100);
  753 + }
679 754
680 - //将数据放入缓冲区  
681 - memcpy(MixedIrc_Buffer, g_MixedIrc_Buffer, (JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2);  
682 - memcpy(MixedOpt_Buffer, g_MixedOpt_Buffer, JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2); 755 + g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_ON;
  756 +
  757 + //填充输出图像
  758 + memset(DstImg->buf, 0x80, DstImg->buf_size);
683 759
684 //混合视频处理 760 //混合视频处理
685 - memset(MixedIrc_Buffer, 0, sizeof(MixedIrc_Buffer));  
686 - memset(MixedOpt_Buffer, 0, sizeof(MixedOpt_Buffer)); 761 + memset(Irc_SrcImg->buf, 0, Irc_SrcImg->buf_size);
  762 + memset(Opt_SrcImg->buf, 0, Opt_SrcImg->buf_size);
687 763
688 - memcpy(MixedIrc_Buffer, g_MixedIrc_Buffer, (JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2);  
689 - memcpy(MixedOpt_Buffer, g_MixedOpt_Buffer, JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2); 764 + //将数据放入缓冲区
  765 + memcpy(Irc_SrcImg->buf, g_MixedIrc_Buffer, (JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2);
  766 + memcpy(Opt_SrcImg->buf, g_MixedOpt_Buffer, JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2);
690 767
691 - //FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; 768 + g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF;
692 769
693 //光学数据处理 770 //光学数据处理
694 //缩小图像到1/2 771 //缩小图像到1/2
@@ -709,21 +786,55 @@ static void *MixedVideo_Thread(void *args) @@ -709,21 +786,55 @@ static void *MixedVideo_Thread(void *args)
709 } 786 }
710 787
711 //裁切红外图像 788 //裁切红外图像
712 - d_ret = imcrop(Irc_ResizeImg->img, Irc_CropImg->img, Irc_CropImg->rect); 789 + d_ret = imcrop(Irc_ResizeImg->img, Irc_CropImg->img, Irc_CropRect);
713 if (d_ret != IM_STATUS_SUCCESS) 790 if (d_ret != IM_STATUS_SUCCESS)
714 { 791 {
715 printf("opt crop failed\n"); 792 printf("opt crop failed\n");
716 continue; 793 continue;
717 } 794 }
718 795
719 - //以下参考rga_alpha_yuv_demo.cpp  
720 -  
721 //将缩放好的光学画面放入目标画面 796 //将缩放好的光学画面放入目标画面
722 - int usage = IM_SYNC | IM_ALPHA_BLEND_DST_OVER | IM_ALPHA_BLEND_PRE_MUL;  
723 - // d_ret = improcess() 797 + d_ret = improcess(Opt_ResizeImg->img, DstImg->img, EmptyImg, Opt_ResizeRect, Dst_OptRect, EmptyRect, IM_SYNC);
  798 + if (d_ret != IM_STATUS_SUCCESS)
  799 + {
  800 + printf("opt improcess failed\n");
  801 + continue;
  802 + }
724 803
  804 + //将裁切好的红外画面放入目标画面
  805 + d_ret = improcess(Irc_CropImg->img, DstImg->img, EmptyImg, Irc_CropImg->rect, Dst_IrcRect, EmptyRect, IM_SYNC);
  806 + if (d_ret != IM_STATUS_SUCCESS)
  807 + {
  808 + printf("irc improcess failed\n");
  809 + }
  810 +
  811 + //将原始码流数据写入到编码器 并转换为h264
  812 + unsigned char *h264Data = NULL;
  813 + unsigned int h264DataLen = 0;
  814 +
  815 + //JZSDK_LOG_DEBUG("DstImg->buf_size:%d", DstImg->buf_size);
  816 +
  817 +#ifdef RTK_MPP_STATUS_ON
  818 + MppPacket Packet = NULL;
  819 +
  820 + RTK_mmp_enc_data_to_h264(JZsdk_RtkMmpGetEncHandleAddr(2), DstImg->buf, DstImg->buf_size, &Packet);
  821 +
  822 + h264DataLen = mpp_packet_get_length(Packet);
  823 + h264Data = (unsigned char *)mpp_packet_get_pos(Packet);
  824 + //EncCfg->Packet_eos = mpp_packet_get_eos(packet);
  825 + // printf("获取到编码内容 len:%d\n",packet_len);
  826 +
  827 + //释放掉packet
  828 + mpp_packet_deinit(&Packet);
  829 +#endif
725 830
726 - // prev_time = current_time; 831 + //推送视频流
  832 + JZC1_PushFrame(VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD, h264Data, h264DataLen);
  833 +
  834 + //JZSDK_LOG_DEBUG("混合一帧 :%d", h264DataLen);
  835 +
  836 + //更新时间
  837 + prev_time = current_time;
727 } 838 }
728 839
729 // 为了防止过于频繁地调用 clock_gettime,可以添加一个小的睡眠时间 840 // 为了防止过于频繁地调用 clock_gettime,可以添加一个小的睡眠时间
@@ -789,6 +900,10 @@ static T_JZsdkReturnCode JZC1_MediaInit() @@ -789,6 +900,10 @@ static T_JZsdkReturnCode JZC1_MediaInit()
789 900
790 // RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); 901 // RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT);
791 // RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); 902 // RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15);
  903 +
  904 + //初始化混合视频流的编码器
  905 + RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(2), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15);
  906 +
792 #endif 907 #endif
793 908
794 //初始化Camera模块 909 //初始化Camera模块
@@ -824,7 +939,7 @@ static T_JZsdkReturnCode JZC1_MediaInit() @@ -824,7 +939,7 @@ static T_JZsdkReturnCode JZC1_MediaInit()
824 //设置默认参数 939 //设置默认参数
825 940
826 //默认推送红外摄像头 后续改成 红外+光学 的组合画面 941 //默认推送红外摄像头 后续改成 红外+光学 的组合画面
827 - VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); 942 + VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD);
828 943
829 //设置快门为开 944 //设置快门为开
830 JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON); 945 JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON);
@@ -837,6 +952,10 @@ static T_JZsdkReturnCode JZC1_MediaInit() @@ -837,6 +952,10 @@ static T_JZsdkReturnCode JZC1_MediaInit()
837 value = 0; 952 value = 0;
838 Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); 953 Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value);
839 954
  955 + //设置默认打开自动校正
  956 + value = JZ_FLAGCODE_ON;
  957 + Proc_IRC_param(JZ_FLAGCODE_SET, JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE, &value);
  958 +
840 //初始化变焦模块 959 //初始化变焦模块
841 Cam_Zoom_Init(); 960 Cam_Zoom_Init();
842 961
@@ -844,6 +963,9 @@ static T_JZsdkReturnCode JZC1_MediaInit() @@ -844,6 +963,9 @@ static T_JZsdkReturnCode JZC1_MediaInit()
844 #ifdef RTK_RGA_STATUS_ON 963 #ifdef RTK_RGA_STATUS_ON
845 ret = JZC1_RgaInit(&g_C1_RgaIrcInfo, JZ_ALIGN(FIRST_WIDTH, 16), JZ_ALIGN(FIRST_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP); 964 ret = JZC1_RgaInit(&g_C1_RgaIrcInfo, JZ_ALIGN(FIRST_WIDTH, 16), JZ_ALIGN(FIRST_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP);
846 ret = JZC1_RgaInit(&g_C1_RgaOptInfo, JZ_ALIGN(SECOND_WIDTH, 16), JZ_ALIGN(SECOND_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP); 965 ret = JZC1_RgaInit(&g_C1_RgaOptInfo, JZ_ALIGN(SECOND_WIDTH, 16), JZ_ALIGN(SECOND_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP);
  966 +
  967 + //混合视频初始化
  968 + JZC1_MixedVideo_Init();
847 #endif 969 #endif
848 970
849 #endif 971 #endif
@@ -938,7 +1060,7 @@ static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned @@ -938,7 +1060,7 @@ static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned
938 d_ret = imcrop(rga_info->src_img->img, rga_info->corp_img->img, rga_info->corp_img->rect); 1060 d_ret = imcrop(rga_info->src_img->img, rga_info->corp_img->img, rga_info->corp_img->rect);
939 if (d_ret != IM_STATUS_SUCCESS) 1061 if (d_ret != IM_STATUS_SUCCESS)
940 { 1062 {
941 - printf("crop failed\n"); 1063 + printf("crop failed resize:%d\n",resize);
942 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 1064 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
943 } 1065 }
944 1066
@@ -76,8 +76,8 @@ typedef struct IRC_param @@ -76,8 +76,8 @@ typedef struct IRC_param
76 76
77 unsigned int TPC_ResetFlag; //tpc校准标志位 开启时进行tpc校准 77 unsigned int TPC_ResetFlag; //tpc校准标志位 开启时进行tpc校准
78 78
79 -  
80 - unsigned int TPC_mode; //tpc模式 0出厂打档 1手动打档 79 + unsigned int TPC_mode; //tpc数据模式 0出厂数据 1手动数据A 2手动数据B 3手动数据C 4手动数据D
  80 + unsigned int TPC_LastTPCMode; //上一次tpc数据模式
81 81
82 //画面纠正模式 82 //画面纠正模式
83 unsigned int FrameCorrectMode; //画面纠正模式 0 无纠正 1 单点纠正 2 两点纠正 83 unsigned int FrameCorrectMode; //画面纠正模式 0 无纠正 1 单点纠正 2 两点纠正
@@ -128,13 +128,27 @@ typedef struct IRC_param @@ -128,13 +128,27 @@ typedef struct IRC_param
128 128
129 typedef enum TEMP_CHOOSE 129 typedef enum TEMP_CHOOSE
130 { 130 {
131 - HIGH_SD_TEMP = 0,  
132 - LOW_SD_TEMP = 1,  
133 - HIGH_LOCAL_TEMP = 2,  
134 - LOW_LOCAL_TEMP = 3, 131 +
135 SPC_MARK_DATA = 4, 132 SPC_MARK_DATA = 4,
136 HIGH_DGCE_THRESHOLD = 5, 133 HIGH_DGCE_THRESHOLD = 5,
137 LOW_DGCE_THRESHOLD = 6, 134 LOW_DGCE_THRESHOLD = 6,
  135 +
  136 +
  137 + FACTORY_HIGH_TEMP = 10, //出厂高温数据
  138 + FACTORY_LOW_TEMP = 11, //出厂低温数据
  139 +
  140 + LOCAL_HIGH_TEMP_1 = 12, //手动高温数据1型
  141 + LOCAL_LOW_TEMP_1 = 13, //手动低温数据1型
  142 +
  143 + LOCAL_HIGH_TEMP_2 = 14, //手动高温数据2型
  144 + LOCAL_LOW_TEMP_2 = 15, //手动低温数据2型
  145 +
  146 + LOCAL_HIGH_TEMP_3 = 16, //手动高温数据3型
  147 + LOCAL_LOW_TEMP_3 = 17, //手动低温数据3型
  148 +
  149 + LOCAL_HIGH_TEMP_4 = 18, //手动高温数据4型
  150 + LOCAL_LOW_TEMP_4 = 19, //手动低温数据4型
  151 +
138 }TEMP_CHOOSE; 152 }TEMP_CHOOSE;
139 153
140 /* Exported types ------------------------------------------------------------*/ 154 /* Exported types ------------------------------------------------------------*/
@@ -9,10 +9,21 @@ @@ -9,10 +9,21 @@
9 #include "./IRC_data_deal.h" 9 #include "./IRC_data_deal.h"
10 10
11 #define IRC_FILE_DIR "/root/IRC_File" 11 #define IRC_FILE_DIR "/root/IRC_File"
12 -#define HIGH_SD_DIR "AvgMarkedHighT.txt"  
13 -#define LOW_SD_DIR "AvgMarkedLowT.txt"  
14 -#define HIGH_LOCAL_DIR "AvgMarkedHighTLocal.txt"  
15 -#define LOW_LOCAL_DIR "AvgMarkedLowTLocal.txt" 12 +#define FACTORY_HIGH_DATA_DIR "AvgMarkedHighT.txt"
  13 +#define FACTORY_LOW_DATA_DIR "AvgMarkedLowT.txt"
  14 +
  15 +#define LOCAL_HIGH_SPC_DATA_DIR "AvgMarkedHighTLocal.txt" //沿用之前的
  16 +#define LOCAL_LOW_SPC_DATA_DIR "AvgMarkedLowTLocal.txt" //沿用之前的
  17 +
  18 +#define LOCAL_HIGH_SPC_DATA_DIR_2 "AvgMarkedHighTLocal_2.txt"
  19 +#define LOCAL_LOW_SPC_DATA_DIR_2 "AvgMarkedLowTLocal_2.txt"
  20 +
  21 +#define LOCAL_HIGH_SPC_DATA_DIR_3 "AvgMarkedHighTLocal_3.txt"
  22 +#define LOCAL_LOW_SPC_DATA_DIR_3 "AvgMarkedLowTLocal_3.txt"
  23 +
  24 +#define LOCAL_HIGH_SPC_DATA_DIR_4 "AvgMarkedHighTLocal_4.txt"
  25 +#define LOCAL_LOW_SPC_DATA_DIR_4 "AvgMarkedLowTLocal_4.txt"
  26 +
16 #define SPC_MARK_DATA_DIR "SPCMarkData.txt" 27 #define SPC_MARK_DATA_DIR "SPCMarkData.txt"
17 28
18 #define HIGH_THRESHOLD_DIR "/root/highThreshold.txt" 29 #define HIGH_THRESHOLD_DIR "/root/highThreshold.txt"
@@ -67,9 +78,6 @@ T_JZsdkReturnCode IRC_LowT_CycleCalibration(U16_t *ImageData,struct IRC_param *d @@ -67,9 +78,6 @@ T_JZsdkReturnCode IRC_LowT_CycleCalibration(U16_t *ImageData,struct IRC_param *d
67 dealInfo->LowT_NineFrame_Avg[i] = dealInfo->LowT_NineFrameAdd[i] / 9; 78 dealInfo->LowT_NineFrame_Avg[i] = dealInfo->LowT_NineFrameAdd[i] / 9;
68 } 79 }
69 80
70 - //存放到本地  
71 - IRC_LocalFrame_DataWrite(LOW_LOCAL_TEMP,dealInfo, (U16_t *)dealInfo->LowT_NineFrame_Avg, dealInfo->PixelNum);  
72 -  
73 dealInfo->LowT_flag = JZ_FLAGCODE_OFF; //将标志位归位 81 dealInfo->LowT_flag = JZ_FLAGCODE_OFF; //将标志位归位
74 82
75 JZSDK_LOG_DEBUG("低温数据记录完成"); 83 JZSDK_LOG_DEBUG("低温数据记录完成");
@@ -114,7 +122,7 @@ T_JZsdkReturnCode IRC_HighT_CycleCalibration(U16_t *ImageData, struct IRC_param @@ -114,7 +122,7 @@ T_JZsdkReturnCode IRC_HighT_CycleCalibration(U16_t *ImageData, struct IRC_param
114 dealInfo->HighT_flag++; 122 dealInfo->HighT_flag++;
115 } 123 }
116 124
117 - JZSDK_LOG_DEBUG("高温标定基准值已存入%d组",dealInfo->LowT_flag - 1); 125 + JZSDK_LOG_DEBUG("高温标定基准值已存入%d组",dealInfo->HighT_flag - 1);
118 126
119 if (dealInfo->HighT_flag > 9) //已经存储了9组数据 127 if (dealInfo->HighT_flag > 9) //已经存储了9组数据
120 { 128 {
@@ -123,9 +131,6 @@ T_JZsdkReturnCode IRC_HighT_CycleCalibration(U16_t *ImageData, struct IRC_param @@ -123,9 +131,6 @@ T_JZsdkReturnCode IRC_HighT_CycleCalibration(U16_t *ImageData, struct IRC_param
123 dealInfo->HighT_NineFrame_Avg[i] = dealInfo->HighT_NineFrameAdd[i] / 9; 131 dealInfo->HighT_NineFrame_Avg[i] = dealInfo->HighT_NineFrameAdd[i] / 9;
124 } 132 }
125 133
126 - //存放到本地  
127 - IRC_LocalFrame_DataWrite(HIGH_LOCAL_TEMP,dealInfo, (U16_t *)dealInfo->HighT_NineFrame_Avg, dealInfo->PixelNum);  
128 -  
129 dealInfo->HighT_flag = JZ_FLAGCODE_OFF; //将标志位归位 134 dealInfo->HighT_flag = JZ_FLAGCODE_OFF; //将标志位归位
130 135
131 JZSDK_LOG_DEBUG("高温数据记录完成"); 136 JZSDK_LOG_DEBUG("高温数据记录完成");
@@ -666,19 +671,44 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo) @@ -666,19 +671,44 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo)
666 671
667 switch (flag) 672 switch (flag)
668 { 673 {
669 - case HIGH_SD_TEMP:  
670 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, HIGH_SD_DIR); 674 + case FACTORY_HIGH_TEMP:
  675 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, FACTORY_HIGH_DATA_DIR);
671 break; 676 break;
672 677
673 - case LOW_SD_TEMP:  
674 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOW_SD_DIR); 678 + case LOCAL_HIGH_TEMP_1:
  679 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR);
  680 + break;
  681 +
  682 + case LOCAL_HIGH_TEMP_2:
  683 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR_2);
  684 + break;
675 685
676 - case HIGH_LOCAL_TEMP:  
677 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, HIGH_LOCAL_DIR); 686 + case LOCAL_HIGH_TEMP_3:
  687 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR_3);
678 break; 688 break;
679 689
680 - case LOW_LOCAL_TEMP:  
681 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOW_LOCAL_DIR); 690 + case LOCAL_HIGH_TEMP_4:
  691 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR_4);
  692 + break;
  693 +
  694 + case FACTORY_LOW_TEMP:
  695 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, FACTORY_LOW_DATA_DIR);
  696 + break;
  697 +
  698 + case LOCAL_LOW_TEMP_1:
  699 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR);
  700 + break;
  701 +
  702 + case LOCAL_LOW_TEMP_2:
  703 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR_2);
  704 + break;
  705 +
  706 + case LOCAL_LOW_TEMP_3:
  707 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR_3);
  708 + break;
  709 +
  710 + case LOCAL_LOW_TEMP_4:
  711 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR_4);
682 break; 712 break;
683 713
684 case SPC_MARK_DATA: 714 case SPC_MARK_DATA:
@@ -730,24 +760,22 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo) @@ -730,24 +760,22 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo)
730 760
731 switch (flag) 761 switch (flag)
732 { 762 {
733 - case HIGH_SD_TEMP:  
734 - memcpy(dealInfo->Factory_HighT_Mark_Data, numbers, count * sizeof(U16_t));  
735 - JZSDK_LOG_DEBUG("读取高SD温度数据");  
736 - break;  
737 -  
738 - case LOW_SD_TEMP:  
739 - memcpy(dealInfo->Factory_LowT_Mark_Data, numbers, count * sizeof(U16_t));  
740 - JZSDK_LOG_DEBUG("读取低SD温度数据");  
741 - break;  
742 -  
743 - case HIGH_LOCAL_TEMP: 763 + case FACTORY_HIGH_TEMP:
  764 + case LOCAL_HIGH_TEMP_1:
  765 + case LOCAL_HIGH_TEMP_2:
  766 + case LOCAL_HIGH_TEMP_3:
  767 + case LOCAL_HIGH_TEMP_4:
744 memcpy(dealInfo->HighT_NineFrame_Avg, numbers, count * sizeof(U16_t)); 768 memcpy(dealInfo->HighT_NineFrame_Avg, numbers, count * sizeof(U16_t));
745 - JZSDK_LOG_DEBUG("读取高本地温度数据"); 769 + JZSDK_LOG_DEBUG("读取高数据");
746 break; 770 break;
747 771
748 - case LOW_LOCAL_TEMP: 772 + case FACTORY_LOW_TEMP:
  773 + case LOCAL_LOW_TEMP_1:
  774 + case LOCAL_LOW_TEMP_2:
  775 + case LOCAL_LOW_TEMP_3:
  776 + case LOCAL_LOW_TEMP_4:
749 memcpy(dealInfo->LowT_NineFrame_Avg, numbers, count * sizeof(U16_t)); 777 memcpy(dealInfo->LowT_NineFrame_Avg, numbers, count * sizeof(U16_t));
750 - JZSDK_LOG_DEBUG("读取低本地温度数据"); 778 + JZSDK_LOG_DEBUG("读取低数据");
751 break; 779 break;
752 780
753 case SPC_MARK_DATA: 781 case SPC_MARK_DATA:
@@ -800,19 +828,44 @@ T_JZsdkReturnCode IRC_LocalFrame_DataWrite(int flag,struct IRC_param *dealInfo, @@ -800,19 +828,44 @@ T_JZsdkReturnCode IRC_LocalFrame_DataWrite(int flag,struct IRC_param *dealInfo,
800 828
801 switch (flag) 829 switch (flag)
802 { 830 {
803 - case HIGH_SD_TEMP:  
804 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, HIGH_SD_DIR); 831 + case FACTORY_HIGH_TEMP:
  832 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, FACTORY_HIGH_DATA_DIR);
  833 + break;
  834 +
  835 + case LOCAL_HIGH_TEMP_1:
  836 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR);
  837 + break;
  838 +
  839 + case LOCAL_HIGH_TEMP_2:
  840 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR_2);
805 break; 841 break;
806 842
807 - case LOW_SD_TEMP:  
808 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOW_SD_DIR); 843 + case LOCAL_HIGH_TEMP_3:
  844 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR_3);
  845 + break;
  846 +
  847 + case LOCAL_HIGH_TEMP_4:
  848 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_HIGH_SPC_DATA_DIR_4);
  849 + break;
  850 +
  851 + case FACTORY_LOW_TEMP:
  852 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, FACTORY_LOW_DATA_DIR);
  853 + break;
  854 +
  855 + case LOCAL_LOW_TEMP_1:
  856 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR);
  857 + break;
  858 +
  859 + case LOCAL_LOW_TEMP_2:
  860 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR_2);
  861 + break;
809 862
810 - case HIGH_LOCAL_TEMP:  
811 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, HIGH_LOCAL_DIR); 863 + case LOCAL_LOW_TEMP_3:
  864 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR_3);
812 break; 865 break;
813 866
814 - case LOW_LOCAL_TEMP:  
815 - snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOW_LOCAL_DIR); 867 + case LOCAL_LOW_TEMP_4:
  868 + snprintf(str, sizeof(str), "%s/%s",IRC_FILE_DIR, LOCAL_LOW_SPC_DATA_DIR_4);
816 break; 869 break;
817 870
818 case SPC_MARK_DATA: 871 case SPC_MARK_DATA:
@@ -44,6 +44,8 @@ T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate) @@ -44,6 +44,8 @@ T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate)
44 return ret; 44 return ret;
45 } 45 }
46 46
  47 +
  48 +
47 static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U16_t *rawData ,unsigned int *rawSize, struct IRC_param *dealInfo) 49 static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U16_t *rawData ,unsigned int *rawSize, struct IRC_param *dealInfo)
48 { 50 {
49 T_JZsdkReturnCode ret; 51 T_JZsdkReturnCode ret;
@@ -91,18 +93,206 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U16_t *rawData ,unsigned int * @@ -91,18 +93,206 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U16_t *rawData ,unsigned int *
91 } 93 }
92 94
93 /*************************************两点纠正部分******************************************************************/ 95 /*************************************两点纠正部分******************************************************************/
  96 +
  97 + //判断两点的数据模式是否有改变
  98 + //注:该判断默认拥有出厂的数据
  99 + if (dealInfo->TPC_mode != dealInfo->TPC_LastTPCMode)
  100 + {
  101 +
  102 + /********读取高温数据**********************************************************/
  103 + switch (dealInfo->TPC_mode)
  104 + {
  105 + //读取出厂的高温数据
  106 + case 0:
  107 + ret = IRC_LocalFrame_DataRead(FACTORY_HIGH_TEMP, dealInfo);
  108 + break;
  109 +
  110 + //读取手动数据1
  111 + case 1:
  112 + ret = IRC_LocalFrame_DataRead(LOCAL_HIGH_TEMP_1, dealInfo);
  113 + break;
  114 +
  115 + //读取手动数据2
  116 + case 2:
  117 + ret = IRC_LocalFrame_DataRead(LOCAL_HIGH_TEMP_2, dealInfo);
  118 + break;
  119 +
  120 + //读取手动数据3
  121 + case 3:
  122 + ret = IRC_LocalFrame_DataRead(LOCAL_HIGH_TEMP_3, dealInfo);
  123 + break;
  124 +
  125 + //读取手动数据4
  126 + case 4:
  127 + ret = IRC_LocalFrame_DataRead(LOCAL_HIGH_TEMP_4, dealInfo);
  128 + break;
  129 +
  130 + //其余读取出厂数据
  131 + default:
  132 + ret = IRC_LocalFrame_DataRead(FACTORY_HIGH_TEMP, dealInfo);
  133 + break;
  134 + }
  135 +
  136 + //如果读取数据失败,则当场开启录入标志位
  137 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  138 + {
  139 + JZSDK_LOG_ERROR("数据读取失败");
  140 +
  141 + //先填入出厂数据
  142 + IRC_LocalFrame_DataRead(FACTORY_HIGH_TEMP, dealInfo);
  143 +
  144 + //且开启数据录入标志位
  145 + dealInfo->HighT_flag = JZ_FLAGCODE_ON;
  146 + }
  147 +
  148 +
  149 + /********读取低温数据**********************************************************/
  150 + switch (dealInfo->TPC_mode)
  151 + {
  152 + //读取出厂的低温数据
  153 + case 0:
  154 + ret = IRC_LocalFrame_DataRead(FACTORY_LOW_TEMP, dealInfo);
  155 + break;
  156 +
  157 + //读取手动数据1
  158 + case 1:
  159 + ret = IRC_LocalFrame_DataRead(LOCAL_LOW_TEMP_1, dealInfo);
  160 + break;
  161 +
  162 + //读取手动数据2
  163 + case 2:
  164 + ret = IRC_LocalFrame_DataRead(LOCAL_LOW_TEMP_2, dealInfo);
  165 + break;
  166 +
  167 + //读取手动数据3
  168 + case 3:
  169 + ret = IRC_LocalFrame_DataRead(LOCAL_LOW_TEMP_3, dealInfo);
  170 + break;
  171 +
  172 + //读取手动数据4
  173 + case 4:
  174 + ret = IRC_LocalFrame_DataRead(LOCAL_LOW_TEMP_4, dealInfo);
  175 + break;
  176 +
  177 + //其余读取出厂数据
  178 + default:
  179 + ret = IRC_LocalFrame_DataRead(FACTORY_LOW_TEMP, dealInfo);
  180 + break;
  181 + }
  182 +
  183 + //如果读取数据失败,则当场开启录入标志位
  184 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  185 + {
  186 + JZSDK_LOG_ERROR("数据读取失败");
  187 +
  188 + //先填入出厂数据
  189 + IRC_LocalFrame_DataRead(FACTORY_LOW_TEMP, dealInfo);
  190 +
  191 + //且开启数据录入标志位
  192 + dealInfo->LowT_flag = JZ_FLAGCODE_ON;
  193 + }
  194 +
  195 + //***********重新计算两点校正的斜率**************************************/
  196 + JZIrcLib_TPC_Slope_Calculation2(dealInfo);
  197 + }
  198 +
  199 +
94 //如果开启了低温循环标定,计算低温循环数据 200 //如果开启了低温循环标定,计算低温循环数据
95 if (dealInfo->LowT_flag != JZ_FLAGCODE_OFF) 201 if (dealInfo->LowT_flag != JZ_FLAGCODE_OFF)
96 { 202 {
  203 + //将数据写入缓冲区
97 IRC_LowT_CycleCalibration(rawData, dealInfo); 204 IRC_LowT_CycleCalibration(rawData, dealInfo);
  205 +
  206 + //数据重新缓存完毕,将缓存保存到本地
  207 + if (dealInfo->LowT_flag == JZ_FLAGCODE_OFF)
  208 + {
  209 +
  210 + switch (dealInfo->TPC_mode)
  211 + {
  212 + //写入出厂的低温数据
  213 + case 0:
  214 + JZSDK_LOG_DEBUG("无法覆盖出厂的低温数据");
  215 + break;
  216 +
  217 + //写入手动数据1
  218 + case 1:
  219 + IRC_LocalFrame_DataWrite(LOCAL_LOW_TEMP_1,dealInfo, dealInfo->LowT_NineFrame_Avg, dealInfo->PixelNum);
  220 + break;
  221 +
  222 + //写入手动数据2
  223 + case 2:
  224 + IRC_LocalFrame_DataWrite(LOCAL_LOW_TEMP_2,dealInfo, dealInfo->LowT_NineFrame_Avg, dealInfo->PixelNum);
  225 + break;
  226 +
  227 + //写入手动数据3
  228 + case 3:
  229 + IRC_LocalFrame_DataWrite(LOCAL_LOW_TEMP_3,dealInfo, dealInfo->LowT_NineFrame_Avg, dealInfo->PixelNum);
  230 + break;
  231 +
  232 + //写入手动数据4
  233 + case 4:
  234 + IRC_LocalFrame_DataWrite(LOCAL_LOW_TEMP_4,dealInfo, dealInfo->LowT_NineFrame_Avg, dealInfo->PixelNum);
  235 + break;
  236 +
  237 + default:
  238 + JZSDK_LOG_DEBUG("无法覆盖出厂的低温数据");
  239 + break;
  240 + }
  241 + }
  242 +
  243 + //***********重新计算两点校正的斜率**************************************/
  244 + JZIrcLib_TPC_Slope_Calculation2(dealInfo);
98 } 245 }
99 246
100 //如果开启了高温循环标定,计算高温循环数据 247 //如果开启了高温循环标定,计算高温循环数据
101 if (dealInfo->HighT_flag != JZ_FLAGCODE_OFF) 248 if (dealInfo->HighT_flag != JZ_FLAGCODE_OFF)
102 { 249 {
  250 + //将数据写入缓冲区
103 IRC_HighT_CycleCalibration(rawData, dealInfo); 251 IRC_HighT_CycleCalibration(rawData, dealInfo);
  252 +
  253 + //数据重新缓存完毕,将缓存保存到本地
  254 + if (dealInfo->HighT_flag == JZ_FLAGCODE_OFF)
  255 + {
  256 + switch (dealInfo->TPC_mode)
  257 + {
  258 + //写入出厂的高温数据
  259 + case 0:
  260 + JZSDK_LOG_DEBUG("无法覆盖出厂的高温数据");
  261 + break;
  262 +
  263 + //写入手动数据1
  264 + case 1:
  265 + IRC_LocalFrame_DataWrite(LOCAL_HIGH_TEMP_1,dealInfo, dealInfo->HighT_NineFrame_Avg, dealInfo->PixelNum);
  266 + break;
  267 +
  268 + //写入手动数据2
  269 + case 2:
  270 + IRC_LocalFrame_DataWrite(LOCAL_HIGH_TEMP_2,dealInfo, dealInfo->HighT_NineFrame_Avg, dealInfo->PixelNum);
  271 + break;
  272 +
  273 + //写入手动数据3
  274 + case 3:
  275 + IRC_LocalFrame_DataWrite(LOCAL_HIGH_TEMP_3,dealInfo, dealInfo->HighT_NineFrame_Avg, dealInfo->PixelNum);
  276 + break;
  277 +
  278 + //写入手动数据4
  279 + case 4:
  280 + IRC_LocalFrame_DataWrite(LOCAL_HIGH_TEMP_4,dealInfo, dealInfo->HighT_NineFrame_Avg, dealInfo->PixelNum);
  281 + break;
  282 +
  283 + default:
  284 + JZSDK_LOG_DEBUG("无法覆盖出厂的高温数据");
  285 + break;
  286 + }
  287 + }
  288 +
  289 + //***********重新计算两点校正的斜率**************************************/
  290 + JZIrcLib_TPC_Slope_Calculation2(dealInfo);
104 } 291 }
105 292
  293 + //两点校正模式
  294 + dealInfo->TPC_LastTPCMode = dealInfo->TPC_mode;
  295 +
106 /*************************************单点纠正部分******************************************************************/ 296 /*************************************单点纠正部分******************************************************************/
107 //单点校正spc如果未进行过数据的标定,则进行一次 297 //单点校正spc如果未进行过数据的标定,则进行一次
108 if (dealInfo->FirstSPC_flag == JZ_FLAGCODE_OFF) 298 if (dealInfo->FirstSPC_flag == JZ_FLAGCODE_OFF)
@@ -744,7 +934,6 @@ static T_JZsdkReturnCode IRC_Set_SpcTime(int timebase) @@ -744,7 +934,6 @@ static T_JZsdkReturnCode IRC_Set_SpcTime(int timebase)
744 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 934 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
745 } 935 }
746 936
747 -int Last_TpcMode = 0;  
748 /******************************************** 937 /********************************************
749 * 938 *
750 * 设置两点纠正模式 939 * 设置两点纠正模式
@@ -758,28 +947,16 @@ static T_JZsdkReturnCode IRC_Set_TpcMode(int mode) @@ -758,28 +947,16 @@ static T_JZsdkReturnCode IRC_Set_TpcMode(int mode)
758 if (mode == 0) 947 if (mode == 0)
759 { 948 {
760 JZSDK_LOG_INFO("出厂高低温模式"); 949 JZSDK_LOG_INFO("出厂高低温模式");
761 - if (Last_TpcMode != mode)  
762 - {  
763 - //重新读取数据  
764 - IRC_LocalFrame_DataRead(HIGH_SD_TEMP, g_IRC_Param);  
765 - }  
766 -  
767 } 950 }
768 - else if (mode == 1) 951 + else if (mode == 1 || mode == 2 || mode == 3 || mode == 4)
769 { 952 {
770 - JZSDK_LOG_INFO("手动高低温模式");  
771 - if (Last_TpcMode != mode)  
772 - {  
773 - //重新读取数据  
774 - IRC_LocalFrame_DataRead(HIGH_LOCAL_TEMP, g_IRC_Param);  
775 - } 953 + JZSDK_LOG_INFO("手动高低温模式 %d", mode);
776 } 954 }
777 else 955 else
778 { 956 {
779 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 957 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
780 } 958 }
781 959
782 - Last_TpcMode = mode;  
783 g_IRC_Param->TPC_mode = mode; 960 g_IRC_Param->TPC_mode = mode;
784 961
785 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 962 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
@@ -922,73 +1099,6 @@ T_JZsdkReturnCode Proc_IRC_param(int flagcode, enum JZsdk_Widget_Control paramfl @@ -922,73 +1099,6 @@ T_JZsdkReturnCode Proc_IRC_param(int flagcode, enum JZsdk_Widget_Control paramfl
922 1099
923 1100
924 1101
925 -/*  
926 - 填入高温数据  
927 -*/  
928 -static T_JZsdkReturnCode IRC_Set_HighTempData(struct IRC_param *dealInfo)  
929 -{  
930 - T_JZsdkReturnCode ret;  
931 -  
932 - //先尝试 填入录入的数据  
933 - ret = IRC_LocalFrame_DataRead(HIGH_SD_TEMP, dealInfo);  
934 - if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)  
935 - {  
936 - JZSDK_LOG_INFO("外置高温数据录入成功");  
937 - dealInfo->Factory_HighT_Mark_Data_flag = JZ_FLAGCODE_ON;  
938 - }  
939 -  
940 - //失败了录入 本地数据  
941 - ret = IRC_LocalFrame_DataRead(HIGH_LOCAL_TEMP, dealInfo);  
942 - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)  
943 - {  
944 - JZSDK_LOG_ERROR("没有本地高温数据数据,打开录入标志");  
945 - dealInfo->HighT_flag = JZ_FLAGCODE_ON; //打开录入标志  
946 - }  
947 - else  
948 - {  
949 - JZSDK_LOG_INFO("本地高温数据录入成功");  
950 - }  
951 -  
952 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
953 -}  
954 -  
955 -/*  
956 - 填入低温数据  
957 -*/  
958 -static T_JZsdkReturnCode IRC_Set_LowTempData(struct IRC_param *dealInfo)  
959 -{  
960 - T_JZsdkReturnCode ret;  
961 -  
962 - //先尝试 填入录入的数据  
963 - ret = IRC_LocalFrame_DataRead(LOW_SD_TEMP, dealInfo);  
964 - if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)  
965 - {  
966 - JZSDK_LOG_INFO("外置低温数据录入成功");  
967 - dealInfo->Factory_LowT_Mark_Data_flag = JZ_FLAGCODE_ON;  
968 - }  
969 -  
970 - //失败了录入 本地数据  
971 - ret = IRC_LocalFrame_DataRead(LOW_LOCAL_TEMP, dealInfo);  
972 - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)  
973 - {  
974 - JZSDK_LOG_ERROR("没有本地低温数据数据,打开录入标志");  
975 - dealInfo->LowT_flag = JZ_FLAGCODE_ON; //打开录入标志  
976 - }  
977 - else  
978 - {  
979 - JZSDK_LOG_INFO("本地低温数据录入成功");  
980 - }  
981 -  
982 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
983 -}  
984 -  
985 -  
986 -  
987 -  
988 -  
989 -  
990 -  
991 -  
992 1102
993 1103
994 1104
@@ -1132,11 +1242,14 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in @@ -1132,11 +1242,14 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in
1132 * 1242 *
1133 **********************************************************************************************/ 1243 **********************************************************************************************/
1134 1244
1135 - //填入高温数据  
1136 - IRC_Set_HighTempData(IrcDealCfg); 1245 + //填入出厂的高温数据
  1246 + IRC_LocalFrame_DataRead(FACTORY_HIGH_TEMP, IrcDealCfg);
1137 1247
1138 //填入低温数据 1248 //填入低温数据
1139 - IRC_Set_LowTempData(IrcDealCfg); 1249 + IRC_LocalFrame_DataRead(FACTORY_LOW_TEMP, IrcDealCfg);
  1250 +
  1251 + //计算两点系数***********重新计算两点校正的斜率**************************************/
  1252 + JZIrcLib_TPC_Slope_Calculation2(IrcDealCfg);
1140 1253
1141 //开启tpc校验标志 1254 //开启tpc校验标志
1142 IrcDealCfg->TPC_ResetFlag = JZ_FLAGCODE_ON; 1255 IrcDealCfg->TPC_ResetFlag = JZ_FLAGCODE_ON;
@@ -254,14 +254,9 @@ static T_JZsdkReturnCode JZIrcLib_SPC_Slope_Calculation(struct IRC_param *dealIn @@ -254,14 +254,9 @@ static T_JZsdkReturnCode JZIrcLib_SPC_Slope_Calculation(struct IRC_param *dealIn
254 IRC_SPC_ParamCorrect(dealInfo, dealInfo->Factory_LowT_Mark_Data); 254 IRC_SPC_ParamCorrect(dealInfo, dealInfo->Factory_LowT_Mark_Data);
255 } 255 }
256 //采用手动模式的斜率 256 //采用手动模式的斜率
257 - else if (dealInfo->TPC_mode == 1 && dealInfo->LowT_NineFrame_Avg != NULL)  
258 - {  
259 - IRC_SPC_ParamCorrect(dealInfo, dealInfo->LowT_NineFrame_Avg);  
260 - }  
261 - //都不满足的情况下,采用默认的斜率  
262 else 257 else
263 { 258 {
264 - IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data); 259 + IRC_SPC_ParamCorrect(dealInfo, dealInfo->LowT_NineFrame_Avg);
265 } 260 }
266 } 261 }
267 //都不满足的情况下,采用默认的斜率 262 //都不满足的情况下,采用默认的斜率
@@ -368,7 +363,7 @@ static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealIn @@ -368,7 +363,7 @@ static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealIn
368 * 363 *
369 * 364 *
370 * *******************/ 365 * *******************/
371 -static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation2(struct IRC_param *dealInfo) 366 +T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation2(struct IRC_param *dealInfo)
372 { 367 {
373 //判断是否存在结构体 368 //判断是否存在结构体
374 if (dealInfo == NULL) 369 if (dealInfo == NULL)
@@ -621,19 +616,12 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, @@ -621,19 +616,12 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize,
621 // 如果打开了两点校正 616 // 如果打开了两点校正
622 if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC) 617 if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC)
623 { 618 {
624 - if (dealInfo->TPC_ResetFlag == JZ_FLAGCODE_ON)  
625 - {  
626 - //计算两点校正的斜率  
627 - JZIrcLib_TPC_Slope_Calculation2(dealInfo);  
628 - }  
629 -  
630 //对数据进行两点校正 619 //对数据进行两点校正
631 ret = JZIrcLib_TPC(u16_CorrentData, dealInfo); 620 ret = JZIrcLib_TPC(u16_CorrentData, dealInfo);
632 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 621 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
633 { 622 {
634 JZSDK_LOG_ERROR("两点校正失败"); 623 JZSDK_LOG_ERROR("两点校正失败");
635 } 624 }
636 -  
637 } 625 }
638 626
639 U8_t *GrayImage = NULL; 627 U8_t *GrayImage = NULL;
@@ -16,6 +16,7 @@ extern "C" { @@ -16,6 +16,7 @@ extern "C" {
16 T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, 16 T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize,
17 U8_t **RGB_data, unsigned int *RGB_dataSize, 17 U8_t **RGB_data, unsigned int *RGB_dataSize,
18 struct IRC_param *dealInfo); 18 struct IRC_param *dealInfo);
  19 +T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation2(struct IRC_param *dealInfo);
19 20
20 21
21 #ifdef __cplusplus 22 #ifdef __cplusplus
@@ -55,7 +55,7 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height @@ -55,7 +55,7 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height
55 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 55 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
56 } 56 }
57 57
58 -//rgb888 转yuv420sp(NV12) 58 +//rgb888 转yuv420sp MPP_FMT_YUV420SP = (MPP_FRAME_FMT_YUV + 0), /* YYYY... UV... (NV12) */
59 T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int height, U8_t *yuv_data) 59 T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int height, U8_t *yuv_data)
60 { 60 {
61 // YUV420SP(NV12)格式的大小:Y平面后面跟着一个交织的UV平面 61 // YUV420SP(NV12)格式的大小:Y平面后面跟着一个交织的UV平面
@@ -66,15 +66,16 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int heigh @@ -66,15 +66,16 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int heigh
66 U8_t *y_plane = yuv_data; 66 U8_t *y_plane = yuv_data;
67 U8_t *uv_plane = yuv_data + y_size; 67 U8_t *uv_plane = yuv_data + y_size;
68 68
69 - // 用于存储每个2x2块的U和V值的临时变量  
70 - int u_temp = 0, v_temp = 0;  
71 - int u_count = 0, v_count = 0; 69 +
72 70
73 // RGB888到YUV420SP的转换 71 // RGB888到YUV420SP的转换
74 for (int j = 0; j < height; j++) { 72 for (int j = 0; j < height; j++) {
75 for (int i = 0; i < width; i++) { 73 for (int i = 0; i < width; i++) {
76 // 计算Y分量的索引 74 // 计算Y分量的索引
77 int y_idx = j * width + i; 75 int y_idx = j * width + i;
  76 +
  77 + // 计算UV分量的索引(每个第二个像素存储一次)
  78 + int uv_idx = (j / 2) * (width / 2) + (i / 2);
78 79
79 // 提取RGB分量 80 // 提取RGB分量
80 U8_t r = rgb_data[y_idx * 3]; 81 U8_t r = rgb_data[y_idx * 3];
@@ -89,36 +90,15 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int heigh @@ -89,36 +90,15 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int heigh
89 // 存储Y分量 90 // 存储Y分量
90 y_plane[y_idx] = (U8_t)y; 91 y_plane[y_idx] = (U8_t)y;
91 92
92 - // 对于U和V分量,我们每4个RGB像素(2x2块)存储一次  
93 - if ((i & 1) == 0 && (j & 1) == 0) {  
94 - // 初始化临时变量(对于每个2x2块的第一个像素)  
95 - u_temp = u;  
96 - v_temp = v;  
97 - u_count = 0;  
98 - v_count = 0;  
99 - }  
100 -  
101 - // 更新UV计数器和临时变量(对于2x2块中的每个像素)  
102 - u_count++;  
103 - v_count++;  
104 -  
105 - // 在2x2块的右下角像素处存储U和V分量  
106 - if (u_count == 2 && v_count == 2) {  
107 - // 计算UV分量的索引(交织存储)  
108 - int uv_idx = ((j / 2) * (width / 2) + (i / 2)) * 2;  
109 - 93 + // 仅当为每第二个像素时存储U和V分量
  94 + if ((i & 1) == 0 && (j & 1) == 0)
  95 + {
110 // 存储U分量 96 // 存储U分量
111 - uv_plane[uv_idx] = (U8_t)u_temp;  
112 - 97 + uv_plane[uv_idx * 2] = (U8_t)u;
113 // 存储V分量 98 // 存储V分量
114 - uv_plane[uv_idx + 1] = (U8_t)v_temp;  
115 -  
116 - // 重置临时变量和计数器(为下一个2x2块做准备)  
117 - u_temp = 0;  
118 - v_temp = 0;  
119 - u_count = 0;  
120 - v_count = 0; 99 + uv_plane[uv_idx * 2 + 1] = (U8_t)v;
121 } 100 }
  101 +
122 } 102 }
123 } 103 }
124 104
@@ -67,6 +67,10 @@ T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex) @@ -67,6 +67,10 @@ T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex)
67 { 67 {
68 RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(1)); 68 RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(1));
69 } 69 }
  70 + else if(CameraIndex == 2)
  71 + {
  72 + RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(2));
  73 + }
70 else 74 else
71 { 75 {
72 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 76 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
@@ -741,6 +741,11 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value) @@ -741,6 +741,11 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
741 { 741 {
742 JZSDK_LOG_DEBUG("切换视频流2"); 742 JZSDK_LOG_DEBUG("切换视频流2");
743 } 743 }
  744 + else if (value == 3)
  745 + {
  746 + JZSDK_LOG_DEBUG("切换视频流3");
  747 + }
  748 +
744 JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_VIDEOPUSH_INDEX, value); 749 JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_VIDEOPUSH_INDEX, value);
745 750
746 break; 751 break;
@@ -936,7 +941,19 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value) @@ -936,7 +941,19 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
936 } 941 }
937 else if (value == 1) 942 else if (value == 1)
938 { 943 {
939 - printf("手动高低温模式"); 944 + printf("手动高低温模式1");
  945 + }
  946 + else if (value == 2)
  947 + {
  948 + printf("手动高低温模式2");
  949 + }
  950 + else if (value == 3)
  951 + {
  952 + printf("手动高低温模式3");
  953 + }
  954 + else if (value == 4)
  955 + {
  956 + printf("手动高低温模式4");
940 } 957 }
941 958
942 JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TPC_MODE, value); 959 JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TPC_MODE, value);