CN102495810B - 一种注入解码器数据的管理方法 - Google Patents
一种注入解码器数据的管理方法 Download PDFInfo
- Publication number
- CN102495810B CN102495810B CN201110446657.7A CN201110446657A CN102495810B CN 102495810 B CN102495810 B CN 102495810B CN 201110446657 A CN201110446657 A CN 201110446657A CN 102495810 B CN102495810 B CN 102495810B
- Authority
- CN
- China
- Prior art keywords
- data
- fifobuffer
- cachebuffer
- decoder
- size
- 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.)
- Active
Links
Abstract
本发明公开了一种注入解码器数据的管理方法,包括以下步骤:在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入fifobuffer;在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区。本注入解码器数据的管理方法,通过在内存中划分出一块缓冲区,将注入解码器的数据首先注入进缓冲区,进行管理,有效防止了数据丢失、以及音视频的播放不流畅、马赛克、丢帧等现象。
Description
技术领域
本发明涉及一种注入解码器数据的管理方法,属于音视频信号处理技术领域。
背景技术
现有的基于解码器的数据没有一定的管理模式,在视频解码播放时,机械地把需要解码的数据直接往解码器里面送,不管解码器现有缓冲区处于什么状态。如果解码器缓冲区为满的情况下,往解码器里面送数据,就会失败,对于没有送到解码器的数据则直接丢弃掉了。这就会导致音视频播放不连续,一些音视频信息丢失,播放效果很差。
基于此,如何发明一种注入解码器数据的管理方法,通过增加对注入解码器的数据进行管理,则保证了数据在注入失败的情况下,还能够保留,并为下次注入提供了原来的数据,是本发明主要解决的问题。
发明内容
本发明为了解决目前还没有一种对注入解码器的数据进行管理的方法,本发明提供了一种注入解码器数据的管理方法,通过增加对注入解码器的数据进行管理,有效避免了数据丢失以及音视频的播放不连续,播放效果好。
为了解决上述技术问题,本发明采用以下技术方案予以实现:
一种注入解码器数据的管理方法,其特征在于,包括以下步骤:
在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入fifobuffer;
在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区。
为了防止接收数据与注入数据不一致,而导致数据丢失,优选的,所述的先进先出缓冲区fifobuffer为循环先进先出缓冲区。
进一步的,待解码的数据写入fifobuffer时,包括以下步骤:
(11)、初始化fifobuffer,写入指针in和读出指针out归零,其中,所述fifobuffer的大小为n;
(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)之间还包括以下步骤:
(22a)、计算读出指针out到n-1之间数据的大小f,若e小于或等于f,则从out指针开始读取e大小的数据,否则,从out指针开始读取到fifobuffer的末尾,再从0读取e-f大小的数据。
为了防止修改后的读出指针大于fifobuffer空间长度,导致指针出错,,步骤(23)之后还包括:
(24)、修正读出指针out,使其在0~(n-1)的范围内。
再进一步的,cachebuffer从fifobuffer中读取数据时,包括以下步骤:
(31)、判断现有数据控制状态是开始状态、sleep状态、还是stop状态,若是开始状态,则执行步骤(32),若是sleep状态,则执行步骤(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中读取数据时流程图。
具体实施方式
针对目前还没有一种对注入解码器的数据进行管理的方法,在对视频解码时,机械地把需要解码的数据直接往解码器里面送,没有考虑解码器现有缓冲区处于什么状态。如果解码器缓冲区为满的情况下,往解码器里面送数据,就会失败,对于没有送到解码器的数据则直接丢弃掉了,导致一些音视频信息丢失,音视频播放不连续,播放效果很差。针对上述情况,本发明提供了一种基于解码器的数据管理技术,通过增加对注入解码器的数据进行管理,有效避免了数据丢失以及音视频的播放不连续、丢帧、马赛克等现象。
下面结合附图对本发明的具体实施方式作进一步详细地说明。
实施例一,本实施例的注入解码器数据的管理方法,包括以下步骤:
S1、在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入fifobuffer;
S2、在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区。
为了防止接收数据与注入数据不一致,而导致数据丢失,以及保证数据输入输出顺序一致,优选的,所述的先进先出缓冲区fifobuffer为循环先进先出缓冲区。
作为一个具体的实施例,在本实施例中,参见图1所示,为缓冲区fifobuffer的初始状态图,当待解码的数据写入fifobuffer时,流程图参见图5所示,包括以下步骤:
S11、初始化fifobuffer,写入指针in和读出指针out归零,其中,所述fifobuffer的大小为n;
S12、注入数据a;
S13、比较fifobuffer剩余空间b与注入数据a的大小,若a﹥b,则返回步骤S12,否则,执行步骤S14;
S14、将数据写入到fifobuffer;
S15、修改写入指针in=in+a。
缓冲区fifobuffer注入数据后的状态图参见图2所示,由于本次任务只注入了数据,还未取出,因此读出指针out仍然在0的位置,写入指针已经随着写入数据的大小调整到了相应位置。当然,若本次注入数据不是首次注入,也即之前有注入的数据,所以,缓冲区fifobuffer注入数据后的状态图另外一种示意图可以参见图3、图4所示的状态。
为了防止修改后的写入指针大于fifobuffer空间长度,导致指针出错,在步骤S15之后还包括:
S16、修正写入指针in,使其在0~(n-1)的范围内。
待解码的数据从fifobuffer取出时,参见图6所示,包括以下步骤:
S21、接收到取出数据量为c的命令;
S22、比较fifobuffer中数据量d与c的大小关系,确定读取数据量为e的数据,其中e为d和c中的较小者;
本步骤是为了防止需要取出数据与fifobuffer中现有的数据量d不一致时,导致取出数据出错而设置的。
S23、修改读出指针out。
由于读出指针out的位置不固定,步骤S22与步骤S23之间还包括以下步骤:
S22a、计算读出指针out到n-1之间数据的大小f,若e小于或等于f,则从out指针开始读取e大小的数据,否则,从out指针开始读取到fifobuffer的末尾,再从0读取e-f大小的数据。
为了防止修改后的读出指针大于fifobuffer空间长度,导致指针出错,步骤S23之后还包括:
S24、修正读出指针out,使其在0~(n-1)的范围内。
当cachebuffer从fifobuffer中读取数据时,参见图7所示,包括以下步骤:
S31、判断现有数据控制状态是开始状态、sleep状态、还是stop状态,若是开始状态,则执行步骤S32,若是sleep状态,则执行步骤S41,若是stop状态,则执行步骤S42;
S32、计算cachebuffer剩余空间g;
S33、如果cachebuffer剩余空间g大小为0,则返回步骤S32;否则继续步骤S34;
S34、查看当前fifobuffer中数据大小k;
S35、如果cachebuffer剩余空间g小于fifobuffer数据大小h,继续步骤S36;否则继续步骤S37;
S36、在fifobuffer里面取cachebuffer剩余空间大小h的数据,放到cachebuffer里面;
S37、在fifobuffer里面取现有所有的fifobuffer数据,放在cachebuffer里面;
S38、修改cachebuffer的写入指针producer;
S39、从cachebuffer中取出数据注入解码器中;
S40、修改cachebuffer的读出指针comsumer;
S41、延时一定时间后,返回步骤S31;
S42、停止解码器注入任务。
更进一步的,步骤S39包括以下子步骤:
S39a、查看解码器缓冲区可用空间大小i;
S39b、如果解码器缓冲区可用空间为0,则继续步骤S41,否则,继续步骤S39c;
S39c、计算可以注入解码器的数据大小:如果cachebuffer中数据量h大于解码器缓冲区可用空间大小i,继续步骤S39d;否则,继续步骤S39e;
S39d、从cachebuffer取解码器缓冲可用空间大小i的数据,继续步骤S39f;
S39e、从cachebuffer取出所有的数据;
S39f、将取出的数据注入解码器中。
本发明的注入解码器数据的管理方法,通过在内存中划分出一块缓冲区,将注入解码器的数据首先注入进缓冲区,进行管理,数据经过先进先出缓冲区后,再注入解码器,有效防止了数据丢失,在任何阶段注入数据之前,均比较所注入数据与被注入缓冲区剩余空间的大小,以决定所实际注入数据的大小,同样有效防止了数据丢失,进而防止了音视频的播放不连续现象,播放效果好。
当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的普通技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。
Claims (7)
1.一种注入解码器数据的管理方法,其特征在于,包括以下步骤:
在内存中划分一块先进先出缓冲区fifobuffer,待解码的数据首先写入fifobuffer;
待解码的数据从fifobuffer取出时,包括以下步骤:
(21)、接收到取出数据量为c的命令;
(22)、比较fifobuffer中数据量d与c的大小关系,确定读取数据量为e的数据,其中e为d和c中的较小者;
(23)、修改读出指针out;
在高速缓冲寄存器cache中划分一块缓冲区cachebuffer,用于从fifobuffer中读取数据,以及将数据写入至解码器缓冲区, cachebuffer从fifobuffer中读取数据时,包括以下步骤:
(31)、判断现有数据控制状态是开始状态、sleep状态、还是stop状态,若是开始状态,则执行步骤(32),若是sleep状态,则执行步骤(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)、停止解码器注入任务。
2.根据权利要求1所述的注入解码器数据的管理方法,其特征在于,所述的先进先出缓冲区fifobuffer为循环先进先出缓冲区。
3.根据权利要求2所述的注入解码器数据的管理方法,其特征在于,待解码的数据写入fifobuffer时,包括以下步骤:
(11)、初始化fifobuffer,写入指针in和读出指针out归零,其中,所述fifobuffer的大小为n;
(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.根据权利要求1所述的注入解码器数据的管理方法,其特征在于,步骤(22)与步骤(23)之间还包括以下步骤:
(22a)、计算读出指针out到n-1之间数据的大小f,若e小于或等于f,则从out指针开始读取e大小的数据,否则,从out指针开始读取到fifobuffer的末尾,再从0读取e-f大小的数据。
6.根据权利要求5所述的注入解码器数据的管理方法,其特征在于,步骤(23)之后还包括:
(24)、修正读出指针out,使其在0~(n-1)的范围内。
7.根据权利要求1所述的注入解码器数据的管理方法,其特征在于,步骤(39)包括以下子步骤:
(39a)、查看解码器缓冲区可用空间大小;
(39b)、如果解码器缓冲区可用空间为0,则继续步骤(41),否则,继续步骤(39c);
(39c)、计算可以注入解码器的数据大小:如果cachebuffer中数据量大于解码器缓冲区可用空间大小,继续步骤(39d);否则,继续步骤(39e);
(39d)、从cachebuffer取解码器缓冲可用空间大小的数据,继续步骤(39f);
(39e)、从cachebuffer取出所有的数据;
(39f)、将取出的数据注入解码器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110446657.7A CN102495810B (zh) | 2011-12-28 | 2011-12-28 | 一种注入解码器数据的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110446657.7A CN102495810B (zh) | 2011-12-28 | 2011-12-28 | 一种注入解码器数据的管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102495810A CN102495810A (zh) | 2012-06-13 |
CN102495810B true CN102495810B (zh) | 2014-12-17 |
Family
ID=46187635
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110446657.7A Active CN102495810B (zh) | 2011-12-28 | 2011-12-28 | 一种注入解码器数据的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102495810B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461933B (zh) * | 2014-11-07 | 2017-10-03 | 珠海全志科技股份有限公司 | 内存管理方法及其装置 |
CN111541925B (zh) * | 2020-04-30 | 2021-09-14 | 青岛海信宽带多媒体技术有限公司 | 一种显示设备及其显示方法 |
CN111736796A (zh) * | 2020-05-15 | 2020-10-02 | 深圳市战音科技有限公司 | 实时流数据处理方法、装置、设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0720386A2 (en) * | 1994-12-29 | 1996-07-03 | AT&T Corp. | Temporally-pipelined predictive encoder/decoder circuit and method |
JPH1074140A (ja) * | 1996-03-28 | 1998-03-17 | Sanyo Electric Co Ltd | データ転送方法、復号装置、データ転送装置及びデータ処理装置 |
CN101170705A (zh) * | 2006-10-26 | 2008-04-30 | 三洋电机株式会社 | 声音数据处理装置 |
CN102063906A (zh) * | 2010-09-19 | 2011-05-18 | 北京航空航天大学 | 一种aac音频实时解码容错控制方法 |
CN102147786A (zh) * | 2010-12-29 | 2011-08-10 | 中国航空工业集团公司第六三一研究所 | 一种双端口虚拟fifo数据交换的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0641254B2 (ja) * | 1987-09-14 | 1994-06-01 | スタンレー電気株式会社 | ストップランプ |
-
2011
- 2011-12-28 CN CN201110446657.7A patent/CN102495810B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0720386A2 (en) * | 1994-12-29 | 1996-07-03 | AT&T Corp. | Temporally-pipelined predictive encoder/decoder circuit and method |
JPH1074140A (ja) * | 1996-03-28 | 1998-03-17 | Sanyo Electric Co Ltd | データ転送方法、復号装置、データ転送装置及びデータ処理装置 |
CN101170705A (zh) * | 2006-10-26 | 2008-04-30 | 三洋电机株式会社 | 声音数据处理装置 |
CN102063906A (zh) * | 2010-09-19 | 2011-05-18 | 北京航空航天大学 | 一种aac音频实时解码容错控制方法 |
CN102147786A (zh) * | 2010-12-29 | 2011-08-10 | 中国航空工业集团公司第六三一研究所 | 一种双端口虚拟fifo数据交换的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102495810A (zh) | 2012-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11706483B2 (en) | Video playing method and apparatus, and electronic device | |
CN102724585B (zh) | 一种用于终端设备网络视频播放预加载的方法及装置 | |
US20170150192A1 (en) | Insertion of recorded secondary digital video content during playback of primary digital video content | |
US8863182B1 (en) | In-stream video stitching | |
US9154834B2 (en) | Fast switching of synchronized media using time-stamp management | |
CN102495810B (zh) | 一种注入解码器数据的管理方法 | |
WO2012151756A1 (en) | Techniques for synchronization of audio and video | |
CN102984544A (zh) | 用于视频流拼接的方法及装置 | |
US8291122B2 (en) | Methods and systems for uninterrupted media change | |
US20120035913A1 (en) | Multi-language buffering during media playback | |
CN105025357A (zh) | 一种视频倒放的方法 | |
CN103747366A (zh) | 一种hls媒体文件播放进度的显示方法和播放器 | |
CN103391467A (zh) | 网络机顶盒音视频解码与播放同步实现方法 | |
CN102332284A (zh) | 适用于数字媒体播出的多媒体数据处理方法及其处理系统 | |
CN103078810A (zh) | 一种高效率富媒体展现系统和方法 | |
CN103152635B (zh) | 一种解决播放时间跳变的方法及客户端 | |
CN102098423B (zh) | 一种无缝文件采集方法及系统 | |
CN104731586A (zh) | 一种地铁列车lcd屏可编辑界面的设计方法 | |
US20140140676A1 (en) | Reverse video playback in a data processing device | |
US10685630B2 (en) | Just-in time system bandwidth changes | |
US11128914B2 (en) | Client side stitching of content into a multimedia stream | |
CN109819310B (zh) | 一种流媒体数据播放方法及装置 | |
CN111372117A (zh) | 一种视频播放方法、装置、电子设备及存储介质 | |
EP1161841A1 (en) | A bit stream buffering and demultiplexing apparatus for a dvd audio decoding system | |
JPH10191257A (ja) | ディジタル動画像復号化装置、及びディジタル動画像復号化方法 |
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 |