一种视频处理系统及视频接收系统的制作方法

文档序号:16674043发布日期:2019-01-18 23:47阅读:208来源:国知局
一种视频处理系统及视频接收系统的制作方法

本发明的所公开实施例涉及视频数据处理,且更具体而言,涉及一种使用环形缓存器(ringbuffer)和竞赛模式(racing-mode)环形缓存器访问控制方案的视频处理系统。



背景技术:

一个传统的视频系统设计包括视频发送系统(其可用作视频记录系统)和视频接收系统(其可用作视频播放系统)。关于视频发送系统,其由多个处理阶段构成,包括视频编码器、音频/视频多路复用电路、发送电路等。关于视频接收系统,其由多个处理阶段构成,包括接收电路、音频/视频多路解复用电路、视频解码器、显示器等。然而,由于视频接收系统中超长播放时间,传统的视频系统设计无法满足某些超低延时应用的要求。因此,需要一种具有新型低延时和高性能的视频接收系统。



技术实现要素:

根据本发明的示例的实施例,本发明提出一种使用环形缓存器和竞赛模式环形缓存器访问控制方案的视频处理系统来解决上述问题。

根据本发明的第一方面,公开一种示例性的视频处理系统。所述示例性的视频处理系统包括存储设备、音频/视频解多路复用电路和视频解码器。存储设备包括比特流缓存器,其中所述比特流缓存器为环形缓存器。音频/视频解多路复用电路用于接收输入数据,并对所述输入数据执行音频/视频解多路复用操作以将视频比特流的数据写入到所述环形缓存器内。视频解码器用于从所述环形缓存器中获取所述视频比特流的数据,并对所述获取的所述视频比特流的数据执行视频解码操作。

根据本发明的第二方面,公开一种示例性的视频处理系统。所述示例性的视频处理系统包括存储设备、视频解码器和显示引擎。存储设备包括显示缓存器,其中所述显示缓存器为环形缓存器。视频解码器用于对视频比特流的数据执行视频解码操作,以将重构视频帧的像素数据写入所述环形缓存器内。显示引擎用于从所述环形缓存器中获取所述重构视频帧的像素数据,并根据所述获取的所述重构视频帧的像素数据驱动显示设备。

根据本发明的第三方面,公开一种示例性的视频处理系统。所述示例性的视频处理系统包括存储设备、接收电路和音频/视频解多路复用电路。存储设备包括数据缓存器,其中所述数据缓存器为环形缓存器。接收电路用于接收数据包,并解压所述数据包以将所述数据包的有效载荷数据写入到所述环形缓存器内。音频/视频解多路复用电路用于从所述环形缓存器中获取输入数据,并对所述获取的输入数据执行音频/视频解多路复用操作,其中所述获取的输入数据包括至少一个所述数据包的有效载荷数据。

本发明通过在视频接收系统内不同处理阶段之间使用环形缓存器,避免视频帧处理过程中的下溢或者上溢,进而减低访问延时,同时降低缓存器成本。

在阅读以下对各图及图式中所例示的优选实施例的详细说明之后,本发明的这些及其它目标无疑将对所属领域的技术人员显而易见。

附图说明

图1是例示根据本发明实施例的视频接收系统的结构示意图。

图2是例示根据本发明实施例的第一视频处理系统的示意图。

图3是例示根据本发明实施例的使用环形缓存器所实现的比特流缓存器的示意图。

图4是例示根据本发明实施例的控制比特流缓存器的写操作的方法的流程图。

图5是例示根据本发明实施例的控制比特流缓存器的读操作的方法的流程图。

图6是例示根据本发明实施例的第二视频处理系统的示意图。

图7是例示根据本发明实施例的使用环形缓存器所实现的显示缓存器的示意图。

图8是例示根据本发明实施例的显示控制方法的流程图。

图9是例示根据本发明实施例的第三视频处理系统的示意图。

图10是例示根据本发明实施例的使用环形缓存器所实现的数据缓存器的示意图。

图11是例示根据本发明实施例的控制数据缓存器的写操作的方法的流程图。

图12是例示根据本发明实施例的控制数据缓存器的读操作的方法的流程图。

图13是例示根据本发明实施例的帧基地址切换电路的示意图。

图14是例示根据本发明实施例的显示设备所显示的视频帧的示意图。

具体实施方式

本说明书及权利要求书通篇中所用的某些用语指代特定部件。如所属领域的技术人员可以理解的是,电子设备制造商可利用不同名称来指代同一个部件。本文并非以名称来区分部件,而是以功能来区分部件。在以下说明书及权利要求书中,用语“包括”是开放式的限定词语,因此其应被解释为意指“包括但不限于…”。另外,用语“耦合”旨在意指间接电连接或直接电连接。因此,当一个装置耦合到另一装置时,则这种连接可以是直接电连接或通过其他装置及连接部而实现的间接电连接。

图1是根据本发明实施例的视频接收系统的结构示意图。视频接收系统120通过通信链路110与视频发送系统100进行通信。举例但不限于,该视频发送系统100和视频接收系统120可以应用于超低延时应用,如虚拟现实(virtualreality,vr)应用。在本实施例中,视频接收系统120包括接收(receiving,rx)电路112,存储设备124、音频/视频解多路复用电路(用“a/vdemux”表示)126、视频解码器(用“vdec”表示)128、显示引擎130和显示控制电路132。存储设备124包括数据缓存器134、比特流缓存器136、显示缓存器138和参考帧缓存器139。

视频发送系统100用作视频记录系统,其用于编码由一个或多个视频源(未示出)所提供的视频帧,然后通过通信链路110将编码的视频数据发送给视频接收系统120。视频接收系统120用作视频播放系统,其用于接收来自于通信链路110的编码的视频帧数据,然后解码编码的视频帧数据,以生成重构视频帧至显示设备140,进而用于视频播放。例如,显示设备140可以是vr头盔的显示屏。此外,通信链路110可以由有线通信链路或者无线通信链路来实现。

接收电路122接收来自通信链路110的数据包,并解压该数据包,以将该数据包的有效载荷数据写入到数据缓存器134。该数据包的有效载荷数据包括编码视频数据、编码音频数据和其他用户定义的数据。音频/视频解多路复用电路126从数据缓存器134获取输入数据,并对获取的输入数据执行音频/视频解多路复用操作,其中获取的输入数据包括由接收电路122所接收的至少一个数据包的有效载荷数据。由于音频/视频解多路复用,分离出视频比特流和音频比特流,并分别将其转发至比特流缓存器136和音频数据路径133。换句话说,音频/视频解多路复用电路126对获取的输入数据执行音频/视频解多路复用操作,从而将视频比特流的数据写入到比特流缓存器136内,并将音频比特流的数据提供给音频数据路径133。音频数据路径133解码音频比特流以获得用于音频播放的音频数据。关于视频处理和播放,视频解码器128从比特流缓存器136获取视频比特流的数据,并对获取的视频比特流的数据执行视频解码操作,以将重构视频帧的像素数据写入到显示缓存器138内。

可以使用帧内预测模式或者帧间预测模式来编码视频帧内的编码块。当使用帧间预测模式编码当前视频帧内的编码块时,在参考帧内查找到预测块,该预测块用于重构该当前视频帧的编码块,该参考帧是一个之前重构的视频帧,并存储在参考帧缓存器139内。因此,还将由视频解码器128解码前一视频帧而生成的重构视频帧存储在参考帧缓存器139内,从而作为用于解码当前视频帧的参考帧。

显示引擎130是由显示控制电路132控制的驱动电路。显示引擎130从显示缓存器138获取重构视频帧的像素数据,并根据所获取的重构视频帧的像素数据驱动显示设备140。

在本实施例中,存储设备124使用内部存储设备、外部存储设备或者其结合所实现。例如,内部存储设备可以是静态随机存取存储器(staticrandomaccessmemory,sram),或者触发器(flip-flop)。外部存储设备可以是动态随机存取存储器(dynamicrandomaccessmemory,dram)或者闪存。

由于视频接收系统120内的不同处理阶段具有不同的数据处理速度,一个缓存器耦接不同处理阶段之间。如图1所示,数据缓存器134耦接于前面的接收电路122和后面的音频/视频解多路复用电路126之间,比特流缓存器136耦接于前面的音频/视频解多路复用电路126和后面视频解码器128之间,以及显示缓存器138耦接于前面的视频解码器128和后面的显示引擎130之间。如果通过使用小型缓存器来实现一个耦接于具有不同数据处理速度的不同处理阶段之间的缓存器,在一个视频帧的处理期间,该小型缓存器会遇到下溢或者上溢,从而导致额外的读取延时。如果通过使用大型缓存器来实现一个耦接于具有不同数据处理速度的不同处理阶段之间的缓存器,在一个视频帧的处理期间,以缓存器成本为代价,该大型缓存器可以避免下溢或者上溢。在本实施例中,通过使用环形缓存器来实现数据缓存器134、比特流缓存器136和显示缓存器138中至少一个。由于环形缓存器的内部特性,可以重复使用小型环形缓存器的存储空间,这样,小型环形缓存器可以用作大型缓存器。此外,采用竞赛模式环形缓存器访问控制方案可以防止后续处理阶段从该环形缓存器中获取错误的数据,和/或防止前面的处理阶段重写还没有被后续处理阶段处理的缓存数据。简言之,本发明提出在视频接收系统内不同处理阶段之间使用环形缓存器,从而实现访问延时和缓存器成本之间的平衡。

图2是根据本发明实施例的第一视频处理系统的示意图。该视频处理系统200是如图1所示的视频接收系统120的一部分。在本实施例中,视频处理系统200包括音频/视频解多路复用电路126、视频解码器128和比特流缓存器136。此外,该比特流缓存器136由如图3所示的环形缓存器来实现。进一步地,采用竞赛模式环形缓存器访问控制方案,以防止视频解码器128从该环形缓存器(例如,比特流缓存器136)获取错误的数据,并防止音频/视频解多路复用电路126覆盖视频解码器128还没有处理的缓存数据。

如图3所示,比特流缓存器136是一个环形缓存器,其具有顶部地址v_start和底部地址v_end。在一个实施例中,顶部地址v_start和底部地址v_end可以是物理地址,其定义了连续的物理存储空间。在另一个实施例中,顶部地址v_start和底部地址v_end可以是虚拟地址,其定义了连续的逻辑存储空间。因此,总比特流缓存器大小等于(v_start-v_end)。可以按照从顶部地址v_start到底部地址v_end的方向,然后从底部地址v_end返回到顶部地址v_start,来访问(读/写)该比特流缓存器136。

在一个视频帧的输入数据(其包含编码的视频数据和编码的音频数据)的音频/视频解多路复用期间,音频/视频解多路复用电路126将视频比特流的数据写入到比特流缓存器136内,从而写指针wptr(其表示将视频比特流的数据写入到比特流缓存器136的当前写地址)向下移动。具体地,音频/视频解多路复用电路126分析输入数据(其包含编码的视频数据和编码的音频数据),并将视频比特流的数据写入到比特流缓存器136内。因此,音频/视频解多路复用电路126根据存储在比特流缓存器136内的视频数据的大小更新该写指针wptr。当该写指针wptr达到底部地址v_end时,该写指针wptr将返回到顶部地址v_start,从而将视频比特流的数据无间隙地继续写入到比特流缓存器136内。

在一个视频帧的视频比特流的视频解码期间,视频解码器128从比特流缓存器136中读取视频比特流的数据,从而读指针rptr(其表示从比特流缓存器136中读取视频比特流的数据的当前读地址)向下移动。当该读指针rptr达到底部地址v_end时,该读指针rptr将返回到顶部地址v_start,从而从比特流缓存器136中无间隙地继续读取视频比特流的数据。

在视频解码器128读取并处理存储在比特流缓存器136内的旧数据部分之后,可以重复使用缓存该旧数据部分的存储空间,以缓存音频/视频解多路复用电路126所生成的新数据部分。此外,在音频/视频解多路复用电路126所生成的新数据部分覆盖旧数据部分(其已由视频解码器128读取并处理)之后,视频解码器128再次读取该存储空间,以获取新数据部分。由于环形缓存器的内部特性,写指针wptr跟随读指针rptr,并且,读指针rptr也跟随写指针wptr。写指针wptr和读指针rptr之间使用竞赛模式,以控制作为环形缓存器的比特流缓存器136的访问(读/写)。根据竞赛模式环形缓存器访问控制方案,音频/视频解多路复用电路126包括将写指针wptr更新到视频解码器128的写控制器202,以及视频解码器128包括将读指针rptr更新到音频/视频解多路复用电路126的读控制器204。

图4是根据本发明实施例的控制比特流缓存器136的写操作的方法的流程图。假设结果本质上是相同的,无需严格按照图4所示的顺序执行步骤。写控制器202采用如图4所示的方法。在步骤402中,写控制器202设置初始起点位置,其中,起点表示音频/视频解多路复用电路126将视频比特流存储到比特流缓存器136的起始地址。由于比特流缓存器136是环形缓存器,该初始起点位置设置为顶部地址v_start和底部地址v_end之间的一个地址。此外,开始将视频比特流存储到比特流缓存器136的时候,将视频比特流的第一数据部分写入到写地址所寻址的存储字节,该写地址即是初始起点位置。

在步骤404中,写控制器202比较其写指针wptr与接收到的读指针rptr,以检测写指针wptr与读指针rptr之间的差是否没有达到阈值(例如,wptr!=rptr-1)。当写指针wptr与读指针rptr之间的差没有达到该阈值时(例如,wptr!=rptr-1),写控制器202继续或者恢复(resume)将视频比特流写入到比特流缓存器136内(步骤408)。在本实施例中,该阈值等于写指针wptr递增的步长(stepsize)。但是,此仅用于示例目的,不用于限制本发明。

当写指针wptr与读指针rptr之间的差达到该阈值时,(例如,wptr==rptr-1),意味着写指针wptr将很快追上读指针rptr,此时,写控制器202停止将视频比特流写入到比特流缓存器136中(步骤406)。这样,竞赛模式环形缓存器访问控制方案防止音频/视频解多路复用电路126覆盖掉视频解码器128还没有处理的编码视频数据。直到视频解码器128将读指针rptr更新为新的值,写控制器202才恢复将视频比特流写入到比特流缓存器136。因此,在暂停将视频比特流写入到比特流缓存器136的情况下,当由于读指针rptr更新为新的值而使得写指针wptr与读指针rptr之间的差没有达到该阈值(例如,wptr!=rptr-1)时,写控制器202将恢复将视频比特流写入到比特流缓存器136中(步骤404和408)。

在步骤408中,写控制器202更新写指针wptr,以移动该写指针wptr,进而将视频比特流写入到比特流缓存器136的下一个写地址中。例如,写控制器202根据如下伪码更新写指针wptr。

在根据更新后的写指针wptr将视频比特流写入到比特流缓存器136之后,写控制器202检测是否存在需要存储到比特流缓存器136中的更多数据(步骤410)。当不存在需要存储到比特流缓存器136中的数据时,结束写操作。否则控制流程继续到步骤404。

图5是根据本发明实施例的控制比特流缓存器136的读操作的方法的流程图。假设结果本质上是相同的,无需严格按照图5所示的顺序执行步骤。读控制器204采用如图5所示的方法。在步骤502中,读控制器204检测起始起点位置是否在顶部地址v_start和底部地址v_end之间。如上所述,起点表示存储到为环形缓存器的比特流缓存器136中的视频比特流的起始地址。仅当起始起点位置在顶部地址v_start和底部地址v_end之间时,激活竞赛模式环形缓存器访问控制方案。因此,当起始起点位置在顶部地址v_start和底部地址v_end之间时,控制流程继续至步骤504。

在步骤504中,读控制器204比较其读指针rptr与接收到的写指针wptr,以检测读指针rptr是否没有追上写指针wptr(例如,rptr!=wptr)。当读指针rptr没有追上写指针wptr时(例如,rptr!=wptr),读控制器204继续或者恢复从比特流缓存器136中读取视频比特流的数据(步骤508)。

然而,当读指针rptr追上写指针wptr时(例如,rptr==wptr),读控制器204停止从比特流缓存器136中读取视频比特流的数据。这样,竞赛模式环形缓存器访问控制方案防止视频解码器128从比特流缓存器136中获取错误的编码的视频数据。直到音频/视频解多路复用电路126将写指针wptr更新为新的值,读控制器204才恢复从比特流缓存器136中读取视频比特流的数据。因此,在暂停从比特流缓存器136中读取视频比特流的数据的情况下,当由于写指针wptr更新为新的值而使得读指针rptr没有追上写指针wptr(例如,rptr!=wptr)时,读控制器204将恢复从比特流缓存器136中读取视频比特流的数据(步骤504和508)。

在步骤508中,读控制器204计算读取长度,该读取长度表示仍然等待从比特流缓存器136获取到视频解码器128的数据的数量,从而用于进一步处理。例如,读控制器204根据如下伪码计算该读取长度。

在步骤510中,读控制器204更新读指针rptr,以移动该读指针rptr,从而从比特流缓存器136的下一个读地址中读取视频比特流的数据。例如,读控制器204根据如下伪码更新读指针rptr。

在根据更新后的读指针rptr从比特流缓存器136中读取视频比特流的数据之后,读控制器204检测帧解码操作是否完成(步骤512)。当帧解码操作完成时,结束读操作。否则控制流程继续到步骤504。

图6是根据本发明实施例的第二视频处理系统的示意图。该视频处理系统600是如图1所示的视频接收系统120的一部分。在本实施例中,视频处理系统600包括视频解码器128、显示引擎130、显示控制电路132和显示缓存器138。此外,该显示缓存器138由如图7所示的环形缓存器来实现。采用竞赛模式环形缓存器访问控制方案,以防止视频解码器128覆盖显示引擎130还没有使用以用于视频播放的缓存的像素数据。

如图7所示,显示缓存器138是一个环形缓存器,其具有顶部地址buf_start和底部地址buf_end。在一个实施例中,顶部地址buf_start和底部地址buf_end可以是物理地址,其定义了连续的物理存储空间。在另一个实施例中,顶部地址buf_start和底部地址buf_end可以是虚拟地址,其定义了连续的逻辑存储空间。因此,总的显示缓存器大小等于(buf_start-buf_end)。例如,总的显示缓存器大小等于n(n≧2)行编码块行的像素数据的数量,其中每个编码块包含m(m≧1)条像素线(pixelline)。编码块是视频编码标准的基本处理单元。例如,当视频编码标准为h.264时,一个编码块是一个宏块(macroblock,mb)。又例如,当视频编码标准为vp9时,一个编码块是一个超级块(superblock,sb)。还例如,当视频编码标准为高效视频编码(hevc,highefficiencyvideocoding)时,一个编码块是一个编码树单元(codingtreeunit,ctu)。

由于显示缓存器138是一个环形缓存器,可以按照顶部地址buf_start到底部地址buf_end的方向,然后从底部地址buf_end返回到顶部地址buf_start来访问(读/写)该显示缓存器138,。

在一个视频帧的视频解码期间,视频解码器128将重构视频帧的像素数据写入到显示缓存器138内,从而像素数据的写地址向下移动。当写地址到达底部地址buf_end时,写地址将返回到顶部地址buf_start,从而将该重构视频帧的像素数据无间隙地写入到显示缓存器138内。

在重构视频帧的视频播放期间,显示引擎130从显示缓存器138中读取该重构视频帧的像素数据,进而该像素数据的读地址向下移动。当读地址到达底部地址buf_end时,该读地址将返回到顶部地址buf_start,从而从显示缓存器138中无间隙地继续读取该重构视频帧的像素数据。

在显示引擎130读取并处理存储在显示缓存器138内的旧数据部分之后,可以重复使用缓存该旧数据部分的存储空间,以缓存视频解码器128所生成的新数据部分。此外,在视频解码器128所生成的新数据部分覆盖旧数据部分(其已由显示引擎130读取并处理)之后,显示引擎130再次读取该存储空间,以获取新数据部分。除非显示缓存器138内已经存在一些可用的视频帧的像素数据,否则不开始视频帧的视频播放。由于环形缓存器的内部特性,写地址跟随读读地址。为了实现流畅的视频播放,不能停止显示缓存器138的读操作。因此,读操作和写操作之间采用竞赛模式,以控制为环形缓存器的显示缓存器138的写操作。根据竞赛模式环形缓存器访问控制方案,视频解码器128包括重构线计数器602,其维护重构线计数值r_line,该计数值r_line表示视频解码器128所重构的像素线的数量,以及显示引擎130包括显示线计数器604,其维护显示线计数值d_line,该计数值d_line表示通过显示引擎130在显示设备140上所显示的像素线的数量。

在本实施例中,视频解码器128用于执行基于块的解码,显示引擎130用于执行基于扫描线的显示。因此,每次完全解码一个编码块行时,重构线计数器602将给该重构线计数值r_line加上第一递增值(例如,等于一个编码块的高度的值)。例如,假设一个编码块在列方向上有n个像素,当完全解码一个编码块行时,该重构线计数值r_line更新为r_line+n。此外,每次完全显示一个像素线时,显示线计数器604将给显示线计数值d_line增加第二递增值(例如,1)。例如,当完全显示一个像素线时,显示线计数值d_line将更新为d_line+1。

图8是根据本发明实施例的显示控制方法的流程图。假设结果本质上是相同的,无需严格按照图8所示的顺序执行步骤。显示控制电路132采用如图8所示的方法。在本实施例中,视频解码器128更新重构线计数值r_line至显示控制电路132,显示引擎130更新显示线计数值d_line至显示控制电路132。因此,显示控制电路132可以参考重构线计数值r_line以了解当前视频帧的解码状态,并且参考显示线计数值d_line以了解当前视频帧的显示状态。开始时,显示控制电路132比较重构线计数值r_line与显示线计数值d_line,以判断是否开始重构视频帧的视频播放。当r_line≧d_line,显示控制电路132给显示引擎分配帧基地址(framebaseaddress)addr,其中该帧基地址表示视频解码器128将该重构视频帧存储到显示缓存器138内的起始地址。

在步骤804中,显示控制电路132比较重构线计数值r_line与显示线计数值d_line,以判断是否停止显示缓存器138的读操作。在本例子中,显示控制电路132检测重构线计数值r_line与显示线计数值d_line之间的差是否没有达到阈值(例如,r_line!=d_line+k),其中,根据实际设计考虑,阈值k可以设置为任何正整数值。当重构线计数值r_line与显示线计数值d_line之间的差没有达到该阈值时,(例如,r_line!=d_line+k),显示控制电路132将没有使能控制信号sctrl以指示视频解码器128不停止将重构视频帧的像素数据写入到显示缓存器138内。随后,流程继续至步骤810,进而显示引擎130从显示缓存器138中继续读取重构视频帧的像素数据,并驱动显示设备140显示重构视频帧的像素数据。因此,在步骤810中,通过显示引擎130在显示设备140上显示一个像素线,并且相应地显示线计数器604更新显示线计数值d_line(例如,d_line=d_line+1)。

然而,当重构线计数值r_line与显示线计数值d_line之间的差达到该阈值时,(例如,r_line==d_line+k),意味着视频解码速度比视频播放速度更快,显示控制电路132使能控制信号sctrl以指示视频解码器128停止将重构视频帧的像素数据写入到显示缓存器138内(步骤806)。这样,竞赛模式环形缓存器访问控制方案防止视频解码器128覆盖显示引擎130还没有使用以用于视频播放的缓存的像素数据。如上所述,为了实现流畅的视频播放,不能暂停显示缓存器138的读操作。随后,流程继续到步骤808,进而显示引擎130从显示缓存器138中继续读取重构视频帧的像素数据,并驱动显示设备140显示重构视频帧的像素数据。相似地,在步骤808中,显示线计数器604相应地更新显示线计数值d_line(例如,d_line=d_line+1)。

直到显示引擎130(特别是显示线计数器604)更新显示线计数值d_line为新的值时,显示控制电路132才指示视频解码器128将重构视频帧的像素数据恢复写入到显示缓存器138。因此,在暂停将视频比特流写入到显示缓存器138的情况下,当由于显示线计数值d_line更新为新的值而使得重构线计数值r_line与显示线计数值d_line之间的差没有达到该阈值时(例如,r_line!=d_line+k),显示控制电路132禁能(de-assert)控制信号sctrl以指示视频解码器128恢复写入重构视频帧的像素数据到显示缓存器138内(步骤804和810)。

在步骤812中,显示控制电路132检测是否存在需要显示的更多像素线。当不存在需要显示的像素线时,结束显示控制操作。否则控制流程继续到步骤804。

图9是根据本发明实施例的第三视频处理系统的示意图。该视频处理系统900是如图1所示的视频接收系统120的一部分。在本实施例中,视频处理系统900包括接收电路122、音频/视频多路解复用电路126和数据缓存器134。此外,该数据缓存器134由如图10所示的环形缓存器来实现。进一步地,采用竞赛模式环形缓存器访问控制方案,以防止音频/视频多路解复用电路126从环形缓存器(例如,数据缓存器134)中获取错误的数据,并且防止接收电路122覆盖音频/视频多路解复用电路126还没有处理的缓存数据。

在一个示例设计中,如图1所示的通信链路110可以是无线通信链路。因此,接收电路122用于接收来自无线通信链路的数据包。例如,接收电路122可以是无线保真(wirelessfidelity,wifi)接收器,但是此仅用于示例目的,并不用于限制本发明。

在另一个示例设计中,如图1所示的通信链路110可以是有线通信链路。因此,接收电路122用于接收来自有线通信链路的数据包。例如,接收电路122可以是通用串行总线(universalserialbus,usb)接收器或者高分辨率多媒体接口(high-definitionmultimediainterface,hdmi)接收器,但是此仅用于示例目的,并不用于限制本发明。

如图10所示,数据缓存器134是一个环形缓存器,其具有顶部地址v_start和底部地址v_end。在一个实施例中,顶部地址v_start和底部地址v_end可以是物理地址,其定义了连续的物理存储空间。在另一个实施例中,顶部地址v_start和底部地址v_end可以是虚拟地址,其定义了连续的逻辑存储空间。因此,总的数据缓存器大小等于(v_start-v_end)。可以按照从顶部地址v_start到底部地址v_end的方向,然后从底部地址v_end返回到顶部地址v_start,来访问(读/写)该数据缓存器134。

在一个视频帧的数据包的接收期间,接收电路122将数据包的有效载荷数据写入到数据缓存器134内,从而写指针wptr(其表示将数据包的有效载荷数据写入到数据缓存器134的当前写地址)向下移动。具体地,接收电路122接收来自通信链路110的数据包,并解包接收到的数据包,以将包含在该接收到的数据包内的有效载荷数据写入到数据缓存器134内。因此,接收电路122根据接收到的数据包的数量和包含在每个接收到的数据包内的有效载荷数据的大小更新该写指针wptr。当该写指针wptr达到底部地址v_end时,该写指针wptr将返回到顶部地址v_start,从而将数据包的有效载荷数据无间隙地继续写入到数据缓存器134内。

在一个视频帧的输入数据(其包含至少一个数据包的有效载荷数据)的音频/视频解多路复用期间,音频/视频解多路复用电路126从数据缓存器134中读取该输入数据,从而读指针rptr(其表示从数据缓存器134中读取输入数据的当前读地址)向下移动。当该读指针rptr达到底部地址v_end时,该读指针rptr将返回到顶部地址v_start,从而从数据缓存器134中无间隙地继续读取输入数据。

在音频/视频解多路复用电路126读取并处理存储在数据缓存器134内的旧数据部分之后,可以重复使用缓存该旧数据部分的存储空间,以缓存接收电路122所生成的新数据部分。此外,在接收电路122所生成的新数据部分覆盖旧数据部分(其已由音频/视频解多路复用电路126读取并处理)之后,音频/视频解多路复用电路126再次读取该存储空间,以获取新数据部分。由于环形缓存器的内部特性,写指针wptr跟随读指针rptr,并且,读指针rptr也跟随写指针wptr。写指针wptr和读指针rptr之间使用竞赛模式,以控制为环形缓存器的数据缓存器134的访问(读/写)。根据竞赛模式环形缓存器访问控制方案,接收电路122包括将写指针wptr更新到音频/视频解多路复用电路126的写控制器902,以及音频/视频解多路复用电路126包括将读指针rptr更新到接收电路122的读控制器904。

图11是根据本发明实施例的控制数据缓存器134的写操作的方法的流程图。假设结果本质上是相同的,无需严格按照图11所示的顺序执行步骤。写控制器902采用如图11所示的方法。在步骤1102中,写控制器902设置初始起点位置,其中,起点表示接收电路122将有效载荷数据存储到数据缓存器134的起始地址。由于数据缓存器134是环形缓存器,该初始起点位置设置为顶部地址v_start和底部地址v_end之间的一个地址。此外,开始将数据包的有效载荷数据存储到数据缓存器134的时候,将有效载荷数据的第一数据部分写入到写地址所寻址的存储字节,该写地址即是初始起点位置。

在步骤1104中,写控制器902比较其写指针wptr与接收到的读指针rptr,以检测写指针wptr与读指针rptr之间的差是否没有达到阈值(例如,wptr!=rptr-1)。当写指针wptr与读指针rptr之间的差没有达到该阈值时(例如,wptr!=rptr-1),写控制器902继续或者恢复将数据包的有效载荷数据写入到数据缓存器134内(步骤1108)。在本实施例中,该阈值等于写指针wptr递增的步长。但是,此仅用于示例目的,不用于限制本发明。

然而,当写指针wptr与读指针rptr之间的差达到该阈值时,(例如,wptr==rptr-1),意味着写指针wptr将很快追上读指针rptr,此时,写控制器902停止将数据包的有效载荷数据写入到数据缓存器134中(步骤1106)。这样,竞赛模式环形缓存器访问控制方案防止接收电路122覆盖掉音频/视频解多路复用电路126还没有处理的有效载荷数据。直到音频/视频解多路复用电路126将读指针rptr更新为新的值,写控制器902才恢复将数据包的有效载荷数据写入到数据缓存器134。因此,在暂停将数据包的有效载荷数据写入到数据缓存器134的情况下,当由于读指针rptr更新为新的值而使得写指针wptr与读指针rptr之间的差没有达到该阈值(例如,wptr!=rptr-1)时,写控制器902恢复将数据包的有效载荷数据写入到数据缓存器134中(步骤1104和1108)。

在步骤1108中,写控制器902更新写指针wptr,以移动该写指针wptr,进而将有效数据载荷数据写入到数据缓存器134的下一个写地址中。例如,写控制器902根据如下伪码更新写指针wptr。

在根据更新后的写指针wptr将数据包的有效载荷数据写入到数据缓存器134之后,写控制器902检测是否存在需要存储到数据缓存器134中的更多数据(步骤1110)。当不存在需要存储到数据缓存器134中的数据时,结束写操作。否则控制流程继续到步骤1104。

图12是根据本发明实施例的控制数据缓存器134的读操作的方法的流程图。假设结果本质上是相同的,无需严格按照图12所示的顺序执行步骤。读控制器904采用如图12所示的方法。在步骤1202中,读控制器904检测起始起点位置是否在顶部地址v_start和底部地址v_end之间。如上所述,起点表示存储到为环形缓存器的数据缓存器134中的有效载荷数据的起始地址。仅当起始起点位置在顶部地址v_start和底部地址v_end之间时,激活竞赛模式环形缓存器访问控制方案。因此,当起始起点位置在顶部地址v_start和底部地址v_end之间时,控制流程继续至步骤1204。

在步骤1204中,读控制器904比较其读指针rptr与接收到的写指针wptr,以检测读指针rptr是否没有追上写指针wptr(例如,rptr!=wptr)。当读指针rptr没有追上写指针wptr时(例如,rptr!=wptr),读控制器904继续或者恢复从数据缓存器134中读取有效载荷数据的数据(步骤1208)。

然而,当读指针rptr追上写指针wptr时(例如,rptr==wptr),读控制器904停止从数据缓存器134中读取数据包的有效载荷数据。这样,竞赛模式环形缓存器访问控制方案防止音频/视频解多路复用电路126从数据缓存器134中获取错误的有效载荷数据。直到接收电路122将写指针wptr更新为新的值,读控制器904才恢复从数据缓存器134中读取数据包的有效载荷数据。因此,在暂停从数据缓存器134中读取数据包的有效载荷数据的情况下,当由于写指针wptr更新为新的值而使得读指针rptr没有追上写指针wptr(例如,rptr!=wptr)时,读控制器904将恢复从数据缓存器134中读取数据包的有效载荷数据(步骤1204和1208)。

在步骤1208中,读控制器904计算读取长度,该读取长度表示仍然等待从数据缓存器134获取到音频/视频解多路复用电路126的数据的数量,从而用于进一步处理。例如,读控制器904根据如下伪码计算该读取长度。

在步骤1210中,读控制器904更新读指针rptr,以移动该读指针rptr,从而从数据缓存器134的下一个读地址中读取数据包的有效载荷数据。例如,读控制器904根据如下伪码更新读指针rptr。

在根据更新后的读指针rptr将从数据缓存器134中读取有效载荷数据的数据之后,读控制器904检测帧音频/视频解多路复用操作是否完成(步骤1212)。当帧音频/视频解多路复用操作完成时,结束读操作。否则控制流程继续到步骤1204。

为了实现流畅的视频播放,不能暂停显示缓存器138的读操作。然而,由于某些因素,视频解码器128可能不能及时提供一个重构视频帧的某些像素数据。例如,由于视频发送系统100与视频接收系统120之间的通信链路(例如,有线通信链路或无线通信链路)110的带宽改变而导致解码速度变得不稳定。在显示引擎130开始驱动显示设备140显示该部分重构视频帧时,若部分重构视频帧的重构像素数据还没有准备好,显示设备140上将显示残缺的图像,从而导致视频质量差。为了防止显示设备140显示残缺的图像,本发明进一步提出帧基地址切换方案。

请同时参考图6和图13,图13是根据本发明实施例的帧基地址切换电路的示意图。该帧基地址切换电路1302是如图1和6所示的显示控制电路132的一部分。如上所述,显示缓存器138用于缓存重构帧(其为正在解码的当前帧)的像素数据,并且,参考帧缓存器139用于缓存一个或多个参考帧(其是已经解码的前面的帧)。在本实施例中,帧基地址切换电路1302由具有第一输入端口、第二输入端口和输出端口的多路复用器来实现,该第一输入端口用于接收重构帧基地址,该第二输入端口用于接收参考帧基地址,输出端口用于选择性地输出重构帧基地址或者参考帧基地址作为显示引擎130所使用的帧基地址addr。如图13所示,根据比较重构线计数值r_line和显示线计数值d_line的结果控制该帧基地址切换电路1302,重构线计数值r_line由重构线计数器602维护,显示线计数值d_line由显示线计数器604维护。当重构线计数值r_line小于显示线计数值d_line时,意味着视频解码器128不能及时提供所需要的像素线数据,帧基地址切换电路1302将选择参考帧基地址作为帧基地址addr。当重构线计数值r_line不小于显示线计数值d_line时,意味着视频解码器128能及时提供所需要的像素线数据,帧基地址切换电路1302将选择重构帧基地址作为帧基地址addr。

重构帧基地址表示存储在显示缓存器138内的重构视频帧(其为正在解码的当前帧)的起始地址。参考帧基地址表示存储在参考帧缓存器139内的参考视频帧(其为已经解码的前一帧)的起始地址。如图6所示,显示控制电路132提供帧基地址addr给显示引擎130。当帧基地址addr设置成重构帧基地址时,显示引擎130根据该帧基地址addr从显示缓存器138中获取重构视频帧(其为正在解码的当前帧)的像素数据,并根据重构视频帧(其为正在解码的当前帧)的像素数据驱动显示设备140。当帧基地址addr设置成参考帧基地址时,显示引擎130根据该帧基地址addr从参考帧缓存器139中获取参考帧(其为已解码的前一帧)的像素数据,并根据参考帧(其为已解码的前一帧)的像素数据驱动显示设备140。

当解码速度在整个当前视频帧的视频播放期间稳定时,显示设备140将完全显示该当前视频帧。然而,当解码速度仅在部分当前视频帧的视频播放期间稳定时,显示设备140将显示部分该当前视频帧,并进一步显示部分前一视频帧。图14是根据本发明实施例的显示设备140上所显示的视频帧。显示视频帧img由部分重构帧和部分参考帧构成。在重构线计数值r_line小于显示线计数值d_line之前,通过显示引擎130使用设置为重构帧基地址的帧基地址addr,在显示设备140的第一区域上显示重构视频帧(其为正在解码的当前帧)的像素数据。在重构线计数值r_line小于显示线计数值d_line之后,通过显示引擎130使用设置为参考帧基地址的帧基地址addr,在显示设备140的第二区域上显示参考帧(其为已解码的前一帧)的像素数据。在从重构帧基地址到参考帧基地址的自动切换的帮助下,当由于视频发送系统100和视频接收系统120之间的带宽改变而导致的解码速度不稳定时,显示设备140上将不会显示残缺的图像。

所属领域的技术人员易知,可在保持本发明的教示内容的同时对装置及方法作出诸多修改及变动。因此,以上公开内容应被视为仅受随附权利要求书的范围的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1