关于level_idc

今天看到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
依此类推.......
 

你可能感兴趣的:(360)