正在显示
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 | - | ||
| 184 | - int size = (h * w * 1.5); | ||
| 185 | 191 | ||
| 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 | + } | ||
| 679 | 749 | ||
| 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); | 750 | + while (g_MixedOptBuffer_UseFlag == JZ_FLAGCODE_ON) |
| 751 | + { | ||
| 752 | + delayUs(100); | ||
| 753 | + } | ||
| 754 | + | ||
| 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 | + } | ||
| 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; | ||
| 724 | 814 | ||
| 815 | + //JZSDK_LOG_DEBUG("DstImg->buf_size:%d", DstImg->buf_size); | ||
| 725 | 816 | ||
| 726 | - // prev_time = current_time; | 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 | ||
| 830 | + | ||
| 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 | } | 950 | } |
| 766 | - | ||
| 767 | - } | ||
| 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,9 +66,7 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int heigh | @@ -66,9 +66,7 @@ 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++) { |
| @@ -76,6 +74,9 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int heigh | @@ -76,6 +74,9 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int heigh | ||
| 76 | // 计算Y分量的索引 | 74 | // 计算Y分量的索引 |
| 77 | int y_idx = j * width + i; | 75 | int y_idx = j * width + i; |
| 78 | 76 | ||
| 77 | + // 计算UV分量的索引(每个第二个像素存储一次) | ||
| 78 | + int uv_idx = (j / 2) * (width / 2) + (i / 2); | ||
| 79 | + | ||
| 79 | // 提取RGB分量 | 80 | // 提取RGB分量 |
| 80 | U8_t r = rgb_data[y_idx * 3]; | 81 | U8_t r = rgb_data[y_idx * 3]; |
| 81 | U8_t g = rgb_data[y_idx * 3 + 1]; | 82 | U8_t g = rgb_data[y_idx * 3 + 1]; |
| @@ -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); |
-
请 注册 或 登录 后发表评论