日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

store_coding_state (cs_cm)的作用

發(fā)布時間:2023/12/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 store_coding_state (cs_cm)的作用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

//++ 以下是對當(dāng)前宏塊進(jìn)行編碼(這里的編碼主要目的是為了計算按當(dāng)前組合方式編碼
//++ 生成碼流的大小,因此編碼前要保存當(dāng)前編碼狀態(tài),編碼完成后必須恢復(fù)現(xiàn)場)
//=====?? S T O R E?? C O D I N G?? S T A T E?? =====
//---------------------------------------------------
store_coding_state (cs_cm); //++ 保存當(dāng)前編碼狀態(tài)

經(jīng)常會看到store_coding_state所以有的時候很不明白到底為什么要保存當(dāng)前編碼狀態(tài)。

今天看到firstime老大的注釋,我也些許明白了點。因為在編碼前要保存當(dāng)前編碼狀態(tài),這樣編碼完成后才能恢復(fù)現(xiàn)場。

看下代碼吧

* /brief
*??? store coding state (for rd-optimized mode decision)

void
store_coding_state (CSptr cs)
{
int i;

EncodingEnvironment *ee_src, *ee_dest;
Bitstream??????????? *bs_src, *bs_dest;

MotionInfoContexts?? *mc_src = img->currentSlice->mot_ctx;
TextureInfoContexts *tc_src = img->currentSlice->tex_ctx;
MotionInfoContexts?? *mc_dest = cs->mot_ctx;
TextureInfoContexts *tc_dest = cs->tex_ctx;
Macroblock?????????? *currMB = &(img->mb_data [img->current_mb_nr]);


if (!input->rdopt) return;//如果不是RDO,則返回

if (cs->symbol_mode==CABAC)
{
//=== important variables of data partition array ===重要的數(shù)據(jù)內(nèi)容數(shù)組的一些變量
//only one partition for IDR img對于IDR圖像只有一個分區(qū)
for (i = 0; i <(img->currentPicture->idr_flag? 1:cs->no_part); i++)//如果是IDR則只執(zhí)行一次,其他的執(zhí)行no_part次
{
??? ee_src = &(img->currentSlice->partArr[i].ee_cabac);
??? bs_src =?? img->currentSlice->partArr[i].bitstream;
??? ee_dest = &(cs->encenv?? [i]);
??? bs_dest = &(cs->bitstream[i]);

??? memcpy (ee_dest, ee_src, sizeof(EncodingEnvironment));
??? memcpy (bs_dest, bs_src, sizeof(Bitstream));
}

//=== contexts for binary arithmetic coding ===儲存算術(shù)編碼的上下文
??? memcpy (mc_dest, mc_src, sizeof(MotionInfoContexts));
??? memcpy (tc_dest, tc_src, sizeof(TextureInfoContexts));

}
else
{
??? //=== important variables of data partition array ===在數(shù)據(jù)塊重要的變量
for (i = 0; i <(img->currentPicture->idr_flag? 1:cs->no_part); i++)
{???
??? bs_src =?? img->currentSlice->partArr[i].bitstream;??
??? bs_dest = &(cs->bitstream[i]);
????? memcpy (bs_dest, bs_src, sizeof(Bitstream));
??? }
}
//=== syntax element number and bitcounters ===語法元素的成員和位數(shù)
cs->currSEnr = currMB->currSEnr;
memcpy (cs->bitcounter, currMB->bitcounter, MAX_BITCOUNTER_MB*sizeof(int));

//=== elements of current macroblock ===儲存元素和現(xiàn)在的宏塊
memcpy (cs->mvd, currMB->mvd, 2*2*BLOCK_MULTIPLE*BLOCK_MULTIPLE*sizeof(int));
cs->cbp_bits = currMB->cbp_bits;

總結(jié)

以上是生活随笔為你收集整理的store_coding_state (cs_cm)的作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。