专利名称:一种osd界面输出的简易实现方法及装置的制作方法
技术领域:
本发明属于计算机应用领域,尤其涉及一种OSD界面输出的简易实现方法及装置。
背景技术:
OSD (on-screen display,屏幕显示)提供一种在电视节目图像上叠加输出图形及文字的一种操作,通过软件编程提供一套图形函数接口,以便进一步根据不同应用进行GUI 开发,目前这些常规的应用程序都是基于硬件芯片(譬如ST芯片)提供的SDK demo实现的,采用三层结构化的OSD设计,包括应用程序层、驱动接口层和硬件底层,在驱动接口层中封装了很多模块的初始化函数以及各个模块类封装的函数接口来完成OSD输出的初始化和控制,为了便于理解,图1示出了现有的基于ST芯片提供的SDK demo上实现OSD输出及UI显示界面的实现流程图,这里的驱动接口层封装了各个模块类的函数接口,包括图层模块,画图模块,视频模块,多层数据混合模块,输出控制模块等,在执行主程序时通过调用各个模块类封装的函数接口实现ST芯片相关寄存器的数值设置以及将待输出的界面显示数据存储到显示内存中,最终实现在设备终端的屏幕上输出OSD界面和UI显示界面。通过上述分析可知,整个OSD输出的实现以及UI的视图操作等都基于这些封装的模块,这样在实现起来比较方便,开发者仅需关心应用程序层的代码编写,无需关心底层是如何实现的,而且程序也便于移植,这样生成的程序由于封装的层次多,逻辑控制复杂,可以实现强大的显示功能,同时这些程序占用空间通常都比较大。但是对于如loader这类简单的界面显示,譬如仅需显示一个进度条或是一段字符串,这些简单的显示不需调用诸多模块,如果还是按照多模块封装方式来实现,对这些模块进行编译,这样会导致生成的可执行文件比较大(例如通常可以到达1.2M),在设备的系统内存还不宽裕的时候,没有必要浪费存储空间。
发明内容
本发明实施例的目的在于提供一种OSD界面输出的简易实现方法,旨在解决现在实现一些简单的不是主体的应用程序仍采用多模块封装编译的方法而导致生成的可执行文件比较大、浪费存储空间的技术问题。本发明实施例是这样实现的,一种OSD界面输出的简易实现方法,包括下述步骤将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器中,并同时获取显示内存的物理地址;依据所述显示内存的物理地址将OSD界面数据存入所述显示内存;以及根据所述主芯片的系统配置方式将所述显示内存中包含的OSD界面数据经数模转换后实时输出到设备屏幕端并显示出来。本发明的另一目的是提供一种OSD界面输出的简易实现装置,旨在解决现有一些简单的不是主体的应用程序的界面输出装置产生的可执行文件比较大、浪费存储空间的技术问题。本发明实施例是这样实现的,一种OSD界面输出的简易实现装置包括寄存器写入单元,将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器中,并同时获取显示内存的物理地址;数据存入单元。依据所述显示内存的物理地址将OSD界面数据存入所述显示内存;以及输出显示单元,根据所述主芯片的系统配置方式将所述显示内存中包含的OSD界面数据经数模转换后实时输出到设备屏幕端并显示出来。本发明的有益效果是本发明提供了一种OSD界面输出的简易实现方法,该方法无需将多个模块封装编译,直接写入相关寄存器数值完成OSD的初始化和控制,并且将待输出的OSD界面数据直接存储到显示内存中实现画图和显示文字等操作,采用本发明方法编译生成的可执行文件体积小、节约存储空间。本发明的另一个有益效果是本发明提供了一种OSD界面输出的简易实现装置, 该装置无需将多个模块封装编译,直接写入相关寄存器数值完成OSD的初始化和控制,并且将待输出的OSD界面数据直接存储到显示内存中实现画图和显示文字等操作,采用本发明装置编译生成的可执行文件体积小、节约存储空间。
图1是现有技术实现OSD输出及UI显示界面的实现流程图;图2是本发明第一实施例提供的OSD界面输出的简易实现流程图;图3是本发明第二实施例提供的OSD界面输出的简易实现流程图;图4是本发明第三实施例提供的OSD界面输出的简易实现装置的结构图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明实施例是基于硬件芯片实现的,所述的硬件芯片通过输出接口连接到设备终端,这里首先需要准备好启动硬件芯片的主程序,在实现一些简单的应用程序时,譬如实现OSD界面输出时,直接写入寄存器数值完成OSD的初始化和控制,代码中无需调用各个模块的封装接口,也无需编译诸多模块,这样可以实现简单的图形和文字输出,而且编译生成的可执行文件体积较小,节约了存储空间。实施例一图2示出了本发明第一实施例提供的OSD界面输出的简易实现流程图,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下。在步骤SO中,系统获取待输出的OSD界面数据。在本发明实施例中,本步骤是本发明的前置步骤,所述的OSD界面数据包括区域、 标签、图标、文字、进度条、动画、数字、可选图标、导航信息等界面数据,这些基本的输出元素构成了完整的OSD界面输出,这些OSD界面输出是程序员根据输出需求用画图代码语句实现的,编译后产生的输出界面数据通常是存储在系统内固定的存储块中。在步骤Sl中,将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器中,并同时获取显示内存的物理地址。在本发明实施例中,所述的主芯片根据不同的应用场合和实际需求选取,优选ST 系列芯片,所述的主芯片是一块CPU,控制整个系统的有序工作,所述的主芯片可以集成有 GPU(图形处理器)用于处理显示输出数据,或者通过主芯片直接实现界面数据的输出,作为优选的实施例,为了节约成本,本发明技术方案中的主芯片无需集成GPU显示芯片,所述的主芯片包括很多用于配置芯片完成OSD的初始化和控制的寄存器,所述的示例程序 (demo程序)包含了一些实现各种设备应用功能的代码。现有技术中为了方便程序设计,采用了统一的三层结构化的OSD设计,因为其中的驱动接口层是芯片厂商将芯片卖给客户时提供的,所述的驱动接口层包含了操作底层芯片所用到的各个函数接口,所以在设置寄存器写入值时无需关心datasheet中关于寄存器的定义,直接通过调用各个模块类封装的函数接口实现寄存器数值写入,这样开发者仅需关心应用程序层的代码编写,无需关心底层如何实现,直接将所有的接口函数封装即可。但是对于实现一些简单的功能还是封装操作底层芯片的所有接口函数,那么这样生成的可执行文件体积较大,浪费存储空间。而在本实施例实现OSD界面输出这一简单功能时,跳过驱动接口层无需封装接口函数,直接通过主芯片datasheet中各个相关寄存器的描述以及每个寄存器中的每个数据位的定义,再根据demo示例程序所要完成的OSD输出功能确定所要写入寄存器的数值,完成SOD的初始化和控制,同时可以根据demo程序的描述得到显示内存的物理地址,将实际的输出显示数据(比如输出一个文本框、输出一个进度条等)存入所述显示内存。在本发明实施例中,所述的主芯片相关寄存器主要包括图层寄存器组(⑶P1, ⑶P3),时钟配置寄存器组(CFG,CKG_B),解码寄存器组(DENC),输出配置寄存器组(VTGA, VTGB),高清输出寄存器组(HDMI,HDF),图层混合寄存器组(VMIX1,VMIX2),以及其他系统配置的寄存器等。在步骤S2中,依据所述显示内存的物理地址将OSD界面数据存入所述显示内存。在本发明实施例中,待输出的图案和文字通常都放在显示内存中,所述显示内存的功能类似于PC机中显卡的显存,现有技术中所有的应用程序都封装了所有的接口层函数,这里将待输出的数据存入显示内存也是通过调用驱动接口层中的一个画图模块接口来实现的,而本发明的实施例的技术方案中不调用驱动接口层中的画图模块接口,而是直接将画图模块接口函数代码写入主程序中将待输出数据存入显示内存,同样可以实现相同的显示功能。在步骤S3中,根据所述主芯片的系统配置方式,将所述显示内存中包含的OSD界面数据经数模转换后实时输出到设备屏幕端并显示出来。在本发明实施例中,通过写入寄存器值完成芯片的初始化和数据的输出方式的控制,系统根据寄存器所配置的数据输出方式将OSD界面数据输出到设备屏幕端。所述显示内存中存储的数据都是数字信号,而屏幕显示器支持的是模拟信号,所以待输出的OSD界面数据需要经过数模转后才能在设备终端的屏幕上显示出来。在本实施例中,所述待输出的OSD界面数据无需经过显示芯片处理,直接通过主芯片处理后得到。
实施例二 图3示出了本发明第二实施例提供的OSD界面输出的简易实现流程图,与图2所示的流程图区别在于本实施例提供了步骤S2中实现OSD界面的输出两种实现方式,但在具体实现时,作为优选的实施方式,可以根据OSD界面数据大小不同,灵活地在步骤S21和步骤S22中选取一种实现方式,具体如下在步骤S21中,依据所述显示内存的物理地址将所述OSD界面数据实时存入所述显示内中并及时更新显示内存的数据。在本发明实施例中,本步骤优选用于OSD界面的数据量比较小的情况,比如输出的仅仅是一个百分比显示的进度条或者是一串待输出的文字,这个时候就可以直接将待输出数据实时存入显示内存的物理地址所对应的存储空间中,同时显示内存中的数据也实时显示在屏幕上,随着显示内存中的数据不断更新,在屏幕上OSD界面数据对应的图形和文字就会逐步显示出来,例如,若OSD界面数据是进度条,则在屏幕端就会显示出一个进度不断移动的进度条,若OSD数据是一串字符,则在屏幕端一个一个字符接连显示出来。在步骤S22中,系统分配一块不小于设备屏幕像素大小的内存空间作为后台缓冲区,将所述OSD界面数据完整地存入所述后台缓冲区后,一次性复制到所述显示内存物理地址所对应的存储空间。在本发明实施例中,本步骤优选用于OSD界面的数据量比较大的情况,比如输出的是一片区域、一个动画,这时就可以将这些大量的待输出的数据全部完整存入后台缓冲区后,再将缓冲区内的数据一次性复制到显示内存相应的存储空间中,最后将这数据一次性输出到设备屏幕端,这样在屏幕端就可以一次性显示出完整画面。为了使得屏幕所显示的所有数据都可以存储在后台缓冲区中,所述后台缓冲区大小不小于整个屏幕像素所占用的空间即可,通常为了节约内存空间,作为优选的实施方式, 后台缓冲区大小等于整个屏幕像素所占用的空间。在具体实现时,可以通过调用malloc函数向系统申请分配指定字节大小的内存空间。实施例三图4示出了本发明第三实施例提供的OSD界面输出的简易实现装置的结构图,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下。一种OSD界面输出的简易实现装置包括数据获取单元,用于系统获取待输出的OSD界面数据。在本发明实施例中,所述的数据获取单元是本发明的优选结构,数据获取单元获取的数据包括括区域、标签、图标、文字、进度条、动画、数字、可选图标、导航信息等。寄存器写入单元,将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器中,并同时获取显示内存的物理地址。数据存入单元。依据所述显示内存的物理地址将OSD界面数据存入所述显示内存。输出显示单元,根据所述主芯片相关寄存器所设置的系统配置方式,将所述显示内存中包含的OSD界面数据经数模转换后实时输出到设备屏幕端并显示出来。进一步作为优选的实施例,所述的数据存入单元包括直接存入模块,用于依据所述显示内存的物理地址将所述OSD界面数据实时存入
6所述显示内中并及时更新显示内存的数据;或者,缓冲存入模块,用于系统分配一块不小于设备屏幕像素大小的内存空间作为后台缓冲区,将所述OSD界面数据完整地存入所述后台缓冲区后,一次性复制到所述显示内存物理地址所对应的存储空间。在本发明实施例可以用于多种OSD节目输出场合,譬如可以应用于车载电视、数字机顶盒、智能电视、车载导航等等。本发明实施例所采用的硬件芯片也不限,根据不同芯片的相关寄存器定义按照示例程序的调试需求相应设置即可。本发明实施例实现简单,采用本发明方法生成的可执行文件体积小、节约存储空间。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种OSD界面输出的简易实现方法,其特征在于,所述方法包括下述步骤将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器中进行系统配置,并同时获取显示内存的物理地址;依据所述显示内存的物理地址将OSD界面数据存入所述显示内存;以及根据所述主芯片的系统配置方式,将所述显示内存中包含的OSD界面数据经数模转换后实时输出到设备屏幕端并显示出来。
2.如权利要求1所述的一种OSD界面输出的简易实现方法,其特征在于,在将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器步骤之前还包括下述步骤系统获取待输出的OSD界面数据。
3.如权利要求1或2所述的一种OSD界面输出的简易实现方法,其特征在于,依据所述显示内存的物理地址将OSD界面数据存入所述显示内存的实现方式包括依据所述显示内存的物理地址将所述OSD界面数据实时存入所述显示内中并及时更新显示内存的数据;或者,系统分配一块不小于设备屏幕像素大小的内存空间作为后台缓冲区,将所述OSD界面数据完整地存入所述后台缓冲区后,一次性复制到所述显示内存物理地址所对应的存储空间。
4.如权利要求1所述的一种OSD界面输出的简易实现方法,其特征在于,所述主芯片相关寄存器包括图层寄存器组、时钟配置寄存器组、解码寄存器组、输出配置寄存器组、高清输出寄存器组和图层混合寄存器组。
5.一种OSD界面输出的简易实现装置,其特征在于,所述实现装置包括寄存器写入单元,用于将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器中,并同时获取显示内存的物理地址;数据存入单元,用于依据所述显示内存的物理地址将OSD界面数据存入所述显示内存;以及输出显示单元,用于根据所述主芯片的系统配置方式将所述显示内存中包含的OSD界面数据经数模转换后实时输出到设备屏幕端并显示出来。
6.如权利要求5所述的一种OSD界面输出的简易实现装置,其特征在于,所述实现装置还包括数据获取单元,用于系统获取待输出的OSD界面数据。
7.如权利要求5或6所述的一种OSD界面输出的简易实现装置,其特征在于,所述的数据存入单元包括直接存入模块,用于依据所述显示内存的物理地址将所述OSD界面数据实时存入所述显示内中并及时更新显示内存的数据;或者,缓冲存入模块,用于系统分配一块不小于设备屏幕像素大小的内存空间作为后台缓冲区,将所述OSD界面数据完整地存入所述后台缓冲区后,一次性复制到所述显示内存物理地址所对应的存储空间。
全文摘要
本发明适用于计算机应用领域,提供了一种OSD界面输出的简易实现方法和装置,所述方法包括将根据主芯片相关寄存器的定义和示例程序调试的实际需求所确定的值写入到相应的寄存器中,并同时获取显示内存的物理地址;依据所述显示内存的物理地址将OSD界面数据存入所述显示内存;根据所述主芯片的系统配置方式将所述显示内存中包含的OSD界面数据经数模转换后实时输出到设备屏幕端并显示出来。本方法无需将多个模块封装编译,直接写入相关寄存器数值完成OSD的初始化和控制,将待输出界面数据直接存储到显示内存中实现画图和显示文字等操作,采用本发明方法编译生成的可执行文件体积小、节约存储空间。
文档编号G06F9/44GK102567017SQ201110420048
公开日2012年7月11日 申请日期2011年12月15日 优先权日2011年12月15日
发明者付双琪 申请人:深圳市九洲电器有限公司