读书人

视频监控、视频会议中惯用的视频布局实

发布时间: 2012-08-13 13:21:53 作者: rapoo

视频监控、视频会议中常用的视频布局实现方法

在视频监控、视频会议、远程教育等多路视频应用软件中经常看到如下的视频布局,这些布局可以根据用户需要自由调整.
视频监控、视频会议中惯用的视频布局实现方法

这些布局看起来变化多端,在程序中如何实现呢,首先需要从这些多样的布局中找到共同点,我们在这些布局中叠加上一个棋盘格,形成下图:
视频监控、视频会议中惯用的视频布局实现方法

可以看到,这些布局都是通过先将面板切割成基本单元的视频棋盘格,再将棋盘格做圈选,形成各种风格的多路视频布局。

如果用程序来表达,需要一个结构体来描述视频布局(VIDEO_LAYOUT)和一个结构体来描述视频窗口(VIDEO_WINDOW)。

VIDEO_LAYOUT:描述视频面板切割成棋盘格的方式以及包含的所有VIDEO_WINDOW元素。

typedef struct _ VIDEO_LAYOUT{

BYTE xDiv; // 切割成的棋盘格(列)数

BYTE yDiv; //切割成的棋盘格(行)数

int iWindowNum; // 视频窗口的个数,即pVideoWindow元素的个数

VIDEO_WINDOW * pArrWindow;

} VIDEO_LAYOUT;

VIDEO_WINDOW:基于棋盘格的视频窗口的描述结构,LeftTop到RightDown位置的棋盘关格组成一个视频窗口。

typedef struct _ VIDEO_WINDOW {

struct{

BYTE x;

BYTE y;

} POINT

POINT LeftTop; //左上角的棋盘格

POINT RightDown; //右下角的棋盘格

} VIDEO_WINDOW;

例如对于描述:

VIDEO_LAYOUT videoPanel;

videoPanel. xDiv = 3;

videoPanel. yDiv = 3;

videoPanel.iWindowNum =6;

videoPanel. pArrWindow = new VIDEO_WINDOW [6];

pArrWindow [0].LeftTop.x = 0; pArrWindow [0].LeftTop.y = 0;

pArrWindow [0].RightDown.x = 2; pArrWindow [0] .RightDown.y = 2;

pArrWindow [1].LeftTop.x = 2; pArrWindow [1].LeftTop.y = 0;

pArrWindow [1].RightDown.x =3; pArrWindow [1].RightDown.y = 1;

pArrWindow [2].LeftTop.x = 2; pArrWindow [2].LeftTop.y = 1;

pArrWindow [2].RightDown.x = 3; pArrWindow [2].RightDown.y = 2;

pArrWindow [3].LeftTop.x = 2; pArrWindow [3].LeftTop.y = 2;

pArrWindow [3].RightDown.x = 3; pArrWindow [3].RightDown.y = 3;

pArrWindow [4].LeftTop.x = 0; pArrWindow [4].LeftTop.y = 2;

pArrWindow [4].RightDown.x = 1; pArrWindow [4].RightDown.y = 3;

pArrWindow [5].LeftTop.x = 1; pArrWindow [5].LeftTop.y = 2;

pArrWindow [5].RightDown.x = 2; pArrWindow [5].RightDown.y = 3;

xDiv = 3; yDiv= 3,将面板分割为如下的棋盘格:
视频监控、视频会议中惯用的视频布局实现方法
根据pArrWindow描述,将棋盘格划分为红框所示的视频窗口:
视频监控、视频会议中惯用的视频布局实现方法
其他视频布局的实现原理也一样。

读书人网 >互联网

热点推荐