1. 程式人生 > >關於H.264的一些問題的整理

關於H.264的一些問題的整理

0孤獨地優化
11.16 15:38

Q:下面程式碼的功能是什麼?
if(pix & (~255))
{
pix1[x] = (-pix) >> 31;
}
else
{
pix1[x] = (unsigned char)pix;
}
A:
pix的定義是short型,pix1定義的是unsigned char型
這段程式碼可以這麼理解(這段程式碼的功能):如果pix<0,那麼pix1[x]=0,如果pix>255,那麼pix1[x]=255,否則pix1[x]=pix;

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

霄宇
11.16 16:00

Q:編解碼
是以什麼為單位進行的?
A:在看編碼解碼的框圖的時候,如果你以幀為輸入單位來看,可能你會看不懂,所以應該以巨集塊為輸入單位來看,因為編碼解碼都是以巨集塊為單位,逐個巨集塊編解碼,然後組合為一幀影象的。這樣你就能看明白了。所以個人認為編解碼應該是以巨集塊為單位進行的。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之驕子
11.16 22:42

Q:為何在cavlc編碼的時候,第一個負數要加1?
A:如果拖尾小於3,說明第一個level的絕對值值肯定大於1。因此,level為正時,減1;為負時加1。可降低碼流

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Juxtapose
11.17 11:35

Q: YCrCb 4:2:0是什麼?像4:4:4和4:2:2一樣表示 Y:Cr:Cb是4:2:0嗎?
A: 不要讓它騙了,我覺得它所表達意思應該是4:1:1,還有如果你看得是像
http://www.cs.sfu.ca/CC/365/li/material/notes/Chap3/Chap3.4/Chap3.4.html
裡面這樣的對4:2:0的說明的爛圖的話,可能看半天也不明白,建議看 <Video Codec Design>裡面相應的圖。裡面的說明也很詳細:
4 : 2 :0 means that Cr and Cb each haveh alf the horizontal and vertical resolution of Y, as
shown. The term '4 : 2 : 0' is rather confusing: the numbers do not actually have a sensible
interpretation and appear to have been chosen historically as a 'code' to identify this particular sampling pattern.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

0孤獨地優化
11.17 15:09

Q:H.264
中,術語IDR的意思是什麼,有什麼用?
A:IDR-instantaneous decoding refresh (IDR)picture;
A coded picture in which all slices are I or SI slices that causes the decoding process to mark all reference pictures as "unused for reference" immediately after decoding the IDR picture. After the decoding of an IDR picture all following coded pictures in decoding order can be decoded without inter prediction from any picture decoded prior to the IDR picture. The first picture of each coded video sequence is an IDR picture.
也就是說,IDR的出現其實是相當於向解碼器發出了一個清理reference buffer的訊號吧,上面說前於這一幀的所有已編碼幀不能為inter做參考幀了。
附Q:天之驕子說--普通I幀和IDR可能有很多區別,但I可以參考其他幀而IDR不行,哪位高手可以解釋這個問題呢?

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之驕子
11.18 10:42

Q:CABAC中開始時各字元出現的概率是怎麼得到的?
A:基於查表實現的

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

風雷
11.18 10:45

Q:我們可以從一幅影象的自相關函式圖中得到不同影象之間的相似程度.在中點處的最頂點表示影象未經移動時的影象.當空域移動拷貝被從原始影象的任一個方向移除的時候,這個函式值就會急驟下降,就這說明了一個影象取樣值的鄰域內是高度相關的.
我想問一下,空域移動拷貝被從原始影象的任一個方向移除的時候,這是一個什麼過程
A:空域移動就表示平移,求自相關函式就包含平移這個過程.你看一維的 R(t,delta)=E[X(t)*X(t+delta)] ,二維不過平移多個方向而已

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

風雷
11.18 21:11

意思是說264標準只定義了碼流的格式 編碼器實現是各公司自己的事,只要形成的碼流符合標準就行 解碼器必須按照這個格式來,這樣任何符合標準的碼流都可以解出來

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

肅明智
11.19 08:46

Q:What is RVLC?
A:It is a VLC method which can be decoded from left to right and from right to left exclusively.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

藍風車
11.19 14:21

Q:如果不用率失真最優化, 為什麼選擇SATD+delta×r(mv,mode)作為模式選擇的依據?為什麼運動估計中,整象素搜尋用SAD,而亞象素用SATD?為什麼幀內模式選擇要用SATD?
A:
SAD即絕對誤差和,僅反映殘差時域差異,影響PSNR值,不能有效反映碼流的大小。SATD即將殘差經哈德曼變換的4×4塊的預測殘差絕對值總和,可以將其看作簡單的時頻變換,其值在一定程度上可以反映生成碼流的大小。因此,不用率失真最優化時,可將其作為模式選擇的依據。
一般幀內要對所有的模式進行檢測,幀內預測選用SATD的原因同上。
在做運動估計時,一般而言,離最優匹配點越遠,匹配誤差值SAD越大,這就是有名的單一平面假設,現有的運動估計快速演算法大都利用該特性。但是,轉換後SATD值並不滿足該條件,如果在整象素中運用SATD搜尋,容易陷入區域性最優點。而在亞象素中,待搜尋點不多,各點處的SAD差異相對不大,可以用SATD選擇碼流較少的匹配位置。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之驕子
11.20 22:16

Q:RDO模型用來幹什麼?RQ模型又用來幹什麼?
A:RDO用來確定編碼模式的,保證位元速率位元數和影象失真的最佳權衡點,而RQ是在上一層位元速率數一定的情況下用來確定下一層分配的位元數。RQ先於RDO進行。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

stillwater
11.22 14:00

Q:幀,場,影象的聯絡與區別是什麼?
A:在分析標準時要分清幀(frame)、場(field)、影象(picture)很關鍵。
frame;逐行掃描影象
field:隔行掃描影象,偶數行成為頂場行,奇數行稱為為底場行,所有頂場行稱為頂場,同樣所有底場行稱為底場。
pictue:場和幀都可認為是影象
[注:SUPERPUMA語]
頂底場分別編碼,對應位置的巨集塊叫做巨集塊對。頂場對已編碼的頂/底場預測編碼。底場一般對頂場預測編碼
[注:藍風車 語]

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

SUPERPUMA
11.23 22:27

Q:如何在VC下編譯JM
A:編碼步驟:
開啟tml.dsw,依次選擇project->settings,在settings for那一欄中選中lencod,在右邊的debug選項卡做如下填寫:
Executable for debug session: 和tml.dsw同一資料夾,我填的是\JM\bin\lencod.exe,具體有什麼講究我沒有研究,應該沒很大關係。
Working directory:./bin
Program arguments:-d encoder.cfg
Remote executable path and file name:可不填
然後,在vc中選擇build->set active configurations,再選擇lencod-Win32 debug.
下一步compile、build、execute,在這些之後,就完成了編碼的工作。
解碼步驟:
重複以上編碼操作,不同之處是在settings for那一欄中選中ldecod,Executable for debug session填的路徑和編碼時應一樣,Program arguments填decoder.cfg,build->set active configurations中選擇ldecod-Win32 debug,其他不變。之後compile、build、execute,解碼完成!
還有一點需要注意:編碼的yuv影象要放在bin資料夾中!

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Stanley
11.24 19:12

Q:關於H264 ASIC設計的難點。
A:
1)怎樣設計一個高效的Memory(SDRAM or DDR)系統是其中最大的挑戰。MC最少的單元是4x4,因為在一行中只有4個Pixel,必然會導致memory miss rate的增加,從而降低memory BW的利用率。也許可以利用影象的空間相關性,設計一個類似於CACHE的結構。但CACHE的大小是一個值得探討的問題。
2)怎樣用相同的硬體結構來實現幀內預測和幀間預測。
3)怎樣用一套硬體結構來同時實現mpeg2/4,WMV.因為核心的演算法,例如DCT都不一樣。
4)怎樣降低熵解碼的複雜度。
5)可以最多允許多少個reference Frame的問題。這對整個硬體構架沒有任何影響。但直接影響成本,也就是片外要用多少M memory的問題。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之驕子
11.25 16:57

H264就是H.264,是視訊壓縮標準,就好比MPEG一樣
X264、T264與JM一樣,都是該標準的測試模型,或者說該標準的程式實現

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

盒飯+涼粉
11.26 11:28

因為264採用了多幀預測,就有可能在display order下I幀後的P會參考I幀前的幀,這樣在random access時如果只找I幀,隨後的幀的參考幀可能unavailable,IDR就是這樣一種特殊
的I幀,把它定義為確保後面的P一定不參考其前面的幀,可以放心地random access。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

寶瓜
11.28 15:42

Q:對於幀間編碼,在一個巨集塊內,可以同時存在的模式?
A:在同一巨集塊內,如果用模式16*8,那麼巨集塊分為兩塊,均為16*8;8*16類似.如果用p8*8模式,對於8*4和4*8把一個8*8塊分為兩個塊,對於4*4則分為4個.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Paul
11.29 20:48

Q:
幀間預測時,MV,MVp,MVD分別是什麼?
A:
me得到的是mv
預測得到的是mvp
差值是mvd
MV:運動向量,參考幀中相對於當前幀的偏移
MVp:參考運動向量
MVD:兩個向量間的差別

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

春秋冬夏
12.02 22:17

Q: I幀和P幀的概念比較好懂,B幀的概念有些模糊,只知道加了B幀影象質量會更好,請問對B幀該怎麼理解?
A: B 幀在 MPEG-4 中有四種參考模式,如果是同時參考前後的畫面壓縮,則記錄的是 和 (前畫面 pixel 值 + 後畫面 pixel 值)/2 的差值,也就是 和 「前後畫面的平均」的差值。所以記錄的差值個數和 P 幀一樣,只有一個,沒有增加。而因為 B 幀位於前後畫面的中間,以「前後畫面的平均」,也就是「前後畫面的中間值」來作為預測數值(預測 B 幀的 pixel 數值為多少?如果有誤差,再記錄差值),這樣這個預測數值會比單獨使用前一個畫面來預測,更接近目前真正的 B 幀的數值,可想而知,如此所需要記錄的差值就會很小甚至可以根本不用記錄,所以便可以省下很多的 bits,提高壓縮率。
除了壓縮率以外,B 幀對畫質的影響也是有的,因為 B 幀這種參考前後畫面的特性,等於有內插(interpolation)的效果,所以可以減少噪訊。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天之驕子
12.03 17:26

Golomb 用於運動向量,模式型別,頭資訊等編碼
CAVLC用於殘差編碼
CABAC都可以

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.08 11:09

Q:Access Unit:
A:
A set of NAL units always containing a primary coded picture. In addition to the primary coded picture, an access unit may also contain one or more redundant coded pictures or other NAL units not containing slices or slice data partitions of a coded picture. The decoding of an access unit always results in a decoded picture.

As mentioned earlier, slices are individually coded and are the coding units, while pictures plus associated data can be considered as being the access units.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

愛咋咋地
12.11 10:36

Q:frame coding & field coding:
A:
Frame coding is typically preferred when the video scene contains significant detail with limited motion. Field coding typically works better when there is fast picture-to-picture motion.
one frame equal to two field
H.264中使用了4種編碼模式:Frame、Filed、PAFF、MBAFF

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.13 08:50

巨集塊: 一個編碼影象分成若干個巨集塊,一個巨集塊由一個16×16亮度象素和附加的一個8×8Cb和一個8×8Cr彩色象素組成

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.13 08:52

片: 一個視訊影象可編碼成一個或多個片,每片包含整數個巨集塊(MB),即至少一個MB,最多時每片包含整幅影象的MB。(每片的MB不固定)
設片的目的:
限制誤碼的擴散和傳播,編碼片相互獨立
某片的預測不能以其他片中的MB做參考

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.14 07:59

Q:rdp(user data packet protocol) 和 (rtp)real-time transport protocol有什麼區別?
A:
RTP是為了實時傳輸而在源資料上加了一些時間控制資訊
UDP只是為了傳輸資料,udp的包可以加上rtp的頭,成為一個rtp的資料包
rtp3984 拆分3種包:
單一NALU包
聚合包
分割包
經過測試發現,無線網路下,一包大小不能超過1400,只能傳QCIF,QP35

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

肅明智
12.15 22:31

Q:相對PAFF,MBAFF的作用大不大?
A:有優勢,但不明顯。只有當影象運動劇烈的時候,優勢才會比較明顯。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

隨意
12.17 11:13

Q:
變換量化公式: |Zij|=(|Wij|.MF+f)>>qbits 中的f是什麼?
A:
f是一個修正引數,對於幀內編碼巨集塊f=(2^qbits)/3,對於幀間編碼巨集塊f=(2^qbits)/6。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

隨意
12.17 11:18

Q:
整數DCT變換之後,為什麼還要對直流分量進行哈達瑪變換??有什麼意義?
A:
因為在幀內編碼巨集塊中大多數的能量都集中在直流係數上,這種變換有利於進一步壓縮4×4的亮度直流訊號的相關性。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

巨木
12.19 01:50

Q:white paper中給出幀內預測9種模式,vertical和horizontal容易理解,不知其他模式是依據怎樣的演算法來進行預測的。
A:標準P91-96給出了演算法。
如8.3.1.2.8 Specification of Intra_4x4_Vertical_Left prediction mode中指出:
This Intra_4x4 prediction mode shall be used when Intra4x4PredMode[luma4x4BlkIdx] is equal to 7.
The values of the prediction samples pred4x4L(x,y),with x,y=0...3 are derived as follows:
For y=0 or y=2,
pred4x4L(x,y)=(p(x+(y>>1),-1)+p(x+(y>>1)+1,-1)+1)>>1;
Otherwise,
pred4x4L(x,y)=(p(x+(y>>1),-1)+2*p(x+(y>>1)+1,-1)+p(x+(y>>1)+2,-1)+2)>>1;
hehe,>>為無符號數右移操作。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

權大頭
12.26 11:40

引數集
在以往視訊編解碼標準中,GOB\GOP\影象頭資訊是至關重要的,包含這些資訊的包的丟失將直接導致與這些資訊相關的資料不可用,因此這些標準大都採用了冗餘編碼技術來保護這些頭資訊。為解決這些問題,H.264將這些很少變化並且對大量VCL NALU起作用的資訊放在引數集中傳送。引數集分為兩種,即序列引數集sequence parameter set和影象引數集picture parameter set,前者對一系列連續編碼影象起作用,後者對連續編碼影象序列中的單獨影象起作用。VCL NALU通過標識位來指定它所參考的引數集。為適應多種網路環境,引數集可以帶內傳送,也可以採用帶外方式傳送

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

冬哥哥
01.09 14:44

Q:關於對除開拖尾係數以外的非零係數Level編碼
A:
level的編碼和AVS一樣,查6個表,表也和AVS的一樣
JM有演算法,可以參看
writeSyntaxElement_Level_VLCN
函式。.
這個演算法就是生成6個表的演算法。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

藍色陽光
01.11 10:09

Q:h264在網路上以udp方式傳輸問題
在mpeg4標準中,都是通過rtp協議把視訊幀分成一個個的包加上rtp頭再發送,在h264中,是由nal直接分片成包的還是要通過rtp分呢?要不要加rtp頭
不好意思剛剛看到
A:http://www.chinavideo.org/index.php?option=com_content&task=view&id=67&Itemid=5&limit=1&limitstart=3

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

H264研究院
01.15 10:22

Q:FMO的優處和劣處?
A:劣處是FMO模式打亂了原巨集塊順序,降低了編碼效率,增加了時延;
優處是增強了抗誤碼效能。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

城裡漢子
01.16 14:08

FrameSkip,該引數是對原始YUV幀丟棄數,就是說每隔一幀(I或者P,不包括B)丟棄FrameSkip幀。
NumberBFrames,就是兩個編碼幀中間B幀的數目,該數必須小於FrameSkip
FramesToBeEncoded,總共要編碼的幀數,不包括B幀.
IntraPeriod,每IntraPeriod幀(I/P幀)有一個I幀編碼

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

喆/ka
03.04 23:10

在變換編碼的階段,根據block的型別有三種變換編碼,
block的型別包括1、亮度的4*4直流係數組成的塊;2、色度的2*2的直流係數組成的塊;3、其它型別的塊(包括亮度的4*4交流係數組成的塊(在DC係數的位置設為0);色度的4*4交流係數組成的塊(在DC係數的位置設為0);採用4*4幀內編碼模式的4*4塊;運動補償的4*4的幀間預測塊)
其中亮度4*4DC係數組成塊和色度2*2的直流係數組成的塊僅僅在16*16的幀內預測模式下會出現。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

野狼
03.06 17:15

Q:在進行運動估計和運動補償時,所用的塊匹配快速演算法有哪些?匹配準則又有哪幾種?
A:塊匹配快速演算法有:正交搜尋演算法(OSA)、交叉搜尋演算法(CSA)、共軛方向搜尋(CDS)、三步搜尋(TSS)、二維對數(TDL)和全搜尋(FS)、鑽石演算法等等。匹配準則一般有:歸一化互相關函式(NCCF)、均方誤差(MSE)、絕對誤差和(MAD)等等。MAD最常用。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

rayu
03.08 11:25

Q:jm各個版本之間的程式碼做了些什麼改動,有沒有說明這些的文件啊?
A:每個版本原始碼的根目錄下都有一個 change.txt 檔案,裡面詳細記錄了所有版本的更新。
補充:為何已經有了 JM 10.2,大家仍偏好用 8.6 呢 ?
風輕回答:針對物件不同,jm90以上全部是針對高保真的視訊的。86基本上可以滿足一般處理的所有要求。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

喆/ka
03.09 09:19

Q:PicAFF和MbAFF的區別是什麼?
A:PicAFF和MBAFF是決定壓縮場的兩種方式,PicAff(picture adaptive field frame)是在影象層來說的,此時幀被分成兩個場,並且這兩個場單獨壓縮,這兩個場在分別分成16*16的巨集塊,然後對巨集塊進行編碼,編碼的時候對場中的巨集塊單獨編碼,在某個場編碼完後,才會編另一個場的碼。
而MBAFF(MicroBlock Adaptive Filed/Frame)是在巨集塊層(16*32)上進行編碼,它將該巨集塊層即可以按單獨的場,也可以將兩個場合併成一個進行編碼,在分成兩個單獨的巨集塊(16*16)編碼的時候,是先編碼一個場的巨集塊,再編碼另一個場的巨集塊,這和PicAFF的區別就是對於整個影象來說各個場的巨集塊還是交叉編碼的;在合併成單獨的一個巨集塊編碼時,在一個巨集塊(16*16)內,即包括奇數場的元素,也包括偶數場的元素,即巨集塊對,同時同一幅影象值(就算是上一場)也不能做參考。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

隨意
03.10 09:13

Q:用h264設計的解碼器是不是可以解任意編碼器編的碼?是根據檔次設計解碼器嗎?
A:不可以解任意編碼器編的碼。也不是根據檔次來設計編解碼器。要根據具體的情況。
如果是按照H.264的標準來設計編解碼器,便是通用的;若編解碼器的設計有自己的特點,便不能成為通用的編解碼器。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

隨意
03.10 10:03

Q:在VC環境下是如何讀入*.yuv序列的?
A:把*.yuv檔案當作一般的檔案讀就可以了。
如下:

#include <stdio.h>
#include <malloc.h>

void main()
{
char *Y;
char *Cb;
char *Cr;
int width = 352, height = 288;
FILE *fp;
FILE *fy;
int i;

Y = (char*)malloc(width*height);
Cb = (char*)malloc(width*height/4);
Cr = (char*)malloc(width*height/4);

fp= fopen("input.yuv","rb");

if(fp == NULL)
printf("open input.yuv failed\n");

fy = fopen("output.yuv", "ab+");
if(fy == NULL)
printf("open output.yuv failed\n");

for(i = 0; i<1; i++)
{
//fseek(fp, i*width*height, 0);
if(0 == fread(Y, width*height, 1, fp))
printf("read error\n");
if(0 == fwrite(Y, width*height, 1, fy))
printf("write error\n");

fread(Cb, width*height/4, 1, fp);
fread(Cr, width*height/4, 1, fp);
fwrite(Cb, width*height/4, 1, fy);
fwrite(Cr, width*height/4, 1, fy);
}

fclose(fp);
fclose(fy);
free(Y);
free(Cb);
free(Cr);
}

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘位元神箭
03.12 16:09

Q:SODB,RBSP,EBSP的區別
A:SODB:最原始的編碼資料,沒有任何附加資料
RBSP:在SODB的基礎上加了rbsp_stop_ont_bit(bit 值為1),並用0按位元組補位對齊,位元組對齊後,後面還有可能存在若干組16bits的0x0000(參考標準中的One or more cabac_zero_word 16-bit syntax elements equal to 0x0000 may be present in some RBSPs after the rbsp_trailing_bits( ) at the end of the RBSP.)
EBSP:在RBSP的基礎上增加了防止偽起始碼位元組(0X03)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘位元神箭
03.12 16:10

Q:碼流的讀取位置
A:當資料流儲存在介質上時,此時讀取用GetAnnexbNALU (nalu);
否則,資料流應該來自分組交換網路,此時讀取用GetRTPNALU (nalu)
二者的區別:
碼流格式為Byte stream format時,呼叫函式GetAnnexbNALU(nalu);此時碼流中包含起始碼字首(start_code_prefix_one_3bytes),3個位元組,值為0x00 00 01。並可能包含連續若干位元組的0(leading_zero_8bit),拖尾位元組0。起始碼字首是為了表明碼流的開始,與AVS相似。因為可能存在填充bit 0,所以也可能包含有leading_zero_8bit,即起始碼字首的表現形式可能是0x00 00 00 01或其他值。但這些值必須包含0x00 00 01。對原始碼流提取後,這些值均被丟棄。

如果碼流是按RTP協議傳輸,則呼叫GetRTPNALU(nalu)。並對RTP包進行拆封。在H.264中,對RTP包頭的各段的值進行了限制,這些被限制的值必須滿足條件,否則認為出錯。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘位元神箭
03.12 16:11

Q:MBAFF的問題
A:幀模式下的MBAFF,每個巨集塊對由本幀的巨集塊組成。
場模式下的MBAFF,把兩場組成一幀後,在按照幀的方式來組成巨集塊對。實際上是每個巨集塊對由頂場的一個巨集塊和底場的一個巨集塊組成。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘位元神箭
03.12 16:13

Q;CAVLC,Exp-Golomb的區別
A:Exp-Golomb的字首和字尾根據階數K的不同,可能是對稱,字尾比字首的長度多1等情況。
負數的情況下,通過公式(-1)k+1 Ceil( k÷2 ),把解析出來的哥倫布碼值還原為原始的語法元素值;正數也有相應的對應方法。
CAVLC的字首和字尾可能對稱,也可能不對稱,(大多數情況下都是不對稱的)而且字尾還可以不存在,字尾的長度也是根據上下文環境來判斷的,字尾的取值是根據編碼表查詢的,
對於正數,編碼後的字尾部分的最後1 bit一定是0(若存在後綴);對於負數,其一定是1(若存在後綴)。
CAVLC與Exp-Golomb的字首的表現形式都是1,01,001,0001......

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

丘位元神箭
03.12 16:15

Q:CAVLC的過程
A:
編碼
4×4的殘差塊通過Zig-Zag掃描,得到一系列字元,如:0,3,0,1,-1,-1,0,1,0......
由此序列推匯出以下變數:TotalCoeffs(全部的非零係數,包括拖尾係數),TotalZeros(最後一個非零係數前面的所有0的個數,方向為從左到右,比如上面的序列中,最後一個非零係數為1),TrailingOnes(託尾係數的個數,並規定不能超過3個),然後通過NC值查表,把
TotalCoeffs ,和TrailingOnes的組合進行編碼,稱為編碼元素coeff_token。接下來,對每個拖尾係數的符合編碼,0表示+,1表示負。再接下來,對剩下的非零係數編碼(此時拖尾係數已經被編碼了,不再包括),編碼方向為從右到左,比如上面的序列中,先編碼1,再編碼3。這些係數被編碼後,是由level_prefix和level_suffix兩部分組成的。level_prefix的值通過查表得出,level_suffix是由若干個0組成,0的個數由suffixLength決定。再接著對TotalZeros的值編碼。然後對RunBefore(每個非零係數前零的個數)進行編碼,這個方向也是從右到左,並且最後一個(從左邊數的第一個)非零係數前零的個數不需要編碼,因為後面的編過後,剩下多少個0只有一個存放位置,就是最前面。
解碼
由計算出的bit串長度讀出相應的bits,通過查表得到TotalCoeffs和TrailingOnes的值,此時無輸出,接著讀取拖尾係數的符合,由編碼的順序知,先讀到的是最後一個拖尾係數。解碼完拖尾係數並依次輸出,接下來是剩下的非零係數的值,通過查表解碼並輸出。然後解碼TotalZeros,此時輸出不變,仍為以前的解碼值。接下來解碼RunBefore,因為編碼時是從右往左編的,故第一個解碼出來的RunBefore應該插到第一個解碼出的拖尾係數的前面,即插入的方向也是從右到左,最後一步時,剩下的RunBefore都插入到最前面。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

苦工
03.14 10:01

Q:哪位能講一下標準裡面的座標的問題,分不清到底指的是塊,巨集塊,尤其是MBAFF時?比如第6章逆掃描時的這兩個公式:y = yO + ( mbAddr % 2 ) * 16(幀),
y = yO + ( mbAddr % 2 ) (場)
A:這是計算畫素座標的計算公式,MBADDR時是以巨集塊對出現的,MBADDR是巨集塊對的號碼,所以場模式下是不要乘16的,TOP FIELD和BOTTON FIELD的畫素是獨立計算的。表達可能不大準確,也可能有誤,希望各位指點。謝謝

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

~青兒~
03.24 09:23

Q:AVC和AVS之間的關係?
A:AVS是我國具備自主智慧財產權的第二代信源編碼標準,是數字音視訊產業的基礎技術標準。AVS共包括9項標準,其原始碼是全開放式的。
AVC:MPEG4 AVC簡稱AVC,也稱JTV、H.264。
AVC僅是一個視訊編碼標準,而AVS是一套包含系統、視訊、音訊、媒體版權管理在內的完整標準體系,可為數字音視訊產業提供全面的解決方案。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

alex
03.26 21:04

Q:為什麼要在計算楨內DC預測模式時要+2,+4?
A:16*16和4*4的楨內DC預測模式中+2,+4的目的是為了四捨五入,使預測值更精確~~~
如(A+B+C+D)/4=190.1,那麼約等於190
(A+B+C+D)/4=190.9,也是約等於190
這樣誤差就會大些
所以加上0.5後190.1=190.6,約等於190
而190.9+0.5後=191.4,約等於191
這樣保證了精確性~~~

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

曉曉
04.03 11:32

1、為什麼量化係數的陣列是取[6][4][4]呢?
答:設變數p為需要變換的係數,c(p) 為變換之後的係數,其變換如下:
|1 1 1 1| |p00 p01 p02 p03| |1 2 1 1| |aa ab/2 aa ab/2|
|2 1 -1 -2| |p10 p11 p12 p13| |1 1 -1 -2| * |ab/2 bb/4 ab/2 bb/4|
|1 -1 -1 1| |p20 p21 p22 p23| |1 -1 -1 2| |aa ab/2 aa ab/2|
|1 -2 2 -1| |p30 p31 p32 p33| |1 -2 1 -1| |ab/2 bb/4 ab/2 bb/4|
我們可以看到位於p00、p02、p20、p22位置的係數需要乘aa,p11、p13、p31、p33的係數需要乘bb/4,其餘的係數需要乘ab/2,這裡a = 0.5,b = sqrt(0.4),c = 0.5。然而整數變換中的乘法運算可以與量化過程的除法運算糅合起來,這樣就產生了你所提到的quant_coef[6][4][4]。第一個分量取6,是因為量化階每隔6就增加一倍,因此只需要記錄下量化階為0-5時的各個係數的大小,而後兩個分量取4則是為了與整數變換的大小相匹配

2、int cof[4][6][4][4]; //!< correction coefficients from predicted
這個變數是幹什麼用的啊?
答:這個變數用來儲存解碼並且逆量化之後的係數,其中cof[4][6]的內容如下:
|y0 y1 y4 y5 |
|y2 y3 y6 y7 |
|y8 y9 y12 y13|
|y10 y11 y14 y15|
|u0 u1 v0 v1 |
|u2 u3 v2 v3 |

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

大象
04.04 18:35

Q:IDR picture指什麼?
A:instantaneous decoder refresh picture,是一種只包含I-slices的picture. IDR picture之後的picture不使用IDR picture之前的picture作為運動估計的參考picture.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

alex
04.05 00:04

Q:什麼是SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE?
A:SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即絕對誤差和
SATD(Sum of Absolute Transformed Difference)即hadamard變換後再絕對值求和
SSD(Sum of Squared Difference)=SSE(Sum of Squared Error)即差值的平方和
MAD(Mean Absolute Difference)=MAE(Mean Absolute Error)即平均絕對差值
MSD(Mean Squared Difference)=MSE(Mean Squared Error)即平均平方誤差

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

美麗人生
04.17 16:42

Q:cs->no_part = input->partition_mode==0?1:3這句是什麼意思呀?
A:將資料劃分成slice的數目,如果input->partition_mode==0那麼就是隻有一個劃分,反之三個

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

小華 *^-^*
04.18 16:43

Q:在linux下,編譯x264需要做哪些準備工作?
A:下載nasm-0.98.38-2.i386.rpm 安裝,如果以前編譯過了,先make clean 下, 然後執行./configure --enable-debug  接著make  就可以象 vc裡一樣單步調式了

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

大海
04.20 15:57

Q:在做預測時Intra模式為什麼要用未經濾波的影象做參考而在Inter模式下,使用經過濾波的影象作參考影象呢?
A李士平語)首先,這裡說清楚一點,幀內的參考和幀間的運動估計,用的都是原始的影象資料。而補償的時候才用重建的影象,現在的問題變成是:為什麼在補償(預測)的時候,intra用未deblock的參考象素,inter用經過deblock的參考影象。 後者可以理解,主要是前者的問題。我的理解有下面幾點:
1。如果要用deblock的參考象素,那麼每個塊編碼完畢後都要做deblock,和原來整幀做deblock相比,速度慢了
2。在jm中,如果應用其rdo策略,亮度4*4和16×16的參考象素要做兩次deblock
3。deblock對於幀內預測是否真的有效:從原理角度講,deblock對psnr不會有大的貢獻,也就是說不會讓重建的參考象素更接近於原始值,因此,我覺得幀內預測是否採用delobock過的參考象素對預測結果影響不大
(藍風車語)D和B的水平濾波、B和C的水平濾波會改變O塊上邊一排參考象素值;D和A的垂直濾波會改變O塊左邊的參考象素值 改變的結果就是使得這些象素值趨同。也使得對幀內各模式的代價值趨同 模糊了各模式之間的差異 引起了殘差的增大和影象質量的降低。(圖片沒有傳上去,聊天記錄裡有,在06年4月18號14:24:13時刻。)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

道非道
04.27 09:42

Q:資料重排列:0,3,0,1,-1,-1,0,1,0…… 拖尾係數的數目(TrailingOnes)= 3; TrailingOnes是什麼意思??
A:TrailingOnes是最後三個(+-)1,(TrailingOnes)<= 3,超過三個的(+-)1當正常的係數處理;其主要目的是為了節省碼柳。
它是逆序編碼(注:從最後一個非零係數向左數),這個數列的三個拖尾係數的符號依次是+(0),-(1),-(1)(0表示+,1表示-)
TrailingOnes是由數列確定的,在該數列中(TrailingOnes)= 3(TrailingOnes <=3)
如把資料重排列改為:0,3,0,1,2,-1,0,1,0……則(TrailingOnes)= 2;
更詳細的說明,建議參考<<H.264_MPEG-4 Part 10 White Paper.pdf>> page 5 of 7

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

大海
04.27 14:10

Q:YUV與YCrCb?
A:YUV,亦稱YCrCb,是被歐洲電視系統所採用的一種顏色編碼方法(屬於PAL)。YUV主要用於優化彩色視訊訊號的傳輸,使其向後相容老式黑白電視。與RGB視訊訊號傳輸相比,它最大的優點在於只需佔用極少的頻寬(RGB要求三個獨立的視訊訊號同時傳輸)。其中"Y"表示明亮度(Luminance或Luma),也就是灰階值;而"U"和"V"表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定畫素的顏色。"亮度"是通過RGB輸入訊號來建立的,方法是將RGB訊號的特定部分疊加到一起。"色度"則定義了顏色的兩個方面調與飽和度,分別用Cr和CB來表示。其中,Cr反映了RGB輸入訊號紅色部分與RGB訊號亮度值之間的差異。而CB反映的是RGB輸入訊號藍色部分與RGB訊號亮度值之同的差異。(轉自http://www.enet.com.cn/eschool/includes/zhuanti/shuyu/info/6/02/1504.shtml)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

瑛瑛/jump
05.11 14:40

Q:關於JM中Int ****** all_mv
A:(2006-05-11 14:08:33) 糖甜甜
all_mv[block_x][block_y][ list ][ref][blocktype][direction]
其中block_x, block_y分別表示4*4塊在整個巨集塊16*16內的水平和垂直位置,同時也說明所儲存的運動向量都是以4*4為單位的,假如有一個8*4的塊,其運動向量會儲存成相同的兩份。
List表示的是哪個參考幀列表
Ref表示的是參考幀序號
Blocktype表示的是巨集塊的型別,有16×16,16×8。。。4×4
Direction表示水平或垂直方向,其值分別是0和1

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

---
05.16 19:14

Q:JM 中test.264檔案是逐幀還是一次性寫入?
A:從編碼過程中可知,逐幀寫入

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

小雪
05.23 17:46

Q jm在ccs中編譯:
Q1:編譯錯誤 --- This may be a serious problem. Please contact customer support with a
description of this problem and a sample of the source files that caused this
INTERNAL ERROR message to appear.
A1: enc_picture->imgY[jj][img->pix_x+i]=(imgpel)clip1a((M1[j][ i ]+((long)img->mprr_2[new_intra_mode][j][ i ]<<DQ_BITS)+DQ_ROUND)>>DQ_BITS);
把long改為int就好了。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

小雪
05.23 17:52

Q jm在ccs中編譯:
Q2 :不支援open()函式。
A2:改為fopen();
open()是對fopen()的封裝。
Q3:不支援timeb結構體,
A3:注掉,即//#include <sys/timeb.h> 可改用ccs中clock計時
Q4:連編時出現error: symbol _bottom_pic is defined multiple times:
f:\h264_dsp\0319JM10_2\Debug\annexb.obj and
f:\h264_dsp\0319JM10_2\Debug\biariencode.obj
A4:將出現錯誤的變數名前加extern就好了

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

天宇
06.04 21:33

這幾天看程式,收穫也有點,總結一下。
我這兩天還感覺我看程式有點盲目 ,看的太細 ,花了好多時間 。
程式主要是兩方面 :一是演算法 、二是資料, 也就是引數 ;

我想應該先把演算法弄明白,弄明白演算法不能靠程式 ,而應該看標準或者相關論文
弄明白演算法後再看程式
這個時候看程式的輪廓,也就是理解程式的流程,看程式是怎麼實現演算法的 ;
看了這些後,要把幾個全域性變數看看,
理解為什麼要設定那些變數
最後再跟蹤程式, 看程式不要老為幾句話糾纏,可以問問別人,或者討論。
這就是我看程式的心得

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

風起雲湧
06.08 20:50

Q:h.264在運動估計方面做了那些改進
A:在H.263中採用了半畫素估計,在H.264中則進一步採用1/4畫素甚至1/8畫素的運動估計。即真正的運動向量的位移可能是以1/4甚至1/8畫素為基本單位的。顯然,運動向量位移的精度越高,則幀間剩餘誤差越小,傳輸位元速率越低,即壓縮比越高。
  在H.264中採用了6階FIR濾波器的內插獲得1/2畫素位置的值。當1/2畫素值獲得後, 1/4畫素值可通過線性內插獲得,
  對於4:1:1的視訊格式,亮度訊號的1/4 畫素精度對應於色度部分的1/8畫素的運動向量,因此需要對色度訊號進行1/8畫素的內插運算。
  理論上,如果將運動補償的精度增加一倍(例如從整畫素精度提高到1/2畫素精度),可有0.5bit/Sample的編碼增益,但實際驗證發現在運動向量精度超過1/8畫素後,系統基本上就沒有明顯增益了,因此,在H.264中,只採用了1/4畫素精度的運動向量模式,而不是採用1/8畫素的精度。

  多巨集塊劃分模式估計

  在H.264的預測模式中,一個巨集塊(MB)可劃分成7種不同模式的尺寸,這種多模式的靈活、細微的巨集塊劃分,更切合影象中的實際運動物體的形狀,於是,在每個巨集塊中可包含有1、2、4、8或16個運動向量。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

/kf 小月之兔
06.12 22:19

Q:關於jm86中listx
A:listX[6]:該變數的作用是用來在每次編碼一幀影象時,將所要用到的參考幀儲存在其中。但真正所要用到的參考幀影象資料是指向到dpb對應的結構元素中。
對於P幀,只要用到listX[0]。
對於B幀,要用到listX[0],listX[1]
對於Mbaff的編碼方式,可能還會用到listX[2-5]。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

/kf 小月之兔
06.17 16:58

Q:關於IPCM
A:IPCM是在264的I幀編碼中,有些情況下用變換,量化,掃描後得到的資料量和花費,還不如直接使用pcm編碼更划算,於是就可以用ipcm
PCM基本工作原理
脈衝調製就是把一個時間連續,取值連續的模擬訊號變換成時間離散,取值離散的數字訊號後在通道中傳輸.脈衝編碼調製就是對模擬訊號先抽樣,再對樣值幅度量化,編碼的過程.

所謂抽樣,就是對模擬訊號進行週期性掃描,把時間上連續的訊號變成時間上離散的訊號。該模擬訊號經過抽樣後還應當包含原訊號中所有資訊,也就是說能無失真的恢復原模擬訊號。它的抽樣速率的下限是由抽樣定理確定的。

所謂量化,就是把經過抽樣得到的瞬時值將其幅度離散,即用一組規定的電平,把瞬時抽樣值用最接近的電平值來表示。