CN103455361A - 一种在64位操作***下调用32位解码库的设计方法 - Google Patents
一种在64位操作***下调用32位解码库的设计方法 Download PDFInfo
- Publication number
- CN103455361A CN103455361A CN201310400814XA CN201310400814A CN103455361A CN 103455361 A CN103455361 A CN 103455361A CN 201310400814X A CN201310400814X A CN 201310400814XA CN 201310400814 A CN201310400814 A CN 201310400814A CN 103455361 A CN103455361 A CN 103455361A
- Authority
- CN
- China
- Prior art keywords
- storehouses
- decoding
- bit
- encapsulation
- under
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Computer And Data Communications (AREA)
- Stored Programmes (AREA)
Abstract
本发明是一种在64位操作***下调用32位解码库的设计方法,包含以下步骤:1)64位主控进程调用一个64位封装库,以进程间通信的方式跨越进程边界,间接的访问32位解码库的功能;2)32位解码库得到的原始视频数据直接写入到共享内存中,供64位封装库读取。优点:1)能够在没有源代码的情况下,将32位解码库封装成64位的对应版本,拥有与原版解码库完全一致的函数接口定义和调用方法;2)经实测,资源开销比原32位***下直接执行多了20-30%;3)主控进程使用64位可以使得大部分数据交换在内存中进行,适合视频分析应用领域;4)能够在64位Windows和64位Linux下以相同的原理实现。
Description
技术领域
本发明涉及的是一种在64位操作***下调用32位解码库的设计方法,属于数字信息传输领域。
背景技术
64位操作***的最大优点,是可以提供更大的内存寻址空间,32位***单一进程最大的内存寻址空间是2GB,这个限制对于某些必须处理大量数据的应用程序,尤其是视频分析应用而言,显得尤为不足。64位Windows操作***提供了WoW64兼容层,使得32位程序可以直接在64位操作***运行,尽管理论上通过兼容层运行会有一些性能损失,但是实际上这种差别可以忽略;类似的,64位Linux操作***上只需安装相应的32位***库,也可以运行32位程序。但是,64位程序不支持将32位模块载入到自己的进程空间,反之,32位程序也不支持将64位模块载入到自己的进程空间。
为了在64位操作***下调用原有的32位模块,现有技术通常采用以下方案:
1. 将现有主控程序和依赖模块全部移植到64位***,这需要重新编译,大部分情况下还要修改源代码,这种方式可以达到最理想的效果,但是只要有任何一个依赖模块无法移植到64位,主控进程就无法运行,有一些32位解码库是第三方提供的,没有源代码,不可能重新编译为64位动态库,因此该方案的适用性受到较大限制;
2. 将任务切割成更小的进程,每个进程占用的内存不超过2GB,主控进程通过进程间通信发送指令和获取执行结果,这要求对现有的任务分配机制做出较大调整,可扩展性也不好;
3. 在Windows下编写一个进程外32位COM服务端与64位客户端进行通信,但是这种方式在处理视频数据时性能低下,32位COM服务端还需要做额外的开启关闭维护,也无法在常见的Linux视频分析服务器中运行;
不难发现,上述方案均不适用于视频分析这一需要处理大量数据交互的应用领域。
发明内容
本发明提出的是一种在64位操作***下调用32位解码库的设计方法,其目的旨有效解决现有技术所存在的上述缺陷。高效的在64位操作***下调用32位解码库。
本发明的技术解决方案:一种在64位操作***下调用32位解码库的设计方法,包含以下步骤:
1)64位主控进程调用一个64位封装库,以进程间通信的方式跨越进程边界,间接的访问32位解码库的功能;
2)为了提高大流量视频数据的访问性能,32位解码库得到的原始视频数据直接写入到共享内存中,供64位封装库读取。
本发明与现有技术相比,主要区别及其效果在于:
1)能够在没有源代码的情况下,将32位解码库封装成64位的对应版本,拥有与原版解码库完全一致的函数接口定义和调用方法;
2)经过封装的解码库仍然拥有高性能,经实测,资源开销比原32位***下直接执行多了20-30%,但是比其他实现方式动辄100%以上的增幅已经有相当大的进步;
3)主控进程使用64位可以使得大部分数据交换在内存中进行,适合视频分析应用领域;
4)能够在64位Windows和64位Linux下以相同的原理实现。
附图说明
图1是本发明第一实施方式的流程图。
图2是本发明第二实施方式的流程图。
图3是一种在64位操作***下调用32位解码库的设备结构示意图。
具体实施方式
一种在64位操作***下调用32位解码库的设计方法,包含以下步骤:
1)64位主控进程调用一个64位封装库,以进程间通信的方式跨越进程边界,间接的访问32位解码库的功能;
2)为了提高大流量视频数据的访问性能,32位解码库得到的原始视频数据直接写入到共享内存中,供64位封装库读取。
所述的64位封装库是一套与原版32位解码库完全一致的函数接口定义,包括原版解码库的全部功能,主控进程调用该封装库时,与其他已经有64位对应版本的解码库一致。
所述的64位封装库,在运行时该封装库将自动启动一个或数个32位代理服务进程,并与其建立通信连接,在结束运行时自动结束由其启动的所有32位代理服务进程。
所述的进程间通信,使用管道、消息队列、套接字Socket或者共享内存方式包括POSIX Shared Memory或Windows API中的一种或几种的组合在两个进程间进行数据交互。
所述的32位代理服务进程,能够监听来自64位封装库的调用请求,并根据请求直接调用32位解码库相应的函数,然后将结果以进程间通信的方式返回给64位封装库。
对照图3,一种在64位操作***下调用32位解码库的设备,其特征是包含64位运行时装置、32位运行时装置和共享内存装置,所述的64位运行时装置,包含以下模块:
a. 64位主控进程,这是开发人员编写的应用程序,直接调用64位封装库;
b. 64位封装库,用于向开发人员提供64位调用接口,以及与32位代理服务进程通信。
所述的32位运行时装置,包含以下模块:
a. 32位代理服务进程,用于与64位封装库通信,以及调用32位解码库;
b. 32位解码库,用于提供实际的解码功能;
所述的共享内存装置,用于提供高性能的视频数据读取和写入。
实施例1
如图1所示,
一种高性能的在64位操作***下调用32位解码库的方法,包含以下几个方面:
在步骤S110中,64位主控进程通过静态链接或者动态载入已封装的64位解码库。需要指出的是,进程间通信以及提供相应函数接口的开发工作量可能相当复杂,如果能够获得原生64位解码库,那么应当直接调用,本发明所述的方案仅适用于必须使用32位解码库的情况;
接着,在步骤S111中,如果需要初始化,64位封装库启动32位代理服务进程,并与其建立通信连接,然后进入步骤S112;
接着,在步骤S112中,64位主控进程调用解码库的函数,如FunctionA();
接着,在步骤S113中,64位封装库通过进程间通信,调用32位代理服务上的FunctionA(),并将结果返回64位主控进程,完成流程。
需要说明的是,通过如此进程间通信转换的解码库,其效率一定会比直接运行要低,实际上的开销受到以下因素影响:具体的进程间通信实现方式、操作***32位兼容层本身的开销以及载入和初始化的开销。
实施例2
如图2所示,
一种高性能的在64位操作***下调用32位解码库的方法,本实施方式在第一实施方式的基础上进行了改进,主要改进之处在于,在本实施方式中,对于解码库输出的原始视频数据,由于视频处理的特点是数据量大,即时性要求高,因此性能的要求比普通应用高。具体的,对于一路720P高清视频来说,每秒钟每次内存复制需要处理33MB的数据,如果使用传统的进程间通讯,至少需要2-3次内存复制(memcpy)操作,这将会严重影响执行效率。为此,在数据交换的方法上,本实施方案特别设计了一个将内存复制最小化的捷径,流程如图2所示:
在步骤S210中,64位主控进程通过静态链接或者动态载入经过64位封装的解码库;
接着,在步骤S211中,如果需要初始化,64位封装库启动32位代理服务进程,并与其建立通信连接;
同时,在步骤S212中,由32位代理服务进程或者64位主进程创建一块共享内存,用于视频数据交换;
接着,在步骤S213中,64位主控进程调用解码库的函数,如FunctionA(),如果FunctionA()需要获取视频解码数据,进入步骤S214,如果是普通函数调用,进入步骤S217;
接着,在步骤S214中,32位代理服务将32位解码库得到的原始视频数据复制到共享内存中;
接着,在步骤S215中,32位代理服务进程通过进程通信,通知64位封装库新数据已经可用;
接着,在步骤S216中,64位主进程通过封装库,读取共享内存中的数据,完成流程。
在步骤S217中,64位封装库通过进程间通信,调用32位代理服务上的FunctionA(),并将结果返回64位主控进程,完成流程。
实施例3
一种高性能的在64位操作***下调用32位解码库的方法,本实施方式在第一实施方式的基础上进行了改进,主要改进之处在于,在本实施方式中,改进了第一实施方式的进程间通信,所有的命令都直接使用共享内存进行数据交互,为了使32位和64位进程直接使用同一内存,需要对在数据读写时进行以下方面的处理:
1. 统一数据对齐,直接使用结构体进行数据交互仍然是最高效的方法之一,但是32位和64位处理器的数据对齐方式不同。复杂的自定义数据结构从32位进程传输到64位进程时,可能不会得到希望的结果,反之亦然,解决这个问题需要查询具体的平台编译器说明;
具体的,可以通过以下方法解决这个问题:在一个int32_t成员后面额外加入另一个int32_t成员,这样,不管在32位***上还是在64位***上都占8个字节存储,从而消除了不同架构之间的区别;
2. 统一数据类型,大部分情况下,64位程序和32位程序的数据类型是相同的,可能出现不同的主要是指针和长整型。要解决这个问题可以通过使用一些支持跨处理器架构的数据类型如intptr_t或者根据不同平台进行typedef条件编译,以实现同一代码适应多种平台。
本领域的普通技术人员应该理解,即使对以下实施方式的细节和形式做出改变,仍然可以实现本申请权利要求书所述的技术方案。本发明的实施方式包括落入权利要求书的精神和内涵范围内的所有变化或等价实现。
需要说明的是,为了突出说明创新部分,仅出示了本发明实施方式相关的模块。应当理解,下列具体实施方式,仅仅用于解释本发明,并不用于限制本发明。本文所述“连接”可以是机械连接、电连接、原件内部连接或者逻辑上的连接关系,换句话说,本领域的普通技术人员对于上述术语的理解应该根据具体情况确定。
Claims (6)
1.一种在64位操作***下调用32位解码库的设计方法,其特征是该方法包含以下步骤:
1)64位主控进程调用一个64位封装库,以进程间通信的方式跨越进程边界,间接的访问32位解码库的功能;
2)为了提高大流量视频数据的访问性能,32位解码库得到的原始视频数据直接写入到共享内存中,供64位封装库读取。
2.根据权利要求1所述的一种在64位操作***下调用32位解码库的设计方法,其特征是所述的64位封装库是一套与原版32位解码库完全一致的函数接口定义,包括原版解码库的全部功能,主控进程调用该封装库时,与其他已经有64位对应版本的解码库一致。
3.根据权利要求2所述的一种在64位操作***下调用32位解码库的设计方法,其特征是所述的64位封装库,在运行时该封装库将自动启动一个或数个32位代理服务进程,并与其建立通信连接,在结束运行时自动结束由其启动的所有32位代理服务进程。
4.根据权利要求2所述的一种在64位操作***下调用32位解码库的设计方法,其特征是所述的进程间通信,使用管道、消息队列、套接字Socket或者共享内存方式包括POSIX Shared Memory或Windows API中的一种或几种的组合在两个进程间进行数据交互。
5.根据权利要求2所述的一种在64位操作***下调用32位解码库的设计方法,其特征是所述的32位代理服务进程,能够监听来自64位封装库的调用请求,并根据请求直接调用32位解码库相应的函数,然后将结果以进程间通信的方式返回给64位封装库。
6.一种在64位操作***下调用32位解码库的设备,其特征是包含64位运行时装置、32位运行时装置和共享内存装置,所述的64位运行时装置,包含以下模块:
a. 64位主控进程,这是开发人员编写的应用程序,直接调用64位封装库;
b. 64位封装库,用于向开发人员提供64位调用接口,以及与32位代理服务进程通信;
所述的32位运行时装置,包含以下模块:
a. 32位代理服务进程,用于与64位封装库通信,以及调用32位解码库;
b. 32位解码库,用于提供实际的解码功能;
所述的共享内存装置,用于提供高性能的视频数据读取和写入。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310400814.XA CN103455361B (zh) | 2013-09-06 | 2013-09-06 | 一种在64位操作***下调用32位解码库的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310400814.XA CN103455361B (zh) | 2013-09-06 | 2013-09-06 | 一种在64位操作***下调用32位解码库的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103455361A true CN103455361A (zh) | 2013-12-18 |
CN103455361B CN103455361B (zh) | 2017-02-08 |
Family
ID=49737768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310400814.XA Active CN103455361B (zh) | 2013-09-06 | 2013-09-06 | 一种在64位操作***下调用32位解码库的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103455361B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104298529A (zh) * | 2014-10-11 | 2015-01-21 | 山东理工大学 | 一种飞思卡尔单片机开发***的使用方法 |
CN105446732A (zh) * | 2015-05-13 | 2016-03-30 | 北京天诚盛业科技有限公司 | 64位程序的运行实现方法、装置和*** |
CN105630599A (zh) * | 2014-10-28 | 2016-06-01 | 龙芯中科技术有限公司 | 基于32/64位混合操作***的显存分配方法及装置 |
CN106682494A (zh) * | 2016-11-16 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 一种信息访问方法、装置和设备 |
CN107729132A (zh) * | 2017-10-09 | 2018-02-23 | 武汉斗鱼网络科技有限公司 | 一种视频解码进程保护方法及装置 |
CN111142969A (zh) * | 2019-12-27 | 2020-05-12 | 贵阳动视云科技有限公司 | 64位程序调用32位程序模块的方法、装置、介质及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5828865A (en) * | 1995-12-27 | 1998-10-27 | Intel Corporation | Dual mode bus bridge for interfacing a host bus and a personal computer interface bus |
US6018810A (en) * | 1997-12-12 | 2000-01-25 | Compaq Computer Corporation | Fault-tolerant interconnection means in a computer system |
US6178478B1 (en) * | 1998-12-11 | 2001-01-23 | Vlsi Technology, Inc. | Smart target mechanism for eliminating dual address cycles in a peripheral component interconnect environment |
CN101272501A (zh) * | 2008-05-07 | 2008-09-24 | 北京数码视讯科技股份有限公司 | 一种视音频编解码方法和装置 |
CN102098510A (zh) * | 2010-11-25 | 2011-06-15 | 深圳市融创天下科技发展有限公司 | 解码、编码音视频数据的方法及装置 |
-
2013
- 2013-09-06 CN CN201310400814.XA patent/CN103455361B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5828865A (en) * | 1995-12-27 | 1998-10-27 | Intel Corporation | Dual mode bus bridge for interfacing a host bus and a personal computer interface bus |
US6018810A (en) * | 1997-12-12 | 2000-01-25 | Compaq Computer Corporation | Fault-tolerant interconnection means in a computer system |
US6178478B1 (en) * | 1998-12-11 | 2001-01-23 | Vlsi Technology, Inc. | Smart target mechanism for eliminating dual address cycles in a peripheral component interconnect environment |
CN101272501A (zh) * | 2008-05-07 | 2008-09-24 | 北京数码视讯科技股份有限公司 | 一种视音频编解码方法和装置 |
CN102098510A (zh) * | 2010-11-25 | 2011-06-15 | 深圳市融创天下科技发展有限公司 | 解码、编码音视频数据的方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104298529A (zh) * | 2014-10-11 | 2015-01-21 | 山东理工大学 | 一种飞思卡尔单片机开发***的使用方法 |
CN104298529B (zh) * | 2014-10-11 | 2018-03-02 | 山东理工大学 | 一种飞思卡尔单片机开发***的使用方法 |
CN105630599A (zh) * | 2014-10-28 | 2016-06-01 | 龙芯中科技术有限公司 | 基于32/64位混合操作***的显存分配方法及装置 |
CN105630599B (zh) * | 2014-10-28 | 2019-02-15 | 龙芯中科技术有限公司 | 基于32/64位混合操作***的显存分配方法及装置 |
CN105446732A (zh) * | 2015-05-13 | 2016-03-30 | 北京天诚盛业科技有限公司 | 64位程序的运行实现方法、装置和*** |
CN106682494A (zh) * | 2016-11-16 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 一种信息访问方法、装置和设备 |
CN107729132A (zh) * | 2017-10-09 | 2018-02-23 | 武汉斗鱼网络科技有限公司 | 一种视频解码进程保护方法及装置 |
CN107729132B (zh) * | 2017-10-09 | 2019-10-25 | 武汉斗鱼网络科技有限公司 | 一种视频解码进程保护方法及装置 |
CN111142969A (zh) * | 2019-12-27 | 2020-05-12 | 贵阳动视云科技有限公司 | 64位程序调用32位程序模块的方法、装置、介质及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103455361B (zh) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9823851B2 (en) | Secure migratable architecture having security features | |
ES2617303T3 (es) | Técnicas de comunicación entre procesadores en una plataforma informática de múltiples procesadores | |
CN113287286B (zh) | 通过rdma进行分布式存储节点中的输入/输出处理 | |
CN103455361A (zh) | 一种在64位操作***下调用32位解码库的设计方法 | |
KR101517258B1 (ko) | 크로스-시스템의 프록시-기반 태스크 오프로딩을 위한 장치, 시스템 및 방법 | |
US20190141145A1 (en) | Cloud-scale heterogeneous datacenter management infrastructure | |
US20220091911A1 (en) | Method and apparatus for inter-process communication, and computer device | |
US20100118039A1 (en) | Command buffers for web-based graphics rendering | |
CN111708738B (zh) | 实现hadoop文件***hdfs与对象存储s3数据互访方法及*** | |
TWI525546B (zh) | 用於藉由把來自實體裝置控制器之中斷重新導向來提供多重虛擬裝置控制器之裝置及方法 | |
KR20150104592A (ko) | 하드웨어 디바이스에 대한 소프트웨어 인터페이스 | |
JP2020087470A (ja) | データアクセス方法、データアクセス装置、機器及び記憶媒体 | |
US20210182123A1 (en) | System and method for constructing filter graph-based media processing pipelines in a browser | |
CN104714792A (zh) | 多进程共享数据处理方法和装置 | |
CN100349121C (zh) | 嵌入式并行计算***以及嵌入式并行计算方法 | |
CN115242563B (zh) | 一种网络通信方法、计算设备及可读存储介质 | |
US10303507B2 (en) | Off-the-shelf software component reuse in a cloud computing environment | |
WO2021203591A1 (zh) | 异构云存储***的数据处理方法及其可读介质和*** | |
Enberg et al. | Transcending POSIX: The End of an Era? | |
US11954510B2 (en) | Native-image in-memory cache for containerized ahead-of-time applications | |
US9251101B2 (en) | Bitmap locking using a nodal lock | |
US20220050700A1 (en) | Virtual bond for efficient networking of virtual machines | |
WO2023194938A1 (en) | System, method and computer-accessible medium for a zero-copy data-coherent shared-memory inter-process communication system | |
CN114356594A (zh) | 一种多域隔离操作***分区间通信方法和*** | |
CN113448880A (zh) | 存储装置和存储器中的启用一致多处理的计算 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |