vp8 tree coding

来源:互联网 发布:java tomcat 部署 编辑:程序博客网 时间:2024/06/11 08:06

VP8 tree coding is similar to Huffman coding algorithm which use pre-defined coding tree to decode (encode) syntax element value from (into) binary bit strings.


“A tree representing an encoding of an alphabet of possible values always contains n-1 non-leaf nodes". In VP8, these coding trees are 2-forks trees stored in sequential arrays with positive items represent non-leaf nodes (sub-trees) while the non-positive items represent the leaf nodes.

Take ymode as example:

typedef enum{    DC_PRED,      V_PRED,       H_PRED,       TM_PRED,      B_PRED,       num_ymodes}intra_mbmode;
const tree_index ymode_tree [2 * (num_ymodes - 1)] ={  -DC_PRED, 2,         /* root: DC_PRED = "0", "1" subtree */  4, 6,               /* "1" subtree has 2 descendant subtrees */  -V_PRED, -H_PRED,    /* "10" subtree:  V_PRED = "100", H_PRED = "101" */  -TM_PRED, -B_PRED    /* "11" subtree: TM_PRED = "110", B_PRED = "111" */};

The ymode_tree can be represented as follow:


The tree decoding process is like this:

idx = 0;while(){    idx += read_one_bit();    item = coding_tree[ idx ];    if( item > 0 ) {        idx = item;         // jump to subtree    }else{        return (-item);     // got a leaf    }}


原创粉丝点击