一种注入解码器数据的管理方法

文档序号:7802525阅读:399来源:国知局
专利名称:一种注入解码器数据的管理方法
技术领域
本发明涉及一种注入解码器数据的管理方法,属于音视频信号处理技术领域。
背景技术
现有的基于解码器的数据没有一定的管理模式,在视频解码播放时,机械地把需要解码的数据直接往解码器里面送,不管解码器现有缓冲区处于什么状态。如果解码器缓冲区为满的情况下,往解码器里面送数据,就会失败,对于没有送到解码器的数据则直接丢弃掉了。这就会导致音视频播放不连续,一些音视频信息丢失,播放效果很差。基于此,如何发明一种注入解码器数据的管理方法,通过增加对注入解码器的数据进行管理,则保证了数据在注入失败的情况下,还能够保留,并为下次注入提供了原来的数据,是本发明主要解决的问题。

发明内容
本发明为了解决目前还没有一种对注入解码器的数据进行管理的方法,本发明提供了一种注入解码器数据的管理方法,通过增加对注入解码器的数据进行管理,有效避免了数据丢失以及音视频的播放不连续,播放效果好。为了解决上述技术问题,本发明采用以下技术方案予以实现 一种注入解码器数据的管理方法,其特征在于,包括以下步骤
在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入fifobuffer ; 在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区。为了防止接收数据与注入数据不一致,而导致数据丢失,优选的,所述的先进先出缓冲区fifobuffer为循环先进先出缓冲区。进一步的,待解码的数据写入fifobuffer时,包括以下步骤
(11 )、初始化fifobuffer,写入指针in和读出指针out归零,其中,所述fifobuffer的大小为η ;
(12)、注入数据a;
(13)、比较fifobuffer剩余空间b与注入数据a的大小,若a> b,则返回步骤(12), 否则,执行步骤(14);
(14)、将数据写入到fifobuffer;
(15)、修改写入指针in=in+a。又进一步的,为了防止修改后的写入指针大于fifobuffer空间长度,导致指针出错,在步骤(15)之后还包括
(16)、修正写入指针in,使其在0 (n-1)的范围内。再进一步的,待解码的数据从fifobuffer取出时,包括以下步骤 (21)、接收到取出数据量为c的命令;(22)、比较fifobuffer中数据量d与c的大小关系,确定读取数据量为e的数据,其中 e为d和c中的较小者;
(23)、修改读出指针out。由于读出指针out的位置不固定,步骤(22)与步骤(23)之间还包括以下步骤 (2加)、计算读出指针out到n-1之间数据的大小f,若e小于或等于f,则从out指针
开始读取e大小的数据,否则,从out指针开始读取到fifobuffer的末尾,再从0读取e-f 大小的数据。为了防止修改后的读出指针大于fifobuffer空间长度,导致指针出错,,步骤 (23)之后还包括
(对)、修正读出指针out,使其在0 (n-1)的范围内。再进一步的,cachebuffer从fifobuffer中读取数据时,包括以下步骤
(31)、判断现有数据控制状态是开始状态、sleep状态、还是stop状态,若是开始状态, 则执行步骤(32),若是sle印状态,则执行步骤(41),若是stop状态,则执行步骤(42);
(32)、计算cachebuffer剩余空间;
(33)、如果cachebuffer剩余空间大小为0,则返回步骤(32);否则继续步骤(34);
(34)、查看当前fifobuffer中数据大小;
(35)、如果cachebuffer剩余空间小于fifobuffer数据大小,继续步骤(36);否则继续步骤(37);
(36)、在fifobuffer里面取cachebuffer剩余空间大小的数据,放到cachebuffer里
(37)、在fifobuffer里面取现有所有的fifobuffer数据,放在cachebuffer里面;
(38)、修改cachebuffer 的写入 皆针 producer ;
(39)、从cachebuffer中取出数据注入解码器中;
(40)、修改cachebuffer 的读出 旨针 comsumer ;
(41)、延时一定时间后,返回步骤(31);
(42)、停止解码器注入任务。更进一步的,步骤(39)包括以下子步骤 (39a)、查看解码器缓冲区可用空间大小;
(39b)、如果解码器缓冲区可用空间为0,则继续步骤(41),否则,继续步骤(39c); (39c)、计算可以注入解码器的数据大小如果cachebuffer中数据量大于解码器缓冲区可用空间大小,继续步骤(39d);否则,继续步骤(39e);
(39d)、从cachebuffer取解码器缓冲可用空间大小的数据,继续步骤(39f); (39e)、从cachebuffer取出所有的数据; (39f)、将取出的数据注入解码器中。与现有技术相比,本发明的优点和积极效果是本发明的注入解码器数据的管理方法,通过在内存中划分出一块缓冲区,将注入解码器的数据首先注入进缓冲区,进行管理,有效防止了数据丢失,以及音视频的播放不流畅,马赛克、丢帧等现象。结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。


图1是本发明所提出的数据管理方法一种实施例中缓冲区fifobuffer初始状态示意图2是本发明所提出的数据管理方法一种实施例中缓冲区fifobuffer注入数据后状态示意图3是本发明所提出的数据管理方法一种实施例中缓冲区fifobuffer注入数据后另外一种状态示意图4是本发明所提出的数据管理方法一种实施例中缓冲区fifobuffer注入数据后再一种状态示意图5是本发明所提出的数据管理方法一种实施例中缓冲区fifobuffer注入数据流程
图6是本发明所提出的数据管理方法一种实施例中缓冲区fifobuffer取出数据流程
图7是本发明所提出的数据管理方法一种实施例中cachebuffer从fifobuffer中读取数据时流程图。
具体实施例方式针对目前还没有一种对注入解码器的数据进行管理的方法,在对视频解码时,机械地把需要解码的数据直接往解码器里面送,没有考虑解码器现有缓冲区处于什么状态。 如果解码器缓冲区为满的情况下,往解码器里面送数据,就会失败,对于没有送到解码器的数据则直接丢弃掉了,导致一些音视频信息丢失,音视频播放不连续,播放效果很差。针对上述情况,本发明提供了一种基于解码器的数据管理技术,通过增加对注入解码器的数据进行管理,有效避免了数据丢失以及音视频的播放不连续、丢帧、马赛克等现象。下面结合附图对本发明的具体实施方式
作进一步详细地说明。实施例一,本实施例的注入解码器数据的管理方法,包括以下步骤
51、在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入 fifobuffer ;
52、在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区。为了防止接收数据与注入数据不一致,而导致数据丢失,以及保证数据输入输出顺序一致,优选的,所述的先进先出缓冲区fifobuffer为循环先进先出缓冲区。作为一个具体的实施例,在本实施例中,参见图1所示,为缓冲区fifobuffer的初始状态图,当待解码的数据写入fifobuffer时,流程图参见图5所示,包括以下步骤
Sl 1、初始化fifobuffer,写入指针in和读出指针out归零,其中,所述fifobuffer的大小为η ;
512、注入数据a;
513、比较fifobuffer剩余空间b与注入数据a的大小,若a> b,则返回步骤S12,否贝U,执行步骤S14;514、将数据写入到fifobuffer;
515、修改写入指针in=in+a。缓冲区fifobuffer注入数据后的状态图参见图2所示,由于本次任务只注入了数据,还未取出,因此读出指针out仍然在0的位置,写入指针已经随着写入数据的大小调整到了相应位置。当然,若本次注入数据不是首次注入,也即之前有注入的数据,所以,缓冲区 fifobuffer注入数据后的状态图另外一种示意图可以参见图3、图4所示的状态。为了防止修改后的写入指针大于fifobuffer空间长度,导致指针出错,在步骤 S15之后还包括
516、修正写入指针in,使其在0 (η-l)的范围内。待解码的数据从fifobuffer取出时,参见图6所示,包括以下步骤
521、接收到取出数据量为c的命令;
522、比较fifobuffer中数据量d与c的大小关系,确定读取数据量为e的数据,其中 e为d和c中的较小者;
本步骤是为了防止需要取出数据与fifobuffer中现有的数据量d不一致时,导致取出数据出错而设置的。S23、修改读出指针out。由于读出指针out的位置不固定,步骤S22与步骤S23之间还包括以下步骤 S22a、计算读出指针out到η-l之间数据的大小f,若e小于或等于f,则从out指针开
始读取e大小的数据,否则,从out指针开始读取到fifobuffer的末尾,再从0读取e-f大小的数据。为了防止修改后的读出指针大于fifobuffer空间长度,导致指针出错,步骤S23 之后还包括
S24、修正读出指针out,使其在0 (η-l)的范围内。当cachebuffer从fifobuffer中读取数据时,参见图7所示,包括以下步骤
531、判断现有数据控制状态是开始状态、sleep状态、还是stop状态,若是开始状态, 则执行步骤S32,若是sIe印状态,则执行步骤S41,若是stop状态,则执行步骤S42 ;
532、计算cachebuffer剩余空间g;
533、如果cachebuffer剩余空间g大小为0,则返回步骤S32;否则继续步骤S34 ;
534、查看当前fifobuffer中数据大小k;
535、如果cachebuffer剩余空间g小于fifobuffer数据大小h,继续步骤S36;否则继续步骤S37 ;
536、在fifobuffer里面取cachebuffer剩余空间大小h的数据,放到cachebuffer里
面;
537、在fifobuffer里面取现有所有的fifobuffer数据,放在cachebuffer里面;
538、修改cachebuffer 的写入 皆针 producer ;
539、从cachebuffer中取出数据注入解码器中;
540、修改cachebuffer 的读出 旨针 comsumer ;
541、延时一定时间后,返回步骤S31;
542、停止解码器注入任务。
更进一步的,步骤S39包括以下子步骤 S39a、查看解码器缓冲区可用空间大小i ;
S39b、如果解码器缓冲区可用空间为0,则继续步骤S41,否则,继续步骤S39c ; S39c、计算可以注入解码器的数据大小如果cachebuffer中数据量h大于解码器缓冲区可用空间大小i,继续步骤S39d ;否则,继续步骤S39e ;
S39d、从cachebuffer取解码器缓冲可用空间大小i的数据,继续步骤S39f ; S39e、从cachebuffer取出所有的数据; S39f、将取出的数据注入解码器中。本发明的注入解码器数据的管理方法,通过在内存中划分出一块缓冲区,将注入解码器的数据首先注入进缓冲区,进行管理,数据经过先进先出缓冲区后,再注入解码器, 有效防止了数据丢失,在任何阶段注入数据之前,均比较所注入数据与被注入缓冲区剩余空间的大小,以决定所实际注入数据的大小,同样有效防止了数据丢失,进而防止了音视频的播放不连续现象,播放效果好。当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的普通技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。
权利要求
1.一种注入解码器数据的管理方法,其特征在于,包括以下步骤在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入fifobuffer ;在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区。
2.根据权利要求1所述的注入解码器数据的管理方法,其特征在于,所述的先进先出缓冲区fifobuffer为循环先进先出缓冲区。
3.根据权利要求2所述的注入解码器数据的管理方法,其特征在于,待解码的数据写入fifobuffer时,包括以下步骤(11 )、初始化fifobuffer,写入指针in和读出指针out归零,其中,所述fifobuffer的大小为η ;(12)、注入数据a;(13)、比较fifobuffer剩余空间b与注入数据a的大小,若a> b,则返回步骤(12), 否则,执行步骤(14);(14)、将数据写入到fifobuffer;(15)、修改写入指针in=in+a。
4.根据权利要求3所述的注入解码器数据的管理方法,其特征在于,在步骤(15)之后还包括(16)、修正写入指针in,使其在0 (n-1)的范围内。
5.根据权利要求2所述的注入解码器数据的管理方法,其特征在于,待解码的数据从 fifobuffer取出时,包括以下步骤(21)、接收到取出数据量为c的命令;(22)、比较fifobuffer中数据量d与c的大小关系,确定读取数据量为e的数据,其中 e为d和c中的较小者;(23)、修改读出指针out。
6.根据权利要求5所述的注入解码器数据的管理方法,其特征在于,步骤(22)与步骤 (23)之间还包括以下步骤(2加)、计算读出指针out到n-1之间数据的大小f,若e小于或等于f,则从out指针开始读取e大小的数据,否则,从out指针开始读取到fifobuffer的末尾,再从0读取e-f 大小的数据。
7.根据权利要求6所述的注入解码器数据的管理方法,其特征在于,步骤(23)之后还包括(对)、修正读出指针out,使其在0 (n-1)的范围内。
8.根据权利要求2所述的注入解码器数据的管理方法,其特征在于,cachebuffer从 fifobuffer中读取数据时,包括以下步骤(31)、判断现有数据控制状态是开始状态、sleep状态、还是stop状态,若是开始状态, 则执行步骤(32),若是sle印状态,则执行步骤(41),若是stop状态,则执行步骤(42);(32)、计算cachebuffer剩余空间;(33 )、如果cachebuffer剩余空间大小为0,则返回步骤(32 );否则继续步骤(34);(34)、查看当前fifobuffer中数据大小;(35)、如果cachebuffer剩余空间小于fifobuffer数据大小,继续步骤(36);否则继续步骤(37);(36)、在fifobuffer里面取cachebuffer剩余空间大小的数据,放到cachebuffer里(37)、在fifobuffer里面取现有所有的fifobuffer数据,放在cachebuffer里面;(38)、修改cachebuffer 的写入 皆针 producer ;(39)、从cachebuffer中取出数据注入解码器中;(40)、修改cachebuffer 的读出 旨针 comsumer ;(41)、延时一定时间后,返回步骤(31);(42)、停止解码器注入任务。
9.根据权利要求8所述的注入解码器数据的管理方法,其特征在于,步骤(39)包括以下子步骤(39a)、查看解码器缓冲区可用空间大小;(39b)、如果解码器缓冲区可用空间为0,则继续步骤(41),否则,继续步骤(39c); (39c)、计算可以注入解码器的数据大小如果cachebuffer中数据量大于解码器缓冲区可用空间大小,继续步骤(39d);否则,继续步骤(39e);(39d)、从cachebuffer取解码器缓冲可用空间大小的数据,继续步骤(39f); (39e)、从cachebuffer取出所有的数据; (39f)、将取出的数据注入解码器中。
全文摘要
本发明公开了一种注入解码器数据的管理方法,包括以下步骤在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入fifobuffer;在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区。本注入解码器数据的管理方法,通过在内存中划分出一块缓冲区,将注入解码器的数据首先注入进缓冲区,进行管理,有效防止了数据丢失、以及音视频的播放不流畅、马赛克、丢帧等现象。
文档编号H04N7/26GK102495810SQ20111044665
公开日2012年6月13日 申请日期2011年12月28日 优先权日2011年12月28日
发明者张维 申请人:青岛海信宽带多媒体技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1