從一路 AHD顯示中獲取 640x360 的數據。發現顯示花屏,獲取的圖片也是花屏的

Viewed 45

问题描述


使用ahd_sensor.c 這個demo。
修改:
1、VB(添加一個buffer)

//VB for YUV444 output for dev0,TO AI
config.comm_pool[2].blk_cnt = VICAP_OUTPUT_BUF_NUM;
config.comm_pool[2].mode = VB_REMAP_MODE_NOCACHE;
config.comm_pool[2].blk_size = VICAP_ALIGN_UP((ISP_CHN0_WIDTH * ISP_CHN0_HEIGHT * 3), 0x1000);

2、VICAP(添加一個通道)。
//chn1
//配置通道1
k_vicap_chn_attr chn1_attr;
memset(&chn1_attr, 0, sizeof(k_vicap_chn_attr));
chn1_attr.out_win.h_start = 0;
chn1_attr.out_win.v_start = 0;
chn1_attr.out_win.width = AI_WIDTH;
chn1_attr.out_win.height = AI_HEIGHT;
chn1_attr.crop_win = dev_attr.acq_win;
chn1_attr.scale_win = chn1_attr.out_win;
chn1_attr.crop_enable = K_FALSE;
chn1_attr.scale_enable = K_TRUE;
chn1_attr.chn_enable = K_TRUE;
chn1_attr.pix_format = PIXEL_FORMAT_YUV_SEMIPLANAR_444;
chn1_attr.buffer_num = VICAP_OUTPUT_BUF_NUM;
chn1_attr.buffer_size = VICAP_ALIGN_UP((AI_WIDTH * AI_HEIGHT * 3), VICAP_ALIGN_1K);//
printf("kd_mpi_vicap_set_chn_attr, buffer_size[%d]\n", chn1_attr.buffer_size);
ret = kd_mpi_vicap_set_chn_attr(vicap_dev, VICAP_CHN_ID_1, chn1_attr);
if (ret) {
printf("kd_mpi_vicap_set_chn_attr failed.\n");
return ret;
}


3、獲取的時候將原來的 VICAP_CHN_ID_0 改成新增的 VICAP_CHN_ID_1
完整代碼如下


		//VICAP_DEV_ID_0 设备号
		//VICAP_CHN_ID_0 输出通道号
		//格式
		//输出帧信息
		//输入超时 300ms
		ret = kd_mpi_vicap_dump_frame(VICAP_DEV_ID_0, VICAP_CHN_ID_1, VICAP_DUMP_YUV444, &dump_info, 300);//
        if (ret)
        {
            printf("...kd_mpi_vicap_dump_frame failed.\n");
            continue;
        }

#if 1        
		ret = kd_mpi_nonai_2d_send_frame(NONAI_2D_RGB_CH, &dump_info, 1000);//0给到了VO. 1 转到这里
        if (ret)
        {
            printf("sensor 0:kd_mpi_nonai_2d_send_frame ch 1 failed. %d\n", ret);
            ret = kd_mpi_vicap_dump_release(VICAP_DEV_ID_0, VICAP_CHN_ID_1, &dump_info);
            if (ret)
            {
                printf("sensor 0:sample_vicap...kd_mpi_vicap_dump_release failed.\n");
                continue;
            }
        }
		
		ret = kd_mpi_nonai_2d_get_frame(NONAI_2D_RGB_CH, &rgb_vf_info, 1000);
        if (ret)
        {
            printf("sensor 0:kd_mpi_nonai_2d_get_frame ch 1 failed. %d\n", ret);
            // goto vicap_release;
            ret = kd_mpi_vicap_dump_release(VICAP_DEV_ID_0, VICAP_CHN_ID_1, &dump_info);
            if (ret)
            {
                printf("sensor 0:sample_vicap...kd_mpi_vicap_dump_release failed.\n");
                continue;
            }
        }

獲取到的圖片如下
![image.png](/uploads/post/5FbuWN7VSVf.png)
VO顯示異常的圖片
![image.png](/uploads/post/5Fbv2243J1Y.png)       
		
		


## 硬件板卡
----------
k230_canmv_01studio 或 k230_canmv_v3

## 软件版本
----------
RtSmart-K230_01Studio_rtsmart_local_nncase_v2.9.0.img
2 Answers

我们目前只有1280x720的分辨率

謝謝您的回復,我知道AHD是只支持 1280x720.我是想通過VICAP或其他工具將獲取到的數據轉化成640x360.比如快比較不影響幀率的情況下