Toybrick
标题:
rk3588 使用rga加速时感觉效果不理想
[打印本页]
作者:
tyearlin
时间:
2024-4-2 16:17
标题:
rk3588 使用rga加速时感觉效果不理想
目的 使用 rga 转码yuv->rgba 并旋转
代码如下
/**
*
转码
+
旋转
* @param src
* @param srcFmt
* @param dst
* @param dstFmt
* @param width
* @param height
* @param roation
* @return
*/
int
process
(
void
*src
, int
srcFmt
, void
*dst
, int
dstFmt
, int
width
, int
height
, int
roation) {
int
ret
;
int
ret_convert
;
int
middle_len = width * height *
4
;
void
*dst_middle = malloc(middle_len)
;
memset(dst_middle
,
0
,
middle_len)
;
rga_buffer_t
rga_src =
wrapbuffer_virtualaddr
((
void
*) src
,
width
,
height
,
srcFmt)
;
rga_buffer_t
rga_dst_middle =
wrapbuffer_virtualaddr
((
void
*) dst_middle
,
width
,
height
,
dstFmt)
;
ret_convert =
imcvtcolor
(rga_src
,
rga_dst_middle
,
srcFmt
,
dstFmt)
;
if
(
IM_STATUS_SUCCESS
!= ret_convert) {
LOGE
(
"colorConvert failed. Ret: %s
\n
"
,
imStrError((
IM_STATUS
) ret))
;
return
IM_STATUS_FAILED
;
}
rga_buffer_t
rga_middle_src =
wrapbuffer_virtualaddr
((
void
*) dst_middle
,
width
,
height
,
dstFmt)
;
rga_buffer_t
rga_dst =
wrapbuffer_virtualaddr
((
void
*) dst
,
width
,
height
,
dstFmt)
;
LOGE
(
"rotation step.
\n
"
)
;
rga_dst.
width
= rga_dst_middle.
height
;
rga_dst.
height
= rga_dst_middle.
width
;
rga_dst.
wstride
= rga_dst_middle.
hstride
;
rga_dst.
hstride
= rga_dst_middle.
wstride
;
int
rotate =
IM_HAL_TRANSFORM_ROT_90
;
if
(roation ==
90
) {
rotate =
IM_HAL_TRANSFORM_ROT_90
;
}
else if
(roation ==
180
) {
rotate =
IM_HAL_TRANSFORM_ROT_180
;
}
else if
(roation ==
270
) {
rotate =
IM_HAL_TRANSFORM_ROT_270
;
}
LOGE
(
"rotation step.
\n
"
)
;
ret =
imrotate
(rga_middle_src
,
rga_dst
,
rotate)
;
if
(
IM_STATUS_SUCCESS
!= ret) {
LOGE
(
"rotate failed. Ret: %s
\n
"
,
imStrError((
IM_STATUS
) ret))
;
}
LOGE
(
"rotation end.
\n
"
)
;
free(dst_middle)
;
return
ret
;
}
分辨率 1024*1280 总耗时20ms 和官方数据应该有出入 不知道问题出在哪
目前使用的是 wrap_buffer_virtural_add方式
作者:
可别吧
时间:
2024-8-6 15:25
老哥找到问题了吗?
作者:
jefferyzhang
时间:
2024-8-7 09:58
需要在物理内存中使用,用虚拟地址速度肯定慢
欢迎光临 Toybrick (https://t.rock-chips.com/)
Powered by Discuz! X3.3