发明内容
本发明其中一个发明目的在于提供一种多路视频分时复用编码方法和系统,所述方法和系统通过对实时编码码流通路的选择控制,从而选择当前编码的是主码流还是辅码流,并且设定固定行的编码单元,在当前编码单元完成编码后根据编码单元的编码情况和编码模式判断下一个时间段的编码选择,从而实现分时复用的编码过程,可以在原有1帧的编码时间下编码2帧的技术效果。
本发明另一个发明目的在于提供一种多路视频分时复用编码方法和系统,所述方法和系统通过改变地址映射,可以实现一帧的请求数据在有限的空间内循环以实现滚动存储,可以节约内存并提高内存的利用率。
本发明另一个发明目的在于提供一种多路视频分时复用编码方法和系统,所述方法和系统通过硬件去匹配起始帧,减少软件配置的随意性而使得一帧随意配置导致后续的编码错误。
本发明另一个发明目的在于提供一种多路视频分时复用编码方法和系统,所述方法和系统可以准确识别外部丢帧问题,同时可以在主动丢帧的情况下在下一帧响应丢帧情况。
为了实现至少一个上述发明目的,本发明进一步提供一种多路视频分时复用编码方法,所述方法包括如下步骤:
对编码器配置开始影子寄存器,根据所述开始影子寄存器的预开始信号判定当前视频帧的开始位置;
配置编码使能寄存器,根据所述编码使能寄存器的使能信号判断当前的码流形式;
配置存储使能寄存器,在内存中存储固定行的编码单元,根据所述存储使能寄存器的存储使能信号存储对应形式的码流;
根据码流通路选择信号判断当前待编码的码流形式,配置编码优先级,并在完成当前编码单元的存储后判断下一个编码单元待编码的码流形式。
根据本发明其中一个较佳实施例,所述方法还包括视频编码的起始帧识别,包括如下步骤:
对当前码流位置进行检测,并获取当前码流位置的时钟信号;
获取当前码流存储使能信号、编码使能信号和对应的预开始信号;
判断所述当前码流存储使能信号为高,判定编码使得信号为高,且所述对应的预开始信号在当前码流之前,则将当前码流位置为对应的视频帧作为起始帧进行编码。
根据本发明另一个较佳实施例,所述方法还包括视频编码的起始帧识别,包括如下步骤:
对当前码流位置进行检测,并获取当前码流位置的时钟信号;
获取当前码流存储使能信号、编码使能信号和对应的预开始信号;
判断所述当前码流存储使能信号为高,判定编码使得信号为低,则停止当前码流位置为对应的视频帧作为起始帧的编码。
根据本发明另一个较佳实施例,所述方法还包括视频编码的起始帧识别,包括如下步骤:
对当前码流位置进行检测,并获取当前码流位置的时钟信号;
获取当前码流存储使能信号、编码使能信号和对应的预开始信号;
判断所述预开始信号为在所述当前码流检测位置之后,则停止当前码流位置为对应的视频帧作为起始帧的编码。
根据本发明另一个较佳实施例,所述方法还包括对不同码流执行分时复用编码,包括如下步骤:
若所述码流包括主码流和辅码流,则所述码流存储使能信号包括主码流存储使能信号和辅码流存储使能信号,根据所述码流存储使能信号的类型将对应的码流存储到当前编码单元的缓存中;
判断所述当前编码单元是否存满对应行数码流,若存满则进一步根据所述码流通路选择信号选下一个编码单元的待编码码流类型。
根据本发明另一个较佳实施例,所述方法还包括对不同码流执行分时复用编码,包括如下步骤:
若所述码流包括主码流和辅码流,则所述码流存储使能信号包括主码流存储使能信号和辅码流存储使能信号,根据所述码流存储使能信号的类型将对应的码流存储到当前编码单元的缓存中;
配置辅码流的优先级大于所述主码流,若当前编码存储单元存储的辅码流存满对应行数,则直接执行所述辅码流的编码操作。
根据本发明另一个较佳实施例,所述方法还包括对不同码流执行分时复用编码,包括如下步骤:
若所述码流包括主码流和辅码流,则所述码流存储使能信号包括主码流存储使能信号和辅码流存储使能信号,根据所述码流存储使能信号的类型将对应的码流存储到当前编码单元的缓存中;
配置辅码流优先级大于所述主码流,若当前编码单元存满对应行数的主码流,且在当前编码时钟下辅码流未存满对应行数或当前不存在辅码流的编码使能信号或存在丢码,则执行所述主码流的编码操作。
根据本发明另一个较佳实施例,所述方法还包括对不同码流执行分时复用编码,包括如下步骤:
若所述码流包括主码流和辅码流,则所述码流存储使能信号包括主码流存储使能信号和辅码流存储使能信号,根据所述码流存储使能信号的类型将对应的码流存储到当前编码单元的缓存中;
配置辅码流优先级大于所述主码流,若当前编码单元未存满对应行数的主码流,且在当前编码时钟下辅码流未存满对应行数或当前不存在辅码流的编码使能信号或存在丢码,则循环等待,直到主码流/辅码流某一方存储完成然后进行仲裁并编码操作,其中所述仲裁操作为根据优先级判断当前需要编码的码流。
根据本发明另一个较佳实施例,所述方法还包括在连续帧中识别主被动丢帧的方法,包括如下步骤:
对当前码流位置进行检测,并获取当前码流位置的时钟信号;
获取当前码流存储使能信号、编码使能信号和对应的预开始信号;
若当前码流位置的存储使能信号和编码使能信号中的任意一个为低值,则判定当前检测位置的视频存在丢帧,当前视频帧不再编码且停止输出连接信号;
或若当前码流位置的预开始时间在所述当前码流检测位置之后,则判定当前检测位置的视频存在丢帧,当前视频帧不再编码且停止输出连接信号。
为了实现至少一个上述发明目的,本发明进一步提供一种多路视频分时复用编码系统,所述系统执行上述一种多路视频分时复用编码方法。
本发明进一步执行一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,所述计算机程序可被处理器执行上述一种多路视频分时复用编码方法。
具体实施方式
以下描述用于揭露本发明以使本领域技术人员能够实现本发明。以下描述中的优选实施例只作为举例,本领域技术人员可以想到其他显而易见的变型。在以下描述中界定的本发明的基本原理可以应用于其他实施方案、变形方案、改进方案、等同方案以及没有背离本发明的精神和范围的其他技术方案。
可以理解的是,术语“一”应理解为“至少一”或“一个或多个”,即在一个实施例中,一个元件的数量可以为一个,而在另外的实施例中,该元件的数量可以为多个,术语“一”不能理解为对数量的限制。
请结合图1-图5,本发明公开了一种多路视频分时复用编码方法和系统,所述方法主要包括如下步骤:配置编码器和有限行buffer控制模块寄存器,用于编码有限行视频帧;对所述编码器配置开始影子寄存器,所述开始影子寄存器生成预开始编码信号,用于表示编码的预开始阶段而非真正开始阶段,所述预开始信号的上升沿表示表示所述开始影子寄存器的配入的开始位置。进一步的,本发明还需要配置编码使能寄存器和存储使能寄存器,所述编码使能寄存器用于针对不同的码流发出不同的编码使能信号,所述存储使能寄存器用于根据不同码流发出不同的存储使能。
为了更好地说明本发明,本发明根据附图中的符号作出如下解释说明:请参考图2:
vvalid_main:表示视频存储模块输入的主码流场有效信号。
hvalid_main:表示视频存储模块输入的主码流行有效信号,(下降沿)表明当前行的视频存储完成。
store_main :表示视频存储模块输出的主码流存储使能信号,该信号为高表示当前帧有主码流存储,该信号为低表示当前帧没有主码流存储,该信号主要用于主码流的被动丢帧指示。
vvalid_auxi:表示视频存储模块输入的辅码流场有效信号。
hvalid_auxi:表示视频存储模块输入的辅码流行有效信号,(下降沿)表明当前行的视频存储完成。
store_auxi:表示视频存储模块输出的辅码流存储使能信号,该信号为高表示当前帧有辅码流存储,该信号为低表示当前帧没有辅码流存储,该信号主要用于辅码流的被动丢帧指示。
run_shd_r:给编码器配置的开始影子寄存器生成的预开始信号,只是表明可以开始操作,并不作用于状态机,(上升沿表示寄存器配入的开始位置);该信号会在reg_update(编码寄存器的更新信号)有效时拉低。
start_pulse :通过配置的开始位置,产生的开始脉冲信号;
enc_en_r:配置的编码使能寄存器,表示当前帧编主码流、辅码流还是双码流
(主要用于主动丢帧,后文为了方便区分常用enc_en_main
表示存储主码流、enc_en_auxi表示存储辅码流);
start_pulse_d1:start_pulse在时钟周期上延后一拍的信号,用于video_ready信号的产生;
video_ready:有限行buffer控制电路产生的信号,用于指示当前帧可以被编码;主要解决任意点开始的问题;该信号受store_main/store_auxi、enc_en_r、run_shd_r影响。具体表现为:在检测时刻(start_pulse_d1时刻),若当前帧有码流存储(通过store_main/store_auxi判定),并且当前帧需要编(通过enc_en_r判定),并且配置提前配有开始信号(run_shd_r),那么就认为当前帧可以被编码,就拉高video_ready信号。
link_en_main/auxi :用于指示当前帧连接(编码)的是主码流还是辅码流还是双码流的信号。
reg_update :编码器寄存器更新信号,主要更新提前配置的寄存器;该信号受run_shd_r、video_ready、run_status影响,reg_update = run_shd_r & video_ready &(!run_status)表示受到上述信号的影响。
op_start(out):编码器的输出的实际开始信号,作用于编码器状态机,开始运转编码器进行编码。
run_status :编码器实际开始后的开始状态;该信号为高时可以提前配置下一帧寄存器和开始信号(run_shd_r)。
core_op_done:编码器的整体编码操作完成,表示当前帧时间内所有码流编码完成。
请继续参考图2,其中A1表示第一检测点的位置,虚线表示在第一检测点相同时钟位置下对应的视频存储相关信号、编码寄存器相关信号和有限行buffer控制电路产生的信号状态,其中所述第一检测点为当前视频帧通过配置的开始位置(start_pulse),产生开始的脉冲信号。其中A2表示第二检测点的位置,所述第二检测点表示当前视频帧编码结束的位置,表示当前视频帧的所有操作都已经完成。A3表示第三检测点的位置,其中所述第三检测点为下一视频帧通过配置的开始位置(start_pulse),产生开始的脉冲信号。其中B1表示给当前视频帧配置开始影子寄存器的时间点,并生成当前视频帧的预开始信号。其中B2表示给下一视频帧配置开始影子寄存器的时间点,并在该时间点生成下一视频帧的预开始信号。
其中所述有限行buffer控制电路的操作方法包括如下步骤:在第一帧时,需要配置编码寄存器和有限行buffer控制寄存器;获取实时视频某一个位置上的预开始信号run_shd_r,进一步根据当前帧的情况输出有限行buffer控制电路产生的信号video_ready,若所述video_ready信号处于拉高状态,则表明可以对视频帧进行编码操作。根据当前帧配置的开始影子寄存器的预开始信号run_shd_r、video_ready信号和操作状态信号run_status产生编码器寄存器更新信号(reg_update),以及输出的开始信号(op_start(out))。根据输出的开始信号(op_start(out)),产生开始中断和编码运行状态,此时可以配置下一帧的开始影子寄存器和编码寄存器等,用于下一帧的编码判断。其中若下一帧判断为不编辑,则不再对下一帧配置对应的寄存器。在配置好对应的寄存器后执行当前视频帧的编码操作,其中所述编码操作采用分时复用的方式执行编码,由于视频的存储寄存器时间和编码寄存器处理时间不同,且不同类型的码流的大小和编辑完成的速度不同,因此通过所述分时复用的方式编码可以极大地减少编码寄存器的等待时间,大幅提高编码效率。在完成当前视频帧的编码操作后,产生结束中断信号,使得run_status信号和video_ready信号被拉低,等待下一帧视频的操作。当所述第一帧的下一帧存在时,由于第一帧预先配置的对应的开始影子寄存器和编码寄存器等,因此所述预开始信号run_shd_r一直处于被拉高的状态,当第一帧编码完成后,通过所述video_ready信号判断是否需要编码,当所述video_ready信号处于被拉高状态,则说明第一帧的下一帧需要编辑,进一步产生所述下一帧的reg_update(reg_update=run_shd_r & video_ready & !run_status),进一步同步所述下一帧的编码寄存器和下一帧的编码开始信号op_start(out),在完成下一帧的编码后,进一步产生所述下一帧的开始中断信号。上述编码操作的上下帧的编码具有关联性且同时根据预开始信号减少编码连续错误的技术问题。在完成编码操作后,通过系统中的软件可以进行进一步的操作。
本发明通过以下技术方案还解决了起始帧的判定操作,其中所述起始帧的编码可以包括多种类型的码流,本发明仅仅以主码流为例说明:请结合图3,store_main表示存储主码流的使能信号,在本发明另一些较佳实施例中store_main还可以替换为辅码流等其他类型的码流,run_shd_r表示预开始信号位置,其中enc_en_r表示不同的编码使能信号,本发明以enc_en_main主码流编码使能信号为例,link_en_main表示输出主码流连接信号。其中所述起始帧识别的方法包括如下六个方面:
第一种情况:store_main为高,enc_en_main为高,run_shd_r在设定值之前,该帧可编(主码流),并输出建立连接link_en_main(为高),可作为起始帧;
第二种情况:store_main为高,enc_en_main为低,run_shd_r在设定值之后,该帧不可编,并 不会输出建立连接line_en_main(为低),不可作为起始帧;
第三种情况:store_main为低,enc_en_main为低,run_shd_r在设定值之前,该帧不可编,并不会输出建立连接line_en_main(为低),不可作为起始帧;
第四种情况:store_main为高,enc_en_main为高,run_shd_r在设定值之前,该帧可编(主码流),并输出建立连接link_en_main(为高),可作为起始帧;
第五种情况:store_main为高,enc_en_main为高,run_shd_r在设定值之前,该帧可编(主码流),并输出建立连接link_en_main(为高),可作为起始帧;
第六种情况:store_main为高,enc_en_main为高,run_shd_r在设定值之后(或没有),该帧不可编,并不会输出建立连接line_en_main(为低),不可作为起始帧。
值得一提的是,本发明进一步对分时复用编码方法做出如下说明,并以32行的主/辅编码存储单元为例:请参考图4,将视频编码按照每32行进行划分为一个部分,将视频实时存储到内存(DDR)中设置具有固定行数的编码存储单元。在第一部分存码流中存储主码流/辅码流,在完成所述第一部分(Part0)所述32行的编码存储单元存满后,开始进入第二部分(Part I — Part N)编主/辅码流操作。当某一码流编完后,开始进入第三部分仲裁(每32行存储完成那一时刻),因为此时可能存在主码流/辅码流均存满32行,或者其中任一存满32行,或者都没满32行的情况;若均没满32行则等待后重新仲裁,若任一满32行则立即开始对应码流编码,若均满32行则在本发明中,设置辅码流的编码优先级大于主码流,因此,当前辅码流优先进行编码;由于编码速度比存储速度快,且辅码流体量小,因此无需等待太长时间,从而快速提高视频编码的效率;当完成所述辅码流的编码后,则重新仲裁下一个32行所需要编码的主码流或者辅码流,如此循环下去。若在视频编码过程中不存在辅码流的编码模式,或者存在某一码流丢帧的问题,本发明则不需要仲裁,只需要编码和等待(因为编码比存储快)。由于设定的编码时钟比视频时钟快,因此可以达到存储一帧编码两帧(主码流+副码流)的情况。
需要解释的是,本发明对图4中的符号作出如下解释:
vvalid:实时视频场有效信号。
hvalid:实时视频行有效信号。
store_en:实时视频当前帧存储使能,表明当前帧存储了主码流、副码流还是双码流。
bank_sel:实时视频编码码流通路选择,主要用于分时复用,选择当前一段时间编主码流还是副码流。
op_start(out):编码器的输出的实际开始信号,作用于编码器状态机,开始运转编码器进行编码。
本发明还可以识别主被动丢帧的问题,包括如下六种方式,请参考图5:
第一方式:store_main为高,enc_en_main为高,run_shd_r在设定值之前,该帧可编主码流,并输出连接信号。
第二方式:store_main为高,enc_en_main为低,run_shd_r在设定值之前,由于enc_en_main为低,该帧主动丢帧(主动丢帧常用于意外情况,比如此前编码的码流数据或者状态信息没来得及处理等),故该帧不编,并不会输出连接信号。
第三方式:store_main为低,enc_en_main为高,run_shd_r在设定值之前,由于store_main为低,该帧被动丢帧(被动丢帧常用于支持固定的视频帧率制式,通过不存储来实现),故该帧不编,并不会输出连接信号。
第四方式:store_main为高,enc_en_main为高,run_shd_r在设定值之前,该帧可编主码流,并输出连接信号。
第五方式:store_main为高,enc_en_main为高,run_shd_r在设定值之后,该帧因意外配置导致不可编,同时不会输出连接信号。
第六方式:store_main为高,enc_en_main为高,run_shd_r在设定值之前,该帧可编主码流,并输出连接信号。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分从网络上被下载和安装,和/或从可拆卸介质被安装。在该计算机程序被中央处理单元(CPU)执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线段、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线段的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线段、电线段、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域的技术人员应理解,上述描述及附图中所示的本发明的实施例只作为举例而并不限制本发明,本发明的目的已经完整并有效地实现,本发明的功能及结构原理已在实施例中展示和说明,在没有背离所述原理下,本发明的实施方式可以有任何变形或修改。