關於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基本工作原理 
脈衝調製就是把一個時間連續,取值連續的模擬信號變換成時間離散,取值離散的數字信號後在信道中傳輸.脈衝編碼調製就是對模擬信號先抽樣,再對樣值幅度量化,編碼的過程. 

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章