Closed nickyang2008 closed 10 months ago
基于Linux Kernel version 5.10.110 libRga版本:v1.9.3 Rga驱动版本:v1.2.22
问题:使用improcess, 从源buf的指定sx,sy,sw,sh复制一个区域到目标buf指定dx,dy,dw,dh,其中sw=dw,sh=dh,图像显示错位,不知是对improcess的理解不正确,还是这是一个BUG,向各位讨教。
librga源码中没有这样使用的例子,是我参考imtranslate源码实现,imtranslate与我代码不同点仅是imtranslate中sx,sy为0。
代码如下:
void drm_2da_cp_rect(uint8_t * dst, uint8_t * src, int bw, int bh, int sx,int sy, int sw, int sh, int dx,int dy) { int usage = 0; int ret = 0; rga_buffer_t pat; im_rect srect; im_rect drect; im_rect prect; rga_buffer_t rga_src; rga_buffer_t rga_dst; static im_handle_param_t param; param.width = bw; param.height = bh; param.format = RK_FORMAT_RGBA_8888; rga_buffer_handle_t src_handle = importbuffer_virtualaddr(src, ¶m); if (src_handle <= 0) { printf("Failed to import virtualaddr for src channel!\n"); return; } rga_buffer_handle_t dst_handle = importbuffer_virtualaddr(dst, ¶m); if (dst_handle <= 0) { printf("Failed to import virtualaddr for dst channel!\n"); return; } rga_src = wrapbuffer_handle(src_handle, bw, bh, RK_FORMAT_RGBA_8888,bw,bh); rga_dst = wrapbuffer_handle(dst_handle, bw, bh, RK_FORMAT_RGBA_8888,bw,bh); empty_structure(NULL, NULL, &pat, &srect, &drect, &prect); if ((rga_src.width != rga_dst.width) || (rga_src.height != rga_dst.height)) return; srect.x = sx; srect.y = sy; srect.width = sw; srect.height = sh; drect.x = dx; drect.y = dy; drect.width = sw; drect.height = sh; ret = imcheck(rga_src, rga_dst, srect, drect); if (ret != IM_STATUS_NOERROR) { printf("%d, check error! %s \n", __LINE__, imStrError((IM_STATUS)ret)); } else { usage |= IM_SYNC; printf("src buff: %d-%d dst Buff: %d-%d \n", rga_src.wstride,rga_src.hstride,rga_dst.wstride,rga_dst.hstride); printf("sx:%d sy:%d sw:%d sh:%d dx:%d dy:%d dw:%d dh:%d \n",srect.x,srect.y,srect.width,srect.height,drect.x,drect.y,drect.width,drect.height); ret = improcess(rga_src, rga_dst, pat, srect, drect, prect, usage); if (ret != IM_STATUS_SUCCESS) printf("%d, rga copy error! %s \n", __LINE__, imStrError((IM_STATUS)ret)); } releasebuffer_handle(src_handle); releasebuffer_handle(dst_handle); }
可以看一下这个示例代码: https://github.com/airockchip/librga/blob/main/samples/copy_demo/src/rga_copy_splice_demo.cpp
基于Linux Kernel version 5.10.110 libRga版本:v1.9.3
Rga驱动版本:v1.2.22
问题:使用improcess, 从源buf的指定sx,sy,sw,sh复制一个区域到目标buf指定dx,dy,dw,dh,其中sw=dw,sh=dh,图像显示错位,不知是对improcess的理解不正确,还是这是一个BUG,向各位讨教。
librga源码中没有这样使用的例子,是我参考imtranslate源码实现,imtranslate与我代码不同点仅是imtranslate中sx,sy为0。
代码如下: