bs t結構及其相關函式的定義

2021-06-12 08:41:06 字數 2268 閱讀 2757

參考bs.h

此部分內容對應h.264標準9.1節及[2]中6.4.13小節

bs_t結構描述了位元流的概念,從位元流中進行順序讀寫操作(類似於前向迭代器)

typedef struct bs_s

bs_t;

void bs_init( bs_t *s, void *p_data, int i_data )

使用p_data指向的i_data個位元組作為緩衝區初始化位元流s

int bs_pos( bs_t *s )

返回位元流s當前讀寫的位置(以位元為單位),類似於ftell的功能,

int bs_eof( bs_t *s )

當前是否已經位於位元流s的尾部,如果是,返回1;否則返回0

static uint32_t bs_read( bs_t *s, int i_count )

從位元流s中讀出i_count個位元的值並返回

static uint32_t bs_read1( bs_t *s )

從位元流s中讀出1個位元並返回之

static uint32_t bs_show( bs_t *s, int i_count )

從位元流中讀出i_count個位元的值並返回,但是不移動讀寫指標

此處實現似乎存在潛在的錯誤,即如果pstatic void bs_skip( bs_t *s, int i_count )

將位元讀寫位置向後移動i_count個位元

static int bs_read_ue( bs_t *s )

static int bs_read_se( bs_t *s )

static int bs_read_te( bs_t *s, int x )

static void bs_write( bs_t *s, int i_count, uint32_t i_bits )

向指定位元流s寫入i_count個位元的值i_bits;如果當前位置距離位元流尾部相差少於四個位元組??,則不做任何工作,直接返回;如果要寫入的值所需位元數大於i_count,則截掉高位後寫入。

static void bs_write1( bs_t *s, uint32_t i_bit )

向指定位元流s寫入乙個位元值i_bit;如果當前已處於位元流尾部,則不做任何工作,直接返回。

static void bs_align_0( bs_t *s )

向後調整位元流的讀寫位置,使其處於位元組對齊位置;中間這些跳過的位元位全部置0

static void bs_align_1( bs_t *s )

向後調整位元流的讀寫位置,使其處於位元組對齊位置;中間這些跳過的位元位全部置1

static void bs_align( bs_t *s )

與bs_align_0函式完全相同

void bs_write_ue( bs_t *s, unsigned int val )

以ue對映方式向位元流中寫入無符號值,具體過程為:

(1)    首先向位元流中寫入連續m個位元的0,其中m=floor(log2(val+1));

(2)    向位元流中寫入1個位元的1

(3)    向位元流中寫入m個位元,這m個位元的值應等於val+1-2m

static void bs_write_se( bs_t *s, int val )

以h.264標準table 9.3的對映方式向位元流中寫入。具體為:

當val<=0時,則以ue方式向位元流中寫入-2*val

當val>0時,則以ue方式向位元流中寫入2*val-1

static void bs_write_te( bs_t *s, int x, int val )

當x=1時,向位元流中寫入val的最低位元的反碼;當x>1時,按照ue對映方式寫入;其他情況下不執行任何操作。

static void bs_rbsp_trailing( bs_t *s )

無論位元流當前位置是否位元組對齊,都向其中寫入乙個位元1及若干個(0~7個)位元0,使其位元組對齊

static int bs_size_ue( unsigned int val )

返回以ue方式對val進行exp-goloma編碼所需要的位元數。

static int bs_size_se( int val )

返回以se方式對val進行exp-goloma編碼所需要的位元數。

static int bs_size_te( int x, int val )

返回以te方式對val進行exp-goloma編碼所需要的位元數。當x=1時,返回1;當x>1時,按照ue對映方式計算並返回;其他情況下返回0。

BST樹及其相關操作

又稱二叉排序樹 二叉搜尋樹 左子樹的所有節點小於根節點,右子樹均大於根節點。其中序遍歷的結果是從小到大排列的值。bst樹的基本構造 此處不僅有左右孩子,也新增了雙親節點。使其進行某些演算法更加方便。class bstnode public bstnode int x,bstnode pa publi...

BST的相關題目

題目大意 給出乙個序列,你需要判斷它是不是乙個bst的先序遍歷序列或者是不是bst映象的先序序列 所謂的映象就是所有的根結點的左子樹的所有結點值大於對應的根結點的值,而右子樹的所有結點值大於對應的根結點的值 如果是的話,就輸出yes以及樹的後序序列 如果不是的話,就輸出no 樣例 輸入 78 6 5...

BST樹的定義

二叉搜尋樹 bst樹 又叫二叉排序樹,二叉查詢樹。它或者是一棵空樹 或者是具有以下性質的二叉樹 1.每個結點都有乙個資料域,且所有節點的資料域互不相同 2.若它的左子樹不為空,則左子樹上的所有結點的值都小於根節點的值 3.若它的右子樹不為空,則右子樹上的所有節點的值都大於根節點的值 4.左子樹和右子...