• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ts,ps,mpeg2 decoder and analysis

            mepg 2, iptv, stream parse,mov,mxf,gxf,ac3,aac

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              21 隨筆 :: 0 文章 :: 54 評論 :: 0 Trackbacks
            /Files/dvb-dvb/HuffmanCode.rar

            這個是最新的huffman code (encoder and decoder) , 但是效率有待提升.
             一直占cpu 50% , 掃描兩遍文件,一遍建立huffman code,另一遍,用二進制替換,
                    1,有兩個問題沒有解決
              1,動態建立huffman tree node value.僅僅掃描一遍,
              2,根據node的值去排序得到frequence時,這個值到底取1個byte,還是2個byte.

            Huffman算法簡介

            Huffman算法是一種基于統計的壓縮方法。它的本質就是對文本文件中的字符進行重新編碼,對于使用頻率越高的字符,其編碼也越短。但是任何2個字符的編碼,是不能出現向前包含的。也就是說字符A的編碼的前段,不可能為字符B的編碼。經過編碼后的文本文件,主要包含2個部分:Huffman碼表部分和壓縮內容部分。解壓縮的時候,先把Huffman碼表取出來,然后對壓縮內容部分各個字符進行逐一解碼,形成源文件。

            由此可見,使用Huffman算法的關鍵是形成Huffman碼表。怎樣才能生成一個“使用頻率越高的字符,其編碼也越短”的碼表呢?這里就要用到 Huffman樹的數據結構。當把一棵Huffman樹生成后,碼表也就生成了。以下舉例說明,假定我們的原始文本為"abcbbcccc"

            Huffman樹生成步驟:

            1.掃描源文件,對字符頻率進行統計。

            對于我們的樣例,統計結果是:a:1  b:3 c:5 (按頻率升序排列)

             

            2.從上述隊列中取出頻率最低的2個節點,合并成一個頻率為2節點頻率之和的樹枝節點X,加入到原隊列中,加入后,繼續保持隊列按頻率升序排列.

            3.重復步驟2,直到隊列中只有一個節點。

            4.這樣,我們就形成了一棵Huffman樹。葉子節點為字符,從樹根節點到葉子節點的路徑即為該字符的Huffman編碼。從一個節點導航到其左孩子,該段路徑為0,導航到右孩子,該段路徑為1.所以,a字符的編碼就是00,b字符的編碼為01,c字符的編碼為1,符合"使用頻率越高的字符,編碼越短"的要求。理論論證過程見<算法導論>P233

            5.Huffman碼表生成后,原文本"abcbbcccc"就變成了0001101011111的位串,按每個字符占用2個byte計算,大小由原來的18個字節(9*2),共144個bit,變成了13個bit,2個字節。達到了壓縮的目的。

            解壓縮過程:

            解壓縮也分成2部分進行,首先是根據壓縮文件中的Huffman碼表,在內存中生成一棵Huffman樹,然后,根據Huffman樹,對壓縮內容進行解壓縮。比如如果壓縮內容為位串0001101011111,那么從樹根節點起,因為第一個bit為0,先轉向左子樹,第二個bit為0,再轉向左子樹,到達葉子a,所以解碼出來的第一個字符就是a,每次解壓一個字符,都從根節點起,根據bit流,向左或向右轉,直到到達葉子節點,也就是解壓出來的字符。一直重復此過程,直到所有的字符都被解壓縮。 

            壓縮文件格式

            使用Huffman壓縮算法對文本文件壓縮后,就形成了一個壓縮文件,該壓縮文件包含2部分,一部分為Huffman碼表,也就是Huffman 樹,第二部分為根據碼表生成的內容位串。如何設計Huffman樹的存儲格式呢?本文采用從上到下,從左到右分層遍歷節點,順序存儲的方式。如下圖:

            也就是說,對于前述的Huffman樹,其持久化形式為:0xfffe 0xfffe 0x0063  0x0061  0x0062,其中0xfffe代表樹枝節點,而0x0061,0x0062,0x0063分別為a,b,c的Unicode碼。因為所有的樹枝節點的值都是0xfffe,所有樹枝節點都有2個孩子,節點排列方式是按從上到下,從左到右分層排列,所以能根據此持久化字節數組,把Huffman樹在內存中重新生成。

            另外為了升級版本,嵌入了magic number和version。

            完整工程下載

            本文涉及到的完整的eclipse工程,可以從這里下載。注:內含測試樣例《平凡的世界》文本文件,體積較大,請使用下載工具下載。另外,本程序中采用了泛型,請在至少在JDK1.5版本上編譯運行。

            代碼簡要說明

            1.HuffmanTextEncoder類完成壓縮功能,可直接運行,壓縮測試用文本文件。

            2.HuffmanTextDecoder類完成解壓縮功能,可直接運行,解壓縮 壓縮后的文本文件。

            3.BitReader,工具類,實現對BufferedInputStream的按位讀取。

            4.BitWriter,工具類,實現按位寫入的功能。該類來自網絡。

            5.MinHeap<T> ,模板工具類,實現了一個最小堆。生成Huffman樹時使用。

            壓縮效果

            使用本程序對《平凡的世界》做壓縮測試,壓縮前為文本文件,大小為1.7M,壓縮后為二進制文件,大小接近1M(988,817byte),而 zip壓縮后體積為920,997byte,比zip差,壓縮文件存儲格式待改善。另外,因為從Huffman壓縮算法的原理可知,該算法對字符重復率高的文本最有效,比如長篇小說或者英文小說。

            以上內容為轉載:   http://chencwf.googlepages.com/huffman
             
            以下為自己的內容:

             DETAIL:  35:v:2f,p: 42.
                INFO:   Sort After.size = 0
                DETAIL:   0:v:fffe,p:228,xx=    0,yy=    0.
                DETAIL:   1:v:fffe,p: 92,xx=    1,yy=    0.0
                DETAIL:   2:v:fffe,p: 42,xx=    2,yy=    0.00
                DETAIL:   3:v:fffe,p: 19,xx=    3,yy=    0.000
                DETAIL:   4:v:fffe,p:  9,xx=    4,yy=    0.0000
                DETAIL:   5:v:fffe,p:  4,xx=    5,yy=    0.00000
                DETAIL:   6:v:fffe,p:  2,xx=    6,yy=    0.000000
                DETAIL:   7:v:  53,p:  1,xx=    7,yy=    0.0000000
                DETAIL:   8:v:  47,p:  1,xx=    7,yy=    1.0000001
                DETAIL:   9:v:fffe,p:  2,xx=    6,yy=    1.000001
                DETAIL:  10:v:  3d,p:  1,xx=    7,yy=    2.0000010
                DETAIL:  11:v:  3b,p:  1,xx=    7,yy=    3.0000011
                DETAIL:  12:v:  6c,p:  5,xx=    5,yy=    1.00001
                DETAIL:  13:v:  65,p: 10,xx=    4,yy=    1.0001
                DETAIL:  14:v:fffe,p: 23,xx=    3,yy=    1.001
                DETAIL:  15:v:  74,p: 11,xx=    4,yy=    2.0010
                DETAIL:  16:v:   d,p: 12,xx=    4,yy=    3.0011
                DETAIL:  17:v:fffe,p: 50,xx=    2,yy=    1.01
                DETAIL:  18:v:fffe,p: 24,xx=    3,yy=    2.010
                DETAIL:  19:v:fffe,p: 12,xx=    4,yy=    4.0100
                DETAIL:  20:v:fffe,p:  6,xx=    5,yy=    4.01000
                DETAIL:  21:v:  66,p:  3,xx=    6,yy=    4.010000
                DETAIL:  22:v:  67,p:  3,xx=    6,yy=    5.010001
                DETAIL:  23:v:  63,p:  6,xx=    5,yy=    5.01001
                DETAIL:  24:v:   a,p: 12,xx=    4,yy=    5.0101
                DETAIL:  25:v:  20,p: 26,xx=    3,yy=    3.011
                DETAIL:  26:v:fffe,p:136,xx=    1,yy=    1.1
                DETAIL:  27:v:fffe,p: 58,xx=    2,yy=    2.10
                DETAIL:  28:v:fffe,p: 26,xx=    3,yy=    4.100
                DETAIL:  29:v:fffe,p: 12,xx=    4,yy=    6.1000
                DETAIL:  30:v:fffe,p:  6,xx=    5,yy=    6.10000
                DETAIL:  31:v:fffe,p:  3,xx=    6,yy=    6.100000
                DETAIL:  32:v:  7b,p:  1,xx=    7,yy=    6.1000000
                DETAIL:  33:v:  70,p:  2,xx=    7,yy=    7.1000001
                DETAIL:  34:v:  78,p:  3,xx=    6,yy=    7.100001
                DETAIL:  35:v:fffe,p:  6,xx=    5,yy=    7.10001
                DETAIL:  36:v:  61,p:  3,xx=    6,yy=    8.100010
                DETAIL:  37:v:  4c,p:  3,xx=    6,yy=    9.100011
                DETAIL:  38:v:fffe,p: 14,xx=    4,yy=    7.1001
                DETAIL:  39:v:  64,p:  7,xx=    5,yy=    8.10010
                DETAIL:  40:v:   9,p:  7,xx=    5,yy=    9.10011
                DETAIL:  41:v:fffe,p: 32,xx=    3,yy=    5.101
                DETAIL:  42:v:fffe,p: 16,xx=    4,yy=    8.1010
                DETAIL:  43:v:fffe,p:  8,xx=    5,yy=   10.10100
                DETAIL:  44:v:fffe,p:  4,xx=    6,yy=   10.101000
                DETAIL:  45:v:fffe,p:  2,xx=    7,yy=   10.1010000
                DETAIL:  46:v:  6d,p:  1,xx=    8,yy=   10.10100000
                DETAIL:  47:v:  7d,p:  1,xx=    8,yy=   11.10100001
                DETAIL:  48:v:  77,p:  2,xx=    7,yy=   11.1010001
                DETAIL:  49:v:fffe,p:  4,xx=    6,yy=   11.101001
                DETAIL:  50:v:  41,p:  2,xx=    7,yy=   12.1010010
                DETAIL:  51:v:  29,p:  2,xx=    7,yy=   13.1010011
                DETAIL:  52:v:fffe,p:  8,xx=    5,yy=   11.10101
                DETAIL:  53:v:fffe,p:  4,xx=    6,yy=   12.101010
                DETAIL:  54:v:  28,p:  2,xx=    7,yy=   14.1010100
                DETAIL:  55:v:  6f,p:  2,xx=    7,yy=   15.1010101
                DETAIL:  56:v:  73,p:  4,xx=    6,yy=   13.101011
                DETAIL:  57:v:fffe,p: 16,xx=    4,yy=    9.1011
                DETAIL:  58:v:fffe,p:  8,xx=    5,yy=   12.10110
                DETAIL:  59:v:  75,p:  4,xx=    6,yy=   14.101100
                DETAIL:  60:v:  23,p:  4,xx=    6,yy=   15.101101
                DETAIL:  61:v:  22,p:  8,xx=    5,yy=   13.10111


            asdfasdfasdf
            posted on 2009-11-14 12:24 TS,MPEG2,dvbc專家 閱讀(1708) 評論(0)  編輯 收藏 引用
            ts,ps,mpeg2 decoder and analysis,ts分析.
            久久www免费人成精品香蕉| 久久精品国产2020| 久久夜色精品国产| 久久精品亚洲日本波多野结衣| 久久久久久国产a免费观看黄色大片 | 久久国产精品免费一区| 久久精品一本到99热免费| 久久精品国产精品亚洲毛片| 国产精品久久午夜夜伦鲁鲁| 国产精品99久久不卡| 999久久久免费精品国产| 国产精品欧美久久久天天影视 | 欧美与黑人午夜性猛交久久久| 久久人人爽人人爽人人片AV麻烦| 国产精品一区二区久久国产| 久久免费观看视频| 久久精品国产WWW456C0M| 午夜精品久久久久久影视777| 国产韩国精品一区二区三区久久| 武侠古典久久婷婷狼人伊人| 久久久无码人妻精品无码| 国产成人精品久久一区二区三区av | 亚洲AV无一区二区三区久久 | 久久99热这里只频精品6| 久久综合狠狠综合久久| 亚洲一区中文字幕久久| 久久99这里只有精品国产| 日韩精品久久久久久久电影蜜臀| 久久久国产精华液| 久久亚洲国产精品五月天婷| 91久久精品国产成人久久| 久久这里有精品| 99久久精品免费看国产免费| 国产精品久久网| 亚洲成色WWW久久网站| 久久国产精品一区| 久久丫忘忧草产品| 久久久精品人妻一区二区三区四 | 一级做a爰片久久毛片16| 久久久久久久久久久精品尤物 | 无码精品久久一区二区三区 |