This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

IPCFrameOut Link如何动态切换分辨率?以及如何和后端LINK同步?

HI,chris meng.

我们现在想用DM8168的PCIe和另一片DM8168的PCIe进行级联,接收第二片DM8168的YUV数据。

                        PCIe

DM8168 主片<-------------------------DM8168从片

之前我们用单DM8168连接过FPGA,从FPGA给DM8168传递YUV视频,但是这种情况下,传递的是固定分辨率帧率YUV视频。

如果我们两片DM8168级联,第二片给第一片的分辨率有时候会变化,那第一片DM8168的IPCFrameOutHLOS LINK要如何动态修改输出分辨率?还是不用修改?

基本的link搭建如下:

DEI------------------------------------------------------->|    ---------------------------|

                                                 |    SWMS        |

IPCFrameOut---->IPCFrameInVPSS------------>|-----------------------------|

上图中,SWMS负责进行画面拼接,但是SWMS内置的SCALER不进行任何缩放,送给SWMS的图像都已经缩放完成,也就是和合成画面中对应窗口尺寸相同了。

也就是DEI将画面缩放好了后,再送给SWMS,同样,IPCFrameOutLink送过来的图像,也是合成画面中对应窗口大小的YUV视频。

那如果进行画面切换的时候,我先进行DEI输出分辨率调整,再调整SWMS中窗口和通道映射关系,McFw DEMO中是这么做得。这里就没有太看懂,就是先DEI改分辨率,SWMS再改映射关系,那两者是怎么同步的?是M3VPSS里面做得同步?我是指可能DEI先改了输出分辨率,SWMS还没来得及修改映射关系,那是不是可能出现DEI送过来的图像和Mosaic中窗口大小不一致?

同样,如果IPCFrameOut送过来的视频,也动态修改了分辨率,我要怎么和SWMS同步?我是先修改SWMS的画面映射关系,再通过Vdis_putFullVideoFrames或者IpcFramesOutLink_putFullVideoFrames这样的函数送新的分辨率的视频?怎么知道谁先谁后?会不会有潜在不同步的可能性?还是同样的情况,就是可能送过去了新分辨率图像,但是我怎么知道SWMS也改好映射关系了?这个同步怎么实现?

  • SuitJune,

    Link把frame传向下一个link的时候,frame都会有相应的info,在这个frameinfo里面就包含了这个frame的大小。对于SWMS,如果输入的frame大小变化,那它就可以根据这个信息来调整缩放比例(SWMS每个mosica输出的大小是固定的)。

  • 谢谢!

    但是如果IPFrameOutLink输出参数变了呢?比如时刻A输出720P图像,时刻B修改为输出D1分辨率图像,怎么通知后面?

    IPCFrameOutLink没看到对应参数,就是分辨率动态修改命令。

  • SuitJune,

    DVR RDK demo只在编解码做了动态分辨率切换,里面没有涉及到IPCFrameOut Link。如果需要改功能,你需要自己修改代码。

  • 我说的不是DEMO功能,比如MCFW部分DEMO代码。

    是LINK部分就没有对应命令描述,像DEI都有动态修改输出分辨率的命令项,但是IPCFrameOut,IPCFrameIn就没看到,您说的自己修改代码,是指到McFw LINK内部自己修改LINK内部的代码吗?比如自己添加修改输出分辨率的命令与实现代码?