基于ARM平臺(tái)的MP3軟解碼算法研究與實(shí)現(xiàn)
3.1 解碼器引擎初始化
用MP3文件初始化解碼器,初始化過(guò)程中,解碼器讀取每一幀的幀頭信息而不對(duì)數(shù)據(jù)進(jìn)行解碼,快速計(jì)算出該文件的播放時(shí)間,并根據(jù)文件大小以秒或分鐘為單位內(nèi)建解碼位置索引。解碼位置索引的目的是為了快速的根據(jù)時(shí)間定位待解碼數(shù)據(jù)在文件中的位置。本文引用地址:http://www.ex-cimer.com/article/201610/306022.htm
數(shù)據(jù)流緩存提供的功能有以下幾點(diǎn):
初始化:該功能申請(qǐng)堆中的一塊內(nèi)存,用于以后存放緩存數(shù)據(jù)。
注銷:負(fù)責(zé)釋放初始化時(shí)申請(qǐng)的內(nèi)存。
寫(xiě)入數(shù)據(jù):向緩存的當(dāng)前寫(xiě)入位置后寫(xiě)入指定大小的數(shù)據(jù)。
跳過(guò)指定大小數(shù)據(jù):將當(dāng)前讀取位置移動(dòng)到指定位置。
獲取錯(cuò)誤信息:返回操作過(guò)程中產(chǎn)生的錯(cuò)誤信息。
幀同步:將讀取位置跳轉(zhuǎn)到下一幀開(kāi)始位置。該操作的主要算法是每次讀取緩存11個(gè)比特,若這些比特全為1,則把其當(dāng)做下一幀的開(kāi)始位置。通過(guò)研究可知,該種算法并不能準(zhǔn)確判斷下一幀的開(kāi)始,但這種算法不進(jìn)行幀頭解碼,也不會(huì)漏掉數(shù)據(jù)。從時(shí)間和空間上講,都是一種比較好的選擇。
解碼引擎以幀為解碼單位,每次輸出一幀的解碼輸出結(jié)構(gòu),結(jié)構(gòu)中包括pcm數(shù)據(jù)、長(zhǎng)度、采樣率、聲道數(shù),播放時(shí)間等信息。
評(píng)論