-
-
- Posts: 3
- Joined: 2024-02-29 5:03
求助,万分感谢!!!
开发板: LuckFox Pico Pro/Max
数据流:VI----VPSS----VENC----RTSP
动态修改参数验证方案:读取终端指令 ---> 调用RK_MPI_VPSS_SetChnAttr()进行修改。
出现问题:图像并没有按照预期进行镜像、翻转,但是从dumpsys vpss中看到的mirror和flip参数确实变化了。
详细描述:
如图1,为初始化后,MIRROR和FLIP参数都为false时候的图像

- 图1
设置MIRROR参数为TRUE,如下图2

- 图2
图像并没有变化,通过dumpsys vpss查看通道属性,mirror参数确实配置成功了,如下图3

- 图3
动态配置的代码段如下。
Code: Select all
bool SetParam::stMirrorRotation(
const param::MirrorRotationParam& par) noexcept {
VPSS_CHN_ATTR_S stChnAttr;
memset(&stChnAttr, 0x0, sizeof(VPSS_CHN_ATTR_S));
auto ret = RK_MPI_VPSS_GetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS != ret) {
SPDLOG_ERROR("RK_MPI_VPSS_GetChnAttr failed with {:#x}.", ret);
return false;
}
SPDLOG_DEBUG("set vpss chn par: {}-{}", par.mirror, par.flip);
stChnAttr.bFlip = par.flip ? RK_BOOL::RK_TRUE : RK_BOOL::RK_FALSE;
stChnAttr.bMirror = par.mirror ? RK_BOOL::RK_TRUE : RK_BOOL::RK_FALSE;
ret = RK_MPI_VPSS_SetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS != ret) {
SPDLOG_ERROR("RK_MPI_VPSS_SetChnAttr failed with {:#x}.", ret);
return false;
}
ret = RK_MPI_VPSS_GetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS == ret) {
SPDLOG_DEBUG("read vpss chn par: mirror-flip: {}-{}", stChnAttr.bMirror,
stChnAttr.bFlip);
}
return true;
}
-
- Posts: 1290
- Joined: 2024-01-23 7:21
luyixdu wrote: ↑2024-02-29 5:23
求助,万分感谢!!!
开发板: LuckFox Pico Pro/Max
数据流:VI----VPSS----VENC----RTSP
动态修改参数验证方案:读取终端指令 ---> 调用RK_MPI_VPSS_SetChnAttr()进行修改。
出现问题:图像并没有按照预期进行镜像、翻转,但是从dumpsys vpss中看到的mirror和flip参数确实变化了。
详细描述:
如图1,为初始化后,MIRROR和FLIP参数都为false时候的图像
049204cd57767ba4a09a9b33bfcbb4c9.png
设置MIRROR参数为TRUE,如下图2
3d0deb4499e671ac319574a0c516e1f3.png
图像并没有变化,通过dumpsys vpss查看通道属性,mirror参数确实配置成功了,如下图3
e5e5eede746e73c9d523031664665fa6.png
动态配置的代码段如下。
Code: Select all
bool SetParam::stMirrorRotation(
const param::MirrorRotationParam& par) noexcept {
VPSS_CHN_ATTR_S stChnAttr;
memset(&stChnAttr, 0x0, sizeof(VPSS_CHN_ATTR_S));
auto ret = RK_MPI_VPSS_GetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS != ret) {
SPDLOG_ERROR("RK_MPI_VPSS_GetChnAttr failed with {:#x}.", ret);
return false;
}
SPDLOG_DEBUG("set vpss chn par: {}-{}", par.mirror, par.flip);
stChnAttr.bFlip = par.flip ? RK_BOOL::RK_TRUE : RK_BOOL::RK_FALSE;
stChnAttr.bMirror = par.mirror ? RK_BOOL::RK_TRUE : RK_BOOL::RK_FALSE;
ret = RK_MPI_VPSS_SetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS != ret) {
SPDLOG_ERROR("RK_MPI_VPSS_SetChnAttr failed with {:#x}.", ret);
return false;
}
ret = RK_MPI_VPSS_GetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS == ret) {
SPDLOG_DEBUG("read vpss chn par: mirror-flip: {}-{}", stChnAttr.bMirror,
stChnAttr.bFlip);
}
return true;
}
你好,如果要实现 VPSS 动态修改参数请先与 VI 通道解绑,停止 VPSS 组(Group)对输入的获取,关闭 VPSS 通道。把参数设置后再按顺序启动通道,组和绑定 VI 通道,调用软件接口顺序如下:
由于 RKMPI 库并没有公开源码,只能从文档和调试情况分析发生这种情况的原因
可能为:
- VPSS 组件使用组(Group) 管理输入,使用通道(Channel)管理输出。
- 对 VPSS 的输出镜像翻转属性做设置时调用 RK_MPI_VPSS_SetChnAttr 只是更新通道的属性信息,正在运行的通道的属性在使用 RK_MPI_VPSS_EnableChn 时确认了,需要关闭重新启动才能更新属性。
- 关闭 VPSS 的通道时组还在进行工作,从绑定的输入通道获取数据,但是数据没有被及时处理会发生错误,所以在关闭通道前要停止组的接收。
- 由于 VPSS 与 VI 绑定,VI 通道的数据要传输到 VPSS 的组上,如果 VPSS 的组停止接收也会发生错误,所以需要先进行解绑。
-
- Posts: 3
- Joined: 2024-02-29 5:03
Crocodile wrote: ↑2024-03-02 7:16
luyixdu wrote: ↑2024-02-29 5:23
求助,万分感谢!!!
开发板: LuckFox Pico Pro/Max
数据流:VI----VPSS----VENC----RTSP
动态修改参数验证方案:读取终端指令 ---> 调用RK_MPI_VPSS_SetChnAttr()进行修改。
出现问题:图像并没有按照预期进行镜像、翻转,但是从dumpsys vpss中看到的mirror和flip参数确实变化了。
详细描述:
如图1,为初始化后,MIRROR和FLIP参数都为false时候的图像
049204cd57767ba4a09a9b33bfcbb4c9.png
设置MIRROR参数为TRUE,如下图2
3d0deb4499e671ac319574a0c516e1f3.png
图像并没有变化,通过dumpsys vpss查看通道属性,mirror参数确实配置成功了,如下图3
e5e5eede746e73c9d523031664665fa6.png
动态配置的代码段如下。
Code: Select all
bool SetParam::stMirrorRotation(
const param::MirrorRotationParam& par) noexcept {
VPSS_CHN_ATTR_S stChnAttr;
memset(&stChnAttr, 0x0, sizeof(VPSS_CHN_ATTR_S));
auto ret = RK_MPI_VPSS_GetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS != ret) {
SPDLOG_ERROR("RK_MPI_VPSS_GetChnAttr failed with {:#x}.", ret);
return false;
}
SPDLOG_DEBUG("set vpss chn par: {}-{}", par.mirror, par.flip);
stChnAttr.bFlip = par.flip ? RK_BOOL::RK_TRUE : RK_BOOL::RK_FALSE;
stChnAttr.bMirror = par.mirror ? RK_BOOL::RK_TRUE : RK_BOOL::RK_FALSE;
ret = RK_MPI_VPSS_SetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS != ret) {
SPDLOG_ERROR("RK_MPI_VPSS_SetChnAttr failed with {:#x}.", ret);
return false;
}
ret = RK_MPI_VPSS_GetChnAttr(0, 0, &stChnAttr);
if (RK_SUCCESS == ret) {
SPDLOG_DEBUG("read vpss chn par: mirror-flip: {}-{}", stChnAttr.bMirror,
stChnAttr.bFlip);
}
return true;
}
你好,如果要实现 VPSS 动态修改参数请先与 VI 通道解绑,停止 VPSS 组(Group)对输入的获取,关闭 VPSS 通道。把参数设置后再按顺序启动通道,组和绑定 VI 通道,调用软件接口顺序如下:
VPSS动态修改.jpg
由于 RKMPI 库并没有公开源码,只能从文档和调试情况分析发生这种情况的原因
可能为:
- VPSS 组件使用组(Group) 管理输入,使用通道(Channel)管理输出。
- 对 VPSS 的输出镜像翻转属性做设置时调用 RK_MPI_VPSS_SetChnAttr 只是更新通道的属性信息,正在运行的通道的属性在使用 RK_MPI_VPSS_EnableChn 时确认了,需要关闭重新启动才能更新属性。
- 关闭 VPSS 的通道时组还在进行工作,从绑定的输入通道获取数据,但是数据没有被及时处理会发生错误,所以在关闭通道前要停止组的接收。
- 由于 VPSS 与 VI 绑定,VI 通道的数据要传输到 VPSS 的组上,如果 VPSS 的组停止接收也会发生错误,所以需要先进行解绑。
好的,谢谢您,我之前是通过解除和VPSS所有的系统绑定,然后重启VPSS模块,最后重新进行系统绑定解决的。
这样看来我不用解绑后端模块了。