本發(fā)明涉及信息技術(shù)領(lǐng)域,具體而言,本發(fā)明涉及一種調(diào)整多媒體解碼信息緩沖區(qū)的方法和一種調(diào)整多媒體解碼信息緩沖區(qū)的裝置。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,多媒體技術(shù)也得到越來(lái)越多人的關(guān)注,由于多媒體技術(shù)是通過(guò)終端對(duì)音頻和視頻的信號(hào)進(jìn)行采集、編碼、解碼和輸出,從而向用戶播放音頻和視頻的技術(shù);故將多媒體技術(shù)應(yīng)用到了可視電話、多媒體監(jiān)控、視頻會(huì)議、多媒體教學(xué)等領(lǐng)域,為人們的生活帶來(lái)了許多便利。
通常對(duì)于具有播放多媒體信息功能的嵌入式設(shè)備而言,多媒體信息的解碼過(guò)程是需要解碼設(shè)備預(yù)先對(duì)多媒體信息進(jìn)行解碼,并將解碼后的多媒體信息存儲(chǔ)到預(yù)置的輸出緩存區(qū)域,再通過(guò)該嵌入式設(shè)備將解碼后的多媒體信息進(jìn)行播放,來(lái)完成多媒體信息的傳輸,如,傳輸音頻和視頻。在多媒體信息進(jìn)行傳輸時(shí),如果多媒體信息解碼后的數(shù)據(jù)較大,例如,分辨率為1280×720的解碼視頻數(shù)據(jù),則需要較大容量的輸出緩沖區(qū)域來(lái)存儲(chǔ)解碼后的數(shù)據(jù),如果多媒體信息解碼后的數(shù)據(jù)較小,例如,分辨率為640×480的解碼視頻數(shù)據(jù),則需要較小容量的輸出緩沖區(qū)域來(lái)存儲(chǔ)解碼后的數(shù)據(jù)。但是在現(xiàn)有技術(shù)中,用于存儲(chǔ)多媒體信息解碼后數(shù)據(jù)的緩沖區(qū)域已經(jīng)預(yù)置完成,并且為了保證嵌入式設(shè)備能夠流暢播放各種大小的多媒體信息,以避免播放多媒體信息時(shí)發(fā)生卡頓、甚至是錯(cuò)誤的情況發(fā)生,一般會(huì)將緩沖區(qū)域預(yù)置到很大容量,這樣雖然可以盡可能地避免播放多媒體信息時(shí)錯(cuò)誤的發(fā)生,但是當(dāng)多媒體信息解碼后的數(shù)據(jù)很小時(shí),就會(huì)無(wú)謂占用大量的系統(tǒng)內(nèi)存空間,影響了嵌入式設(shè)備的系統(tǒng)運(yùn)行性能。
技術(shù)實(shí)現(xiàn)要素:
為克服上述技術(shù)問(wèn)題或者至少部分地解決上述技術(shù)問(wèn)題,特提出以下技術(shù)方案:
本發(fā)明的一個(gè)實(shí)施例提出了一種調(diào)整多媒體解碼信息緩沖區(qū)的方法,包括:
當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù);
當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配的緩沖區(qū);
將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中。
優(yōu)選地,多媒體信息解碼的步驟之前,還包括:
基于緩沖區(qū)分配參數(shù),初始化分配緩沖區(qū)的初始容量;
其中,基于多媒體參數(shù),判斷是否需要重新分配緩沖區(qū)的步驟,包括:
基于多媒體參數(shù)與初始化分配緩沖區(qū)的初始容量的比較結(jié)果,判斷是否需要重新分配緩沖區(qū)。
優(yōu)選地,當(dāng)比較結(jié)果滿足以下任一項(xiàng)時(shí),判斷需要重新分配緩沖區(qū):
比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)小于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果;或
比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)大于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果,且兩者的差值大于第一閾值。
其中,多媒體參數(shù)包括多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值、預(yù)置相關(guān)參數(shù)。
優(yōu)選地,當(dāng)基于多媒體參數(shù)確定重新分配的緩沖區(qū)的步驟,包括:
基于多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值和預(yù)置相關(guān)參數(shù),確定重新分配緩沖區(qū)的個(gè)數(shù);
基于重新分配緩沖區(qū)的個(gè)數(shù),通知并調(diào)用開(kāi)放多媒體加速層openmax的釋放內(nèi)存函數(shù),釋放初始化分配的緩沖區(qū),并調(diào)用開(kāi)放多媒體加速層openmax的分配內(nèi)存函數(shù),重新分配緩沖區(qū)。
優(yōu)選地,該方法還包括:
基于重新分配緩沖區(qū)的數(shù)量,更新緩沖區(qū)分配參數(shù)。
本發(fā)明的另一個(gè)實(shí)施例提出了一種調(diào)整多媒體解碼信息緩沖區(qū)的裝置,包括:
監(jiān)測(cè)模塊,用于當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù);
分配模塊,用于當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配的緩沖區(qū);
緩存模塊,用于將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中。
優(yōu)選地,該裝置還包括:初始化模塊,用于基于緩沖區(qū)分配參數(shù),初始化分配緩沖區(qū)的初始容量;
其中,監(jiān)測(cè)模塊,用于基于多媒體參數(shù)與初始化分配緩沖區(qū)的初始容量的比較結(jié)果,判斷是否需要重新分配緩沖區(qū)。
優(yōu)選地,當(dāng)比較結(jié)果滿足以下任一項(xiàng)時(shí),判斷需要重新分配緩沖區(qū):
比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)小于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果;或
比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)大于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果,且兩者的差值大于第一閾值。
其中,多媒體參數(shù)包括多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值、預(yù)置相關(guān)參數(shù)。
優(yōu)選地,緩沖模塊包括:
確定單元,用于基于多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值和預(yù)置相關(guān)參數(shù),確定重新分配緩沖區(qū)的個(gè)數(shù);
重新分配單元,用于基于重新分配緩沖區(qū)的個(gè)數(shù),通知并調(diào)用開(kāi)放多媒體加速層openmax的釋放內(nèi)存函數(shù),釋放初始化分配的緩沖區(qū),并調(diào)用開(kāi)放多媒體加速層openmax的分配內(nèi)存函數(shù),重新分配緩沖區(qū)。
優(yōu)選地,該裝置還包括:更新模塊,用于基于重新分配緩沖區(qū)的數(shù)量,更新緩沖區(qū)分配參數(shù)。
本發(fā)明的技術(shù)方案中,當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù);當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配的緩沖區(qū);將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中;從而實(shí)現(xiàn)了基于待播放多媒體信息的多媒體參數(shù)對(duì)預(yù)置的緩沖區(qū)域進(jìn)行動(dòng)態(tài)調(diào)整的目的,在滿足順利播放待播放多媒體信息,避免出現(xiàn)播放待播放多媒體信息時(shí)發(fā)生卡頓或錯(cuò)誤的情況的同時(shí),還能減少對(duì)多余系統(tǒng)內(nèi)存的占用,從而避免影響播放設(shè)備的系統(tǒng)運(yùn)行性能和其他應(yīng)用的運(yùn)行,提高用戶的使用體驗(yàn)。
本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
附圖說(shuō)明
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:
圖1為本發(fā)明中的一個(gè)實(shí)施例的調(diào)整多媒體解碼信息緩沖區(qū)的方法的流程示意圖;
圖2為本發(fā)明中的一個(gè)優(yōu)選實(shí)施例的硬件廠商解碼庫(kù)與開(kāi)放多媒體加速層的交互信息示意圖;
圖3為本發(fā)明中的另一個(gè)實(shí)施例的調(diào)整多媒體解碼信息緩沖區(qū)的裝置的結(jié)構(gòu)框架示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類(lèi)似的標(biāo)號(hào)表示相同或類(lèi)似的元件或具有相同或類(lèi)似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個(gè)”、“所述”和“該”也可包括復(fù)數(shù)形式。應(yīng)該進(jìn)一步理解的是,本發(fā)明的說(shuō)明書(shū)中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個(gè)或多個(gè)其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應(yīng)該理解,當(dāng)我們稱元件被“連接”或“耦接”到另一元件時(shí),它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“耦接”可以包括無(wú)線連接或無(wú)線耦接。這里使用的措辭“和/或”包括一個(gè)或更多個(gè)相關(guān)聯(lián)的列出項(xiàng)的全部或任一單元和全部組合。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(yǔ)(包括技術(shù)術(shù)語(yǔ)和科學(xué)術(shù)語(yǔ)),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語(yǔ),應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會(huì)用理想化或過(guò)于正式的含義來(lái)解釋。
圖1為本發(fā)明一個(gè)實(shí)施例的調(diào)整多媒體解碼信息緩沖區(qū)的方法的流程示意圖。
需要說(shuō)明的是,本實(shí)施例的執(zhí)行主體是硬件廠商解碼庫(kù)。硬件廠商解碼庫(kù)是嵌入式設(shè)備核心芯片制造廠商提供的一套封裝的程序接口,可以完成多媒體信息的編解碼,如音頻和視頻等的編解碼、以及分配和釋放用于緩存多媒體信息的解碼數(shù)據(jù)的緩沖區(qū);同時(shí)硬件廠商解碼庫(kù)還可以與gst-omx模塊進(jìn)行通信。
步驟s101:當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù);步驟s102:當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配的緩沖區(qū);步驟s103:將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中。
本發(fā)明的技術(shù)方案中,當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù);當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配的緩沖區(qū);將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中;從而實(shí)現(xiàn)了基于待播放多媒體信息的多媒體參數(shù)對(duì)預(yù)置的緩沖區(qū)域進(jìn)行動(dòng)態(tài)調(diào)整的目的,在滿足順利播放待播放多媒體信息,避免出現(xiàn)播放待播放多媒體信息時(shí)發(fā)生卡頓或錯(cuò)誤的情況的同時(shí),還能減少對(duì)多余系統(tǒng)內(nèi)存的占用,從而避免影響播放設(shè)備的系統(tǒng)運(yùn)行性能和其他應(yīng)用的運(yùn)行,提高用戶的使用體驗(yàn)。
以下針對(duì)各個(gè)步驟的具體實(shí)現(xiàn)做進(jìn)一步的說(shuō)明:
步驟s101:當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù)。
其中,多媒體信息包括但不限于:視頻信息、音頻信息。
其中,多媒體參數(shù)包括多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值、預(yù)置相關(guān)參數(shù);預(yù)置相關(guān)參數(shù)包括避免輸出暫停緩沖區(qū)個(gè)數(shù)、重建幀個(gè)數(shù)、surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)。
具體地,多媒體信息解碼的步驟之前,還包括:基于緩沖區(qū)分配參數(shù),初始化分配緩沖區(qū)的初始容量。
其中,緩沖區(qū)分配參數(shù)為緩沖區(qū)分配個(gè)數(shù)。
具體地,基于多媒體參數(shù),判斷是否需要重新分配緩沖區(qū)的步驟,包括:基于多媒體參數(shù)與初始化分配緩沖區(qū)的初始容量的比較結(jié)果,判斷是否需要重新分配緩沖區(qū)。
其中,當(dāng)比較結(jié)果滿足以下任一項(xiàng)時(shí),判斷需要重新分配緩沖區(qū):比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)小于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果;或比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)大于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果,且兩者的差值大于第一閾值。第一閾值可設(shè)為1個(gè)或2個(gè)。
例如,硬件廠商解碼庫(kù)基于緩沖區(qū)分配個(gè)數(shù)“15”,初始化分配緩沖區(qū)的初始容量為15個(gè)緩沖區(qū)的緩存容量,且每個(gè)緩沖區(qū)都預(yù)置了容量,如4m;硬件廠商解碼庫(kù)對(duì)視頻信息進(jìn)行解碼;如圖2所示,當(dāng)硬件廠商解碼庫(kù)監(jiān)測(cè)到該視頻信息解碼完成時(shí),根據(jù)從該視頻信息的解碼數(shù)據(jù)中獲取或提取到的視頻信息的參考幀個(gè)數(shù)和視頻信息是否存在b幀的指示參數(shù)值,以及預(yù)置相關(guān)參數(shù),例如,基于視頻信息的參考幀個(gè)數(shù)“2”個(gè),視頻信息是否存在b幀的指示參數(shù)值“1”,和預(yù)置相關(guān)參數(shù)的數(shù)值“6”,并基于下式1)得出所需分配緩沖區(qū)的個(gè)數(shù),來(lái)緩存該視頻信息的解碼數(shù)據(jù):
式1)所需分配緩沖區(qū)的個(gè)數(shù)
=info->numrefframes+info->has_b_frames+1+1+4
其中,info->numrefframes為視頻信息的參考幀個(gè)數(shù),has_b_frames為視頻信息是否存在b幀的指示參數(shù),第一個(gè)“1”為避免輸出暫停緩沖區(qū)個(gè)數(shù),第二個(gè)“1”為重建幀個(gè)數(shù),“4”為surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)。
通過(guò)上述式1)計(jì)算可確定,需要分配9個(gè)緩沖區(qū)來(lái)緩存該視頻信息的解碼數(shù)據(jù);然后根據(jù)初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)15個(gè)與需要分配緩沖區(qū)的容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)9個(gè)相比較,得出比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)“15”大于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果,即上述式1)得出的計(jì)算結(jié)果“9”,且兩者的差值“6”大于第一閾值“1”或“2”。則需要重新分配緩沖區(qū),以緩存視頻信息的解碼數(shù)據(jù)。
需要說(shuō)明的是,當(dāng)該視頻信息存在b幀時(shí),則該視頻信息是否存在b幀的指示參數(shù)值為1;當(dāng)該視頻信息不存在b幀時(shí),則該視頻信息是否存在b幀的指示參數(shù)值為0。且避免輸出暫停緩沖區(qū)個(gè)數(shù)預(yù)置為1個(gè)、重建幀個(gè)數(shù)預(yù)置為1個(gè)、surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)預(yù)置為4個(gè)。
步驟s102:當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配的緩沖區(qū)。
具體地,當(dāng)基于多媒體參數(shù)確定重新分配緩沖區(qū)的步驟,包括:基于多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值和預(yù)置相關(guān)參數(shù),確定重新分配緩沖區(qū)的個(gè)數(shù);基于重新分配緩沖區(qū)的個(gè)數(shù),通知并調(diào)用開(kāi)放多媒體加速層openmax的釋放內(nèi)存函數(shù),釋放初始化分配的緩沖區(qū),并調(diào)用開(kāi)放多媒體加速層openmax的分配內(nèi)存函數(shù),重新分配緩沖區(qū)。
例如,如圖2所示,當(dāng)硬件廠商解碼庫(kù)判斷需要重新分配緩沖區(qū),則根據(jù)從該視頻信息的解碼數(shù)據(jù)中獲取或提取到的視頻信息的參考幀個(gè)數(shù)和視頻信息是否存在b幀的指示參數(shù)值,以及預(yù)置相關(guān)參數(shù),例如,基于視頻信息的參考幀個(gè)數(shù)“2”個(gè),視頻信息是否存在b幀的指示參數(shù)值“1”,和預(yù)置相關(guān)參數(shù)的數(shù)值“6”,并基于下式2)得出所需分配緩沖區(qū)的個(gè)數(shù),來(lái)緩存該視頻信息的解碼數(shù)據(jù):
式2)
重新分配緩沖區(qū)的個(gè)數(shù)=info->numrefframes+info->has_b_frames+1+1+4
其中,info->numrefframes為視頻信息的參考幀個(gè)數(shù),has_b_frames為視頻信息是否存在b幀的指示參數(shù),第一個(gè)“1”為避免輸出暫停緩沖區(qū)個(gè)數(shù),第二個(gè)“1”為重建幀個(gè)數(shù),“4”為surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)。
通過(guò)上述式2)計(jì)算可確定,重新分配9個(gè)緩沖區(qū)來(lái)緩存該視頻信息的解碼數(shù)據(jù);硬件廠商解碼庫(kù)基于重新分配緩沖區(qū)的個(gè)數(shù)“9”個(gè),向gstreamer中的插件gst-omx模塊發(fā)送通知信息,通知gst-omx模塊重新分配緩沖區(qū)且重新分配緩沖區(qū)的個(gè)數(shù)為9個(gè),gst-omx模塊在接收到硬件廠商解碼庫(kù)發(fā)送的通知信息后,對(duì)該通知信息進(jìn)行確認(rèn),并調(diào)用開(kāi)放多媒體加速層openmax的釋放內(nèi)存函數(shù)omx_freebuffer,釋放初始化分配的15個(gè)緩沖區(qū),再調(diào)用開(kāi)放多媒體加速層openmax的分配內(nèi)存函數(shù)omx_allocatebuffer重新分配9個(gè)緩沖區(qū)。
步驟s103:將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中。
具體地,當(dāng)gst-omx模塊重新分配緩沖區(qū)后,將多媒體信息的解碼數(shù)據(jù),如,視頻信息的解碼數(shù)據(jù),緩存至重新分配的緩沖區(qū)中。
具體地,該方法還包括:基于重新分配緩沖區(qū)的數(shù)量,更新緩沖區(qū)分配參數(shù)。
例如,如圖2所示,gst-omx模塊在完成將視頻信息的解碼數(shù)據(jù)緩存至重新分配的緩沖區(qū)中后,向硬件廠商解碼庫(kù)發(fā)送通知信息,通知硬件廠商解碼庫(kù)緩沖區(qū)分配個(gè)數(shù)已修改,并將緩沖區(qū)分配個(gè)數(shù)修改為9個(gè);硬件廠商解碼庫(kù)在接收到gst-omx模塊發(fā)來(lái)的該通知信息后,確認(rèn)緩沖區(qū)已經(jīng)重新分配,并更新緩沖區(qū)分配個(gè)數(shù)。
圖3為本發(fā)明中的另一個(gè)實(shí)施例的調(diào)整多媒體解碼信息緩沖區(qū)的裝置的結(jié)構(gòu)框架示意圖。
監(jiān)測(cè)模塊,當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù);分配模塊,當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配緩沖區(qū);緩存模塊,將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中。
以下針對(duì)各個(gè)模塊的具體實(shí)現(xiàn)做進(jìn)一步的說(shuō)明:
監(jiān)測(cè)模塊,當(dāng)監(jiān)測(cè)到多媒體信息解碼完成時(shí),基于根據(jù)解碼數(shù)據(jù)獲取到的多媒體參數(shù),判斷是否需要重新分配緩沖區(qū),以緩存解碼數(shù)據(jù)。
其中,多媒體信息包括但不限于:視頻信息、音頻信息。
其中,多媒體參數(shù)包括多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值、預(yù)置相關(guān)參數(shù);預(yù)置相關(guān)參數(shù)包括避免輸出暫停緩沖區(qū)個(gè)數(shù)、重建幀個(gè)數(shù)、surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)。
具體地,該裝置還包括:初始化模塊,基于緩沖區(qū)分配參數(shù),初始化分配緩沖區(qū)的初始容量。
其中,緩沖區(qū)分配參數(shù)為緩沖區(qū)分配個(gè)數(shù)。
具體地,監(jiān)測(cè)模塊,基于多媒體參數(shù)與初始化分配緩沖區(qū)的初始容量的比較結(jié)果,判斷是否需要重新分配緩沖區(qū)。
其中,當(dāng)比較結(jié)果滿足以下任一項(xiàng)時(shí),判斷需要重新分配緩沖區(qū):比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)小于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果;或比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)大于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果,且兩者的差值大于第一閾值。第一閾值可設(shè)為1個(gè)或2個(gè)。
例如,初始化模塊基于緩沖區(qū)分配個(gè)數(shù)“15”,初始化分配緩沖區(qū)的初始容量為15個(gè)緩沖區(qū)的緩存容量,且每個(gè)緩沖區(qū)都預(yù)置了容量,如4m;硬件廠商解碼庫(kù)對(duì)視頻信息進(jìn)行解碼;當(dāng)監(jiān)測(cè)模塊監(jiān)測(cè)到該視頻信息解碼完成時(shí),根據(jù)從該視頻信息的解碼數(shù)據(jù)中獲取或提取到的視頻信息的參考幀個(gè)數(shù)和視頻信息是否存在b幀的指示參數(shù)值,以及預(yù)置相關(guān)參數(shù),例如,基于視頻信息的參考幀個(gè)數(shù)“2”個(gè),視頻信息是否存在b幀的指示參數(shù)值“1”,和預(yù)置相關(guān)參數(shù)的數(shù)值“6”,并基于下式1)得出所需分配緩沖區(qū)的個(gè)數(shù),來(lái)緩存該視頻信息的解碼數(shù)據(jù):
式1)
所需分配緩沖區(qū)的個(gè)數(shù)=info->numrefframes+info->has_b_frames+1+1+4
其中,info->numrefframes為視頻信息的參考幀個(gè)數(shù),has_b_frames為視頻信息是否存在b幀的指示參數(shù),第一個(gè)“1”為避免輸出暫停緩沖區(qū)個(gè)數(shù),第二個(gè)“1”為重建幀個(gè)數(shù),“4”為surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)。
通過(guò)上述式1)計(jì)算可確定,需要分配9個(gè)緩沖區(qū)來(lái)緩存該視頻信息的解碼數(shù)據(jù);然后監(jiān)測(cè)模塊根據(jù)初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)15個(gè)與需要分配緩沖區(qū)的容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)9個(gè)相比較,得出比較結(jié)果為初始化分配的緩沖區(qū)的初始容量對(duì)應(yīng)的緩沖區(qū)個(gè)數(shù)“15”大于多媒體參數(shù)基于預(yù)定運(yùn)算方式通過(guò)計(jì)算得到的計(jì)算結(jié)果,即上述式1)得出的計(jì)算結(jié)果“9”,且兩者的差值“6”大于第一閾值“1”或“2”。則需要重新分配緩沖區(qū),以緩存視頻信息的解碼數(shù)據(jù)。
需要說(shuō)明的是,當(dāng)該視頻信息存在b幀時(shí),則該視頻信息是否存在b幀的指示參數(shù)值為1;當(dāng)該視頻信息不存在b幀時(shí),則該視頻信息是否存在b幀的指示參數(shù)值為0。且避免輸出暫停緩沖區(qū)個(gè)數(shù)預(yù)置為1個(gè)、重建幀個(gè)數(shù)預(yù)置為1個(gè)、surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)預(yù)置為4個(gè)。分配模塊,當(dāng)判斷需要重新分配緩沖區(qū),基于多媒體參數(shù)確定重新分配緩沖區(qū)。
具體地,緩沖模塊包括:確定單元,基于多媒體信息的參考幀個(gè)數(shù)、多媒體信息是否存在b幀的指示參數(shù)值和預(yù)置相關(guān)參數(shù),確定重新分配緩沖區(qū)的個(gè)數(shù);重新分配單元,基于重新分配緩沖區(qū)的個(gè)數(shù),通知并調(diào)用開(kāi)放多媒體加速層openmax的釋放內(nèi)存函數(shù),釋放初始化分配的緩沖區(qū),并調(diào)用開(kāi)放多媒體加速層openmax的分配內(nèi)存函數(shù),重新分配緩沖區(qū)。
例如,當(dāng)監(jiān)測(cè)模塊判斷需要重新分配緩沖區(qū),則確定單元根據(jù)從該視頻信息的解碼數(shù)據(jù)中獲取或提取到的視頻信息的參考幀個(gè)數(shù)和視頻信息是否存在b幀的指示參數(shù)值,以及預(yù)置相關(guān)參數(shù),例如,基于視頻信息的參考幀個(gè)數(shù)“2”個(gè),視頻信息是否存在b幀的指示參數(shù)值“1”,和預(yù)置相關(guān)參數(shù)的數(shù)值“6”,并基于下式2)得出所需分配緩沖區(qū)的個(gè)數(shù),來(lái)緩存該視頻信息的解碼數(shù)據(jù):
式2)
重新分配緩沖區(qū)的個(gè)數(shù)=info->numrefframes+info->has_b_frames+1+1+4
其中,info->numrefframes為視頻信息的參考幀個(gè)數(shù),has_b_frames為視頻信息是否存在b幀的指示參數(shù),第一個(gè)“1”為避免輸出暫停緩沖區(qū)個(gè)數(shù),第二個(gè)“1”為重建幀個(gè)數(shù),“4”為surfaceflinger組件的預(yù)留緩沖區(qū)個(gè)數(shù)。
通過(guò)上述式2)計(jì)算可確定,重新分配9個(gè)緩沖區(qū)來(lái)緩存該視頻信息的解碼數(shù)據(jù);重新分配單元基于重新分配緩沖區(qū)的個(gè)數(shù)“9”個(gè),向gstreamer中的插件gst-omx模塊發(fā)送通知信息,通知gst-omx模塊重新分配緩沖區(qū)且重新分配緩沖區(qū)的個(gè)數(shù)為9個(gè),gst-omx模塊在接收到重新分配單元發(fā)送的通知信息后,對(duì)該通知信息進(jìn)行確認(rèn),并調(diào)用開(kāi)放多媒體加速層openmax的釋放內(nèi)存函數(shù)omx_freebuffer,釋放初始化分配的15個(gè)緩沖區(qū),再調(diào)用開(kāi)放多媒體加速層openmax的分配內(nèi)存函數(shù)omx_allocatebuffer重新分配9個(gè)緩沖區(qū)。
緩存模塊,將解碼數(shù)據(jù)緩存到重新分配的緩沖區(qū)中。
具體地,當(dāng)gst-omx模塊重新分配緩沖區(qū)后,緩存模塊將多媒體信息的解碼數(shù)據(jù),如,視頻信息的解碼數(shù)據(jù),緩存至重新分配的緩沖區(qū)中。
具體地,該裝置還包括:更新模塊,基于重新分配緩沖區(qū)的數(shù)量,更新緩沖區(qū)分配參數(shù)。
例如,gst-omx模塊在完成將視頻信息的解碼數(shù)據(jù)緩存至重新分配的緩沖區(qū)中后,向硬件廠商解碼庫(kù)發(fā)送通知信息,通知硬件廠商解碼庫(kù)緩沖區(qū)分配個(gè)數(shù)已修改,并將緩沖區(qū)分配個(gè)數(shù)修改為9個(gè);硬件廠商解碼庫(kù)在接收到gst-omx模塊發(fā)來(lái)的該通知信息后,確認(rèn)緩沖區(qū)已經(jīng)重新分配,并通過(guò)更新模塊更新緩沖區(qū)分配個(gè)數(shù)。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明包括涉及用于執(zhí)行本申請(qǐng)中所述操作中的一項(xiàng)或多項(xiàng)的設(shè)備。這些設(shè)備可以為所需的目的而專門(mén)設(shè)計(jì)和制造,或者也可以包括通用計(jì)算機(jī)中的已知設(shè)備。這些設(shè)備具有存儲(chǔ)在其內(nèi)的計(jì)算機(jī)程序,這些計(jì)算機(jī)程序選擇性地激活或重構(gòu)。這樣的計(jì)算機(jī)程序可以被存儲(chǔ)在設(shè)備(例如,計(jì)算機(jī))可讀介質(zhì)中或者存儲(chǔ)在適于存儲(chǔ)電子指令并分別耦聯(lián)到總線的任何類(lèi)型的介質(zhì)中,所述計(jì)算機(jī)可讀介質(zhì)包括但不限于任何類(lèi)型的盤(pán)(包括軟盤(pán)、硬盤(pán)、光盤(pán)、cd-rom、和磁光盤(pán))、rom(read-onlymemory,只讀存儲(chǔ)器)、ram(randomaccessmemory,隨即存儲(chǔ)器)、eprom(erasableprogrammableread-onlymemory,可擦寫(xiě)可編程只讀存儲(chǔ)器)、eeprom(electricallyerasableprogrammableread-onlymemory,電可擦可編程只讀存儲(chǔ)器)、閃存、磁性卡片或光線卡片。也就是,可讀介質(zhì)包括由設(shè)備(例如,計(jì)算機(jī))以能夠讀的形式存儲(chǔ)或傳輸信息的任何介質(zhì)。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以用計(jì)算機(jī)程序指令來(lái)實(shí)現(xiàn)這些結(jié)構(gòu)圖和/或框圖和/或流圖中的每個(gè)框以及這些結(jié)構(gòu)圖和/或框圖和/或流圖中的框的組合。本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以將這些計(jì)算機(jī)程序指令提供給通用計(jì)算機(jī)、專業(yè)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理方法的處理器來(lái)實(shí)現(xiàn),從而通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理方法的處理器來(lái)執(zhí)行本發(fā)明公開(kāi)的結(jié)構(gòu)圖和/或框圖和/或流圖的框或多個(gè)框中指定的方案。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明中已經(jīng)討論過(guò)的各種操作、方法、流程中的步驟、措施、方案可以被交替、更改、組合或刪除。進(jìn)一步地,具有本發(fā)明中已經(jīng)討論過(guò)的各種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。進(jìn)一步地,現(xiàn)有技術(shù)中的具有與本發(fā)明中公開(kāi)的各種操作、方法、流程中的步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。
以上所述僅是本發(fā)明的部分實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。