【发明内容】
本发明所要解决的技术问题在于提供一种手持设备同时实现屏幕旋转和去交错功能的方法,将两者有机的结合在一起,通过复用buffer和滤波器,实现了电路面积减少,有效降低电路成本。
本发明采用以下技术方案解决上述技术问题:
手持设备同时实现屏幕旋转和去交错功能的方法,包括如下步骤:
步骤一:用CPU通过总线配置寄存器,首先将去交错开关位和旋转开关位打开,然后再配置视频的尺寸,当前场的地址,前场的地址,后场的地址,旋转角度这些必须的信息;
步骤二:在配置完毕后,总线读取单元会根据配置开始从存储单元取数;
步骤三:总线读取单元从存储单元取出数据,并将数据送往旋转控制器后把数据送到运动估计单元和旋转控制器;读取原始图像的数据的顺序控制:如果需要旋转90度,则从原始图像的左下角开始读取,如果需要旋转270度,则从原始图像的右上方开始读取;
步骤四:如果传输的是当前场的原始行,则数据直接经过旋转控制器进行旋转处理后传输到图像缓存单元,如果是前后场的数据,则数据被传输到运动判断单元;
步骤五:运动判断单元对每个生成行的每个点进行运动判断,并将判断的结果传给差值计算单元参与插值运算;
步骤六:插值运算单元根据运动判断的结果,计算生成行的的插值点,并将生成行也写到图像缓存中;
步骤七:屏幕显示控制器从已经准备好数据的图像缓存单元中将图像数据读出,根据对应屏幕所需要的时序和尺寸将处理好的图像数据按照屏幕要求的格式输出到屏幕显示。
所述去交错步骤为:
如果当前场是奇行,则生成帧所有的奇行采用当前场的原始值,所有偶行为生成行;如果当前场是偶行,则生成帧的所有偶行采用当前场的原始值,所有奇行为生成行;
在计算生成行时,通过前后参考场对应像素点的比较,算出差值,根据阈值判断出每个像素点是运动还是静止;
插值时计算生成点使用的是在当前场中生成点位置的上下点,和前参考场的在生成点坐标上的点,并根据运动判断的结果进行计算得到;
在根据运动判断结果插值计算生成点时,如果是计算运动的生成点,计算插值时的当前场的权值会比较大,以避免闪烁;如果计算静态的生成点,插值时的前场的权值会比较大,以提高信息量和清晰度。
所述运动判断步骤为:
由于隔行视频源的每场的奇偶性是交替分布的,前后场的位置正好是对应当前场的生成行的位置,所以需要读入前后场中生成行对应位置的像素点;
而且还要将生成点位置前后的两个点也读入,同时进行对应点的绝对差值运算;
将用户配置的运动判断门限值与每个对应点的绝对差值进行比较,如果小于门限说明该点偏向于静止,如果大于门限则说明该点偏向于运动;
只有生成点和前后读入的所有点的运动判断都是静止点时,该生成点的运动判断才是静止,否则被判定为运动;
在该生成点的判断结果输出后,继续对下一个点进行运动判断。
所述插值运算步骤为:
第一次行传输当前场的第一行,存储于第一行缓存;
第二次行传输前场的第三行,存储于第三行缓存;
第三次行传输参考场0的第二行,存储于参考场行缓存;
第四次行传输参考场1的第二行,数据同时输入到运动判断单元和差值计算单元,进入运动判断单元的数据与参考场0的数据一起进入运动判断单元进行运动判断;
运动判断单元将运动判断结果输出到差值计算单元,差值计算单元同时读取第一行缓存和第三行缓存,再根据flag的内容,将三行数据进行插值计算,插值结果写入第二行缓存;
在生成行存储完毕后,将line3数据放入当前场第一计算行缓存中,因为在计算下一个生成行line4的时候,需要当前场第三五行的数据,此时line3就成为了第一计算行了;
然后继续开始下一个生成行的计算循环,读取当前场line5放入当前场帧缓存line5缓存;
读取参考场0的line4存到参考场行缓存;
读取参考场1的line4,进行运动判断和插值计算;
这样的计算不断循环直到真个帧缓存填充完毕。
本发明的优点在于:1、本发明的电路结构同时实现了去交错和屏幕旋转功能,尽可能的将两者使用的缓存空间和逻辑电路进行复用,以减少存储器和电路的使用;2、只需要从存储单元读出待显示画面,经过旋转和去交错后,不需要回写存储器,可以直接显示到显示设备上,大大降低了总线带宽的占用,很好的解决了在尽量少占用资源的情况下实现画面旋转和去交错的功能;3、算法上采用了效果最好的帧间预测法,保证了良好的显示效果;4、在实现90度和270度旋转时,不需要使用两套完全独立控制机制,只是读如图像的起始位置变化和相应的存储顺序变化,最大限度的复用了电路,减少了电路使用。
【具体实施方式】
手持设备同时实现屏幕旋转和去交错功能的方法,首先设计一去交错和旋转电路结构,如图1所示:包括存储单元、CPU、总线、去交错和旋转单元、屏幕显示控制器、屏幕;所述存储单元和CPU分别连接到所述总线;所述总线连接所述去交错和旋转单元;所述去交错和旋转单元连接所述屏幕显示控制器;所述屏幕显示控制器连接到所述屏幕;
所述去交错和旋转单元包括配置寄存器、总线读取单元、旋转控制器、去交错功能单元、图像缓存单元;所述去交错功能单元包括插值运算单元和运动判断单元;
其中所述存储单元负责存储隔行格式的视频原始数据;所述总线读取单元负责通过总线从存储单元读取视频数据,并把数据送到去交错和旋转单元;所述图像缓存单元负责存储将要显示到屏幕的经过旋转和去交错处理的图像;所述屏幕显示控制器负责放大缩小缓存中的图像尺寸使之适应屏幕的尺寸并且按照屏幕需要的格式和时序传输图像数据到屏幕输出;所述CPU负责***整体的时序控制和对配置寄存器进行配置;所述配置寄存器负责存储整个旋转过程需要的所有信息,如图像的尺寸,是否需要旋转,旋转的角度,是否需要去交错,原始图像在存储单元中的起始地址值,用户使用CPU通过总线对配置寄存器中的值进行配置;所述运动判断单元负责对每个生成行的每个点进行运动判断,并将判断的结果传给差值计算单元参与插值运算;所述插值运算单元负责根据运动判断的结果,计算当前场中生成点位置的上下点,和前参考场的在生成点坐标上的点的插值点;所述旋转控制器负责对总线读取单元送入的数据进行旋转处理,再将处理后的数据存放到图像缓存单元。
总体操作过程(同时执行旋转和去交错功能):
当用户使用去交错和旋转电路时,用CPU通过总线配置寄存器,首先将去交错开关位和旋转开关位打开,然后再配置视频的尺寸,当前场的地址,前场的地址,后场的地址,旋转角度这些必须的信息;
在配置完毕后,总线读取单元会根据配置开始从存储单元取数;
总线读取单元从存储单元取出数据,并将数据送往旋转控制器后把数据送到运动估计单元和旋转控制器;读取原始图像的数据的顺序控制:如果需要旋转90度,则从原始图像的左下角开始读取,如果需要旋转270度,则从原始图像的右上方开始读取;
如果传输的是当前场的原始行,则数据直接经过旋转控制器进行旋转处理后传输到图像缓存单元,如果是前后场的数据,则数据被传输到运动判断单元;
运动判断单元对每个生成行的每个点进行运动判断,并将判断的结果传给差值计算单元参与插值运算;
插值运算单元根据运动判断的结果,计算生成行的的插值点,并将生成行也写到图像缓存中;
屏幕显示控制器从已经准备好数据的图像缓存单元中将图像数据读出,根据对应屏幕所需要的时序和尺寸将处理好的图像数据按照屏幕要求的格式输出到屏幕显示。
下面说细进行说明:
请参图图2,是本发明中去交错算法示意图。
去交错算法具体流程为:
如果当前场是奇行,则生成帧所有的奇行采用当前场的原始值,所有偶行为生成行;如果当前场是偶行,则生成帧的所有偶行采用当前场的原始值,所有奇行为生成行;
在计算生成行时,通过前后参考场对应像素点的比较,算出差值,根据阈值判断出每个像素点是运动还是静止;
插值时计算生成点使用的是在当前场中生成点位置的上下点,和前参考场的在生成点坐标上的点,并根据运动判断的结果进行计算得到;
在根据运动判断结果插值计算生成点时,如果是计算运动的生成点,计算插值时的当前场的权值会比较大,以避免闪烁;如果计算静态的生成点,插值时的前场的权值会比较大,以提高信息量和清晰度。
请参阅图3,是本发明中运动判断单元具体流程图。
由于隔行视频源的每场的奇偶性是交替分布的,前后场的位置正好是对应当前场的生成行的位置,所以需要读入前后场中生成行对应位置的像素点;
而且还要将生成点位置前后的两个点也读入,同时进行对应点的绝对差值运算;
将用户配置的运动判断门限值与每个对应点的绝对差值进行比较,如果小于门限说明该点偏向于静止,如果大于门限则说明该点偏向于运动;
只有生成点和前后读入的所有点的运动判断都是静止点时,该生成点的运动判断才是静止,否则被判定为运动;
在该生成点的判断结果输出后,继续对下一个点进行运动判断。
请参阅图4,是本发明中插值运算单元具体流程图。
所述插值运算单元具体实现步骤为:
第一次行传输当前场的第一行,存储于第一行缓存;
第二次行传输前场的第三行,存储于第三行缓存;
第三次行传输参考场0的第二行,存储于参考场行缓存;
第四次行传输参考场1的第二行,数据同时输入到运动判断单元和差值计算单元,进入运动判断单元的数据与参考场0的数据一起进入运动判断单元进行运动判断;
运动判断单元将运动判断结果输出到差值计算单元,差值计算单元同时读取第一行缓存和第三行缓存,再根据flag的内容,将三行数据进行插值计算,插值结果写入第二行缓存;
在生成行存储完毕后,将line3数据放入当前场第一计算行缓存中,因为在计算下一个生成行line4的时候,需要当前场第三五行的数据,此时line3就成为了第一计算行了;
然后继续开始下一个生成行的计算循环,读取当前场line5放入当前场帧缓存line5缓存;
读取参考场0的line4存到参考场行缓存;
读取参考场1的line4,进行运动判断和插值计算;
这样的计算不断循环直到真个帧缓存填充完毕。
下面描述旋转控制部分:
请参阅图5所示,是顺时针90度旋转图像缓存单元的结构和总线读取单元读数的时序示意图。旋转图像缓存单元主要由AB两个缓存器构成,AB结构完全一致,主要用于操作过程中的乒乓操作,也就是一个A缓存器在填充数据的时候B可以向外输送数据,当A填充数据的缓存器被填满并可以向外传数据后,B缓存器又可以被填充。
在旋转模式下,总线读取单元读数的顺序如图4所示,
1、从原始图像的左下角开始传输,数据通过旋转控制器将数据送到A缓存器,每次传输一个突发(burst)传输,传完一个突发传输后继续传输上一行的一个突发传输,直到原始图像的第一行的突发传输被传完,此时A缓存器被填满,可以向屏幕显示控制器输出原始图像的列数据;
2、然后接着从最后一行的偏移一个突发传输的地址再开始传输,此时填充B缓存器,操作和填充A缓存器一致,直到B缓存也被填满.然后等待A缓存器被读完;
3、等待A缓存器被读完后,开始读B缓存器.总线读取单元也从最后一行的偏移两个突发传输的地址再开始传输,重新填充A缓存器,直到A缓存器填满.然后等待B缓存器被读完;
4、等待B缓存器被读完后,又开始读A缓存器和重新填充B缓存器,如此循环直到整个图像被遍历。
同时进行旋转和去交错处理的实现流程(以顺时针旋转90度为例):
请参阅图6所示,写顺序的数字代表填充缓存器的先后顺序(AB缓存器的填充顺序一样),也就是说在填充缓存器A时,顺序如下:
1、从原始图像的倒数第一行开始读一次突发传输直接将原始数据填充到缓存器A的倒数第一行;
2、从原始图像的倒数第三行开始读一次突发传输直接将原始数据填充到缓存器A的倒数第三行;
3、在运动判断和插值计算出倒数第二行的数据后填充到缓存器A的倒数第二行;
4、从原始图像的倒数第5行开始读一次突发传输直接将原始数据填充到缓存器A的倒数第5行;
以此类推直到对缓存器A填充完毕。
如图7所示的是同时实现去交错和旋转时的数据读取和计算流程,该流程结合了单独进行去交错和旋转功能的特点可以用共享的缓存空间同时实现去交错和旋转功能。
缓存单元主要由AB两个缓存器构成,AB结构完全一致,主要用于操作过程中的乒乓操作,也就是一个A缓存器在填充数据的时候B可以向外输送数据,当A填充数据的缓存器被填满并可以向外传数据后,B缓存器又可以被填充.与单独的实现旋转时每行的填充顺序不同,在同时实现去交错功能时;在同时去交错和旋转模式下,总线读取单元读数的顺序如上图所示(运动判断和插值计算参考前面的插值计算电路流程图):
具体流程如下:
1、第一次行传输当前场的倒数第一行,存储于缓存器A的倒数第一行缓存;
2、第二次行传输前场的倒数第三行,存储于缓存器A的倒数第三行缓存;
3、第三次行传输参考场0的倒数第二行,存储于参考场行缓存;
4、第四次行传输参考场1的倒数第二行,数据同时输入到运动判断单元和差值计算单元,进入运动判断单元的数据与参考场0的数据一起进入运动判断单元进行运动判断;
5、运动判断单元将运动判断结果输出到差值计算单元,差值计算单元同时读取倒数第一行缓存和倒数第三行缓存,再根据flag的内容,将三行数据(当前场倒数第一三行和参考场1的倒数第二行)进行插值计算,插值结果写入缓存器A倒数第二行缓存;
6、在生成行存储完毕后,将line3数据放入当前场第一计算行缓存中,因为在计算下一个生成行line4的时候,需要当前场倒数第三五行的数据,此时倒数第三行就成为了第一计算行了;
7、然后继续开始下一个生成行的计算循环,读取当前场的倒数第5行放入缓存器A的倒数第5行;
8、读取参考场0的倒数第4行存到参考场行缓存;
9、读取参考场1的倒数第4行,进行运动判断和插值计算;
10、这样的计算不断循环直到缓存器A填充完毕;
11、在缓存器A填充完毕后,开始以相同的方式填充缓存器B;
12、使用乒乓交替的方式循环填充缓存器AB,直到整个图像显示完毕。
顺时针旋转270度的方法和旋转90度的类似,只是读取行的起始点从左下角变为右上角.其他的比如运动判断和插值计算都一样。
本发明的有益效果在于:1、本发明的电路结构同时实现了去交错和屏幕旋转功能,尽可能的将两者使用的缓存空间和逻辑电路进行复用,以减少存储器和电路的使用;2、只需要从存储单元读出待显示画面,经过旋转和去交错后,不需要回写存储器,可以直接显示到显示设备上,大大降低了总线带宽的占用,很好的解决了在尽量少占用资源的情况下实现画面旋转和去交错的功能;3、算法上采用了效果最好的帧间预测法,保证了良好的显示效果;4、在实现90度和270度旋转时,不需要使用两套完全独立控制机制,只是读如图像的起始位置变化和相应的存储顺序变化,最大限度的复用了电路,减少了电路使用。