的圖像類型為P幀;
[0072]其中,第一丟幀閾值小于第二丟幀閾值,第二丟幀閾值小于第三丟幀閾值。
[0073]在本發(fā)明的另一個(gè)實(shí)施例中,在對(duì)圖像序列進(jìn)行解碼時(shí),對(duì)不屬于已確定圖像類型的圖像進(jìn)行解碼,包括:
[0074]當(dāng)確定的圖像類型為B幀時(shí),對(duì)圖像類型不屬于B幀的圖像進(jìn)行解碼;
[0075]當(dāng)確定的圖像類型為BREF幀時(shí),對(duì)圖像類型不屬于B幀及BREF幀的圖像進(jìn)行解碼;
[0076]當(dāng)確定的圖像類型為P幀時(shí),對(duì)圖像類型不屬于B幀、BREF幀及P幀的圖像進(jìn)行解碼。
[0077]在本發(fā)明的另一個(gè)實(shí)施例中,確定丟幀閾值對(duì)應(yīng)的圖像類型,包括:
[0078]根據(jù)丟幀閾值對(duì)應(yīng)的標(biāo)識(shí)位,確定丟幀閾值對(duì)應(yīng)的圖像類型,不同的標(biāo)識(shí)位對(duì)應(yīng)不同的圖像類型;
[0079]其中,第一丟幀閾值與第一標(biāo)識(shí)位對(duì)應(yīng),第一標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為B幀,第二丟幀閾值與第二標(biāo)識(shí)位對(duì)應(yīng),第二標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為BREF幀,第三丟幀閾值與第三標(biāo)識(shí)位對(duì)應(yīng),第三標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為P幀。
[0080]在本發(fā)明的另一個(gè)實(shí)施例中,對(duì)不屬于已確定圖像類型的圖像進(jìn)行解碼之后,還包括:
[0081]當(dāng)監(jiān)測到CPU的占用率小于預(yù)先設(shè)置的任一恢復(fù)閾值時(shí),確定恢復(fù)閾值對(duì)應(yīng)的圖像類型,不同的恢復(fù)閾值對(duì)應(yīng)不同的圖像類型;
[0082]在對(duì)圖像序列進(jìn)行解碼時(shí),對(duì)屬于已確定的圖像類型的圖像進(jìn)行解碼。
[0083]在本發(fā)明的另一個(gè)實(shí)施例中,當(dāng)監(jiān)測到CPU的占用率小于預(yù)先設(shè)置的任一恢復(fù)閾值時(shí),確定恢復(fù)閾值對(duì)應(yīng)的圖像類型,不同的恢復(fù)閾值對(duì)應(yīng)不同的圖像類型,包括:
[0084]當(dāng)監(jiān)測到CPU的占用率小于第一恢復(fù)閾值時(shí),確定第一恢復(fù)閾值對(duì)應(yīng)圖像類型為P幀;
[0085]當(dāng)監(jiān)測到CPU的占用率小于第二恢復(fù)閾值時(shí),確定第二恢復(fù)閾值對(duì)應(yīng)的圖像類型為BREF幀;
[0086]當(dāng)監(jiān)測到CPU的占用率小于第三恢復(fù)閾值時(shí),確定第三恢復(fù)閾值對(duì)應(yīng)的圖像類型為B幀;
[0087]其中,第一恢復(fù)閾值小于第一丟幀閾值且大于第二恢復(fù)閾值,第二恢復(fù)閾值大于第三恢復(fù)閾值。
[0088]在本發(fā)明的另一個(gè)實(shí)施例中,在對(duì)圖像序列進(jìn)行解碼時(shí),對(duì)屬于已確定的圖像類型的圖像進(jìn)行解碼,包括:
[0089]當(dāng)確定的圖像類型為P幀,對(duì)圖像類型屬于P幀的圖像進(jìn)行解碼;
[0090]當(dāng)確定的圖像類型為BREF幀,對(duì)圖像類型屬于P幀及BREF幀的圖像進(jìn)行解碼;
[0091]當(dāng)確定的圖像類型為B幀,對(duì)圖像類型屬于P幀、BREF幀及B幀的圖像進(jìn)行解碼。
[0092]在發(fā)明的另一個(gè)實(shí)施例中,確定恢復(fù)閾值對(duì)應(yīng)的圖像類型,包括:
[0093]根據(jù)恢復(fù)閾值對(duì)應(yīng)的標(biāo)識(shí)位,確定恢復(fù)閾值對(duì)應(yīng)的圖像類型,不同的標(biāo)識(shí)位對(duì)應(yīng)不同的圖像類型;
[0094]其中,第一恢復(fù)閾值與第三標(biāo)識(shí)位對(duì)應(yīng),第三標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為P幀,第二恢復(fù)閾值與第二標(biāo)識(shí)位對(duì)應(yīng),第二標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為BREF幀,第三恢復(fù)閾值與所述第一標(biāo)識(shí)位對(duì)應(yīng),所述第一標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為B幀。
[0095]上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本發(fā)明的可選實(shí)施例,在此不再
--贅述。
[0096]隨著圖像處理技術(shù)的發(fā)展,采用視頻編解碼系統(tǒng)解碼出的圖像為人們的交流提供了便捷?,F(xiàn)有的視頻解碼方法通過監(jiān)測CPU的占用率,當(dāng)監(jiān)測到CPU的占用率高于預(yù)設(shè)的丟幀閾值時(shí),將圖像類型為B幀的圖像丟棄,并將按剩余的圖像進(jìn)行解碼。然而,當(dāng)CPU的占用率很高時(shí),僅將圖像序列中圖像類型為B幀的圖像丟棄,可能依然無法將剩余的圖像全部解碼,導(dǎo)致解碼后的視頻畫質(zhì)較差。為了提升用戶的視覺體驗(yàn)效果,本發(fā)明實(shí)施例提供了一種視頻解碼方法,參見圖2,本發(fā)明實(shí)施例提供的方法流程包括:
[0097]201、終端預(yù)先設(shè)置多個(gè)丟幀閾值、恢復(fù)閾值及標(biāo)識(shí)位。
[0098]在本實(shí)施例中,終端可以為智能手機(jī)、PC、PDA (Personal Digital Assistant,掌上電腦)等,且該終端安裝有視頻播放應(yīng)用,基于安裝的視頻播放應(yīng)用,終端可將接收到的視頻數(shù)據(jù)解碼后播放。另外,為了滿足用戶的其他需求,終端中還安裝有閱讀應(yīng)用、購物應(yīng)用、旅游應(yīng)用、導(dǎo)航應(yīng)用、支付應(yīng)用等多個(gè)應(yīng)用。
[0099]通常,在進(jìn)行視頻編碼時(shí),非關(guān)鍵幀以關(guān)鍵幀或其他非關(guān)鍵幀為參考進(jìn)行編碼,例如,P幀參考前面的I幀或P幀進(jìn)行編碼,B參考前面的P幀圖像進(jìn)行編碼;在進(jìn)行視頻解碼時(shí),非關(guān)鍵幀同樣會(huì)以編碼時(shí)參考的關(guān)鍵幀或其他非關(guān)鍵幀為參考進(jìn)行解碼。然而,當(dāng)終端運(yùn)行的應(yīng)用程序較多,CPU占用率較高時(shí),終端中沒有多余的處理資源去解碼被參考的關(guān)鍵幀,此時(shí)關(guān)鍵幀及以該關(guān)鍵幀為參考的參考幀均無法解碼,最終導(dǎo)致視頻無法流暢播放。為保證無論當(dāng)前CPU占用率為多大時(shí),視頻均可流暢播放,本實(shí)施例提供的方法在對(duì)視頻數(shù)據(jù)進(jìn)行解碼之前,還針對(duì)CPU的占用率預(yù)先設(shè)置多個(gè)丟幀閾值。
[0100]預(yù)先設(shè)置的多個(gè)丟幀閾值包括第一丟幀閾值、第二丟幀閾值、第三丟幀閾值等。其中,第一丟幀閾值可以用CPU_DR0P_THR0LD表示,該第二丟幀閾值可以用CPU_DR0P_THROLDI表示,該第三丟幀閾值可以用CPU_DR0P_THR0LD2表示。該第一丟幀閾值可以為40 %、45 %等,該第二丟幀閾值可以為50 %、60 %等,該第三丟幀閾值的值可以為70 %、80%等,本實(shí)施例不對(duì)第一丟幀閾值、第二丟幀閾值及第三丟幀閾值的取值作具體的限定,只要保證第一丟幀閾值小于第二丟幀閾值,第二丟幀閾值小于第三丟幀閾值即可。
[0101]為了提高播放的視頻質(zhì)量,本實(shí)施例還預(yù)先設(shè)置了多個(gè)恢復(fù)閾值,從而在CPU占用率較低時(shí),能夠根據(jù)預(yù)先設(shè)置的恢復(fù)閾值對(duì)部分類型的圖像重新進(jìn)行解碼。其中,恢復(fù)閾值包括第一恢復(fù)、第二恢復(fù)閾值、第三恢復(fù)閾值等。其中,第一恢復(fù)閾值可以用CPU_RE_THR0LD0表示、第二恢復(fù)閾值可以用CPU_RE_THR0LD1表示、第三恢復(fù)閾值可以用CPU_RE_THR0LD2表示。該該第一恢復(fù)閾值可以為20%、30%等,第二恢復(fù)閾值可以為10%、15%等,該第三恢復(fù)閾值的值可以為6%、8%等,本實(shí)施例不對(duì)第一恢復(fù)閾值、第二恢復(fù)閾值及第三恢復(fù)閾值的取值作具體的限定,只要保證第一恢復(fù)閾值大于第二恢復(fù)幀閾值,第二恢復(fù)閾值大于第三恢復(fù)閾值即可。
[0102]需要說明的是,本實(shí)施例所設(shè)置的丟幀恢復(fù)閾值目的,是為了在CPU占用率較小時(shí),終端可對(duì)當(dāng)前接收到的圖像序列中不屬于確定圖像類型的圖像進(jìn)行解碼的同時(shí),可對(duì)已確定的部分圖像類型重新開始進(jìn)行解碼,因而此時(shí)第一恢復(fù)閾值應(yīng)小于第一丟幀閾值。
[0103]另外,終端還設(shè)置了多個(gè)標(biāo)識(shí)位,分別為第一標(biāo)識(shí)位、第二標(biāo)識(shí)位、第三標(biāo)識(shí)位等。其中,第一標(biāo)識(shí)位可用MARKO表示、第二標(biāo)識(shí)位可用MARKl表示、第三標(biāo)識(shí)位可用MAKR2表示。在本實(shí)施例中,不同的標(biāo)識(shí)位對(duì)應(yīng)不同的圖像類型,具體地,第一標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為B幀,第二標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為BREF幀,第三標(biāo)識(shí)位對(duì)應(yīng)的圖像類型為P幀。在本實(shí)施例中,每個(gè)標(biāo)識(shí)位均具有丟幀狀態(tài)和解碼狀態(tài)兩種狀態(tài),可用O和I兩個(gè)寄存值表示,當(dāng)任一標(biāo)識(shí)位的寄存值為O時(shí),表示在解碼時(shí)將該標(biāo)識(shí)位對(duì)應(yīng)的圖像類型作丟幀處理;當(dāng)任一標(biāo)識(shí)位的寄存值為I時(shí),表示在解碼時(shí)將該標(biāo)識(shí)位對(duì)應(yīng)的圖像類型作解碼處理。
[0104]在本實(shí)施例中,不同的標(biāo)識(shí)位對(duì)應(yīng)不同的閾值。具體地,丟幀狀態(tài)的標(biāo)識(shí)位與丟幀閾值對(duì)應(yīng),例如,丟幀狀態(tài)的第一標(biāo)識(shí)位與第一丟幀閾值對(duì)應(yīng),丟幀狀態(tài)的第二標(biāo)識(shí)位與第二丟幀閾值對(duì)應(yīng),丟幀狀態(tài)的第三標(biāo)識(shí)位與第三丟幀閾值對(duì)應(yīng);解碼狀態(tài)的標(biāo)識(shí)位與恢復(fù)閾值對(duì)應(yīng),例如,解碼狀態(tài)的第一標(biāo)識(shí)位與第一恢復(fù)閾值對(duì)應(yīng),解碼狀態(tài)的第二標(biāo)識(shí)位與第二恢復(fù)閾值對(duì)應(yīng),解碼狀態(tài)的第三標(biāo)識(shí)位與第三恢復(fù)閾值對(duì)應(yīng)。
[0105]202、終端實(shí)時(shí)監(jiān)測CPU的占用率。
[0106]終端實(shí)時(shí)監(jiān)測CPU占用率的方式,包括但不限于如下兩種:
[0107]第一種方式:預(yù)先安裝一個(gè)管理應(yīng)用,借助該管理應(yīng)用,終端對(duì)其運(yùn)行狀況進(jìn)行監(jiān)測,其中,終端的運(yùn)行狀況包括CPU的占用率、CPU的溫度等等。
[0108]第二種方式:通過鉤子hook函數(shù)等實(shí)時(shí)監(jiān)測終端的CPU占用率。
[0109]203、當(dāng)監(jiān)測到CPU的占用率達(dá)到預(yù)先設(shè)置的任一丟幀閾值時(shí),終端確定丟幀閾值對(duì)應(yīng)的圖像類型,不同丟幀閾值對(duì)應(yīng)于不同的圖像類型。
[0110]在本實(shí)施例中,不同的丟幀閾值對(duì)應(yīng)不同的標(biāo)識(shí)位,且不同的標(biāo)識(shí)位對(duì)應(yīng)不同的圖像類型,針對(duì)不同的丟幀閾值,終端在確定丟幀閾值對(duì)應(yīng)的圖像類型時(shí),包括但不限于如下幾種方式。
[0111]在本發(fā)明的一個(gè)實(shí)施例中,由于第一丟幀閾值與第一標(biāo)識(shí)位對(duì)應(yīng),第一標(biāo)識(shí)位對(duì)應(yīng)圖像類型為B幀的圖像,因此,當(dāng)監(jiān)測到CPU的占用率達(dá)到第一丟幀閾值時(shí),終端可確定第一丟幀閾值對(duì)應(yīng)的圖像類型為B幀。之后,終端還通過將第一標(biāo)識(shí)位的寄存值設(shè)置為1,使得第一標(biāo)識(shí)位處于丟幀狀態(tài)。
[0112]在本發(fā)明的另一個(gè)實(shí)施例中,由于第二丟幀閾值與第二標(biāo)識(shí)位對(duì)應(yīng),第二標(biāo)識(shí)位對(duì)應(yīng)圖像類型為BREF幀的圖像,因此,當(dāng)監(jiān)測到CPU的占用率達(dá)到第二丟幀閾值時(shí),終端可確定第二丟幀閾值對(duì)應(yīng)的圖像類型為BREF幀。之后,終端通過將第二標(biāo)識(shí)位的寄存值設(shè)置為I,使得第二標(biāo)識(shí)位處于丟幀狀態(tài)。
[0113]在本發(fā)明的另一個(gè)實(shí)施例中,由于第三丟幀閾值與第三標(biāo)識(shí)位對(duì)應(yīng),第三標(biāo)識(shí)位對(duì)應(yīng)圖像類型為P幀的圖像,因此,當(dāng)監(jiān)測到CPU的占用率達(dá)到第三丟幀閾值時(shí),終端可確定第三丟幀閾值對(duì)應(yīng)的圖像類型為P幀。之后,終端通過將第三標(biāo)識(shí)位的寄存值設(shè)置為1,使得第三標(biāo)識(shí)位處于丟幀狀態(tài)。
[0114]204、在對(duì)圖像序列進(jìn)行解碼時(shí),終端對(duì)不屬于已確定圖像類型的圖像進(jìn)行解碼。
[0115]基于所確定的圖像類型,終端在對(duì)圖像序列進(jìn)行解碼時(shí),包括但不限于如下幾種情況。
[0116]第一種情況:確定的圖像類型為B幀。
[0117]當(dāng)確定的圖像類型為B幀時(shí),CPU的占用率大于第一丟幀閾值,此時(shí)第一標(biāo)識(shí)位處于丟幀狀態(tài),終端在對(duì)圖像序列進(jìn)行解碼時(shí),可根據(jù)第一標(biāo)識(shí)位的狀態(tài),對(duì)圖像類型屬于B幀的圖像進(jìn)行丟棄,同時(shí)對(duì)圖像類型不屬于B幀的圖像進(jìn)行解碼。
[0118]第二種情況:確定的圖像類型為BREF幀。
[0119]當(dāng)確定的圖像類型為BREF幀時(shí),CPU的占用率大于第二丟幀閾值,此時(shí)第一標(biāo)識(shí)位和第二標(biāo)識(shí)位處于丟幀狀態(tài),終端在對(duì)圖像序列進(jìn)行解碼時(shí),可根據(jù)第一標(biāo)識(shí)位和第二標(biāo)識(shí)位的狀態(tài),對(duì)圖像類型屬于B幀和BREF幀的圖像進(jìn)行丟棄,同時(shí)對(duì)圖像類型不屬于B幀和BREF幀的圖像進(jìn)行解碼。
[0120]第三種情況:確定的圖像類型為P幀。
[0121]當(dāng)確定的圖像類型為P幀時(shí),CPU的占用率大于第三丟幀閾值,此時(shí)第一標(biāo)識(shí)位、第二標(biāo)識(shí)位及第三標(biāo)識(shí)位處于丟幀狀態(tài),終端在對(duì)圖像序列進(jìn)行解碼時(shí),可根據(jù)第一標(biāo)識(shí)位、第二標(biāo)識(shí)位及第三標(biāo)識(shí)位的狀態(tài),對(duì)圖像類型屬于B幀、BREF幀及P幀的圖像進(jìn)行丟棄,同時(shí)對(duì)圖像類型不屬于B幀、BREF幀及P幀的圖像進(jìn)行解碼。
[0122]205、當(dāng)監(jiān)測到CPU的占用率小于預(yù)先設(shè)置的任一恢復(fù)閾值時(shí),終端確定恢復(fù)閾值對(duì)應(yīng)的圖像類型,不同的恢復(fù)閾值對(duì)應(yīng)不同的圖像類型。
[0123]在終端監(jiān)測CPU占用率的過程中,如果用戶關(guān)閉了一部分應(yīng)用,將這部分應(yīng)用所占用的CPU被釋放,終端監(jiān)測到終端中有充足的處理資源,可對(duì)部分已確定不解碼的圖像重新進(jìn)行解碼,此時(shí)終端可根據(jù)預(yù)先設(shè)置的恢復(fù)閾值對(duì)部分確定不解碼的圖像進(jìn)行恢復(fù)。
[0124]具體地,終端CPU的占用率與恢復(fù)閾值,確定需要恢復(fù)的圖像類型時(shí),包括但不限于如下幾種情況。
[0125]在本發(fā)明的一個(gè)實(shí)施例中,由于第一恢復(fù)閾值與第三