專利名稱:一種視頻解碼方法、裝置及視音頻播放系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及音視頻編解碼領(lǐng)域,尤其涉及一種視頻解碼方法、裝置及視音頻播放 系統(tǒng)。
背景技術(shù):
從 ITU-T (ITU-T for ITU Telecommunication Standardization Sector,國際 電信聯(lián)盟遠(yuǎn)程通信標(biāo)準(zhǔn)化組)發(fā)布H261視頻編碼標(biāo)準(zhǔn)以來,任何兼容H261/263/264, MPEG-1/2/4 和 JPEG (Joint Photographic Experts Group,聯(lián)合圖象專家組規(guī)范)的視頻 CODEC (coder-decoder,編譯碼器)都必須實現(xiàn)如下關(guān)于功能運動估計、運動補償、系數(shù)變 換、量化和熵編碼,這些視頻標(biāo)準(zhǔn)都于基于同一個視頻CODEC抽象模型DPCM/DCT(差值編 碼/離散余弦變換)混合CODEC模型。如圖1所示是現(xiàn)有技術(shù)視音頻播放系統(tǒng)基本結(jié)構(gòu)圖,所述視音頻播放系統(tǒng)包括 播放控制模塊101、輸入接口 102、音頻解碼模塊103、視頻解碼模塊104、回顯接口 105、第一 緩沖區(qū)106、第二緩沖區(qū)107。所述輸入接口 102、音頻解碼模塊103、視頻解碼模塊104、回 顯接口 105分別于播放控制模塊101相連接,所述第一緩沖區(qū)106與所述輸入接口 102連 接,所述第二緩沖區(qū)107分別與所述視頻解碼模塊104、回顯接口 107和所述音頻解碼模塊 103連接,所述視頻解碼模塊104還與回顯接口 105連接。其中,現(xiàn)有技術(shù)中,也有不設(shè)第二 緩沖區(qū)的視音頻播放系統(tǒng),回顯接口直接根據(jù)音頻解碼器和視頻解碼器傳輸?shù)慕獯a后的數(shù) 據(jù)地址,進行音視頻的效果的呈現(xiàn)。如圖2所述是圖1中視音頻播放系統(tǒng)中的視頻解碼模塊結(jié)構(gòu)圖,所述視頻解碼模 塊包括熵解碼模塊1041,用于對輸入的編碼流進行熵解碼,提取出各宏塊的變換系數(shù)、運 動矢量和圖信息;運行層解碼和重排序模塊1042,用于對運行層解碼和重排序,得到量化和變換后 的子宏塊;反量化模塊1043,用于對所述子宏塊進行反量化;反離散余弦變換模塊1044,用于對所述反量化后的子宏塊進行反離散余弦變換, 生成殘差;運動補償模塊1045,用于對運動矢量和參考幀圖像進行運動補償預(yù)測,生成預(yù)測 宏塊,其中參考幀為當(dāng)前幀的前一幀;宏塊重構(gòu)模塊1046,用于將所述預(yù)測宏塊加到殘差上生成重構(gòu)的宏塊,并用于當(dāng) 前幀圖像的全部宏塊重構(gòu)完畢后,直接生成當(dāng)前幀解碼圖像;檢測模塊1047,用于檢測當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,標(biāo)明當(dāng)前幀解碼圖 像生成完畢,可用于輸出或下一次解碼預(yù)測?,F(xiàn)有技術(shù)中,視頻解碼模塊每次解碼輸出一幀,解碼后的視頻幀raw數(shù)據(jù)(如YUV 圖像數(shù)據(jù))都是存放在視頻解碼模塊的幀輸出緩沖區(qū)(圖2中未示出),這是一個完全由視頻解碼模塊使用和管理的區(qū)域,它僅能存放當(dāng)前解碼輸出的一幀圖像raw數(shù)據(jù),當(dāng)視頻 解碼模塊開始新的一次解碼時,會先清空所述幀輸出緩沖區(qū)。也就是說,不論是視音頻播放 系統(tǒng)(如圖1所示)中的第二緩沖區(qū)107還是回顯接口 105,在一次訪問視頻解碼模塊104 和音頻解碼模塊105時,必須把所述幀輸出緩沖區(qū)中的數(shù)據(jù)全部拷貝到第二緩沖區(qū)107或 者是全部回顯完畢(針對回顯接口)。這個拷貝動作會導(dǎo)致所有播放數(shù)據(jù)都會被多復(fù)制一 次,極大的浪費了緊張的CPU資源;而沒有第二緩沖區(qū)107的視音播放系統(tǒng)在I幀解碼時, 如果CPU分配的計算資源不寬松,播放視頻時常常會出現(xiàn)全屏拉伸、畫面與聲音停頓、等待 等情況。
發(fā)明內(nèi)容
本發(fā)明實施例的目的在于提出一種視頻解碼裝置,旨在解決現(xiàn)有技術(shù)中播放視頻 時常常會出現(xiàn)全屏拉伸、畫面與聲音停頓、等待等問題。本發(fā)明的實施例是這樣實現(xiàn)的,一種視頻解碼裝置,包括熵解碼模塊,用于對輸入 的編碼流進行熵解碼,提取出各宏塊的變換系數(shù)、運動矢量和頭信息;運行層解碼和重排序 模塊,用于對運行層解碼和重排序,得到量化和變換后的子宏塊;反量化模塊,用于對所述 子宏塊進行反量化;反離散余弦變換模塊,用于對所述反量化后的子宏塊進行反離散余弦 變換,生成殘差;運動補償模塊,用于對運動矢量和參考幀圖像進行運動補償預(yù)測,生成預(yù) 測宏塊;宏塊重構(gòu)模塊,用于將所述預(yù)測宏塊加到所述殘差上生成重構(gòu)的宏塊,并用于當(dāng)前 幀圖像的全部宏塊重構(gòu)完畢后,直接生成當(dāng)前幀解碼圖像;檢測模塊,用于檢測當(dāng)前幀圖像 的全部宏塊重構(gòu)完畢后,標(biāo)明當(dāng)前幀解碼圖像生成完畢,可用于輸出或下一次解碼預(yù)測,其 中,所述裝置還包括第一調(diào)度模塊,用于實現(xiàn)熵解碼后,調(diào)度CPU進入睡眠狀態(tài);第二調(diào)度模塊,用于實現(xiàn)運動補償預(yù)測后,調(diào)度CPU進入睡眠狀態(tài)。本發(fā)明實施例的目的在于提出一種視頻解碼方法,所述方法包括以下步驟對輸入的編碼流進行熵解碼,提取出各宏塊的變換系數(shù)、運動矢量和頭信息;判斷當(dāng)前幀是I幀;調(diào)度CPU進入睡眠狀態(tài);對運行層解碼和重排序,從而獲取量化和變換后的子宏塊;對所述子宏塊進行反量化;對所述反量化后的子宏塊進行反離散余弦變換,生成殘差;對運動矢量和參考幀圖像進行運動補償預(yù)測,生成預(yù)測宏塊;判斷當(dāng)前幀是I幀;調(diào)度CPU進入睡眠狀態(tài);將所述預(yù)測宏塊加到所述殘差上生成重構(gòu)的宏塊,并用于當(dāng)前幀圖像的全部宏塊 重構(gòu)完畢后,直接生成當(dāng)前幀解碼圖像;判斷當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,生成當(dāng)前幀幀解碼圖像。本發(fā)明實施例的目的在于提出一種包括所述視頻解碼裝置的視音頻播放系統(tǒng),所 述系統(tǒng)包括播放控制模塊、輸入接口、音頻解碼模塊、視頻解碼裝置、回顯接口、第一緩沖 區(qū);所述輸入接口、音頻解碼模塊、視頻解碼裝置、回顯接口分別與播放控制模塊相連接,第一緩沖區(qū)與輸入接口相連接;播放控制模塊用于發(fā)出命令,選中要播放的文件或媒體數(shù)據(jù) 位置鏈接地址,通過操作系統(tǒng)文件輸入輸出接口將媒體數(shù)據(jù)讀入第一緩沖區(qū),其中,所述視頻解碼裝置還包括第三輸出隊列緩沖區(qū),所述視頻解碼裝置用于通過輸入 接口獲取第一緩沖區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行視頻解碼,存入第三輸出隊列 緩沖區(qū),并用于創(chuàng)建全局的互斥鎖來保證對所述第三輸出隊列緩沖區(qū)的輸出隊列的互斥訪 問,所述第三輸出隊列緩沖區(qū)用于存儲所述視頻解碼模塊所解碼后的數(shù)據(jù),并形成輸出隊 列以使所述回顯接口和所述視頻解碼裝置能異步地工作;所述音頻解碼模塊還包括第二輸出隊列緩沖區(qū),所述音頻解碼模塊用于通過輸入 接口獲取第一緩沖區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行音頻解碼,存入第二輸出隊列 緩沖區(qū),并用于創(chuàng) 建全局的互斥鎖來保證對所述第二輸出隊列緩沖區(qū)的輸出隊列的互斥訪 問,所述第二輸出隊列緩沖區(qū)用于存儲所述音頻解碼模塊所解碼后的數(shù)據(jù),并形成輸出隊 列以使所述回顯接口和所述音頻解碼模塊能異步地工作;回顯接口,用于按一定時序,根據(jù)所述第二輸出隊列緩沖區(qū)、第三輸出隊列緩沖區(qū) 中所存儲的視音頻解碼后的數(shù)據(jù)地址,進行視音頻的效果呈現(xiàn)。本發(fā)明實施例的目的在于提出一種包括所述視頻解碼裝置的視音頻播放系統(tǒng),所 述系統(tǒng)包括播放控制模塊、輸入接口、音頻解碼模塊、視頻解碼裝置、回顯接口、第一緩沖 區(qū);所述輸入接口、音頻解碼模塊、視頻解碼裝置、回顯接口分別與播放控制模塊相連接,第 一緩沖區(qū)與輸入接口相連接;播放控制模塊用于發(fā)出命令,選中要播放的文件或媒體數(shù)據(jù) 位置鏈接地址,通過操作系統(tǒng)文件輸入輸出接口將媒體數(shù)據(jù)讀入第一緩沖區(qū),其中,所述視音頻播放系統(tǒng)還包括第四緩沖區(qū),所述第四緩沖區(qū)與所述音頻解碼模塊和 所述回顯接口相連接,用于存儲所述音頻解碼模塊的幀輸出緩沖區(qū)輸出的解碼后的幀數(shù)據(jù) 并形成輸出隊列,并用于提供訪問地址給所述回顯接口訪問;所述視頻解碼裝置還包括第三輸出隊列緩沖區(qū),所述視頻解碼裝置用于通過輸 入接口獲取第一緩沖區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行視頻解碼,存入第三輸出隊 列緩沖區(qū),并用于創(chuàng)建全局的互斥鎖來保證對所述第三輸出隊列緩沖區(qū)的輸出隊列互斥訪 問,所述第三輸出隊列緩沖區(qū)用于存儲所述視頻解碼模塊所解碼后的數(shù)據(jù),并形成輸出隊 列以使所述回顯接口和所述視頻解碼裝置能異步地工作;所述音頻解碼模塊還與所述第四緩沖區(qū)相連接,用于通過所述輸入接口獲取第一 緩沖區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行音頻解碼,每次解碼輸出一幀,將解碼后的視 頻幀raw數(shù)據(jù)存放在所述音頻解碼模塊的幀輸出緩沖區(qū);回顯接口,用于按一定時序,根據(jù)第三輸出隊列緩沖區(qū)中所存儲的視頻解碼后的 數(shù)據(jù)地址和第四緩沖區(qū)存儲的音頻解碼后的數(shù)據(jù)地址進行視音頻的效果呈現(xiàn)。本發(fā)明實施例通過在視頻解碼模塊、音頻解碼模塊中設(shè)置輸出幀隊列緩沖區(qū),以 空間換取時間,使得回顯模塊和解碼模塊能異步地(準(zhǔn)并行)工作,具體說,如果幀隊列緩 沖中有視音頻幀數(shù)據(jù),回顯時不用等待解碼器輸出,而是直接根據(jù)播放速度從緩沖隊列取 數(shù)據(jù)回顯。由于視頻I幀的解碼會耖時較長(常常遠(yuǎn)大于40ms),為了保證此時回顯模塊不 會因分配不到CPU而停止,本發(fā)明在視頻解碼過程中的熵解碼和運動補償后通過調(diào)度CPU, 保證回顯模塊能及時調(diào)度到CPU,從而保證播放的流暢平滑。這樣,就能使得當(dāng)處理器能提 供的計算解碼資源相對勉強滿足(例如單項視頻解碼測試時平均36ms每幀)時,能消除視音頻播放不均衡或卡的現(xiàn)象,提供平滑、流暢的播放效果和更精準(zhǔn)的音視頻同步。
圖1是現(xiàn)有技術(shù)視音頻播放系統(tǒng)基本結(jié)構(gòu)圖;圖2是圖1中視音頻播放系統(tǒng)中的視頻解碼模塊結(jié)構(gòu)圖;圖3是本發(fā)明實施例視音頻播放系統(tǒng)結(jié)構(gòu)圖;圖4是圖3中視音頻播放系統(tǒng)中的視頻解碼模塊結(jié)構(gòu)圖;圖5是本發(fā)明實施例視頻解碼方法流程圖;圖6是本發(fā)明另一實施例視音頻播放系統(tǒng)結(jié)構(gòu)圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖和實施例,對 本發(fā)明進行進一步詳細(xì)說明,為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分。應(yīng)當(dāng)理 解,此處所描寫的具體實施例,僅僅用于解釋本發(fā)明,并不用以限制本發(fā)明。本發(fā)明實施例通過在視頻解碼模塊、音頻解碼模塊中設(shè)置輸出幀隊列緩沖區(qū),以 空間換取時間,使得回顯接口模塊和解碼模塊能異步地(準(zhǔn)并行)工作,具體說,如果幀隊 列緩沖中有視音頻幀數(shù)據(jù),回顯時不用等待解碼器輸出,而是直接根據(jù)播放速度從緩沖隊 列取數(shù)據(jù)回顯。由于視頻I幀的解碼會耖時較長(常常遠(yuǎn)大于40ms),為了保證此時回顯模 塊不會因分配不到CPU而停止,本發(fā)明在視頻解碼過程中的熵解碼和運動補償后通過調(diào)度 CPU,保證回顯模塊能及時調(diào)度到CPU,從而保證播放的流暢平滑。這樣,就能使得當(dāng)處理器 能提供的計算解碼資源相對勉強滿足(例如單項視頻解碼測試時平均36ms每幀)時,能消 除視音頻播放不均衡或卡的現(xiàn)象,提供平滑、流暢的播放效果和更精準(zhǔn)的音視頻同步。如圖3所示,為本發(fā)明實施例視音頻播放系統(tǒng)結(jié)構(gòu)圖。所述系統(tǒng)包括播放控制 模塊101、輸入接口 102、音頻解碼模塊103、視頻解碼模塊104、回顯接口 105、第一緩沖區(qū) 106,其中音頻解碼模塊103包括第二輸出隊列緩沖區(qū)1031、視頻解碼模塊104包括第三輸 出隊列緩沖區(qū)1048。所述輸入接口 102、音頻解碼模塊103、視頻解碼模塊104、回顯接口 105分別與播放控制模塊101相連接,第一緩沖區(qū)106與輸入接口 102相連接。播放控制模塊101,用于發(fā)出命令,選中要播放的文件或媒體數(shù)據(jù)位置鏈接地址, 通過操作系統(tǒng)文件輸入輸出接口(圖3中未示出),將媒體數(shù)據(jù)讀入第一緩沖區(qū)106 ;音頻解碼模塊103,用于通過輸入接口 102獲取第一緩沖區(qū)106中的要播放的文 件或媒體數(shù)據(jù),并進行音頻解碼,存入第二輸出隊列緩沖區(qū)1031,并用于創(chuàng)建全局的互斥鎖 來保證對所述第二輸出隊列緩沖區(qū)1031的輸出隊列互斥訪問,所述第二輸出隊列緩沖區(qū) 1031用于存儲所述音頻解碼模塊103所解碼后的數(shù)據(jù),并形成輸出隊列以使回顯接口 105 和音頻解碼模塊103能異步地(準(zhǔn)并行)工作(具體說,如果幀隊列緩沖中有視音頻幀數(shù) 據(jù),回顯時不用等待音頻解碼模塊103輸出,而是直接根據(jù)播放速度從輸出隊列取數(shù)據(jù)回 顯)O視頻解 碼模塊104,用于通過輸入接口 102獲取第一緩沖區(qū)106中的要播放的文件 或媒體數(shù)據(jù),并進行視頻解碼,存入第三輸出隊列緩沖區(qū)1048,并用于創(chuàng)建全局的互斥鎖來 保證對所述第三輸出隊列緩沖區(qū)1048的輸出隊列互斥訪問,所述第三緩沖區(qū)1048用于存儲所述視頻解碼模塊104所解碼后的數(shù)據(jù),并形成輸出隊列以使回顯接口 105和視頻解碼模塊1048能異步地(準(zhǔn)并行)工作(具體說,如果幀隊列緩沖中有視音頻幀數(shù)據(jù),回顯時 不用等待視頻解碼模塊104輸出,而是直接根據(jù)播放速度從輸出隊列取數(shù)據(jù)回顯)?;仫@接口 105,用于按一定時序,根據(jù)所述第二輸出隊列緩沖區(qū)1031和第三輸出 隊列緩沖區(qū)1048中所存儲的視音頻解碼后的數(shù)據(jù)地址,進行視音頻的效果呈現(xiàn)。其中所述回顯接口 105與音頻解碼模塊和視頻解碼模塊在不同的線程運行。如圖4所示為圖3中視音頻播放系統(tǒng)中的視頻解碼模塊結(jié)構(gòu)圖。所述視頻解碼模 塊包括熵解碼模塊1041,用于對輸入的編碼流進行熵解碼,提取出各宏塊的變換系數(shù)、運 動矢量和頭信息;第一調(diào)度模塊1049,用于實現(xiàn)熵解碼后,調(diào)度CPU進入睡眠狀態(tài)以保證回顯模塊 能及時調(diào)度到CPU,其中所述睡眠狀態(tài)的時間小于一個CPU時鐘Tick。;運行層解碼和重排序模塊1042,用于對運行層解碼和重排序,得到量化和變換后 的子宏塊;反量化模塊1043,用于對所述子宏塊進行反量化;反離散余弦變換模塊1044,用于對所述反量化后的子宏塊進行反離散余弦變換, 生成殘差;運動補償模塊1045,用于對運動矢量和參考幀圖像進行運動補償預(yù)測,生成預(yù)測 宏塊,其中,所述參考幀為當(dāng)前幀的前一幀;第二調(diào)度模塊1040,用于實現(xiàn)運動補償預(yù)測后實現(xiàn)調(diào)度CPU進入睡眠狀態(tài)以保證 回顯模塊能及時調(diào)度到CPU,其中所述睡眠狀態(tài)的時間小于一個CPU時鐘Tick ;宏塊重構(gòu)模塊1046,用于將所述預(yù)測宏塊加到所述殘差上生成重構(gòu)的宏塊,并用 于當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,直接生成當(dāng)前幀解碼圖像;檢測模塊1047,用于檢測當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,標(biāo)明當(dāng)前幀解碼圖 像生成完畢,可用于輸出或下一次解碼預(yù)測。本發(fā)明實施例通過在視頻解碼模塊、音頻解碼模塊中設(shè)置輸出幀隊列緩沖區(qū),以 空間換取時間,使得回顯接口模塊和解碼模塊能異步地(準(zhǔn)并行)工作,具體說,如果幀隊 列緩沖中有視音頻幀數(shù)據(jù),回顯時不用等待解碼器輸出,而是直接根據(jù)播放速度從緩沖隊 列取數(shù)據(jù)回顯。由于視頻I幀的解碼會耖時較長(常常遠(yuǎn)大于40ms),為了保證此時回顯模 塊不會因分配不到CPU而停止,本發(fā)明在視頻解碼過程中的熵解碼和運動補償后通過調(diào)度 CPU,保證回顯模塊能及時調(diào)度到CPU,從而保證播放的流暢平滑。這樣,就能使得當(dāng)處理器 能提供的計算解碼資源相對勉強滿足(例如單項視頻解碼測試時平均36ms每幀)時,能消 除視音頻播放不均衡或卡的現(xiàn)象,提供平滑、流暢的播放效果和更精準(zhǔn)的音視頻同步。如圖5所示為本發(fā)明實施例視頻解碼方法流程圖。所述方法包括以下步驟S501,對輸入的編碼流進行熵解碼,提取出各宏塊的變換系數(shù)、運動矢量和頭信 息;S513,判斷當(dāng)前幀是否為I幀,是則進入步驟S502,否則進入步驟S503 ;S502,調(diào)度CPU進入睡眠狀態(tài)(其中所述睡眠狀態(tài)的時間小于一個CPU時鐘 Tick);
S503,對運行層解碼和重排序,從而獲取量化和變換后的子宏塊;S504,對所述子宏塊進行反量化;
S505,對所述反量化后的子宏塊進行反離散余弦變換,生成殘差;S506,對運動矢量和參考幀圖像進行運動補償預(yù)測,生成預(yù)測宏塊,其中,所述參 考幀為當(dāng)前幀的前一幀;S514,判斷當(dāng)前幀是否為I幀,是則進入步驟S507,否則進入步驟S508 ;S507,調(diào)度CPU進睡眠狀態(tài)(其中所述睡眠狀態(tài)的時間小于一個CPU時鐘Tick);S508,將所述預(yù)測宏塊加到所述殘差上生成重構(gòu)的宏塊,并用于當(dāng)前幀圖像的全 部宏塊重構(gòu)完畢后,直接生成當(dāng)前幀幀解碼圖像;S509,判斷當(dāng)前幀圖像的全部宏塊是否重構(gòu)完畢后,是則進入步驟S510,否則返回 步驟S501 ;S510,生成當(dāng)前幀幀解碼圖像。由于視頻I幀的解碼會耖時較長(常常遠(yuǎn)大于40ms),為了保證此時回顯模塊不 會因分配不到CPU而停止,本發(fā)明實施例在視頻解碼過程中的熵解碼和運動補償后通過調(diào) 度CPU,保證回顯模塊能及時調(diào)度到CPU,從而保證播放的流暢平滑,這樣,就能使得當(dāng)處理 器能提供的計算解碼資源相對勉強滿足(例如單項視頻解碼測試時平均36ms每幀)時,能 消除視音頻播放不均衡或卡的現(xiàn)象,提供平滑、流暢的播放效果和更精準(zhǔn)的音視頻同步。圖6為本發(fā)明另一實施例視音頻播放系統(tǒng)結(jié)構(gòu)圖,其與圖3的區(qū)別在于,所述音頻 解碼模塊103并不包括輸出隊列緩沖區(qū),只是在視頻解碼模塊中設(shè)有第三輸出隊列緩沖區(qū) 1048,所示系統(tǒng)包括播放控制模塊101、輸入接口 102、音頻解碼模塊103、視頻解碼模塊104、回顯接口 105、第一緩沖區(qū)106,其中,視頻解碼模塊104包括第三輸出隊列緩沖區(qū)1048。所述輸入接 口 102、音頻解碼模塊103、視頻解碼模塊104、回顯接口 105分別與播放控制模塊101相連 接,第一緩沖區(qū)106與輸入接口 102相連接,所述視音頻播放系統(tǒng)還包括第四緩沖區(qū)108,所 述第四緩沖區(qū)108與所述音頻解碼模塊和所述回顯接口相連接。播放控制模塊101,用于發(fā)出命令,選中要播放的文件或媒體數(shù)據(jù)位置鏈接地址, 通過操作系統(tǒng)文件輸入輸出接口(圖6中未示出),將媒體數(shù)據(jù)讀入第一緩沖區(qū)106 ;音頻解碼模塊103,用于通過輸入接口 102獲取第一緩沖區(qū)106中的要播放的文件 或媒體數(shù)據(jù),并進行音頻解碼,每次解碼輸出一幀,將解碼后的視頻幀raw數(shù)據(jù)存放在音頻 解碼模塊103的幀輸出緩沖區(qū)(圖6中未示出);第四緩沖區(qū)108,用于存儲所述音頻解碼模塊103的幀輸出緩沖區(qū)輸出的解碼后 的幀數(shù)據(jù)并形成輸出隊列,并用于提供訪問地址給所述回顯接口 105訪問;視頻解碼模塊104,用于通過輸入接口 102獲取第一緩沖區(qū)106中的要播放的文件 或媒體數(shù)據(jù),并進行視頻解碼,存入第三輸出隊列緩沖區(qū)1048,并用于創(chuàng)建全局的互斥鎖來 保證對所述第三輸出隊列緩沖區(qū)1048的輸出隊列互斥訪問,所述第三隊列緩沖區(qū)1048用 于存儲所述視頻解碼模塊104解碼后的數(shù)據(jù),并形成輸出隊列以使回顯接口 105和視頻解 碼模塊104能異步地(準(zhǔn)并行)工作(具體說,如果幀隊列緩沖中有視音頻幀數(shù)據(jù),回顯時 不用等待音頻解碼模塊103輸出,而是直接根據(jù)播放速度從輸出隊列取數(shù)據(jù)回顯);回顯接口 105,用于按一定時序,根據(jù)第三輸出隊列緩沖區(qū)1048中所存儲的視頻解碼后的數(shù)據(jù)地址和第四緩沖區(qū)存儲的音頻解碼后的數(shù)據(jù)地址,進行視音頻的效果呈現(xiàn)。其中所述回顯接口 105與音頻解碼模塊和視頻解碼模塊在不同的線程運行。所述圖6中的視音頻播放系統(tǒng)中的解碼模塊的內(nèi)部結(jié)構(gòu)和工作原理如實施例一 中所述,在此不在贅述。本發(fā)明實施例通過在視頻解碼模塊、音頻解碼模塊中設(shè)置輸出幀隊列緩沖區(qū),以 空間換取時間,使得回顯接口模塊和解碼模塊能異步地(準(zhǔn)并行)工作,具體說,如果幀隊 列緩沖中有視音頻幀數(shù)據(jù),回顯時不用等待解碼器輸出,而是直接根據(jù)播放速度從緩沖隊 列取數(shù)據(jù)回顯。由于視頻I幀的解碼會耖時較長(常常遠(yuǎn)大于40ms),為了保證此時回顯模 塊不會因分配不到CPU而停止,本發(fā)明在視頻解碼過程中的熵解碼和運動補償后通過調(diào)度 CPU,保證回顯模塊能及時調(diào)度到CPU,從而保證播放的流暢平滑。這樣,就能使得當(dāng)處理器 能提供的計算解碼資源相對勉強滿足(例如單項視頻解碼測試時平均36ms每幀)時,能消 除視音頻播放不均衡或卡的現(xiàn)象,提供平滑、流暢的播放效果和更精準(zhǔn)的音視頻同步。
本領(lǐng)域的普通技術(shù)人員可以理解,實現(xiàn)上述實施例方法中的全部或部分步驟是可 以通過程序指令相關(guān)硬件來完成的,所述的程序可以存儲于一計算機可讀取存儲介質(zhì)中, 所述的存儲介質(zhì)可以為ROM、RAM、磁盤、光盤等。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
一種視頻解碼裝置,包括熵解碼模塊,用于對輸入的編碼流進行熵解碼,提取出各宏塊的變換系數(shù)、運動矢量和頭信息;運行層解碼和重排序模塊,用于對運行層解碼和重排序,得到量化和變換后的子宏塊;反量化模塊,用于對所述子宏塊進行反量化;反離散余弦變換模塊,用于對所述反量化后的子宏塊進行反離散余弦變換,生成殘差;運動補償模塊,用于對運動矢量和參考幀圖像進行運動補償預(yù)測,生成預(yù)測宏塊;宏塊重構(gòu)模塊,用于將所述預(yù)測宏塊加到所述殘差上生成重構(gòu)的宏塊,并用于當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,直接生成當(dāng)前幀解碼圖像;檢測模塊,用于檢測當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,標(biāo)明當(dāng)前幀解碼圖像生成完畢,可用于輸出或下一次解碼預(yù)測,其特征在于,所述裝置還包括第一調(diào)度模塊,用于實現(xiàn)熵解碼后,調(diào)度CPU進入睡眠狀態(tài);第二調(diào)度模塊,用于實現(xiàn)運動補償預(yù)測后,調(diào)度CPU進入睡眠狀態(tài)。
2.如權(quán)利要求1所述的視頻解碼裝置,其特征在于所述參考幀為所述當(dāng)前幀的前一幀。
3.如權(quán)利要求1所述的視頻解碼裝置,其特征在于所述睡眠狀態(tài)的時間小于一個CPU 時鐘Tick。
4.一種視頻解碼方法,其特征在于,所述方法包括以下步驟對輸入的編碼流進行熵解碼,提取出各宏塊的變換系數(shù)、運動矢量和頭信息; 判斷當(dāng)前幀是I幀; 調(diào)度CPU進入睡眠狀態(tài);對運行層解碼和重排序,從而獲取量化和變換后的子宏塊; 對所述子宏塊進行反量化;對所述反量化后的子宏塊進行反離散余弦變換,生成殘差; 對運動矢量和參考幀圖像進行運動補償預(yù)測,生成預(yù)測宏塊; 判斷當(dāng)前幀是I幀; 調(diào)度CPU進入睡眠狀態(tài);將所述預(yù)測宏塊加到所述殘差上生成重構(gòu)的宏塊,并用于當(dāng)前幀圖像的全部宏塊重構(gòu) 完畢后,直接生成當(dāng)前幀解碼圖像;判斷當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,生成當(dāng)前幀幀解碼圖像。
5.如權(quán)利要求4所述的視頻解碼方法,其特征在于,所述方法還包括第一次判斷當(dāng)前幀不是I幀時,進入步驟“對運行層解碼和重排序,從而獲取量化和變 換后的子宏塊”。
6.如權(quán)利要求4所述的視頻解碼方法,其特征在于,所述方法還包括第二次判斷當(dāng)前幀不是I幀時,進入步驟“將所述預(yù)測宏塊加到所述殘差上生成重構(gòu) 的宏塊,并用于當(dāng)前幀圖像的全部宏塊重構(gòu)完畢后,直接生成當(dāng)前幀解碼圖像”。
7.如權(quán)利要求4所述的視頻解碼方法,其特征在于所述參考幀為所述當(dāng)前幀的前一幀。
8.如權(quán)利要求4所述的視頻解碼裝置,其特征在于所述睡眠狀態(tài)的時間小于一個CPU 時鐘Tick。
9.一種包括如權(quán)利要求1所述視頻解碼裝置的視音頻播放系統(tǒng),所述系統(tǒng)包括播放控 制模塊、輸入接口、音頻解碼模塊、視頻解碼裝置、回顯接口、第一緩沖區(qū);所述輸入接口、音頻解碼模塊、視頻解碼裝置、回顯接口分別與播放控制模塊相連接,第一緩沖區(qū)與輸入接口 相連接;播放控制模塊用于發(fā)出命令,選中要播放的文件或媒體數(shù)據(jù)位置鏈接地址,通過操 作系統(tǒng)文件輸入輸出接口將媒體數(shù)據(jù)讀入第一緩沖區(qū),其特征在于所述視頻解碼裝置還包括第三輸出隊列緩沖區(qū),所述視頻解碼裝置用于通過輸入接口 獲取第一緩沖區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行視頻解碼,存入第三輸出隊列緩沖 區(qū),并用于創(chuàng)建全局的互斥鎖來保證對所述第三輸出隊列緩沖區(qū)的輸出隊列的互斥訪問, 所述第三輸出隊列緩沖區(qū)用于存儲所述視頻解碼模塊所解碼后的數(shù)據(jù),并形成輸出隊列以 使所述回顯接口和所述視頻解碼裝置能異步地工作;所述音頻解碼模塊還包括第二輸出隊列緩沖區(qū),所述音頻解碼模塊用于通過輸入接口 獲取第一緩沖區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行音頻解碼,存入第二輸出隊列緩沖 區(qū),并用于創(chuàng)建全局的互斥鎖來保證對所述第二輸出隊列緩沖區(qū)的輸出隊列的互斥訪問, 所述第二輸出隊列緩沖區(qū)用于存儲所述音頻解碼模塊所解碼后的數(shù)據(jù),并形成輸出隊列以 使所述回顯接口和所述音頻解碼模塊能異步地工作;回顯接口,用于按一定時序,根據(jù)所述第二輸出隊列緩沖區(qū)、第三輸出隊列緩沖區(qū)中所 存儲的視音頻解碼后的數(shù)據(jù)地址,進行視音頻的效果呈現(xiàn)。
10. 一種包括如權(quán)利要求1所述視頻解碼裝置的視音頻播放系統(tǒng),所述系統(tǒng)包括播放 控制模塊、輸入接口、音頻解碼模塊、視頻解碼裝置、回顯接口、第一緩沖區(qū);所述輸入接口、 音頻解碼模塊、視頻解碼裝置、回顯接口分別與播放控制模塊相連接,第一緩沖區(qū)與輸入接 口相連接;播放控制模塊用于發(fā)出命令,選中要播放的文件或媒體數(shù)據(jù)位置鏈接地址,通過 操作系統(tǒng)文件輸入輸出接口將媒體數(shù)據(jù)讀入第一緩沖區(qū),其特征在于所述視音頻播放系統(tǒng)還包括第四緩沖區(qū),所述第四緩沖區(qū)與所述音頻解碼模塊和所述 回顯接口相連接,用于存儲所述音頻解碼模塊的幀輸出緩沖區(qū)輸出的解碼后的幀數(shù)據(jù)并形 成輸出隊列,并用于提供訪問地址給所述回顯接口訪問;所述視頻解碼裝置還包括第三輸出隊列緩沖區(qū),所述視頻解碼裝置用于通過輸入接口 獲取第一緩沖區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行視頻解碼,存入第三緩沖區(qū)輸出隊 列,并用于創(chuàng)建全局的互斥鎖來保證對所述第三輸出隊列緩沖區(qū)的輸出隊列的互斥訪問, 所述第三緩沖區(qū)用于存儲所述視頻解碼模塊所解碼后的數(shù)據(jù),并形成輸出隊列以使所述回 顯接口和所述視頻解碼裝置能異步地工作;所述音頻解碼模塊還與所述第四緩沖區(qū)相連接,用于通過所述輸入接口獲取第一緩沖 區(qū)中的要播放的文件或媒體數(shù)據(jù),并進行音頻解碼,每次解碼輸出一幀,將解碼后的視頻幀 raw數(shù)據(jù)存放在所述音頻解碼模塊的幀輸出緩沖區(qū);回顯接口,用于按一定時序,根據(jù)所述第三輸出隊列緩沖區(qū)中所存儲的視頻解碼后的 數(shù)據(jù)地址和第四緩沖區(qū)存儲的音頻解碼后的數(shù)據(jù)地址進行視音頻的效果呈現(xiàn)。
全文摘要
本發(fā)明公開一種視頻解碼方法、裝置及視音頻播放系統(tǒng),通過在視頻解碼模塊、音頻解碼模塊中設(shè)置輸出幀隊列緩沖區(qū),以空間換取時間,使得回顯模塊和解碼模塊能異步地工作,具體說,如果幀隊列緩沖中有視音頻幀數(shù)據(jù),回顯時不用等待解碼器輸出,而是直接根據(jù)播放速度從緩沖隊列取數(shù)據(jù)回顯。由于視頻I幀的解碼會耖時較長,為了保證此時回顯模塊不會因分配不到CPU而停止,本發(fā)明在視頻解碼過程中的熵解碼和運動補償后通過調(diào)度CPU,保證回顯模塊能及時調(diào)度到CPU,從而保證播放的流暢平滑。這樣,就能使得當(dāng)處理器能提供的計算解碼資源相對勉強滿足時,能消除視音頻播放不均衡或卡的現(xiàn)象,提供平滑、流暢的播放效果和更精準(zhǔn)的音視頻同步。
文檔編號H04N7/26GK101873498SQ20101020517
公開日2010年10月27日 申請日期2010年6月22日 優(yōu)先權(quán)日2010年6月22日
發(fā)明者田逢春 申請人:深圳市融創(chuàng)天下科技發(fā)展有限公司