|
您好,请帮看下jpeg resize的问题。
mpp decode 的MppBuffer 经rga resize 到 encode input mppbuffer.
报错如下:
用户层:
RgaBlit(1513) RGA_BLIT fail: Invalid argument
RgaBlit(1514) RGA_BLIT fail: Invalid argument
handl-fd-vir-phy-hnd-format[5359, 0, (nil), (nil), 0, 0]
rect[0, 0, 4000, 3008, 4000, 3008, 2560, 0]
f-blend-size-rotation-col-log-mmu[0, 0, 0, 0, 0, 0, 0]
handl-fd-vir-phy-hnd-format[5360, 0, (nil), (nil), 0, 0]
rect[0, 0, 400, 304, 400, 304, 2560, 0]
f-blend-size-rotation-col-log-mmu[0, 0, 0, 0, 0, 0, 0]
157070 im2d_rga_impl rga_task_submit(2171): Failed to call RockChipRga interface, please use 'dmesg' command to view driver error log.
157070 im2d_rga_impl rga_dump_channel_info(1500): src_channel:
rect[x,y,w,h] = [0, 0, 0, 0]
image[w,h,ws,hs,f] = [4000, 3008, 4000, 3008, nv12]
buffer[handle,fd,va,pa] = [5359, 0, 0, 0]
color_space = 0x0, global_alpha = 0xff, rd_mode = 0x1
157070 im2d_rga_impl rga_dump_channel_info(1500): dst_channel:
rect[x,y,w,h] = [0, 0, 0, 0]
image[w,h,ws,hs,f] = [400, 304, 400, 304, nv12]
buffer[handle,fd,va,pa] = [5360, 0, 0, 0]
color_space = 0x0, global_alpha = 0xff, rd_mode = 0x1
157070 im2d_rga_impl rga_dump_opt(1550): opt version[0x10a0100]:
157070 im2d_rga_impl rga_dump_opt(1551): set_core[0x0], priority[0]
157070 im2d_rga_impl rga_task_submit(2180): acquir_fence[-1], release_fence_ptr[0x0], usage[0x80000]
imcvtcolor running failed, Fatal error: Failed to call RockChipRga interface, please use 'dmesg' command to view driver error log.
kernel :[ 492.587542] rga_job: failed to get scheduler, rga_job_commit(407)
[ 492.587551] rga_job: request[9192] task[0] job_commit failed.
[ 492.587556] rga_job: rga request[9192] commit failed!
[ 492.587559] rga: request[9192] submit failed!
[ 492.670452] rga_policy: invalid function policy
[ 492.670461] rga_job: job assign failed
[ 492.670470] rga_job: failed to get scheduler, rga_job_commit(407)
[ 492.670479] rga_job: request[9197] task[0] job_commit failed.
[ 492.670484] rga_job: rga request[9197] commit failed!
[ 492.670487] rga: request[9197] submit failed!
[ 492.766123] rga_policy: invalid function policy
[ 492.766135] rga_job: job assign failed
[ 492.766145] rga_job: failed to get scheduler, rga_job_commit(407)
[ 492.766158] rga_job: request[9203] task[0] job_commit failed.
[ 492.766167] rga_job: rga request[9203] commit failed!
[ 492.766173] rga: request[9203] submit failed!
[ 492.851444] rga_policy: invalid function policy
[ 492.851454] rga_job: job assign failed
resize代码:
int Scale4(int fd, int src_width, int src_height, int dst_width ,int dst_height,void *outmppbuffer)
{
int ret = 0;
int64_t start = 0;
int src_buf_size, dst_buf_size ,tmp_buf_size;
rga_buffer_t src_img, dst_img ,tmp_img;
rga_buffer_handle_t src_handle, dst_handle,tmp_handle;
memset(&src_img, 0, sizeof(src_img));
memset(&dst_img, 0, sizeof(dst_img));
memset(&tmp_img, 0, sizeof(tmp_img));
// int dst_width = 1280;
// int dst_height = 960;
// int dst_width = 640;
// int dst_height = 480;
int src_format = RK_FORMAT_YCbCr_420_SP;
int tmp_format = RK_FORMAT_RGB_888;
int dst_format = RK_FORMAT_YCbCr_420_SP;
src_buf_size = src_width * src_height * get_bpp_from_format(src_format);
dst_buf_size = dst_width * dst_height * get_bpp_from_format(dst_format);
char *tmp_buf;
int tmp_dma_fd;
// int tmp_width = 4000;
// int tmp_height = 3000;
// int tmp_width = 1280;
// int tmp_height = 960;
// int tmp_width = 640;
// int tmp_height = 480;
FILE *fp_output2 = NULL;
FILE *fp_output3 = NULL;
unsigned char *bufaddr= NULL;
start = get_cur_us();
src_handle = importbuffer_fd(fd, src_buf_size);
mpp_buffer_sync_begin(outmppbuffer);
int fd2 = mpp_buffer_get_fd(outmppbuffer);
int size = mpp_buffer_get_size(outmppbuffer);
dst_handle = importbuffer_fd(fd2, dst_buf_size);
printf("Scale4Scale4 outmppbuffer fd2 =%d size=%lld\n",fd2,size);
if (src_handle == 0 || dst_handle == 0) {
printf("importbuffer failed! src_handle=%d,dst_handle=%d\n",src_handle,dst_handle);
goto release_buffer;
// goto free_buf;
}
src_img = wrapbuffer_handle(src_handle, src_width, src_height, src_format);
dst_img = wrapbuffer_handle(dst_handle, dst_width, dst_height, dst_format);
ret = imcheck(src_img, dst_img, {}, {});
if (IM_STATUS_NOERROR != ret) {
printf("%d, check error! %s", __LINE__, imStrError((IM_STATUS)ret));
return -1;
}
// ret = imcvtcolor(src_img, tmp_img, src_format, tmp_format);
ret = imresize(src_img, dst_img);
if (ret == IM_STATUS_SUCCESS) {
printf("imcvtcolor running success!\n");
} else {
printf("imcvtcolor running failed, %s\n", imStrError((IM_STATUS)ret));
goto release_buffer;
}
printf("resize use = %lld\n",get_cur_us()-start);
mpp_buffer_sync_end(outmppbuffer);
bufaddr = (unsigned char*)mpp_buffer_get_ptr(outmppbuffer);
mpp_buffer_get_size(outmppbuffer);
printf("resize and color change use = %lld\n",get_cur_us()-start);
// fp_output2 = fopen("./out_1280_960_yuv420p.bin", "w+b");
// if (NULL == fp_output2) {
// printf("failed to open output file\n");
//
// }
// fwrite(bufaddr, 1, size, fp_output2);
// fclose(fp_output2);
#ifdef DEBUG_TIME
printf("RGA_Scale3 -- 33--- src fd =%d crop and resize use(%d)(us)\n", fd, get_cur_us() - start);
#endif
release_buffer:
if (src_handle)
releasebuffer_handle(src_handle);
if (dst_handle)
releasebuffer_handle(dst_handle);
if(ret == IM_STATUS_SUCCESS){
}else{
}
return ret;
}
|
|