h.264 SODB RBSP EBSP的區別

SODB 數據比特串-->最原始的編碼數據

RBSP 原始字節序列載荷-->在SODB的后面填加了結尾比特(RBSP trailing bits 一個bit“1”若干比特“0”,以便字節對齊。

EBSP 擴展字節序列載荷-->在RBSP基礎上填加了仿校驗字節(0X03)它的原因是: 在NALU加到Annexb上時,需要填加每組NALU之前的開始碼StartCodePrefix,如果該NALU對應的slice為一幀的開始則用4位字節表示,ox00000001,否則用3位字節表示ox000001.為了使NALU主體中不包括與開始碼相沖突的,在編碼時,每遇到兩個字節連續為0,就插入一個字節的0x03。解碼時將0x03去掉。也稱為脫殼操作。

網上查詢的區別:

在對整幀圖像的數據比特串(SODB)添加原始字節序列載荷(RBSP)結尾比特(RBSP trailing bits,添加一比特的“1”和若干比特“0”,以便字節對齊),再檢查RBSP 中是否存在連續的三字節“00000000 00000000 000000xx”;若存在這種連續的三字節碼,在第三字節前插入一字節的“0×03”,以免與起始碼競爭,形成EBSP碼流,這需要將近兩倍的整幀圖像碼流大小。為了減小存儲器需求,在每個宏塊編碼結束后即檢查該宏塊SODB中的起始碼競爭問題,并保留SODB最后兩字節的零字節個數,以便與下一宏塊的SODB的開始字節形成連續的起始碼競爭檢測;對一幀圖像的最后一個宏塊,先添加結尾停止比特,再檢測起始碼競爭。

程序:

typedef struct

{

int???????????? byte_pos;?????????? //!< current position in bitstream;

int???????????? bits_to_go;???????? //!< current bitcounter

byte??????????? byte_buf;?????????? //!< current buffer for last written byte

int???????????? stored_byte_pos;??? //!< storage for position in bitstream;

int???????????? stored_bits_to_go; //!< storage for bitcounter

byte??????????? stored_byte_buf;??? //!< storage for buffer of last written byte

byte??????????? byte_buf_skip;????? //!< current buffer for last written byte

int???????????? byte_pos_skip;????? //!< storage for position in bitstream;

int???????????? bits_to_go_skip;??? //!< storage for bitcounter

byte??????????? *streamBuffer;????? //!< actual buffer for written bytes

int???????????? write_flag;???????? //!< Bitstream contains data and needs to be written

} Bitstream; 定義比特流結構

static byte *NAL_Payload_buffer;

void SODBtoRBSP(Bitstream *currStream)
{
currStream->byte_buf <<= 1;  //左移1bit
currStream->byte_buf |= 1;   //在尾部填一個“1”占1bit
currStream->bits_to_go--;
currStream->byte_buf <<= currStream->bits_to_go;
currStream->streamBuffer[currStream->byte_pos++] = currStream->byte_buf;
currStream->bits_to_go = 8;
currStream->byte_buf = 0;
}

int RBSPtoEBSP(byte *streamBuffer, int begin_bytepos, int end_bytepos, int min_num_bytes)
{

int i, j, count;

for(i = begin_bytepos; i < end_bytepos; i++)
??? NAL_Payload_buffer[i] = streamBuffer[i];

count = 0;
j = begin_bytepos;
for(i = begin_bytepos; i < end_bytepos; i++)
{
??? if(count == ZEROBYTES_SHORTSTARTCODE && !(NAL_Payload_buffer[i] & 0xFC))
??? {
????? streamBuffer[j] = 0x03;
????? j++;
????? count = 0;??
??? }
??? streamBuffer[j] = NAL_Payload_buffer[i];
??? if(NAL_Payload_buffer[i] == 0x00)?????
????? count++;
??? else
????? count = 0;
??? j++;
}
while (j < begin_bytepos+min_num_bytes) {
??? streamBuffer[j] = 0x00; // cabac stuffing word
??? streamBuffer[j+1] = 0x00;
??? streamBuffer[j+2] = 0x03;
??? j += 3;
??? stat->bit_use_stuffingBits[img->type]+=16;
}
return j;
}


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254450.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254450.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254450.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 控件置于最頂層、最底層、隱藏、顯示

控件置于最頂層、最底層 pictureBox1.BringToFront();//將控件放置所有控件最前端 pictureBox1.SendToBack();//將控件放置所有控件最底端 控件隱藏、顯示 pictureBox1.Visible true;//顯示 pictureBox1.Visible false;//隱藏

習題8.3.(1)

1 #include <iostream>2 #include <iomanip>3 #include <cstdlib>4 using namespace std;5 6 #define OK 17 #define ERROR 08 #define OVERFLOW -29 typedef int Status; //Status 是函數返回值類型&#xff0c;其值是函數結果狀態代碼。 10 11 typedef in…

python:實例化configparser模塊讀寫配置文件

之前的博客介紹過利用python的configparser模塊讀寫配置文件的基礎用法&#xff0c;這篇博客&#xff0c;介紹下如何實例化&#xff0c;方便作為公共類調用。 實例化的好處有很多&#xff0c;既方便調用&#xff0c;又降低了腳本的維護成本&#xff0c;而且提高了代碼的可讀性。…

halcon 圓環類缺陷檢測的一種方法(極坐標變換法)

目錄簡介極坐標變換定義原理Halcon中的極坐標變換1、polar_trans_image_ext算子用法與參數剖析2、polar_trans_region_inv算子用法與參數剖析圓環類缺陷檢測思路與步驟Halcon實例實例簡介程序解讀思路剖析應用實例1項目介紹處理程序處理效果應用實例2項目介紹處理程序處理效果簡…

linux的mount命令詳解

linux下掛載&#xff08;mount&#xff09;光盤鏡像文件、移動硬盤、U盤、Windows和NFS網絡共享 linux是一個優秀的開放源碼的操作系統&#xff0c;可以運行在大到巨型小到掌上型各類計算機系統上&#xff0c;隨著 linux系統的日漸成熟和穩定以及它開放源代碼特有的優越性&…

cat命令

$ cat file 顯示文件中的內容$ cat -n file 可以顯示文件的內容和行號$ cat -b file -b與-n類似&#xff0c;但只標識非空白行的行號$ cat -e file 在每一行的末尾顯示“$”字符&#xff0c;在需要將多行內容轉換成一行時非常有用。$ cat 只是接收標準輸入的內容并顯示&#xf…

生成驗證碼的流程分析.

瀏覽器解析頁面, 攜帶uuid向服務器發送請求獲取圖片, 服務器生成圖片驗證碼, 返回圖片本身給瀏覽器, 客戶端根據圖片輸入驗證碼內容, 把輸入的內容發送給服務器, 服務器對比輸入的驗證碼是否正確.根據前端傳入的uuid從redis中獲取唯一圖片驗證碼名稱. 服務器: 圖片, 圖片內容…

Halcon圖像增強方法與原理概述

目錄簡介Halcon算子與算法原理1.灰度線性變換a、scale_imageb、scale_image_maxc、invert_image2.灰度非線性變換a、log_imageb、exp_image3.圖像增強對比度與照明度a、emphasizeb、illuminate4.直方圖均衡化a、equ_histo_image5.灰度圖像形態學a、 gray_openingb、gray_closin…

指針類型轉換(轉)

當我們初始化一個指針或給一個指針賦值時&#xff0c;賦值號的左邊是一個指針&#xff0c;賦值號的右邊是一個指針表達式。在我們前面所舉的例子中&#xff0c;絕大多數情況下&#xff0c;指針的類型和指針表達式的類型是一樣的&#xff0c;指針所指向的類型和指針表達式所指向…

143. Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes values. For example,Given {1,2,3,4}, reorder it to {1,4,2,3}. public void ReorderList(ListNode head) {if(h…

Halcon圖像濾波方法與原理概述

目錄簡介Halcon算子與算法原理基礎濾波a、均值濾波b、中值濾波c、高斯濾波d、導向濾波簡介 圖像濾波&#xff0c;即在盡量保留圖像細節特征的條件下對目標圖像的噪聲進行抑制&#xff0c;是圖像預處理中不可缺少的操作&#xff0c;其處理效果的好壞將直接影響到后續圖像處理和…

碎片化學習不是學習碎片,看這篇了解碎片化學習的真相

高效學習的定義&#xff1a;找到最適合自己的學習手法&#xff0c;在相對短的時間內集中注意力&#xff0c;以解決一個工作生活當中的難題為目的著手學習&#xff0c;你需要勤加練習&#xff0c;有時候還需要向名師求助。——許岑為什么會出現碎片化學習&#xff1f; 隨著科技的…

一篇能加深理解linux 虛擬文件系統的博文

URL: http://asionius.com/article/9 https://www.ibm.com/developerworks/cn/linux/l-vfs/轉載于:https://www.cnblogs.com/rocklee25/p/6926267.html

如何強制ffmpeg編碼時輸出一個關鍵幀

原文地址&#xff1a;http://www.ffmpeg.com.cn/index.php/%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6ffmpeg%E7%BC%96%E7%A0%81%E6%97%B6%E8%BE%93%E5%87%BA%E4%B8%80%E4%B8%AA%E5%85%B3%E9%94%AE%E5%B8%A7 如何強制ffmpeg編碼時輸出一個關鍵幀 AVCodecContext *c //編碼器環境句…

Halcon深度學習環境搭建(win下)全網最全教程

版權聲明&#xff1a;本文為博主原創文章&#xff0c;遵循 CC 4.0 BY-SA 版權協議&#xff0c;轉載請附上原文出處鏈接和本聲明。 本文鏈接&#xff1a;https://blog.csdn.net/cashmood/article/details/105042928 文章目錄halcon深度學習介紹系統與環境搭建1、對電腦系統與硬件…

第二周進度及工作量統計

項目&#xff1a;詞頻統計修改 項目類型&#xff1a;個人項目 項目完成情況&#xff1a;已完成 項目改進&#xff1a;第二次改進 項目日期&#xff1a;2016.9.14----2.16.9.14 CCSEIT分析需求&#xff0c;設計15:2015:30010編碼實現15:3016:20050文檔程序說明&#xff0c;隨筆2…

p1484 種樹

傳送門 題目 cyrcyr今天在種樹&#xff0c;他在一條直線上挖了n個坑。這n個坑都可以種樹&#xff0c;但為了保證每一棵樹都有充足的養料&#xff0c;cyrcyr不會在相鄰的兩個坑中種樹。而且由于cyrcyr的樹種不夠&#xff0c;他至多會種k棵樹。假設cyrcyr有某種神能力&#xff0c…

Dalsa線掃相機SDK開發-小試牛刀(1)

拿到了dalsa相機&#xff0c;可以用Sapera軟件配置相機&#xff0c;進行圖像采集。但是自己開發的話就得擼起袖子寫代碼了&#xff0c;查了兩篇不錯的博文&#xff0c;作為指導。 Sapera幫助文檔 - 《好好先生》專欄 - 博客頻道 - CSDN.NET http://blog.csdn.net/liubing8609/a…

用FFMPEG SDK進行視頻轉碼壓縮時解決音視頻不同步問題的方法(轉) PTS DTS

用FFMPEG SDK進行視頻轉碼壓縮的時候&#xff0c;轉碼成功后去看視頻的內容&#xff0c;發現音視頻是不同步的。這個的確是一個惱火的事情。我在用FFMPEG SDK做h264格式的FLV文件編碼Filter的時候就碰到了這個問題。經過研究發現&#xff0c;FFMPEG SDK寫入視頻的時候有兩個地方…

深度學習環境搭建(GPU)CUDA安裝(完全版)

文章目錄1、查詢電腦硬件2、環境搭建與軟件安裝1、安裝CUDA運算平臺軟件2、安裝cuDNN支持包3、配置環境變量3、驗證CUDA與cuDNN安裝前幾天在看深度學習。因為對深度學習不是很了解&#xff0c;在配置環境時走了許多彎路&#xff0c;也總是戰戰兢兢的。現在對深度學習的環境搭建…