21ic问答首页 - GD32H759I 的IPA模块做颜色空间转换YCbCr转换成RGB888如何配置
GD32H759I 的IPA模块做颜色空间转换YCbCr转换成RGB888如何配置
GD32H759I 的IPA模块做颜色空间转换YCbCr转换成RGB888如何配置? 我试着按照例程里面的填充的方式,将转化mode改为IPA_FGTODE_PF_CONVERT(foreground memory to destination memory with pixel format convert),前景层的像素格式为:FOREGROUND_PPF_UYVY422_1P。但是配置完以后,数据一直无法得到转换完成的标志位,请问该如何配置才能正常工作啊?
我试了如果配置成不带转换的模式,数据是可以更新到屏幕上的,这是颜色控件不对,从摄像头获取的数据是可以变化的。 但是一旦配置成带格式转换的模式,就白屏了,白屏是因为卡在了等待IPA转换完成的标志位那个循环超时里。超时了也没有完成转换。
有没有技术支持可以帮忙看下啊,不胜感激!
我试了如果配置成不带转换的模式,数据是可以更新到屏幕上的,这是颜色控件不对,从摄像头获取的数据是可以变化的。 但是一旦配置成带格式转换的模式,就白屏了,白屏是因为卡在了等待IPA转换完成的标志位那个循环超时里。超时了也没有完成转换。
有没有技术支持可以帮忙看下啊,不胜感激!
赞0
void ipa_color_convert_init(void) {
// 1. 使能IPA时钟
rcu_periph_clock_enable(RCU_IPA);
ipa_deinit(); // 复位IPA模块
// 2. 配置前景层(输入:UYVY422)
ipa_foreground_parameter_struct fg_param;
ipa_foreground_struct_para_init(&fg_param);
fg_param.fg_format = FOREGROUND_PPF_UYVY422_1P; // 输入格式:UYVY422
fg_param.fg_baseaddr = (uint32_t)uyvy_buffer; // 输入缓冲区地址(摄像头数据)
fg_param.fg_line_width = 640; // 图像宽度(像素)
fg_param.fg_line_stride = 640 * 2; // 行跨度(字节,UYVY422每像素2字节)
fg_param.fg_height = 480; // 图像高度
ipa_foreground_config(&fg_param);
// 3. 配置目标层(输出:RGB888)
ipa_destination_parameter_struct dest_param;
ipa_destination_struct_para_init(&dest_param);
dest_param.dest_format = DESTINATION_PPF_RGB888; // 输出格式:RGB888
dest_param.dest_baseaddr = (uint32_t)rgb_buffer; // 输出缓冲区地址
dest_param.dest_line_stride = 640 * 3; // 行跨度(字节,RGB888每像素3字节)
ipa_destination_config(&dest_param);
// 4. 配置转换模式(关键:开启格式转换)
ipa_mode_config(IPA_FGTODE_PF_CONVERT); // 前景→目标,带格式转换
// 5. 配置转换区域(与图像尺寸一致)
ipa_window_config(0, 0, 640-1, 480-1); // 左上角(0,0)到右下角(639,479)
// 6. 使能转换完成中断(可选,替代轮询)
ipa_interrupt_enable(IPA_INT_FGTODE_DONE);
nvic_irq_enable(IPA_IRQn, 1, 0);
}
评论
2025-08-31
赞0
评论
2025-08-31
赞0
评论
2025-07-31
赞0
评论
2025-07-24
赞0
评论
2025-07-23
赞0
评论
2025-07-23
赞0
评论
2025-07-23
赞0
评论
2025-07-23
您需要登录后才可以回复 登录 | 注册