CN101834608A - 一种多通道编解码器运行方法及装置 - Google Patents

一种多通道编解码器运行方法及装置 Download PDF

Info

Publication number
CN101834608A
CN101834608A CN200910106033A CN200910106033A CN101834608A CN 101834608 A CN101834608 A CN 101834608A CN 200910106033 A CN200910106033 A CN 200910106033A CN 200910106033 A CN200910106033 A CN 200910106033A CN 101834608 A CN101834608 A CN 101834608A
Authority
CN
China
Prior art keywords
algorithm
code
code segment
space
external memory
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
Application number
CN200910106033A
Other languages
English (en)
Other versions
CN101834608B (zh
Inventor
莫燕
周旭锋
吴宗武
朱祥文
李渊
刘家锋
陈院林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN200910106033.3A priority Critical patent/CN101834608B/zh
Publication of CN101834608A publication Critical patent/CN101834608A/zh
Application granted granted Critical
Publication of CN101834608B publication Critical patent/CN101834608B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明实施例公开了一种多通道编解码器运行方法和装置,其中,所述多通道编解码器运行方法包括以下步骤:将编解码算法代码预先分成多个代码段,且设置有所述代码段与通道的对应关系;当需要运行多种编解码算法时,从片外存储空间依次搬移编解码算法对应的代码段到片内第一程序运行空间,对对应的通道依次执行从所述片外存储空间搬移来的代码段。通过本发明实施例,可以实现算法代码段的动态加载,不需要重新复位DSP,节省了代码加载运行的时间,减少了系统延时。

Description

一种多通道编解码器运行方法及装置
技术领域
本发明涉及通讯技术领域,具体指一种多通道编解码器运行方法及装置。
背景技术
通信领域的媒体资源服务器通常都提供音视频播放、音视频录制、DTMF(Double Tone Multiple Frequency,双音多频)检测等IVR(Interaction Voice Response,交互式语音应答)业务功能,以及提供视频会议、电话会议业务等相关功能。通过在媒体资源服务器上配置大量的语音编解码器和视频编解码器,可以同时接入多路用户终端。这些编码器、解码器、DTMF检测等媒体资源通常使用DSP(Digital Signal Processor,数字信号处理器)来完成。
在DSP上实现编解码功能时可以将编解码算法代码都存入在片内ISRAM(Inner Static Random Access Memory,内部静态随机存取内存)当中,但随着算法的增多,所需要的代码存储空间也随之增大,因此,如果代码大小超过片内ISRAM时容量时,只能将代码存放到片外存储空间,如存放在SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存取内存)当中。由于DSP直接访问片外空间的速度比访问片内空间慢几十到几百倍不等,运行片外代码大大降低了算法执行的效率。为了提高多个编解码器运行性能,需要尽量让算法代码在片内运行,减少对片外空间的访问次数,因此,对于因大小超过片内ISRAM容量而只能存放在片外存储空间(如SDRAM)的程序代码,在运行时需要尽量将其加载到片内运行。
参见图1,为现有技术通过修改DSP的加载程序,在运行代码中添加必要的复位加载条件,每次按照加载条件(如需要执行不同业务)重新加载DSP程序,从而实现从片外存储空间动态加载DSP程序的方法,其具体步骤如下:
在片外存储空间(如SDRAM)放置相应的程序代码,可以是一段代码,也可以是多段代码,必须保证每一段代码都是一次完整加载的代码,即每段代码被加载后都能独立完成所有程序功能,不仅仅包括编解码算法,还包括业务其它部分。同时,将DSP的片内ISRAM设置为程序运行空间;
通过加载程序加载代码段,把需要运行的完整代码段(如完整代码段A)从片外存储区搬移到片内ISRAM运行空间,开始执行业务。执行完业务后,如果确定还需加载新的代码段(如完整代码段B),则复位DSP,同时修改加载条件(如代码段的起始地址),加载程序根据修改后的加载条件将位于片外存储区的新的代码段(如完整代码段B)搬移到片内运行空间。通过运行新的代码段(如完整代码段B),来执行新的业务。
发明人在实现本发明过程中,发现现有技术至少存在以下缺点:
由于每次执行多通道编解码时都需要将完整代码重新加载,且每次加载需要将DSP复位,因此,会引起业务的延时,且在重新加载另一个完整代码过程中会造成业务中断,使得程序运行效率低下;同时,由于每次加载只运行一种格式的编解码算法,因此,难以满足同时执行多种编解码算法的需求。
发明内容
本发明实施例在于提供一种多通道编解码器运行方法及装置,用于动态加载算法代码,节省程序加载时间,减少了系统延时。
本发明实施例是通过以下技术方案实现的:
本发明实施例提供了一种多通道编解码器运行方法,包括以下步骤:
将编解码算法代码预先分成多个代码段,且设置有所述代码段与通道的对应关系;
当需要运行多种编解码算法时,从片外存储空间依次搬移编解码算法对应的代码段到片内第一程序运行空间,对对应的通道依次执行从所述片外存储空间搬移来的代码段。
本发明实施实施例还提供了一种多通道编解码器,包括:
片外存储单元,用于存储算法代码段和所述代码段与通道的对应关系,所述代码段由编解码算法代码预先分成得到;
搬移单元,用于当需要运行多种编解码算法时,从片外存储单元依次搬移编解码算法对应的代码段到片内第一程序运行空间;
执行单元,用于对搬移进来的代码段对应的通道依次执行所述搬移进来的代码段。
本发明实施例通过将算法代码段存储在片外存储空间,程序运行时从片外存储空间依次搬移算法代码段并对需要执行算法代码段的通道执行相应算法,可以实现算法代码段的动态加载,不需要重新复位DSP,节省了代码加载运行的时间,减少了系统延时。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术多通道编解码器运行方法流程图;
图2为本发明多通道编解码器运行方法流程图;
图3为本发明多通道编解码器方法实施例一示意图;
图4为本发明多通道编解码器方法实施例二示意图;
图5为本发明多通道编解码器装置实施例示意图;
图6为本发明多通道编解码器另一装置实施例示意图;
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下将通过具体实施例和相关附图,对本发明作进一步详细说明。
本发明实施例提供了一种多通道编解码器运行方法,包括以下步骤:
将编解码算法代码预先分成多个代码段,且设置有所述代码段与通道的对应关系;
当需要运行多种编解码算法时,从片外存储空间依次搬移编解码算法对应的代码段到片内第一程序运行空间,对对应的通道依次执行从所述片外存储空间搬移来的代码段。
其中,将所述将编解码算法代码预先分成多个代码段的步骤包括:
将算法代码按算法类型和/或算法功能模块分成多个算法代码段存入到片外存储空间;或者,
将算法代码按算法类型和自定义算法模块分成多个算法代码段存储到片外存储空间;
上述算法类型包括音频视频编解码算法,或者图像算法,或者通信算法,或者数学算法。
当调度时间到来时,主调度程序算法代码段在片外存储空间的起始地址和代码长度,通过拷贝函数将算法代码段从片外存储空间搬移到第一程序运行空间。
本发明实施例还可以进一步包括以下步骤:
在片内开辟至少一个第二程序运行空间;
在从片外存储空间依次搬移编解码算法对应的代码段到片内第一程序运行空间的同时,从所述片外存储空间搬移代码段到所述第二程序运行空间,对对应的通道依次执行从所述片外存储空间搬移来的代码段。
通过本发明实施例,可以实现算法代码段的动态加载,不需要重新复位DSP,节省了代码加载运行的时间,减少了系统延时。
下面通过具体实施例来对本发明技术方案作出更详细说明:
本发明方法实施例一:
参见图2,为本发明具体实施例一种多通道编解码器运行方法的示意图,多通道编解码器运行时涉及到DSP片内ISRAM、cmd文件和片外存储区SDRAM等部分。其中,cmd文件用于分配片外代码段存储空间和片内运行空间;片外存储区SDRAM用于存放相关代码段;DSP片内ISRAM用于执行主调度程序,并在相关调度时间到时,搬移相应代码到程序运行空间
通过将不同的编解码分成不同的代码段分别读入到片内运行,以及对每一个编解码通道的归类,可以提高软件运行的效率。
参见图3,下面以多通道音视频编解码器为例,其具体步骤如下所示:
S1.将程序代码分成多个代码段存放到DSP的片外空间
在本发明实施例中,因为主调度程序的代码占用空间比较小,因此,将其存储在片内,而将算法代码分成多个算法代码段存放到DSP片外空间,其中,将算法代码分成多个算法代码段的方法包括但不仅限于以下几种:
A.按算法类型
如将程序代码按不同的算法类型分成音频G.711算法代码段、音频G.723算法代码段、音频G.729算法代码段和视频H.263算法代码段等;且每一种算法类型还可以再根据编码和解码算法分成不同的代码段,如将音频G.711算法代码段按编码和解码算法再分成音频G.711编码算法代码段和音频G.711解码算法代码段。
B.按算法功能模块
如将音频G.711解码算法代码段按功能模块分为算法初始化模块代码段、解码模块代码段和算法释放模块代码段等。
C.其它分法
用户在实际过程中也可以结合上述两种分法,即先对一部分程序代码按算法类型分成几个算法代码段,然后对某一算法代码按功能模块再分成几个代码段;用户还可以根据自定义算法模块将自己的需要将程序代码分成几个代码段;或者在上述A、B两种分法的基础上再加入其它代码段,可以是主程序的一部分代码段或程序子模块的代码段或其它形式的代码。
在另一个实施例中,算法类型并不局限于音视频编解码算法,也可以是图像算法,或者通信算法,或者数学算法,或者具有一定功能其它算法。
将上述多个代码段存放到DSP的片外空间的过程可以通过配置cmd文件来实现,其具体方法如下:
在cmd文件中用MEMORY定义代码段在片外空间的起始地址及长度,参见以下cmd文件中的定义:
MEMORY
{
    G711_LOAD_MEM:origin=0x80000000,length=0x00001000
    G723_LOAD_MEM:origin=0x80001000,length=0x00002000
    G729_LOAD_MEM:origin=0x80003000,length=0x00003000
}
通过以上定义,可以将G.711算法存放在片外起始地址为0x80000000,长度为0x00001000的存储空间中;可以将G.723算法存放在片外起始地址为0x80001000,长度为0x00002000;可以将G.729算法存放在片外起始地址为0x80003000,长度为0x00003000的存储空间中。
在程序中使用变量记录每个代码段的起始地址以及代码段的长度;同时保证每个代码段的起始地址唯一,且不同代码段占用的地址空间不发生重叠。
S2.在多通道编解码器片内空间开辟一块运行空间,运行时从片外存储区加载代码段到该运行空间运行
开辟运行空间过程在cmd文件中进行,可以通过链接指令UNION和run指定不同的算法代码段在该运行空间运行,同时,保证开辟的运行空间不小于所有需要运行的代码段中的最大空间。需要注意的是,片内运行空间的开辟只针对片外代码段,主调度程序的代码段在片内的另一块空间。
以TMS320C6415DSP为例,可以在cmd文件中设定以上代码段的存放空间和运行空间,假设片外有三个算法代码段,每个算法代码段的名字分别为.g711_text、.g729_text和.g723_text,要想让.g711_text、.g729_text、.g723_text这三段空间存放在LOAD_MEM段,运行在RUN_MEM段,可将cmd文件参考如下方法进行配置:
MEMORY
{
     RUN_MEM:origin=0x00002000,length=0x00001000
     G711_LOAD_MEM:origin=0x80000000,length=0x00001000
     G723_LOAD_MEM:origin=0x80001000,1ength=0x00002000
     G729_LOAD_MEM:origin=0x80003000,length=0x00003000
}
SECTIONS
{
    UNION run=RUN_MEM
    {
      .g711_text:load=G711_LOAD_MEM
      .g723_text:load=G723_LOAD_MEM
      .g729_text:load=G729_LOAD_MEM
      }
}
在上述cmd文件中,MEMORY关键字用于划分相应的地址段信息,包括地址段的起始地址以及长度;如:RUN_MEM:origin=0x00002000,length=0x00001000表示分配一个地址段,该地址段的起始地址为0x00002000,长度为0x00001000。
SECTIONS关键字用于把对应的程序段分配到MEMORY所定义的地址段中。
UNION run用于指定多个代码段在同一个地址段运行;如上述cmd文件中的UNION run=RUM_MEM表示指定多个代码段在地址段RUM_MEM中运行。
关键字load用于分配程序代码的起始加载地址;如上述cmd文件中的.g711_text:load=G711_LOAD_MEM表示.g711_text程序代码从地址段G711_LOAD_MEM处加载。
在上述cmd文件中,RUN_MEM为在片内开辟的一段用于运行代码的空间,G711_LOAD_MEM、G723_LOAD_MEM、G729_LOAD_MEM为在片外用于存放代码的三个代码段空间。
S3.按通道分类执行调度
这里的通道可以看作是一种编解码资源;或者说可以将每个通道看成一个对外业务的接口,每个通道处理一个业务。在多通道编解码器中,每个通道所要用到算法类型可以相同,也可以不同,如有4个通道,通道1跟通道3都用到音频G.711解码算法,通道2和通道4都用到音频G.729解码;同时,如果在业务中编码业务和解码业务是绑定的,也可以让一个通道同时处理编码算法和解码算法。
对片外代码段的调度由主调度程序(即主程序,或实现调度功能的模块)来完成。为了减少不同算法代码段从片外搬移到片内运行空间运行的次数,主调度程序根据设计时得到的各通道编解码类型对每个通道的编解码算法进行分类,将用到相同编码算法和/或解码算法的通道分成一类,一起进行调度,即只需要把相应代码从片外存储空间到片内运行空间搬移一次,就可以完成这类通道的编解码处理。
主调度程序每隔一定时间针对算法类型执行通道业务,一般称这个时间为调度时间,在另一实施例中,主调度程序也可以针对通道执行调度,如针对一个或几个通道按一定时间调度一次;或者每隔一定时间把所有通道调度一次;或者每隔不同时间对不同通道调度一次。
例如,在多通道编解码器中有五个通道,分别为通道一、通道二、通道三、通道四、通道五;其中,通道一、二、三需要执行算法A,通道四、五需要执行算法B。针对算法类型进行调度时,假设针对算法A进行调度,则调度时间到时,就将算法A的代码段从片外加载,然后进行通道一、二、三的关于算法A的编码和/或解码(先执行哪个通道可由主调度程序决定);针对通道进行调度时,假设针对通道一、三、四进行调度,则调度时间到时,先将通道一、三算法A代码段从片外加载到运行空间,对通道一、三进行编码和/或解码(通道一、三编解码和/或解码顺序可由主调度程序决定);然后再加载算法B的代码段,对通道四进行编码和/或解码(也可以先加载算法B代码段,再加载算法A代码段,由主调度程序决定)。
以主调度程序每隔一定时间针对算法类型执行调度为例,调度时间并不固定,可以根据业务需要进行设置。例如,可将执行音频G.711解码的通道调度时间设为10ms,即每隔10ms执行含该算法的通道业务(可能有一个或多个);将执行音频G.723解码的通道调度时间设为30ms,即每隔30ms执行含该算法的通道业务(可能有一个或多个)等等。
当调度时间到时,根据通道的编解码算法类型,对含相同编解码算法的通道进行一起调度:即根据通道的编解码算法类型得到对应代码段的片外起地址和代码长度(在cmd文件中已经记录),通过拷贝函数(如memcpy()、DAT_copy()、DAT_copy2d()等)把所需要运行的代码段从片外空间搬移到片内运行空间(如在步骤S2的cmd文件中设定的运行空间地址段RUM_MEM),开始运行相应代码,处理编解码业务或其它业务。
下面通过具体例子来对上述调度方案进行阐述:
例如,假设多通道编解码器共有4个通道,其中,通道1和通道3都需要做音频G.711解码,通道2和通道4都需要做音频G.729解码。各代码段的配置参见上述cmd文件,即音频G.711解码算法的代码段在片外空间的起始地址为0x80001000,代码段长度为0x1000;音频G.729解码算法的代码在片外空间的起始地址为0x80003000,代码段长度为0x3000。假设音频G.711解码算法的调度时间为10ms,音频G.729解码算法的调度时间也为10ms。因为通道1和通道3都需要做音频G.711算法,所以将通道1和通道3归成一类;同理,由于通道2和通道4都需要做音频G.729算法,所以也将通道2和通道4归成一类。
当调度时间到时,根据cmd文件得到相关算法代码段在片外的存储区域的起始地址和代码长度,通过拷贝函数(如memcpy()、DAT_copy()、DAT_copy2d()等)先把音频G.711解码算法代码搬移到运行空间(如在cmd文件中设置的起始地址为0x00002000的地址段RUN_MEM),进行通道1和通道3的音频G.711解码;解码完毕后,再把音频G.729解码算法代码搬移到运行空间,进行通道2和通道4的音频G.729解码。
因为音频G.711解码算法和G.729解码算法的调度时间都为10ms,所以音频G.711解码算法完成后立即进行音频G.729解码(也可以先执行音频G.729解码,再执行音频G.711解码);如果两者调度时间不同,则等到调度时间到后再执行相应的解码操作。
在本发明另一实施例中,如果多通道编解码器需要完成音频G.711解码和音频G.723解码两个算法;划分代码段时将音频G.711解码作为一个独立代码段存放在片外空间,将音频G.723解码算法分成音频G.723解码算法初始化模块、音频G723解码算法解码模块、音频G.723解码算法释放模块三部分存入在片外空间。
当调度时间到,有通道需要音频G.723解码时,就可以根据先将音频G.723解码算法初始化模块通过拷贝函数搬移到片内运行空间,完成算法的初始化功能;接着将音频G.723解码算法解码模块通过拷贝函数搬移到片内运行空间,完成算法的解码功能;最后将音频G.723解码算法释放模块通过拷贝函数搬移到片内运行空间,完成算法的释放功能。
将一个算法分成几个模块的做法可以解决某一算法代码过大,无法一次性拷贝到运行空间的问题。
在上述实施例中,如果一种格式的编解码算法执行完毕后,如果需要执行其它的编解码算法(该算法的调度时间到),则按照上述步骤对代码进行搬移和调用,如此反复,就可以实现多通道多编解码器的动态运行功能。
需要注意的是,主调度程序通过拷贝函数从片外搬移代码段到片内运行的时候,其搬移的源地址要与代码段在片外的实际起始地址一致;且搬移的目标地址要与片内的运行空间地址一致且需要搬移的代码段的大小不大于ISRAM内所开辟的程序运行空间的大小;否则程序就会出现异常。
设每种编解码所需的总时间为T;一次算法代码搬移的时间为Tload;每个通道资源的编解码片内运行的时间为Trun;相同格式编解码资源通道数为N;则使用本发明实施例后可得到每种编解码所需的总时间T=Tload+Trun*N。将上述公式每一项除以相同格式编解码资源通道数N,可得执行每个通道所需的平均时间
Figure B2009101060333D0000121
由公式可见,随着相同格式编解码资源通道数N的增加,执行每个通道所需的平均时间会减少,又由于编解码在片内运行所需的时间远少于在片外运行所需的时间,因此,在运用本发明后,减少了加载代码的时间,使得运行效率得到明显提高。
本发明方法实施例二:
在本实施例中,在片内ISRAM空间开辟多个运行空间来运行代码,此方法可以解决一些算法需要同时运行的问题,如在一些应用场景中,执行视频算法所需的时间比较长,这时有可能出现在执行视频算法的过程中,音频算法的调度时间到而又需要同时执行音频算法的问题。
为了解决这个问题,可以在片内开辟多块运行空间,并通过根据算法的优先级不同而同时执行多种算法,参见图4,以在片内开辟两块运行空间为例,具体包括以下步骤:
S21.在片内开辟两块运行空间,指定算法一在其中一块运行空间运行,指定算法二在另一块运行空间运行
如当音频算法和视频算法需要同时运行时,可以在片内开辟两段运行空间(运行空间a和运行空间b),通过链接指令UNION和run指定音频算法代码段A在运行空间a运行,视频算法代码段B在运行空间b执行,实现音频算法和视频算法交替运行,减少音频算法的延时。
在DSP片内空间分配多个运行空间的方法与分配一个运行空间的方法类似,也通过配置cmd文件来完成,参见如下cmd文件:
MEMORY
{
    RUN_MEM 1:origin=0x00002000,length=0x00001000
    RUN_MEM2:origin=0x00003000,length=0x00003000
    G711_LOAD_MEM:origin=0x80000000,length=0x00001000
    G729_LOAD_MEM:origin=0x80001000,length=0x00002000
    H263_LOAD_MEM:origin=0x80003000,length=0x00003000
     H264_LOAD_MEM:origin=0x80006000,length=0x00002000
  }
  SECTIONS
  {
    UNION run=RUN_MEM1
    {
      .g711_text:load=G711_LOAD_MEM
      .g729_text:load=G729_LOAD_MEM
  }
  UNION run=RUN_MEM2
  {
     .h263_text:load=H263_LOAD_MEM
     .h264_text:load=H264_LOAD_MEM
}
在上述cmd文件中,通过两个链接指令UNION run指定不同代码段在不同的运行空间执行,如设置G.711算法和G.729算法在RUN_MEM1运行空间运行;设置H.263算法和H.264算法在RUN_MEM2运行空间运行。上述运行空间个数并不限制,可参考两个运行空间的设置方法设置多个运行空间。
S22.设置需要同时运行算法的优先级
由于中断处理程序先会根据算法的优先级不同而先执行优先级高的算法,因此,设置同时运行时优先执行的算法的优先级高于另一算法的优先级。
S23.如果出现两种算法需要同时运行时,首先搬移并执行优先级高的算法,两种算法的运行空间为在步骤S21中设定空间
假设算法B优先级大于算法A,当执行算法A时又需要同时执行算法B,则可以通过中断进入中断处理程序,在中断处理程序中从片外搬移算法B到片内分配给B的运行空间运行,算法B执行完成后退出中断,继续执行算法A,这样就解决了算法A和算法B需要同时运行的问题。
下面通过具体例子来对上述方案进行阐述:
以音频G.711算法(可以是编码算法和/或解码算法)和视频H.263算法(可以是编码算法和/或解码算法)为例:
假设音频G.711算法分配在运行空间RUN_MEM1;视频H.263算法分配在运行空间RUN_MEM2;音频G.711算法的调度时间为10ms,视频H.263算法的调度时间为30ms;完成视频H.263算法所需的时间为15ms,因为完成视频H.263算法所需的时间大于音频G.711算法的调度时间,所以会出现正在执行视频H.263算法时,音频G.711算法调度时间到而需要执行音频G.711算法的情况。
在这种情况下,可以在主调度程序通过拷贝函数分别将音频G.711算法和视频H.263算法加载到片内RUN_MEM1和RUN_MEM2两块运行空间,通过中断程序同时执行两种算法,其具体方法如下:
首先设置音频G.711算法的优先级高于视频H.263算法的优先级。假设主调度程序一开始执行视频H.263算法(如在运行空间RUN_MEM1),当执行到10ms时,音频G.711算法的调度时间到,而视频H.263算法还没执行完毕(执行完毕需15ms),这时,因为设置的音频G.711算法的优先级要高于视频H.263算法的优先级,所以可以使用中断程序中断视频H.263算法,在中断程序中搬移音频G.711的算法代码段到没有使用的运行空间(如运行空间RUN_MEM2)执行音频G.711算法,处理完音频G.711算法后结束返回中断,再继续执行视频H.263算法。
这里需要指出的是,上述音频G.711算法一般都会提供给多个通道使用,但也可以只提供给一个通道;同样,视频H.263算法也可以是某一通道单独使用,或者好几个通道一起使用。
通过以上处理可以满足一些对音频时延要求较高场合的应用,如果不在片内开辟两个运行空间,并通过中断程序使视频H.263算法和音频G.711算法同时运行,则音频G.711算法需要等执行完视频H.263算法之后才能得到执行机会,这时,在一些对音频时延要求较高的应用中,会存在因时延过大而导致编解码器性能无法得到满足的情况。通过以上方法,可以保证音频G.711算法每隔10ms就能执行一次,这样就可以满足一些对音频时延要求较高场合的应用。
本发明实施例二并不仅限于在处理音频和视频算法的应用,也可以针对其它具有类似需求的应用,如存在两个程序代码段A和B,其中代码段A的调度时间较短,代码段B的执行时间较长,如果代码段A对时延要求比较高的话,就可以通过在片内开辟多个运行空间,然后利用中断程序在代码段B的执行过程中再执行代码段A。
上述具体实施例一及具体实施例二中,片外空间采用存储器SDRAM进行存储,用户也可以采用其它慢速存储器芯片,如EPROM、EEPROM或Flash等;上述实施例中的片内空间采用ISRAM,用户也可以采用其它快速存储器。
通过将代码分成几段存放到片外空间,并通过通道分类的方法对各通道进行调度,具有如下优点:
(1)根据业务需要选择相应的编解码程序放到片内执行,提高算法执行的效率,灵活调用必须的资源,避免片内空间的浪费,多通道多编解码程序可以动态运行,不需要重新复位DSP,节省了程序重新加载运行的时间,减少系统延时。
(2)可以同时运行多种编解码算法,满足了同时执行多种编解码算法的需求。
参见图5,本发明实施例还提供了一种多通道编解码器10,包括:
片外存储单元101,用于存储算法代码段和所述代码段与通道的对应关系,所述代码段由编解码算法代码预先分成得到;
搬移单元102,用于当需要运行多种编解码算法时,从片外存储单元101依次搬移编解码算法对应的代码段到片内第一程序运行空间;
执行单元103,用于对搬移进来的代码段对应的通道依次执行所述搬移进来的代码段。
所述多通道编解码器10还包括:
分类单元104,用于将所述算法代码按算法类型和/或算法功能模块分成多个算法代码段存放到所述片外存储单元101;或者,
将所述算法代码按算法类型和自定义算法模块分成多个算法代码段存放到所述片外存储单元101;
所述算法类型包括音视频编解码算法,或者图像算法,或者通信算法,或者数学算法。
所述搬移单元102还用于:当调度时间到时,根据所述算法代码段在所述片外存储单元101的起始地址和代码长度,通过拷贝函数将所述算法代码段从所述片外存储单元101搬移到所述第一程序运行空间。
参见图6,所述多通道编解码器10还可以进一步包括运行空间分配单元105,用于为运行所述算法代码段分配第二程序运行空间;
所述搬移单元102进一步用于:从所述片外存储单元101搬移算法代码段到所述第二程序运行空间;
所述执行单元103进一步用于:执行第二程序运行空间内搬移来的算法代码段。
参见图6,所述多通道编解码器10还可以进一步包括优先级设置单元106,用于设置不同算法的优先级;
所述执行单元103进一步用于:按优先级从高到低的顺序依次搬移并执行所述不同算法,所述优先级高的算法代码段和所述优先级低的算法代码段在不同的程序运行空间中执行。
通过本发明实施例,可以根据业务需要选择相应的编解码程序放到片内执行,提高算法执行的效率,灵活调用必须的资源,避免片内空间的浪费,多通道多编解码程序可以动态运行,不需要重新复位DSP,节省了程序重新加载运行的时间,减少系统延时;同时,本发明实施例可以同时运行多种编解码算法,满足了同时执行多种编解码算法的需求。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种多通道编解码器运行方法,其特征在于,包括以下步骤:
将编解码算法代码预先分成多个代码段,且设置有所述代码段与通道的对应关系;
当需要运行多种编解码算法时,从片外存储空间依次搬移编解码算法对应的代码段到片内第一程序运行空间,对对应的通道依次执行从所述片外存储空间搬移来的代码段。
2.如权利要求1所述的多通道编解码器运行方法,其特征在于,所述将编解码算法代码预先分成多个代码段的步骤包括:
将所述算法代码按算法类型和/或算法功能模块分成多个算法代码段存放到所述片外存储空间;或者,
将所述算法代码按算法类型和自定义算法模块分成多个算法代码段存放到所述片外存储空间;
所述算法类型包括音视频编解码算法,或者图像算法,或者通信算法,或者数学算法。
3.如权利要求1所述的多通道编解码器运行方法,其特征在于,所述从片外存储空间依次搬移编解码算法对应的代码段到所述第一程序运行空间的步骤包括:
当调度时间到来时,根据所述算法代码段在所述片外存储空间的起始地址和代码长度,通过拷贝函数将所述算法代码段依次从所述片外存储空间搬移到所述第一程序运行空间。
4.如权利要求1-3任意一个所述的多通道编解码器运行方法,其特征在于,进一步包括如下步骤:
在片内开辟至少一个第二程序运行空间;
在从所述片外存储空间依次搬移编解码算法对应的代码段到所述第一程序运行空间的同时,从所述片外存储空间搬移代码段到所述第二程序运行空间,对对应的通道依次执行从所述片外存储空间搬移来的代码段。
5.如权利要求4所述的多通道编解码器运行方法,其特征在于,所述从片外存储空间搬移算法代码段到所述第二程序运行空间,运行相应的算法,使得能够同时执行多种算法的步骤包括:
根据所要同时执行的算法代码段的不同优先级,按优先级从高到低的顺序依次搬移并执行所述多种算法;所述优先级高的算法代码段和所述优先级低的算法代码段在不同的程序运行空间中执行。
6.如权利要求1-5任一所述的多通道编码器运行方法,其特征在于:
所述片外存储空间位于片外存储器,所述片外存储器为慢速存储器,所述慢速存储器包括:SDRAM、或者EPROM、或者EEPROM、或者Flash;
所述第一程序运行空间和所述第二程序运行空间位于片内存储器,所述片内存储器为快速存储器,所述快速存储器包括:ISRAM。
7.一种多通道编解码器,其特征在于,包括:
片外存储单元,用于存储算法代码段和所述代码段与通道的对应关系,所述代码段由编解码算法代码预先分成得到;
搬移单元,用于当需要运行多种编解码算法时,从片外存储单元依次搬移编解码算法对应的代码段到片内第一程序运行空间;
执行单元,用于对搬移进来的代码段对应的通道依次执行所述搬移进来的代码段。
8.如权利要求7所述的多通道编解码器,其特征在于,还包括分类单元,所述分类单元用于将所述算法代码按算法类型和/或算法功能模块分成多个算法代码段存放到所述片外存储单元;或者,
将所述算法代码按算法类型和自定义算法模块分成多个算法代码段存放到所述片外存储单元;
所述算法类型包括音视频编解码算法,或者图像算法,或者通信算法,或者数学算法。
9.如权利要求7所述的多通道编解码器,其特征在于:
所述搬移单元还用于:当调度时间到时,根据所述算法代码段在所述存储单元的起始地址和代码长度,通过拷贝函数将所述算法代码段从所述存储单元搬移到所述第一程序运行空间。
10.如权利要求7-9任意一个所述的多通道编解码器,其特征在于,还进一步包括:
运行空间分配单元,用于为运行所述算法代码段分配第二程序运行空间;
所述搬移单元进一步用于:从所述存储单元搬移算法代码段到所述第二程序运行空间;
所述执行单元进一步用于:执行第二程序运行空间内搬移来的算法代码段。
11.如权利要求10所述的多通道编解码器,其特征在于,还包括:
优先级设置单元,用于设置不同算法的优先级;
所述执行单元进一步用于:按优先级从高到低的顺序依次搬移并执行所述不同算法,所述优先级高的算法代码段和所述优先级低的算法代码段在不同的程序运行空间中执行。
CN200910106033.3A 2009-03-10 2009-03-10 一种多通道编解码器运行方法及装置 Active CN101834608B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200910106033.3A CN101834608B (zh) 2009-03-10 2009-03-10 一种多通道编解码器运行方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910106033.3A CN101834608B (zh) 2009-03-10 2009-03-10 一种多通道编解码器运行方法及装置

Publications (2)

Publication Number Publication Date
CN101834608A true CN101834608A (zh) 2010-09-15
CN101834608B CN101834608B (zh) 2014-05-07

Family

ID=42718562

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910106033.3A Active CN101834608B (zh) 2009-03-10 2009-03-10 一种多通道编解码器运行方法及装置

Country Status (1)

Country Link
CN (1) CN101834608B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102098510A (zh) * 2010-11-25 2011-06-15 深圳市融创天下科技发展有限公司 解码、编码音视频数据的方法及装置
CN105578116A (zh) * 2015-12-30 2016-05-11 邦彦技术股份有限公司 一种基于dsp的多通道视频流控制系统和方法
WO2016134641A1 (en) * 2015-02-23 2016-09-01 Huawei Technologies Co., Ltd. On-demand loading of dynamic scripting language code for reduced memory usage
CN107967174A (zh) * 2017-08-04 2018-04-27 广州慧睿思通信息科技有限公司 一种通过分时处理复用高速内存的内存优化方法
CN108459885A (zh) * 2018-03-26 2018-08-28 深圳市元征科技股份有限公司 一种资源分散加载的方法及其单片机
CN109672519A (zh) * 2018-10-17 2019-04-23 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 一种密码装置及其数据加解密方法
CN109688070A (zh) * 2018-12-13 2019-04-26 迈普通信技术股份有限公司 一种数据调度方法、网络设备及转发单元
CN110633223A (zh) * 2019-09-18 2019-12-31 北京机电工程研究所 面向高速信号平台的多级内存管理方法
CN111459572A (zh) * 2020-03-31 2020-07-28 深圳市汇顶科技股份有限公司 程序加载方法、控制器、芯片以及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3171361B2 (ja) * 1994-05-06 2001-05-28 ヤマハ株式会社 Dspプログラミング装置
CN1442985A (zh) * 2003-04-01 2003-09-17 西安大唐电信有限公司 一种多通道联合声码器及其实现方法
CN1629805A (zh) * 2003-12-18 2005-06-22 中国电子科技集团公司第三十研究所 运用于dsp的动态加载方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3171361B2 (ja) * 1994-05-06 2001-05-28 ヤマハ株式会社 Dspプログラミング装置
CN1442985A (zh) * 2003-04-01 2003-09-17 西安大唐电信有限公司 一种多通道联合声码器及其实现方法
CN1629805A (zh) * 2003-12-18 2005-06-22 中国电子科技集团公司第三十研究所 运用于dsp的动态加载方法

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102098510A (zh) * 2010-11-25 2011-06-15 深圳市融创天下科技发展有限公司 解码、编码音视频数据的方法及装置
CN102098510B (zh) * 2010-11-25 2014-07-09 深圳市融创天下科技股份有限公司 解码、编码音视频数据的方法及装置
CN110941456A (zh) * 2015-02-23 2020-03-31 华为技术有限公司 按需加载动态脚本语言代码以减少内存使用
CN106796525B (zh) * 2015-02-23 2019-11-19 华为技术有限公司 按需加载动态脚本语言代码以减少内存使用
CN106796525A (zh) * 2015-02-23 2017-05-31 华为技术有限公司 按需加载动态脚本语言代码以减少内存使用
US9772865B2 (en) 2015-02-23 2017-09-26 Futurewei Technologies, Inc. On-demand loading of dynamic scripting language code for reduced memory usage
WO2016134641A1 (en) * 2015-02-23 2016-09-01 Huawei Technologies Co., Ltd. On-demand loading of dynamic scripting language code for reduced memory usage
CN105578116A (zh) * 2015-12-30 2016-05-11 邦彦技术股份有限公司 一种基于dsp的多通道视频流控制系统和方法
CN107967174A (zh) * 2017-08-04 2018-04-27 广州慧睿思通信息科技有限公司 一种通过分时处理复用高速内存的内存优化方法
CN108459885A (zh) * 2018-03-26 2018-08-28 深圳市元征科技股份有限公司 一种资源分散加载的方法及其单片机
CN109672519A (zh) * 2018-10-17 2019-04-23 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 一种密码装置及其数据加解密方法
CN109672519B (zh) * 2018-10-17 2022-06-24 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 一种密码装置及其数据加解密方法
CN109688070A (zh) * 2018-12-13 2019-04-26 迈普通信技术股份有限公司 一种数据调度方法、网络设备及转发单元
CN110633223A (zh) * 2019-09-18 2019-12-31 北京机电工程研究所 面向高速信号平台的多级内存管理方法
CN110633223B (zh) * 2019-09-18 2021-07-13 北京机电工程研究所 面向高速信号平台的多级内存管理方法
CN111459572A (zh) * 2020-03-31 2020-07-28 深圳市汇顶科技股份有限公司 程序加载方法、控制器、芯片以及电子设备
CN111459572B (zh) * 2020-03-31 2023-01-31 深圳市汇顶科技股份有限公司 程序加载方法、控制器、芯片以及电子设备

Also Published As

Publication number Publication date
CN101834608B (zh) 2014-05-07

Similar Documents

Publication Publication Date Title
CN101834608B (zh) 一种多通道编解码器运行方法及装置
US20140204103A1 (en) Data processing system and method for task scheduling in a data processing system
CN101809537B (zh) 用于管线式处理的寄存器堆系统和方法
CN1391668A (zh) 使用推测、基于掩码、由打包数据选择写入数据元素
CN101151840A (zh) 用于视觉媒体统合处理的集成架构
CN1849587A (zh) 共享处理器和网络接口的多个操作系统
CN101149703A (zh) 一种固定内存的管理方法
US20120246353A1 (en) Audio device and method of operating the same
US20100205606A1 (en) System and method for executing a complex task by sub-tasks
US20190220949A1 (en) Methods and apparatus for supporting communication of content streams using efficient memory organization
CN101576912A (zh) 实现分布式文件系统异步输入输出接口的系统及读写方法
EP2222050B1 (en) Media resource management method and device, equipment and system thereof
CN103078810A (zh) 一种高效率富媒体展现系统和方法
CN100463474C (zh) 一种适用于ip媒体服务器的媒体处理系统
TW201445989A (zh) 分散式編解碼系統及方法
CN1158070A (zh) 实现组合时间交换与会议呼叫功能的装置
CN103365805B (zh) 动态切换多路输入/输出接口系统与方法
CN103034147B (zh) 媒体文件的播放处理方法、多处理器系统与设备
CN107426611B (zh) 基于视频转码的多路输出方法及系统
KR100846791B1 (ko) 비디오 데이터 저장 방법 및 장치
CN113691813B (zh) 一种转码卡使用方法、系统、存储介质及设备
US9841999B2 (en) Apparatus and method for allocating resources to threads to perform a service
CN111246215A (zh) 一种视频格式转换的方法及终端
CN114924877B (zh) 一种基于数据流的动态分配计算方法、装置和设备
CN103369287B (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