一種智能圖文動畫更新播放的方法
2023-05-12 01:03:31 2
專利名稱:一種智能圖文動畫更新播放的方法
技術領域:
本發明涉及圖文動畫、內存管理、視頻播放等領域,特別涉及一種智能圖文動畫序列更新播放的方法。
背景技術:
在圖文制播系統中,經常會實現圖文動畫的播放,圖文動畫其實是一組TGA序列的動態播出效果。所謂TGA序列,是TGA圖 的序列,即圖文動畫以TGA圖方式存放在硬碟中的一個或一組物理文件。播出動畫時,一邊把圖文內容從物理文件中讀到計算機的內存裡,一邊根據圖文系統制式的相應頻率按順序播出該系列圖像的內容。但是,使用這種一邊播放一邊讀取的方法,當TGA序列中對應的物理文件過大時(如在高清模式下播放大尺寸TGA圖),會導致圖片解碼和讀取時間過長,從而影響播出效率,達不到系統所需實時的要求,這時播出動畫就會卡殼,導致用戶的視覺體驗降低;如果採用播放之前把TGA序列所有內容都讀到內存裡的方法,則會佔用極大的內存資源,影響機器的性能,當TGA序列內容過大,甚至會引起系統出錯。因此,迫切的需要一種方法解決圖文動畫的更新播放問題。
發明內容
本發明提供了一種智能圖文動畫序列更新播放的方法,該方法通過將原有的讀取播放步驟分離成兩個單獨的步驟,讀取步驟負責申請由內存塊構成的內存環,並依次讀取TGA序列將解碼後的內容順序放入內存環中;播放步驟負責從內存中讀取解碼後的內容進行播放,然後清空該內存塊,並放在內存環的尾部。讀取步驟中申請的內存塊大小和個數是根據預估時間和動畫長度智能等條件,結合解碼線程的個數計算出來的,從而在效率和資源之間找到一個合適的平衡,同時滿足實時播出動畫的要求。具體方法如下計算內存塊的大小和個數,以及啟動的解碼線程的個數;申請連續的內存塊;將申請的內存塊,建立成具有邏輯結構的內存環;執行解碼步驟;執行播出步驟;所述解碼線程實時監測內存環邏輯尾部是否有空的內存塊,如果有空的內存塊且TGA序列中還有未被讀取的圖時,繼續讀取並解碼TGA序列,將順序中的下一幅圖存放在該內存塊中;如果TGA序列已經讀取完畢,或者沒有空的內存塊,則繼續監測和等待;播出完畢後,銷毀解碼線程和播出線程,並釋放所有臨時申請的內存。本發明提供了一種智能圖文動畫序列更新播放的方法,通過雙線程或多線程控制播出和讀取操作,同時智能申請內存,在效率和資源之間找到一個合適的平衡,保證了播出質量。
為了更清楚地說明本發明實施例的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹。圖I為本發明一種智能圖文動畫序列更新播放的方法的步驟流程圖。圖2為本發明從線程角度的步驟流程圖。圖3、圖4為本發明實施例解碼線程和播出線程的功能和關係示意圖。
具體實施方式
下面將結合附圖,對本發明實施例中的技術方案進行清楚、完整地描述。實施例I :根據系統掃描頻率、預估的讀取時間和播放時間、以及動畫長度等數據,採用常規邏輯方法,計算需要預先請求的內存塊的大小、個數,和解碼線程的個數,具體方法如下以高清HD1080i作為系統的運行環境,該圖文系統為隔行掃描,解析度為1920x1080像素,掃描頻率為每秒25幀,每幀時間為1/25秒,即40毫秒,把這個時間稱為系統掃描時間,記為tSysFrame。需要播出的動畫序列包括200幀,即200幅圖像,每幀圖像大小一致,尺寸不限,把該中貞數稱為動畫的長度,記為nMovFrames。由於計算機配置等原因,不同系統平臺讀取同一張TGA圖像的時間也有所差異,記錄當前系統讀取一張圖像花費的時間,記為tReadFrame。相同道理,記錄播出該張圖像花費的時間,記為tWriteFrame。該值取決於硬體圖像卡,一般來說,它小於圖文系統掃描時間。根據讀取單張圖像所耗時間,可以分為以下幾種情況I. (tReadFrame+tffriteFrame) = tSysFrame ;這時,意味著在系統掃描的每個時間片裡,不能完成圖像讀取和播出的工作,當然可以將所有200張圖像全部解碼到系統內存裡,以當前HDlOSOi制式下滿屏的圖像為例,系統共需要(1920*1080)*4*200/(1024*1024) ^ 1582M ^ I. 55G內存。這樣需要佔用大量的系統資源,顯然不可取,因此需要使用不同的線程分別完成圖像的解碼工作和播出工作,根據圖像讀取時間tReadFrame的值,分為以下兩種情況。2. ItReadFrame tSysFrame ;可以根據(tReadFrame-tSysFrame)*nMovFrames/tSysFrame+l的公式計算出需要準備的內存塊個數;例如當讀取一張圖像需要42毫秒時,為了保證實時性,在開啟I個解碼線程的條件下,系統需要(42-40)*200/40+1 = 11個內存塊,相當於(1920*1080)*4*11/(1024*1024) 87M內存空間,這11個內存塊需要在開始播出第一幀動畫前就準備好解碼的內容,這樣才可以保證播出的實時性。當tReadFrame比tSysFrame大許多的情況下,或者使用上述公式計算出來的內存塊個數過大,那麼開這麼多內存塊並不是一件較好的解決辦法,會影響處理效率,不滿足用戶對效率的要求;或者是當申請的總內存大小接近或超過系統運行時空閒內存大小,不滿足系統內存的需求。這時需要增加解碼線程的個數共同來完成圖像序列的讀取工作,降低內存塊的個數或內存塊的總大小。當解碼線程為ThreadNum個,理論上需要的內存塊個數的公式為(tReadFrame-tSysFrame)*nMovFrames/(tSysFrame*ThreadNum)+1。在上例中,如果11個內存過多,或者是87M過大,則增加I個解碼線程,需要的內存塊數變為(42-40) *200/(40*2)+1 = 6 個。實施例2 、
經過計算,得到如下的預估結果需要預先請求的內存塊數為N,每個內存塊大小取該制式下滿屏圖片的大小M,啟動I個解碼線程。播出前,申請N個大小為M的連續內存塊,用循環隊列的方式標記和排列,形成一個內存環。啟動I個解碼線程,開始讀取工作從硬碟中順序讀取TGA序列中的TGA圖,將解碼後的內容順序存放在內存環中,每個內存塊只存放一個TGA圖,填充完畢的內存塊標記為非空,所有內存塊都標記為非空或整個TGA序列讀取完畢時停止讀取,記錄待讀取的下一個TGA圖的位置,這個位置可能為空,表示已經全部讀取完畢。啟動播出線程,播出第I塊內存塊中的內容,然後依次檢查下一塊內存是否標記為非空,如果為非空則播放該內存塊中的內容,如果為空則停止播放。同時,每播放完一個內存塊中的內容,就將其中內容刪除清空,並將該內存塊標記為空放回到內存環的尾部。解碼線程實時監測內存環尾部是否有標記為空的內存塊,如果有空的內存塊且TGA序列中還有未被讀取的圖時,重複之前的讀取操作,即將上次讀取後的下一個TGA圖解碼後存放在標記為空的內存塊中,同時將該內存塊標記為非空,並記錄待讀取的下一個TGA圖的位置;如果TGA序列已經讀取完畢,或者沒有空的內存塊,則繼續監測和等待;內存環中的所有內存塊均被標記為空,並且記錄待讀取的下一個TGA圖的位置也為空時,表示已經全部播出完畢,銷毀當前的解碼線程和播出線程,並釋放所有申請的內存。本發明包括但不局限於以上描述的實施例,任何本領域的技術人員不需要付出創造性勞動就能思之的變化都應落入本發明的保護範圍。
權利要求
1.一種智能圖文動畫序列更新播放的方法,其特徵在於,包括以下步驟 5101:計算內存塊的大小和個數,以及啟動的解碼線程的個數; 5102:申請連續的內存塊; 5103:將申請的內存塊,建立成具有邏輯結構的內存環; 5104:執行解碼步驟; 5105:執行播出步驟; 5106:所述解碼線程實時監測內存環邏輯尾部是否有空的內存塊,如果有空的內存塊且TGA序列中還有未被讀取的圖時,繼續讀取並解碼TGA序列,將順序中的下一幅圖存放在該內存塊中;如果TGA序列已經讀取完畢,或者沒有空的內存塊,則繼續監測和等待,所述TGA序列是TGA圖的序列,即圖文動畫以TGA圖方式存放在硬碟中的一個或一組物理文件; S107:播出完畢後,銷毀解碼線程和播出線程,並釋放所有臨時申請的內存。
2.如權利要求I所述的智能圖文動畫序列更新播放的方法,其特徵在於,所述計算還包括以下具體步驟 5201:計算條件為在啟動I個解碼線程的條件下,根據圖文系統掃描頻率、預估的讀取時間和播放時間、以及動畫長度等數據,採用常規邏輯方法獲得計算結果; 5202:分別判斷步驟S201的計算結果是否滿足用戶對效率的要求以及是否滿足系統內存的需求,所述不滿足用戶對效率的要求是指計算出的內存塊個數過多影響處理效率,所述不符合系統內存的需求是指計算出的內存塊的總大小接近或超過系統運行時空閒內存大小,若都滿足,執行S102,若有一個不滿足,則執行S203 ; S203:重新計算,所述重新計算是指將上一次計算時計算條件中啟動的解碼線程個數加1,依次執行步驟S201和S202。
3.如權利要求I所述的智能圖文動畫序列更新播放的方法,其特徵在於,所述解碼步驟還包括以下具體步驟 啟動若干個解碼線程,其個數與步驟SlOl的計算結果相符合; 讀取TGA序列; 對TGA序列進行解碼; 將內容順序存放在內存環中。
4.如權利要求I所述的智能圖文動畫序列更新播放的方法,其特徵在於,所述播出步驟包括以下步驟 啟動播出線程; 依次播出內存環中的內容; 每播放完一個內存塊中的內容,就將該內存塊清空,並放回到內存環的邏輯尾部。
5.如權利要求1-4中任意一項所述的智能圖文動畫序列更新播放的方法,其特徵在於,所述內存塊與TGA序列的關係是,每個內存塊中只存放一個TGA圖,內存塊填充滿時停止讀取。
全文摘要
本發明實施例公開了一種智能圖文動畫序列更新播放的方法,通過計算需要預先請求的內存塊的大小、個數,申請連續的內存塊,依次排列首尾相接形成內存環,解碼線程實時讀取並解碼TGA序列,將內容順序填入空的內存塊,每個內存塊只存放一個TGA圖,內存塊填充滿時停止讀取,TGA序列全部讀完停止讀取。啟動播出線程,依次播出內存環中的內容,播放完一個內存塊中的內容,就將該內存塊清空,並放回到內存環的尾部。播出完畢後,銷毀解碼線程和播出線程,並釋放所有申請的內存。該方法在效率和資源之間找到一個合適的平衡,滿足了實時播放圖文動畫的要求,保證了播出質量。
文檔編號G11B19/02GK102723086SQ20111011585
公開日2012年10月10日 申請日期2011年5月5日 優先權日2011年5月5日
發明者呂精華, 廖健, 郭紅豔, 饒文輝 申請人:新奧特(北京)視頻技術有限公司