godslucky

godslucky

0个粉丝

3

问答

0

专栏

0

资料

godslucky  发布于  2024-10-31 14:51:35
采纳率 0%
3个问答
337

如何获取vpss chn的图像修改后发送至vo

悬赏金¥ 50
已结题
     

getframe的接口有两个:mpi_vpss_get_grp_framempi_vpss_get_chn_frame,经过测试前者获取的是vpss的源图像,后者获取的是通道输出的图像,在SDK的mpp/tools下分别有对应的两个sample:vpss_src_dump.cvpss_chn_dump.c,我在此基础上进行修改,加入cpu上的算法处理后mpi_vo_send_frame发送至vo chn1显示(chn0显示原图像):
vi->vpss-vo(chn0 chn1)

使用mpi_vpss_get_grp_frame时vo能够正常显示处理后的图像,但使用mpi_vpss_get_chn_frame时候vo显示的还是原图像,打印算法处理前后虚拟地址的像素点值确实被改变了,不知道原因为啥vo_send_frame过去的还是原图像,就像在虚拟地址上对图像的改动没有映射到物理地址上似的。

有人知道两种get frame的方式在需要重新send frame的情况下有什么使用上的不同么?

    // user insert opencv process
    //------------------------------------------------------------------------
    printf("before %d %d\n", *(g_user_page_addr[0]), *(g_user_page_addr[1]));
    cv::Mat mat_Y(frame->height, frame->width, CV_8UC1, g_user_page_addr[0]);
    cv::Mat mat_UV(uv_height, frame->width, CV_8UC1, g_user_page_addr[1]);
    cv::Mat mat_YUV;
    cv::Mat mat_list[] = {mat_Y, mat_UV};
    cv::vconcat(mat_list, 2, mat_YUV);

    cv::Mat mat_RGB = cv::Mat(frame->height, frame->width, CV_8UC3);
    cv::cvtColor(mat_YUV, mat_RGB, cv::COLOR_YUV2RGB_YV12);

    printf("%d %d\n", mat_RGB.rows, mat_RGB.cols);
    cv::flip(mat_RGB, mat_RGB, 1);

    cv::cvtColor(mat_RGB, mat_YUV, cv::COLOR_RGB2YUV_YV12);
    mat_YUV(cv::Range(0, frame->height),
            cv::Range(0, mat_YUV.cols)).copyTo(mat_Y);
    mat_YUV(cv::Range(frame->height, frame->height + uv_height),
            cv::Range(0, mat_YUV.cols)).copyTo(mat_UV);
    printf("after %d %d\n", *(g_user_page_addr[0]), *(g_user_page_addr[1]));
    //------------------------------------------------------------------------
        //user
        const td_s32 milli_sec = -1;
        ss_mpi_vo_send_frame(0, 1, &g_frame, milli_sec);
易百纳技术社区文件: vpss_src_dump.c
下载
易百纳技术社区文件: vpss_chn_dump.c
下载
我来回答
回答12个
时间排序
认可量排序

godslucky

0个粉丝

3

问答

0

专栏

0

资料

godslucky 2024-10-31 15:01:14
认可0

补充大致的

ss_mpi_vpss_get_chn_frame(grp, chn, &g_frame, milli_sec)
g_user_page_addr[0] = (td_char *)ss_mpi_sys_mmap(phys_addr[0], g_size);
g_user_page_addr[1] = (td_char *)ss_mpi_sys_mmap(phys_addr[1], g_c_size);

//---user code---

//---user code---

ss_mpi_sys_munmap(g_user_page_addr[1], g_c_size);
g_user_page_addr[1] = TD_NULL;
ss_mpi_sys_munmap(g_user_page_addr[0], g_size);
g_user_page_addr[0] = NULL;

ss_mpi_vo_send_frame(0, 1, &g_frame, milli_sec);

ss_mpi_vpss_release_chn_frame(grp, chn, &g_frame);

godslucky

0个粉丝

3

问答

0

专栏

0

资料

godslucky 2024-10-31 15:05:59
认可0

需要通道处理后的图像的原因是通道对vi图像有resize 对算法速度有影响

mm

2个粉丝

0

问答

0

专栏

0

资料

mm 2024-11-02 11:15:44
认可0

vpss和vo不能绑定在一起

godslucky
godslucky   回复   mm  2024-11-04 15:06:12
0

我试试

godslucky
godslucky   回复   mm  2024-11-04 16:20:23
0

没用呀m老师。 vi->vpss vo

mm
mm   回复   godslucky  2024-11-04 16:29:34
0

phys_addr[0]和[1]是从vpss_get_chn_frame来的吗

godslucky
godslucky   回复   mm  2024-11-04 16:43:24
0

&g_frame.video_frame->phys_addr[0]
&g_frame.video_frame->phys_addr[1]

mm
mm   回复   godslucky  2024-11-04 16:56:12
0

你看看vpsschn的depth这个参数,不能为0

godslucky
godslucky   回复   mm  2024-11-05 15:13:43
0

chn_attr.depth = 2;
chn_attr.chn_mode = OT_VPSS_CHN_MODE_USER;

mm
mm   回复   godslucky  2024-11-05 16:16:12
0

参数都是对的,我也不清楚哪里的问题了

Ziv Win

0个粉丝

8

问答

0

专栏

0

资料

Ziv Win 2024-11-06 18:57:04
认可0

1.先确认解绑定,cat /proc/umap/sys确认
2.928 VI/VPSS SDK都有现成的取帧接口(ss_mpi_vi_get_pipe_frame/ss_mpi_vpss_get_grp_frame/),参考sample,用线程取帧-处理-送帧
3.送帧接口,VO也有现成的送帧接口ss_mpi_vo_send_frame
4.接口遍历sample参考使用

Ziv Win

0个粉丝

8

问答

0

专栏

0

资料

Ziv Win 2024-11-06 19:01:22
认可0

vpss-chn取流要注意以下
● 解码回放场景,由于不允许出现丢帧,VPSS 只要有一个通道不处理新图像(通
道已使能),则整个 VPSS 不处理新图像。例如说使能了通道 0 和通道 1,两者都
不绑定后端,通道图像队列长度都设为 2,此时从通道 0 中最多获取出 2 帧已缓
存的图像,因为通道 1 缓存 2 帧后未处理新图像,所以 VPSS 不会再处理新图像。
● 在线模式,中断模式设置为 OT_FRAME_INTERRUPT_EARLY 时,从物理通道
获取到的图像可能是 VPSS 硬件未处理完毕的图像。
● 如果开启了通道低延时,获取的帧不是完整帧,需设置合理的低延时行号以保证
读取的图像不出现异常。

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区