一种检测窗口是否被遮挡的方法与流程

文档序号:13886872阅读:2577来源:国知局

本发明涉及一种检测窗口是否被遮挡的方法。



背景技术:

安防行业里有种一体机,即硬件加监控软件组合的设备,监控软件运行在一体机上,常用的功能是播放监控画面,播放视频是客户端从前端设备,比如ipc中获取到视频码流数据,送入到播放库进行解码,然后渲染画面,这样才有画面出现。有时候一体机的硬件配置过低,或者ipc分辨率等配置较高,导致预览画面看着不流畅或者出现延时情况。一部分原因是一体机系统资源不足,影响了解码和渲染。

同样的,在安装有视频播放器的电脑、手机等智能设备中,也会出现由于智能设备系统资源不足从而导致画面看着不流畅或者出现延时情况。

针对播放视频的窗口隐藏的情况,这种方式比较常见,也比较好解决,当触发了窗口的隐藏事件时暂停解码,继而暂停渲染,当触发了窗口的显示事件时恢复解码和渲染。

但若播放视频的窗口(以下简称:待测窗口)被遮挡了,虽然窗口此时可能是显示的,但是画面看不到,这种情况比较棘手,目前并没有很好的解决方法。



技术实现要素:

本发明提供了一种检测窗口是否被遮挡的方法,能够对待测窗口是否遮挡做出判断,从而在一定程度上缓解上述问题。

一种检测窗口是否被遮挡的方法,包括以下步骤:

步骤1:遍历待测窗口的当前窗口ai(1≤i≤n;i,n∈正整数),检测单个当前窗口是否完全遮挡待测窗口,若是,则进入步骤2,反之,进入步骤3;

其中,所述的当前窗口为待测窗口的兄弟窗口和上层窗口;

步骤2:判断待测窗口被遮挡,检测完成;

即,若检测到窗口被遮挡,则暂停解码;

步骤3:检测多个当前窗口ai是否完全遮挡待测窗口,若是,则进入步骤2,反之,进入步骤4;

进一步的,检测多个当前窗口ai是否完全遮挡待测窗口的方法如下:

步骤3.1:获得当前窗口ai的总面积其中,该当前窗口ai为与待测窗口有重叠的窗口;

判断依次排序的当前窗口ai,若首个窗口a1或末个窗口an未全部遮挡待测窗口,则进入步骤4;反之,进入步骤3.2;

步骤3.2:对当前窗口ai进行两两判断,若任一两两之间无重叠,则进入步骤4;反之,判断并获得两两之间的重叠窗口bj(1≤j≤m;j,m∈正整数),并获得重叠窗口bj的面积之和

步骤3.3:对步骤3.2中获得的重叠窗口bj进行两两判断,递归循环判断重叠窗口bj的重叠区域,直至没有重叠;获得重叠区域递归判断后的总面积

步骤3.4:判断待测窗口的面积s是否大于若是,则进入步骤4;反之,进入步骤2。

步骤4:判断待测窗口未被遮挡,检测完成。

即,若检测到窗口未被遮挡,则继续解码。

本发明的有益效果:

通过本发明,无论是单个或多个当前窗口,均可判断待测窗口是否被遮挡,对于看不到画面的视频,暂停解码和渲染,反之则继续解码和渲染,从而降低了客户端对系统硬件或ipc分辨率等系统配置的要求。

附图说明

图1为本发明的方法流程图。

图2为当前窗口ai的矩阵坐标图。

图3为待测窗口w的矩阵坐标图。

具体实施方式

如图1所示,一种检测窗口是否被遮挡的方法,包括如下步骤:

以当前窗口ai(1≤i≤n;i,n∈正整数)的左上角为原点,记它的左上角坐标为(x1_ai,y1_ai),右上角坐标为(x2_ai,y1_ai),右下角坐标为(x2_ai,y2_ai),左下角坐标为(x1_ai,y2_ai);如图2所示。

记待测窗口w的左上角坐标为(x1_w,y1_w),右上角坐标为(x2_w,y1_w),右下角坐标为(x2_w,y2_w),左下角坐标为(x1_w,y2_w);如图2所示。

步骤(1):遍历待测窗口w的兄弟窗口和上层窗口,即当前窗口ai,若该当前窗口ai非子窗口,则进入步骤(2);

步骤(2):根据当前窗口ai与待测窗口w的坐标值,判断待测窗口w是否被当前窗口ai全部遮挡,若是,则进入步骤(3);反之,则进入步骤(4);

步骤(3):判断待测窗口w被遮挡,检测完成;即暂停解码;

步骤(4):将与待测窗口有重叠的当前窗口ai的坐标保存在列表list_rect中并获得该列表中当前窗口ai的总面积根据当前窗口ai的x坐标值,由小到大依次对当前窗口ai进行排序,若判断首个当前窗口a1的x1_a1值大于待测窗口w的x1_w值或末个窗口an的x2_an值小于待测窗口w的x2_w值,则进入步骤(5);反之,进入步骤(6);

步骤(5):判断待测窗口w未被遮挡,检测完成;即恢复解码;

步骤(6):对当前窗口ai进行两两判断,若an-1的x2_an-1值小于an的x1_an值,则进入步骤(5);反之,进入步骤(7);

步骤(7):分别判断an的四个顶点,若an至少有一个顶点包含在an-1的区域中,则记录并保存an-1与an的重叠窗口bj(1≤j≤m;j,m∈正整数),并将重叠窗口bj的坐标保存在列表list_rect_overlap中,并获得重叠窗口总面积

其中,以an的左上角(x1_ai,y1_ai)为例,若满足:

x1_an-1≤x1_an≤x2_an-1且y2_an-1≤y1_an≤y1_an-1;

则判断该顶点落入an-1的区域中;

步骤(8):对列表list_rect_overlap中的重叠窗口bj进行两两判断,若判断重叠窗口bj-1与bj有重叠区域,则把重叠区域的坐标保存在新列表中,递归循环判断重叠窗口的重叠区域,直至没有重叠,判断方法与步骤(7)相同;获得重叠区域递归判断后的总面积(1≤k≤q;k,q∈正整数);

步骤(9):判断待测窗口w的面积s是否大于若是,则进入步骤(5);反之,进入步骤(3)。

步骤(9)即判断多个当前窗口ai的总面积是否遮挡待测窗口w,若则表明没有遮挡,否则就是遮挡。

若判断为遮挡,则暂停解码,若判断为未遮挡,则继续解码。

更具体的来说,

本发明主要通过定时器循环检测窗口是否被遮挡,依据窗口的z-order判断窗口是否是下层窗口,如果是下层窗口则肯定不会遮挡,没有意义,直接忽略,然后检测单个窗口是否遮挡,通过长度和宽度判断,再检测多个窗口拼接后是否遮挡,通过面积的大小判断。主要代码部分如下:

a)检测单个窗口是否遮挡:

b)检测多个窗口拼接后是否遮挡:

伪代码如下:

其中overlaparea方法定义如下

//返回dsrect重叠的面积,rcrect是返回重叠的矩形列表

longcmywidget::overlaparea(list_rect&rcrect,constlist_rect&dsrect)。其中:

兄弟窗口:即与当前窗口有同一个父窗口的窗口。

上层窗口:即父窗口以及父窗口的上层窗口。

子窗口:即窗口的父窗口为当前窗口的窗口。

父窗口:即直接的上层窗口,中间无其他窗口。

以上公开的仅为本发明的实施例,但是本发明并非局限于此,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。显然这些改动和变型均应属于本发明要求的保护范围保护内。此外,尽管本说明书中使用了一些特定的术语,但这些术语只是为了方便说明,并不对本发明构成任何特殊限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1