airockchip / librga

Apache License 2.0
242 stars 52 forks source link

Rk3588 使用rga cvtcolor 将RK_FORMAT_YCbCr_420_P转换成RK_FORMAT_RGB_565报错 #32

Closed chinabosh closed 1 year ago

chinabosh commented 1 year ago

转换代码: int ret = 0; im_rect src_rect; im_rect dst_rect; rga_buffer_t src; rga_buffer_t dst; IM_STATUS STATUS; rga_buffer_handle_t src_handle; rga_buffer_handle_t dst_handle;

memset(&src_rect, 0, sizeof(src_rect));
memset(&dst_rect, 0, sizeof(dst_rect));
memset(&src, 0, sizeof(src));
memset(&dst, 0, sizeof(dst));

src_handle = importbuffer_virtualaddr(src_data, width, height, src_format);
if (src_handle <= 0) {
    printf("Failed to import virtualaddr for src channel!\n");
    return ERROR;
}
dst_handle = importbuffer_virtualaddr(dst_data, width, height, dst_format);
if (dst_handle <= 0) {
    printf("Failed to import virtualaddr for dst channel!\n");
    releasebuffer_handle(src_handle);
    return ERROR;
}

src = wrapbuffer_handle(src_handle, width, height, src_format);
dst = wrapbuffer_handle(dst_handle, width, height, dst_format);
if (src.width == 0 || dst.width == 0) {
    printf("%s, %s\n", __FUNCTION__, imStrError());
    return ERROR;
}
src.format = src_format;
dst.format = dst_format;

ret = imcheck(src, dst, src_rect, dst_rect);
if (IM_STATUS_NOERROR != ret) {
    printf("%d, check error! %s", __LINE__, imStrError((IM_STATUS) ret));
    return -1;
}
STATUS = imcvtcolor(src, dst, src.format, dst.format);

releasebuffer_handle(src_handle);
releasebuffer_handle(dst_handle);

报错内容: [57574.745886] [ T6589] rga_policy: invalid function policy [57574.745938] [ T6589] rga_job: job assign failed [57574.745945] [ T6589] rga_job: failed to get scheduler, rga_job_commit(409) [57574.745973] [ T6589] rga_job: request[83043] task[0] job_commit failed. [57574.745987] [ T6589] rga_job: rga request commit failed! [57574.746001] [ T6589] rga: request[83043] submit failed!

这个有大概率会出现,请问要怎么排查解决

chinabosh commented 1 year ago

1.打开rga日志 echo msg > sys/kernel/debug/rkrga/debug 后发现报错RGA2 only support under 4G memory!

2.解决方法 参考 https://github.com/airockchip/librga/blob/main/samples/allocator_demo/src/rga_allocator_dma32_demo.cpp https://github.com/airockchip/librga/blob/main/samples/utils/allocator/dma_alloc.cpp https://github.com/airockchip/librga/blob/main/samples/utils/allocator/include/dma_alloc.h 使用dma申请4G内存以内地址

ippfcox commented 3 months ago

1.打开rga日志 echo msg > sys/kernel/debug/rkrga/debug 后发现报错RGA2 only support under 4G memory!

2.解决方法 参考 https://github.com/airockchip/librga/blob/main/samples/allocator_demo/src/rga_allocator_dma32_demo.cpp https://github.com/airockchip/librga/blob/main/samples/utils/allocator/dma_alloc.cpp https://github.com/airockchip/librga/blob/main/samples/utils/allocator/include/dma_alloc.h 使用dma申请4G内存以内地址

感谢,终于找到问题了,确实发现了这条报错!