正在显示
10 个修改的文件
包含
531 行增加
和
239 行删除
@@ -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); |
-
请 注册 或 登录 后发表评论