今天看到init_dpb()時有這麼一行代碼dpb.size= getDpbSize();
dpb.size表示什麼含義我想大家都明白,這裡我們關鍵看getDpbSize();
getDpbSize()函數一上來給pic_size賦值,這個仔細看應該也不難,接著就是我要講的重點拉。
代碼如下:
switch (active_sps->level_idc)//第一幀IDR,這邊是30
{
case 10:
size = 152064;
break;
case 11:
size = 345600;
break;
case 12:
size = 912384;
break;
case 13:
size = 912384;
break;
case 20:
size = 912384;
break;
case 21:
size = 1824768;
break;
case 22:
size = 3110400;
break;
case 30:
size = 3110400;
break;
case 31:
size = 6912000;
break;
case 32:
size = 7864320;
break;
case 40:
size = 12582912;
break;
case 41:
size = 12582912;
break;
case 42:
size = 12582912;
break;
case 50:
size = 42393600;
break;
case 51:
size = 70778880;
break;
default:
error ("undefined level", 500);
break;
}
看到這裡,我想大家應該有兩個疑問:
1。這個case 10 11 20等值是怎麼來的?
2。後面跟著size= 152064又是什嗎?
這部分要在畢厚傑的書277頁的附表3.1中找到
解答
1。大家注意:表的第一列級數1 1.1 1.2 1.3。。。。有沒有跟case那邊聯絡起來了
對的,1=10 1.1=11 1.2=12 1.3=13
2=20 2.1=21 2.2=22
3=30 3.1=31 3.2=32
4=40 4.1=41 4.2=42
5=50 5.1=51
2。大家看第四列最大解碼緩衝區尺寸MaxDPB
152064=148.5*1024
345600=337.5*1024
依此類推.......