專利名稱:根據可變長編碼的碼字生成位流的方法和裝置的制作方法
技術領域:
本發明涉及數據處理領域,具體地,涉及根據可變長編碼的碼字生成位流的方法
和裝置。
背景技術:
在編碼理論中,可變長編碼(Variable-Length Coding, VLC)是將信源映射為可變 位數的碼字的編碼方式,其允許信源零誤差地被壓縮及解壓縮(無損數據壓縮)。可變長編 碼的基本思想是對一組出現概率各不相同的信源符號,采用不同長度的碼字表示,對出現 概率高的信源符號采用短碼字,對出現概率低的信源符號采用長碼字。這樣的編碼方式由 于具有很高的壓縮效率,所以廣泛應用于包括JPEG、MPEG2、H. 264等在內的圖像、視頻和音 頻等多媒體信息的編碼標準。目前常用的VLC編碼策略有Huffman編碼、Lempel-Ziv編碼 以及算術編碼等。 無論采用哪一種特定的VLC編碼方式,由于所得到的VLC碼字都是可變長的,其長 度未必是字節的倍數,所以在將這樣的VLC碼字串接起來生成位流的過程中,通常對于每 一個VLC碼字都需要按位來進行串接,并且在進行每一個位的串接時都要進行復雜的位操 作。 圖1示出了這樣的按位將VLC碼字串接起來生成位流的通常方法的流程圖。 在該通常方法中,例如對于要串接起來生成位流的多個VLC碼字中位長度為n的
當前VLC碼字v,通過步驟105-140的n次循環,將其中的各個位依次串接到一個8位的輸
出緩沖器中,并進而通過該輸出緩沖器將該VLC碼字v串接到輸出位流中。 具體地,在步驟105,設k = 1,即對于當前VLC碼字v,從其最左側的第1位開始進
行串接。 在步驟IIO,將輸出緩沖器中的數據向左移1位。 在步驟115,通過利用位掩碼與當前VLC碼字v進行與(AND)操作,獲得該VLC碼
字V的最左側的第k位Vk。 在步驟120,利用或(OR)操作,將所獲得的該當前VLC碼字v的最左側的第k位Vk 放置到輸出緩沖器中的最右側的位、即最低位上。 在步驟125,判斷輸出緩沖器是否已滿。若是,則該過程前進到步驟130,否則轉到 步驟135。 在步驟130,將該輸出緩沖器中的內容輸出到位流中。 在步驟135,判斷該當前VLC碼字v中是否還有未串接的下一位。若有,則該過程 前進到步驟140,否則該過程結束。 在步驟140,使k = k+l,并返回到步驟IIO,繼續串接該當前VLC碼字v中的下一 位。 可以看出,在上面的通常方法中,對于一個n位長的VLC碼字,至少需要進行
l)n次移位操作;
2)n次與(AND)操作; 3)n次或(0R)操作; 4) n次分支操作(步驟125)。 上面的通常方法例如可以在用于MPEG2視頻編碼的基準編碼模型TM5 (參考www. mpeg. org/MPEG/MSSG/tm5)中以及在基準JPEG圖像編碼軟件IJG的實現(參考www. ijg. org)中發現。 但是,在該通常方法中,由于存在大量的分支操作,所以本領域技術人員可以理 解,大量的分支操作中必然會出現分支預測錯誤、分支未命中的情況。其原因如下。
在現代的處理器中,一般都采用流水線的處理方式。也就是說,如圖2的流水線所 示,雖然通常一條指令的處理需要多個時鐘周期才能完成,但是CPU可以不必等待前面的 指令的處理完成,而每個時鐘周期都發出一條指令,這樣, 一條指令可以在上一條指令的處 理結束之前就被發出并執行。但是,在分支指令的情況下,存在著原來的順序指令流被中斷 并跳轉到分支指令流的可能性。但是,正確的、應該執行的分支指令流只有在分支指令的處 理結束后才能夠確定。這樣,為了繼續流水線的處理,在現代的處理器中,一般都根據預定 的策略預測一條分支來執行。顯然,這樣的預測會存在預測正確的情況,也會存在預測錯誤 的情況。 如果分支預測正確,則指令的執行將正常地進行,但是如果分支預測錯誤,則在
DSP、GPU、 IBM的CELL系統中的SPE (Synergistic ProcessingElement,協處理單元)以及
專門設計的處理器等沒有分支預測錯誤的挽救機制的簡單流水線體系結構中,將花費更多
的時鐘周期將已經通過分支預測裝入到流水線中要執行的指令和結果全部清除,然后重新
獲取并裝入正確的分支的指令序列來執行。這樣,必然會導致性能的急劇降低。 此外,即使在Intel處理器等具有分支預測錯誤的挽救機制的復雜流水線體系結
構中,如果采用上述通常方法,也會存在因在分支預測錯誤時進行挽救操作而導致一定程
度的性能降低的問題。
發明內容
為了解決上述問題,本發明提供了一種根據可變長編碼的碼字生成位流的方法和 裝置,以便盡可能消除根據VLC碼字生成位流的過程中的分支操作以及減少所需的操作數 量,從而提升性能。 根據本發明的一個方面,提供了一種根據可變長編碼的碼字生成位流的方法,包 括設置輸出緩沖器,其中該輸出緩沖器具有至少對于要串接起來生成位流的多個可變長 編碼的碼字的每一個都能夠容納的位長度;對于上述多個可變長編碼的碼字中當前處理的 可變長編碼的碼字將該當前處理的可變長編碼的碼字填充到上述輸出緩沖器中的與已被 占用的位接續的位置;將上述輸出緩沖器的已填充的位中構成了完整字節的位輸出到位流 中;以及將上述輸出緩沖器中未構成完整字節的剩余位移位到該輸出緩沖器中的高位。
根據本發明的另一個方面,提供了一種根據可變長編碼的碼字生成位流的裝置, 包括輸出緩沖器設置單元,用于設置輸出緩沖器,其中該輸出緩沖器具有至少對于要串 接起來生成位流的多個可變長編碼的碼字的每一個都能夠容納的位長度;碼字串接單元, 用于對于上述多個可變長編碼的碼字中當前處理的可變長編碼的碼字,將其填充到上述輸出緩沖器中的與已被占用的位接續的位置;位流輸出單元,用于在上述碼字串接單元填充 上述當前處理的可變長編碼的碼字之后,將該輸出緩沖器的已填充的位中構成了完整字節 的位輸出到位流中;以及輸出后移位單元,用于在上述位流輸出單元輸出上述構成了完整 字節的位之后,將上述輸出緩沖器中未構成完整字節的剩余位移位到該輸出緩沖器中的高 位。
相信通過以下結合附圖對本發明具體實施方式
的說明,能夠使人們更好地了解本 發明上述的特點、優點和目的。 圖1是將VLC碼字串接起來生成位流的通常方法的流程圖;
圖2是現代的處理器所采用的流水線的處理方式的示意圖; 圖3是根據本發明實施例的根據可變長編碼的碼字生成位流的方法的流程圖;
圖4是圖3的方法的圖示說明;以及 圖5是根據本發明實施例的根據可變長編碼的碼字生成位流的裝置的方框圖。
具體實施例方式
下面就結合附圖對本發明的各個優選實施例進行詳細說明。 圖3是根據本發明實施例的根據可變長編碼的碼字生成位流的方法的流程圖,圖 4是其圖示說明。 如圖3所示,首先在步驟305,對于要串接起來生成位流的、包含多個VLC碼字的碼 本,設置一個輸出緩沖器Bl,其中該輸出緩沖器Bl具有對于該多個VLC碼字中的每一個來 說都能夠容納的位長度N。 在一個實施例中,根據該碼本的多個VLC碼字中最長的VLC碼字的位長度,設置該 輸出緩沖器B1。其中,由于碼本通常是以包含各個VLC碼字的內容的碼表的形式存儲的,所 以根據該碼表是能夠獲知其中最長的VLC碼字的位長度的。 在進一步的實施例中,如果設該碼本中最長的VLC碼字的位長度為M,則為了使所 設置的輸出緩沖器B1對于該碼本中的各個VLC碼字都足夠容納,將該輸出緩沖器B1的位 長度N設定為2的冪數中比M+7大的最小值。當然,并不限于此,也可以將輸出緩沖器Bl 設置為包括更多的位。 在步驟310,設置一個用于存儲當前要進行串接的VLC碼字的碼字緩沖器B2,其中 該碼字緩沖器B2具有與上述輸出緩沖器Bl相同的位長度N。 在步驟315,獲取該碼本中當前要進行串接的n位長的VLC碼字v,并且,如圖4 (b) 所示,將該n位長的VLC碼字v存儲在碼字緩沖器B2中的最右端。也就是說,將該VLC碼 字v填充到該碼字緩沖器B2的最低的n個有效位中。 在步驟320,如圖4(a) (c)所示,將當前的VLC碼字v在碼字緩沖器B2中向左移 位到與上述輸出緩沖器B1中已填充的位接續的位置,即使當前的VLC碼字v向左移N-l-n 位。其中如圖4(a)所示,1是輸出緩沖器B1中已經被占用的位的數量,這些位是上一個進 行串接的VLC碼字未通過該輸出緩沖器B1完全輸出到位流中的、剩余的位。當然,可以理 解,在初始對一個碼本中的VLC碼字進行串接時,該輸出緩沖器Bl是空的,其中的位均未被占用。 此外,在本步驟中,將當前的VLC碼字v在碼字緩沖器B2中向左移N-l-n位的目 的是為了如圖4(a)和4(c)所示,使碼字緩沖器B2中被當前VLC碼字v占用的位與輸出緩 沖器B1中被上一個VLC碼字占用的位接續。 在步驟325,通過利用碼字緩沖器B2中的內容對輸出緩沖器B1進行或(0R)操作, 將當前的VLC碼字v填充到輸出緩沖器Bl中,從而與上一個VLC碼字的剩余位串接在一起, 并更新1 = l+n。 也就是說,如圖4(d)所示,當前的VLC碼字v的各位被填充到輸出緩沖器Bl中已 被占用的1個位之后的位置,此時輸出緩沖器B1中包括當前的VLC碼字v在內已被占用 l+n位。 在步驟330,將該輸出緩沖器Bl中最左端的l/8個字節的內容輸出到位流中,其中 1/8表示輸出緩沖器B1中已被占用的位的位數1與8的整數除。 由于輸出緩沖器B1中包括當前的VLC碼字v在內的、已被占用的位數l未必是字 節的倍數,所以在這1位中,只能夠將從左端開始已構成了完整字節的位輸出到位流中,而 其他未構成一個完整字節的位則應繼續存儲在輸出緩沖器B1中。在此情況下,這l位中已 構成的完整字節的數量,可以通過計算整數除1/8來得到。也就是說,輸出緩沖器B1中與該 整數除1/8的值對應的數量的字節,即前1/8個字節,是應該被輸出到位流中的完整字節。
在圖4(d)所示的例子中,輸出緩沖器B1中已被占用的l位中,形成了兩個完整的 字節、即字節0和字節1。在此情況下,將該完整的字節O和字節1輸出到位流中。
此外,在一個實施例中,在計算整數除1/8的值時,本領域技術人員可以理解,能 夠利用移位操作來實現該整數除。舉一個簡單例子來說,在計算4/2時,由于對應于4的二 進制數是IOO,所以可以通過將該二進制數100向右移1位,來獲得與整數除4/2的結果相 對應的值10、 S卩2。 在步驟335 ,更新1 = 1 mod 8 ,其中mod表示取模運算。 也就是說,由于輸出緩沖器B1中前1/8個字節已被輸出,所以輸出緩沖器B1中被
占用的位還剩下該1/8個字節之外的、未形成完整字節的剩余1 mod 8位。 在步驟340,如圖4(e)、(f)所示,將輸出緩沖器B1中剩余的位移位到輸出緩沖器
Bl的最左端,以使該輸出緩沖器B1中最左端的1個有效位被當前VLC碼字v的未被輸出到
位流中的剩余位所填充。 在步驟345,判斷上述碼本中是否還存在未串接的VLC碼字,若有,則該過程返回 到步驟315,否則該過程結束。 以上就是對本實施例的根據可變長編碼的碼字生成位流的方法的詳細描述。在本 實施例中,并不像上述通常使用的方法那樣任意地利用一個8位的緩沖器,來按位串接各 個VLC碼字,而是通過設置一個與要進行串接的碼本中最長的VLC碼字的位長度有關的輸 出緩沖器,來按碼字的整體進行各個VLC碼字的串接。可以看出,在本實施例中,在對一個 n位長的VLC碼字進行串接時,需要進行 1)3次移位操作(其中包括在步驟330中所說明的為實現整數除而進行的移位操 作); 2) 1次或(0R)操作;
3) 1次取模操作;
4)0個分支操作。 從以上可以看出,如果采用本發明,則由于在將一個VLC碼字串接到位流的過程 中消除了分支操作,所以對于簡單流水線體系結構的系統來說,能夠極大地提升性能。此 外,除了消除分支操作之外,還由于相對于上述通常使用的方法減少了在串接一個VLC碼 字的過程中所需的操作數量,所以即使是對于復雜流水線體系結構的系統來說,也能夠實 現性能的提升。 在同一發明構思下,本發明提供一種根據可變長編碼的碼字生成位流的裝置。下 面結合附圖對其進行描述。 圖5是根據本發明實施例的根據可變長編碼的碼字生成位流的裝置的方框圖。如 圖5所示,本實施例的根據可變長編碼的碼字生成位流的裝置50包括輸出緩沖器設置單 元501、碼字緩沖器設置單元502、碼字串接單元503、位流輸出單元504以及輸出后移位單 元505。 輸出緩沖器設置單元501設置輸出緩沖器B1,其中該輸出緩沖器B1具有對于要串 接起來生成位流的多個VLC碼字的每一個都能夠容納的位長度。 在一個實施例中,輸出緩沖器設置單元501根據上述多個VLC碼字中最長的VLC 碼字的位長度設置上述輸出緩沖器B1。 在進一步的實施例中,輸出緩沖器設置單元501將上述輸出緩沖器B1的位長度設 定為2的冪數中比上述最長的VLC碼字的位長度M加7大的最小值。當然,并不限于此,在 具體實現中,也可以將輸出緩沖器B1設置為包括更多的位。 碼字緩沖器設置單元502設置用于存儲當前要進行串接以輸出到位流中的VLC碼 字的碼字緩沖器B2,其中該碼字緩沖器B2具有與上述輸出緩沖器B1相同的位長度。
碼字串接單元503對于上述多個VLC碼字中當前處理的VLC碼字v,將其填充到上 述輸出緩沖器B1中的與已被占用的位接續的位置。 如圖5所示,碼字串接單元503進一步包括碼字存儲單元5031、碼字移位單元 5032以及或操作單元5033。 碼字存儲單元5031將當前處理的VLC碼字v存儲在上述碼字緩沖器B2中的最右
丄山順。 碼字移位單元5032將該當前處理的VLC碼字v在上述碼字緩沖器B2中向左移位 到與上述輸出緩沖器B1中已填充的位接續的位置,即向左移N-l-n位。其中,l是輸出緩 沖器B1中已經被占用的位的數量,這些位是上一個進行串接的VLC碼字未通過該輸出緩沖 器B1完全輸出到位流中的、剩余的位;此外,n是該當前處理的VLC碼字v的位長度。
或操作單元5033通過利用上述碼字緩沖器B2中的內容對上述輸出緩沖器Bl進 行或操作,將該當前處理的VLC碼字v填充到該輸出緩沖器Bl中的與已被占用的l個位接 續的位置,以將該當前處理的VLC碼字v與上一個VLC碼字的剩余位串接在一起。
位流輸出單元504在碼字串接單元503將當前處理的VLC碼字v填充到輸出緩沖 器B1中之后,將該輸出緩沖器B1的已填充的1 = l+n位中構成了完整字節的位輸出到位 流中。 在一個實施例中,位流輸出單元504求取上述輸出緩沖器B1的已填充的位的位數
81與8的整數除1/8的值,并且將輸出緩沖器Bl中與該整數除1/8的值對應的數量的字節, 即前1/8個字節輸出到位流中,而其他未構成一個完整字節的位則繼續存儲在輸出緩沖器 Bl中。 在進一步的實施例中,位流輸出單元504利用移位操作來求取整數除1/8的值。
輸出后移位單元505在位流輸出單元504將輸出緩沖器Bl中構成了完整字節的 位輸出到位流中之后,將該輸出緩沖器B1中未構成完整字節的剩余l = 1 mod 8位移位到 該輸出緩沖器B1中的高位,以使該輸出緩沖器B1中最左端的1個有效位被當前VLC碼字 v的、未被輸出到位流中的剩余位所填充。 以上就是對本實施例的根據可變長編碼的碼字生成位流的裝置的詳細描述。其 中,該裝置50及其各個組成部分,可以由專用的電路或芯片構成,也可以通過計算機(處理 器)執行相應的程序來實現。 以上雖然通過一些示例性的實施例對本發明的根據可變長編碼的碼字生成位流 的方法和裝置進行了詳細的描述,但是以上這些實施例并不是窮舉的,本領域技術人員可 以在本發明的精神和范圍內實現各種變化和修改。因此,本發明并不限于這些實施例,本發 明的范圍僅以所附權利要求為準。
權利要求
一種根據可變長編碼的碼字生成位流的方法,包括設置輸出緩沖器,其中該輸出緩沖器具有至少對于要串接起來生成位流的多個可變長編碼的碼字的每一個都能夠容納的位長度;對于上述多個可變長編碼的碼字中當前處理的可變長編碼的碼字將該當前處理的可變長編碼的碼字填充到上述輸出緩沖器中的與已被占用的位接續的位置;將上述輸出緩沖器的已填充的位中構成了完整字節的位輸出到位流中;以及將上述輸出緩沖器中未構成完整字節的剩余位移位到該輸出緩沖器中的高位。
2. 根據權利要求1所述的方法,其中上述設置輸出緩沖器的步驟進一步包括根據上述多個可變長編碼的碼字中最長碼字的位長度設置上述輸出緩沖器。
3. 根據權利要求1或2所述的方法,其中上述設置輸出緩沖器的步驟進一步包括將上述輸出緩沖器的位長度設定為2的冪數中比上述多個可變長編碼的碼字中最長碼字的位長度加7大的最小值。
4. 根據權利要求1所述的方法,還包括設置用于存儲當前處理的可變長編碼的碼字的碼字緩沖器,其中該碼字緩沖器具有與上述輸出緩沖器相同的位長度。
5. 根據權利要求4所述的方法,其中將該當前處理的可變長編碼的碼字填充到上述輸出緩沖器中,與已被占用的位接續的位置的步驟進一步包括將該當前處理的可變長編碼的碼字存儲在上述碼字緩沖器中的最右端;將該當前處理的可變長編碼的碼字在上述碼字緩沖器中向左移位到與上述輸出緩沖器中已填充的位接續的位置;以及通過利用上述碼字緩沖器中的內容對上述輸出緩沖器進行或操作,將該當前處理的可變長編碼的碼字填充到該輸出緩沖器中,與已被占用的位接續的位置。
6. 根據權利要求1所述的方法,其中將上述輸出緩沖器的已填充的位中,構成了完整字節的位輸出到位流中的步驟進一步包括求取上述輸出緩沖器的已填充的位的位數與8的整數除;以及將上述輸出緩沖器中的、與上述整數除的值對應的數量的字節的內容輸出到位流中。
7. 根據權利要求6所述的方法,其中求取上述輸出緩沖器的已填充的位的位數與8的整數除的步驟是利用移位操作來實現的。
8. —種根據可變長編碼的碼字生成位流的裝置,包括輸出緩沖器設置單元,用于設置輸出緩沖器,其中該輸出緩沖器具有至少對于要串接起來生成位流的多個可變長編碼的碼字的每一個都能夠容納的位長度;碼字串接單元,用于對于上述多個可變長編碼的碼字中當前處理的可變長編碼的碼字,將其填充到上述輸出緩沖器中的與已被占用的位接續的位置;位流輸出單元,用于在上述碼字串接單元填充上述當前處理的可變長編碼的碼字之后,將該輸出緩沖器的已填充的位中構成了完整字節的位輸出到位流中;以及輸出后移位單元,用于在上述位流輸出單元輸出上述構成了完整字節的位之后,將上述輸出緩沖器中未構成完整字節的剩余位移位到該輸出緩沖器中的高位。
9. 根據權利要求8所述的裝置,其中上述輸出緩沖器設置單元根據上述多個可變長編碼的碼字中最長碼字的位長度設置上述輸出緩沖器。
10. 根據權利要求8或9所述的裝置,其中上述輸出緩沖器設置單元將上述輸出緩沖器的位長度設定為2的冪數中比上述多個可變長編碼的碼字中最長碼字的位長度加7大的最小值。
11. 根據權利要求8所述的裝置,還包括碼字緩沖器設置單元,其設置用于存儲當前處理的可變長編碼的碼字的碼字緩沖器,其中該碼字緩沖器具有與上述輸出緩沖器相同的位長度。
12. 根據權利要求11所述的裝置,其中上述碼字串接單元進一步包括碼字存儲單元,用于將上述當前處理的可變長編碼的碼字存儲在上述碼字緩沖器中的最右端;碼字移位單元,用于將該當前處理的可變長編碼的碼字在上述碼字緩沖器中向左移位到與上述輸出緩沖器中已填充的位接續的位置;以及或操作單元,用于通過利用上述碼字緩沖器中的內容對上述輸出緩沖器進行或操作,將該當前處理的可變長編碼的碼字填充到該輸出緩沖器中,與已被占用的位接續的位置。
13. 根據權利要求8所述的裝置,其中上述位流輸出單元求取上述輸出緩沖器的已填充的位的位數與8的整數除,并且將上述輸出緩沖器中的、與上述整數除的值對應的數量的字節的內容輸出到位流中。
14. 根據權利要求13所述的裝置,其中上述位流輸出單元利用移位操作來求取上述輸出緩沖器的已填充的位的位數與8的整數除。
全文摘要
本發明提供了一種根據可變長編碼的碼字生成位流的方法和裝置。該方法包括設置輸出緩沖器,其中該輸出緩沖器具有至少對于要串接起來生成位流的多個可變長編碼的碼字的每一個都能夠容納的位長度;對于上述多個可變長編碼的碼字中當前處理的可變長編碼的碼字將該當前處理的可變長編碼的碼字填充到上述輸出緩沖器中的與已被占用的位接續的位置;將上述輸出緩沖器的已填充的位中構成了完整字節的位輸出到位流中;以及將上述輸出緩沖器中未構成完整字節的剩余位移位到該輸出緩沖器中的高位。在本發明中,由于在將一個可變長編碼的碼字串接到位流的過程中消除了分支操作并且減少了所需的操作數量,所以能夠極大地提升性能。
文檔編號H04N7/26GK101729881SQ200810170308
公開日2010年6月9日 申請日期2008年10月10日 優先權日2008年10月10日
發明者劉家俊, 劉星, 徐晟 , 高懌之, 鹿寶生 申請人:國際商業機器公司