godslucky

godslucky

0个粉丝

3

问答

0

专栏

0

资料

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

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

悬赏金¥ 50
问题最晚将于2024-11-07结题
     

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
下载
我来回答
回答2个
时间排序
认可量排序

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 对算法速度有影响

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

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区