ÈÕÀú

« 2008-10-08  
ÈÕ Ò» ¶þ Èý ËÄ Îå Áù
   1234
567891011
12131415161718
19202122232425
262728293031 

×îÐÂÀ´¿Í

ͳ¼ÆÐÅÏ¢

  • ·ÃÎÊÁ¿: 1991
  • ÈÕÖ¾Êý: 24
  • ͼƬÊý: 3
  • ½¨Á¢Ê±¼ä: 2006-12-11
  • ¸üÐÂʱ¼ä: 2008-10-06

RSS¶©ÔÄ

ÎÒµÄ×îÐÂÈÕÖ¾

  • ´úÂ븲¸ÇÂÊ·ÖÎö£¨gcov£©(ת)

    2008-8-11

    ΪʲôÐèÒª´úÂ븲¸ÇÂÊ·ÖÎö£¿

    ÔÚ·¢²¼´úÂëµÄʱºò£¬ÎÒÃdz£³£»á¶ÔÆä½øÐÐһϵÁеIJâÊÔÀ´Ð­µ÷Èí¼þµÄÐÔÄܺ͹¦ÄÜ£¬Ê¹ËûÃǺÍÔ¤¼ÆµÄÏàͬ¡£µ«ÊǼìÑéͨ³£¶¼ÊÇÏ൱µÄÀ§ÄÑ£¬¼´Ê¹³ÌÐòÏ൱µÄ¼òµ¥¡£¿ª·¢Õß³£³£»á½èÖúһЩ²âÊÔ¹¤¾ß£¨test suite)À´Ä£Äâ»òÕßÖØ½¨Ö´Ðнű¾¡£Èç¹û²âÊÔ³ÌÐò×éÊdz¹µ×µÄ£¬ÄÇô³ÌÐòµÄ¸÷¸ö¹¦Äܶ¼½«±»²âÊÔµ½²¢ÇÒ¶¼¿ÉÒÔÖ¤Ã÷ÊÇ¿ÉÒÔ¹¤×÷µÄ¡£

    µ«ÊÇÔõÑù²ÅËã³¹µ×ÄØ£¿¼òµ¥µã˵¾ÍÊDzâÊÔ³ÌÐòµÄÿһÌõ·¾¶£¬Ñé֤ÿһ¸ö½á¹û£¬Ö´ÐÐÿһÌõÓï¾ä£¬Ö¤Ã÷ûһ¾äÓï¾äÊÇûÓõġ£gcov¾ÍÊÇÒ»¸öÓÃÀ´¼ìÑéÄãµÄÿһ¾äÓï¾äÊÇ·ñ¶¼Ö´ÐÐÁ˵Ť¾ß¡£

    ʲôÊÇ´úÂ븲¸ÇÂÊ·ÖÎö£¿
    ´úÂ븲¸ÇÂÊ·ÖÎö¾ÍÊÇÕÒµ½¶¨Î»Ã»ÓõĻòÕß²»Ö´ÐеĴúÂëµÄ¹ý³Ì¡£Ã»ÓõĴúÂë²»»á´æÔÚʲôÎÊÌ⣬µ«ÊÇËûÃÇ»áÓ°Ïì³ÌÐòµÄ¿É¶ÁÐÔ£»²»Ö´ÐеĴúÂëÔò¿ÉÄÜÊÇδÀ´bugµÄËùÔÚ¡£ËùÒÔÕÒµ½ËûÃÇ£¬°ÑËûÃÇ´ÓÄãµÄ³ÌÐòÖÐÒÆ´¦ÊÇ´óÓÐñÔÒæµÄ¡£
    ¸²¸ÇÂÊ·ÖÎöÖ÷ÒªÓÐÏÂÃæµÄ¼¸¸ö¹ý³Ì£º
        ͨ¹ý²âÊÔ³ÌÐò×éÕÒµ½²»Ö´ÐеijÌÐò¶Î£»
        Ìí¼Ó¶îÍâ²âÊÔ³ÌÐò×飬ÒÔ±ãÔö¼Ó´úÂ븲¸ÇÂÊ£»
        ¾ö¶¨´úÂ븲¸ÇÂʵ͍Á¿²â¶È£¬ËûÒ²ÊdzÌÐòÖÊÁ¿µÄ¼ä½Ó²â¶È¡£

    ´úÂ븲¸ÇÂÊ·ÖÎöµÄȱÏÝ
    ´úÂ븲¸ÇÂÊ·ÖÎö²»ÄÜÕÒ³ö³ÌÐòµÄÂß¼­´íÎ󡣿¼ÂÇÒ»ÏÂÏÂÃæµÄ´úÂë
    10:  rc = call_to_xx ();
    11:  if (rc == ERROR_FATAL)
    12:    exit(2);    /* exit with error code 2 */
    13:  else
    14:    /* continue on */
    µ±²âÊÔ³ÌÐò¶ÎÔËÐе½11ÐÐʱ£¬11ÐÐʼÖÕ¶¼²»ÄÜÎªÕæ¡£call_to_xx·µ»ØÁËÁíÍâµÄÒ»¸ö´íÎó±ÈÈçERROR_HANDLE£¬³ý·ÇÎÒÃǼÓÈëÕâÖÖ´íÎóµÄ´¦Àí·½Ê½µÄ´úÂë¡£
    ´úÂ븲¸Ç²âÊÔ¹¤¾ß²»»á¸æËßÄãʲôÊDZØÐëµÄ£¬ËûÃÇÖ»ÄÜÏÔʾÒѾ­´æÔڵĴúÂëµÄ¸²¸ÇÂÊ¡£

    ´úÂ븲¸ÇÂʵÄÀàÐÍ
    gcov¿ÉÒÔÓÃÀ´²âÁ¿¸÷ÖÖÐÎʽµÄ´úÂ븲¸ÇÂÊ¡£×î³£¼û×îÓÐÓõÄÁ½ÖÖÊÇ·ÖÖ§¸²¸Ç£¨branch coverage)ºÍÑ­»·¸²¸Ç£¨loop coverage£©
    ·ÖÖ§¸²¸ÇÖ¤Ã÷¸÷¸ö·½ÏòµÄÿһÌõ·ÖÖ§¶¼±»Ö´Ðе½ÁË¡£Ñ­»·¸²¸ÇÊÔͼ֤Ã÷Ñ­»·ÄÚ²¿µÄÿһÌõ·¾¶¶¼±»²âÊÔµ½ÁË¡£Ñ­»·¸²¸ÇËÆºõ·Ç³£µÄ¸´ÔÓ£¬µ«»ù±¾ÉÏÖ»ÒªÂú×ãÏÂÃæµÄÈý¸ö×´¿ö£¬¾Í¿ÉÒÔ×÷ÁË¡£
        1¡£Ñ­»·Ìõ¼þ²»Âú×㣬ѭ»·Ã»ÓÐÄÚ²¿Ã»ÓÐÖ´ÐУ»
        2¡£Ñ­»·Ìõ¼þ¾ÍÂú×ãÁËÒ»´Î£¬Ñ­»·ÄÚ²¿¾ÍÖ´ÐÐÁËÒ»´Î£»
        3¡£Ñ­»·Ìõ¼þÖÁÉÙÂú×ãÁËÁ½´Î£¬Ñ­»·ÖÁÉÙÖ´ÐÐÁËÁ½´Î¡£
    ¾Ù¸öÀý×Ó
    void  function(int number)
    {
      if (number % 2) == 0)
        printf("even \n");
      for (;number < 9; number++){
        printf("number is %d\n", number);
      }
    }

    function(11);   Âú×ã×´¿öÒ»
    function(8);    Âú×ã×´¿ö¶þ
    function(6);    Âú×ã×´¿öÈý   

    ´úÂ븲¸ÇÂʹ¤¾ßgcovµÄʹÓÃ
    ҪʹÓÃgcov£¬ÐèÒªÔÚÎÒÃÇÓÃgcc±àÒë³ÌÐòʱ¼ÓÈëÁ½¸ö²ÎÊýfprofile-arcsºÍftest-coverage.
    fprofile-arcs²ÎÊýʹgcc´´½¨Ò»¸ö³ÌÐòµÄÁ÷ͼ£¬Ö®ºóÕÒµ½ÊʺÏͼµÄÉú³ÉÊ÷¡£Ö»Óв»ÔÚÉú³ÉÊ÷ÖеĻ¡±»²Ù×Ý£¨instrumented£©£ºgccÌí¼ÓÁË´úÂëÀ´ÇåµãÕâЩ»¡Ö´ÐеĴÎÊý¡£µ±Õâ¶Î»¡ÊÇÒ»¸ö¿éµÄΨһ³ö¿Ú»òÈë¿Úʱ£¬²Ù×ݹ¤¾ß´úÂ루instrumentation code)½«»áÌí¼Óµ½¿éÖУ¬·ñÔò´´½¨Ò»¸ö»ù´¡¿éÀ´°üº¬²Ù×ݹ¤¾ß´úÂë¡£
    gcovÖ÷ҪʹÓÃ.gcnoºÍ.gcdaÁ½¸öÎļþ
    .gcnoÊÇÓÉ-ftest-coverage²úÉúµÄ£¬Ëü°üº¬ÁËÖØ½¨»ù±¾¿éͼºÍÏàÓ¦µÄ¿éµÄÔ´ÂëµÄÐкŵÄÐÅÏ¢¡£
    .gcdaÊÇÓɼÓÁË-fprofile-arcs±àÒë²ÎÊýµÄ±àÒëºóµÄÎļþÔËÐÐËù²úÉúµÄ£¬Ëü°üº¬ÁË»¡Ìø±äµÄ´ÎÊýºÍÆäËûµÄ¸ÅÒªÐÅÏ¢¡£

    ÏÂÃæÊÇÒ»¸ö¼òÒªµÄ·¶Àý£º
      1 #include <stdlib.h>
      2 #include <stdio.h>
      3
      4 int main(int argc,char** argv)
      5 {
      6     int x,y;
      7     int arraysize;
      8     int **array;
      9
     10     if(argc!=2)
     11     {
     12         printf("Usage: %s Enter arraysize value\n;",argv[0]);
     13         exit(-1);
     14     }
     15     else
     16     {
     17         arraysize = atoi(argv[1]);
     18         if(arraysize <=0)
     19         {
     20             printf("Array size must be larger than 0\n;");
     21             exit(-1);
     22         }
     23     }
     24
     25     array = (int**) malloc( arraysize*sizeof(int*));
     26
     27     printf("Creating an %d by %d array \n",arraysize,arraysize);
     28
     29     if(array == NULL)
     30     {
     31         printf("Malloc failed for array size %d \n",arraysize);
     32         exit(-1);
     33     }
     34
     35     for (x=0;x<arraysize;x++)
     36     {
     37         array[x] = (int*) malloc (arraysize*sizeof(int));
     38
     39         if(array[x] == NULL)
     40         {
     41             printf("Failed malloc for array size %d\n",arraysize);
     42             exit(-1);
     43         }
     44     }
     45
     46     exit(0);
     47 }

    $ gcc -fprofile-arcs -ftest-coverage -g -o sample test.c
    $ ./sample 10
    Creating an 10 by 10 array
     $ gcov test.c
    File ''/usr/include/sys/sysmacros.h''
    Lines executed:0.00% of 6
    /usr/include/sys/sysmacros.h:creating ''sysmacros.h.gcov''

    File ''test.c''
    Lines executed:57.89% of 19
    test.c:creating ''test.c.gcov''
    $ cat test.c.gcov
            -:    0:Source:test.c
            -:    0:Graph:test.gcno
            -:    0:Data:test.gcda
            -:    0:Runs:1
            -:    0:Programs:1

    -:    1:#include <stdlib.h>
            -:    2:#include <stdio.h>
            -:    3:
            -:    4:int main(int argc,char** argv)
            1:    5:{
            -:    6:        int x,y;
            -:    7:        int arraysize;
            -:    8:        int **array;
            -:    9:
            1:   10:        if(argc!=2)
            -:   11:        {
        #####:   12:                printf("Usage: %s Enter arraysize value;\n",argv[0]);
        #####:   13:                exit(-1);
            -:   14:        }
            -:   15:        else
            -:   16:        {
            1:   17:                arraysize = atoi(argv[1]);
            1:   18:                if(arraysize <=0)
            -:   19:                {
        #####:   20:                        printf("Array size must be larger than 0;\n");
        #####:   21:                        exit(-1);
            -:   22:                }
            -:   23:        }
            -:   24:
            1:   25:        array = (int**) malloc( arraysize*sizeof(int*));
            -:   26:
            1:   27:        printf("Creating an %d by %d array \n",arraysize,arraysize);
            -:   28:
            1:   29:        if(array == NULL)
            -:   30:        {
        #####:   31:                printf("Malloc failed for array size %d \n",arraysize);
        #####:   32:                exit(-1);
            -:   33:        }
            -:   34:
           11:   35:        for (x=0;x<arraysize;x++)
            -:   36:        {
           10:   37:                array[x] = (int*) malloc (arraysize*sizeof(int));
            -:   38:
           10:   39:                if(array[x] == NULL)
            -:   40:                {
        #####:   41:                        printf("Failed malloc for array size %d\n",arraysize);
        #####:   42:                        exit(-1);
            -:   43:                }
            -:   44:        }
            -:   45:
            1:   46:&n
         

    bsp;       exit(0);
            -:   47:}

    ÕýÈçÎÒÃÇ¿´µ½µÄ,ÎÒÃÇÏÖÔڵĸ²¸ÇÂÊÊÇ57.89%£¬#####ºóÃæµÄÓï¾äÊÇÏÖÔÚûÓй»Ö´Ðе½µÄ¡£

    $ ./sample
    Usage: ./sample Enter arraysize value;
    $ gcov test.c
    File ''/usr/include/sys/sysmacros.h''
    Lines executed:0.00% of 6
    /usr/include/sys/sysmacros.h:creating ''sysmacros.h.gcov''

    File ''test.c''
    Lines executed:68.42% of 19
    test.c:creating ''test.c.gcov''
    ÏÖÔÚÔËÐÐÁËûÓвÎÊýµÄÇé¿ö£¬ÕâÖÖÇé¿öÕ¼ÁË10.53%(68.42-57.89)

    $ ./sample 0
    Array size must be larger than 0;
    $ gcov test.c
    File ''/usr/include/sys/sysmacros.h''
    Lines executed:0.00% of 6
    /usr/include/sys/sysmacros.h:creating ''sysmacros.h.gcov''

    File ''test.c''
    Lines executed:78.95% of 19
    test.c:creating ''test.c.gcov''
    ÓвâÊÔÁËÒ»ÖÖÇé¿ö£¬ÄǾÍÊÇarraysize=0ÏÖÔڵĸ²¸ÇÂÊÒѾ­´ïµ½ÁË78.95%

    »¹ÓÐÁ½ÖÖÇé¿ö£¬ÄǾÍÊǶþάÊý×éµÄµÚһάºÍµÚ¶þάÄÚ´æ¿Õ¼äµÄÉêÇëÁË¡£ÔÚÏÖÔÚµÄ×´¿öÏ£¬malloc()²»Ì«¿ÉÄÜ·ÖÅäʧ°Ü£¬ËùÒÔÎÒÃǽèÖú¹¤¾ßgdbÀ´Ä£Äâmallocʧ°ÜʱµÄÇé¿ö¡£
    $ gdb sample
    GNU gdb Red Hat Linux (6.6-16.fc7rh)
    Copyright (C) 2006 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "i386-redhat-linux-gnu"...
    Using host libthread_db library "/lib/libthread_db.so.1".
    (gdb) l
    1       #include <stdlib.h>
    2       #include <stdio.h>
    3
    4       int main(int argc,char** argv)
    5       {
    6               int x,y;
    7               int arraysize;
    8               int **array;
    9
    10              if(argc!=2)
    (gdb) l
    11              {
    12                      printf("Usage: %s Enter arraysize value\n;",argv[0]);
    13                      exit(-1);
    14              }
    15              else
    16              {
    17                      arraysize = atoi(argv[1]);
    18                      if(arraysize <=0)
    19                      {
    20                              printf("Array size must be larger than 0\n;");
    (gdb) l
    21                              exit(-1);
    22                      }
    23              }
    24
    25              array = (int**) malloc( arraysize*sizeof(int*));
    26
    27              printf("Creating an %d by %d array \n",arraysize,arraysize);
    28
    29              if(array == NULL)
    30              {
    (gdb) b 29
    Breakpoint 1 at 0x8048ada: file test.c, line 29.
    (gdb) r 10
    Starting program: /home/secularbird/Templates/test/sample 10
    Creating an 10 by 10 array

    Breakpoint 1, main (argc=2, argv=0xbf9b59f4) at test.c:29
    29              if(array == NULL)
    (gdb) print array
    $1 = (int **) 0x90af008
    (gdb) set array=0
    (gdb) print array
    $2 = (int **) 0x0
    (gdb) step
    31                      printf("Malloc failed for array size %d \n",arraysize);
    (gdb) cont
    Continuing.
    Malloc failed for array size 10

    Program exited with code 0377.
    (gdb) quit
    lÃüÁîÊÇlistµÄ¼òд£¬ÏÔʾÁ˳ÌÐòµÄÔ´´úÂë¡£
    b 29ÊÇÔÚ29ÐÐÉèÖÃÒ»¸ö¶Ïµã£¬Ö®ËùÒÔÕâÑùÉèÖÃÊÇÒòΪarray¿Õ¼äÉêÇë¹ýÁË£¬ÎÒÃÇΪÁËÄ£ÄâÐèÒª¸Ä±äËüµÄÖµ¡£
    r 10ÊÇrun 10£¬Ò²¾ÍÊÇÔËÐгÌÐò£¬10ÊÇ´«µÝµÄÃüÁîÐвÎÊý¡£
    print array´òÓ¡arrayµÄµØÖ·
    set array=0½«arrayÖ¸Ïò¿ÕµØÖ·
    stepÒ»²½Ò»²½µÄÔËÐгÌÐò£¬¼òдÊÇs
    cont¼ÌÐøÔËÐгÌÐò
    quitÍ˳ögdb¡£

    ½ÓÏÂÀ´×öÀàËÆµÄ¹¤×÷²úÉúÁíÒ»¸ömalloc fail¡£
    $ gdb sample
    GNU gdb Red Hat Linux (6.6-16.fc7rh)
    Copyright (C) 2006 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "sh ow copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "i386-redhat-linux-gnu"...
    Using host libthread_db library "/lib/libthread_db.so.1".
    (gdb) l
    1       #include <stdlib.h>
    2       #include <stdio.h>
    3
    4       int main(int argc,char** argv)
    5       {
    6               int x,y;
    7               int arraysize;
    8               int **array;
    9
    10              if(argc!=2)
    (gdb) l
    11              {
    12                      printf("Usage: %s Enter arraysize value\n;",argv[0]);
    13                      exit(-1);
    14              }
    15              else
    16              {
    17                      arraysize = atoi(argv[1]);
    18                      if(arraysize <=0)
    19                      {
    20                              printf("Array size must be larger than 0\n;");
    (gdb) l
    21                              exit(-1);
    22                      }
    23              }
    24
    25              array = (int**) malloc( arraysize*sizeof(int*));
    26
    27              printf("Creating an %d by %d array \n",arraysize,arraysize);
    28
    29              if(array == NULL)
    30              {
    (gdb) l
    31                      printf("Malloc failed for array size %d \n",arraysize);
    32                      exit(-1);
    33              }
    34
    35              for (x=0;x<arraysize;x++)
    36              {
    37                      array[x] = (int*) malloc (arraysize*sizeof(int));
    38
    39                      if(array[x] == NULL)
    40                      {
    (gdb) b 39
    Breakpoint 1 at 0x8048b7a: file test.c, line 39.
    (gdb) r 10
    Starting program: /home/secularbird/Templates/test/sample 10
    Creating an 10 by 10 array

    Breakpoint 1, main (argc=2, argv=0xbfdcae04) at test.c:39
    39                      if(array[x] == NULL)
    (gdb) print array[0]
    $1 = (int *) 0x9bc2038
    (gdb) set array[0]=0
    (gdb) step
    41                              printf("Failed malloc for array size %d\n",arraysize);
    (gdb) cont
    Continuing.
    Failed malloc for array size 10

    Program exited with code 0377.
    (gdb) quit

    $ gcov test.c
    File ''/usr/include/sys/sysmacros.h''
    Lines executed:0.00% of 6
    /usr/include/sys/sysmacros.h:creating ''sysmacros.h.gcov''

    File ''test.c''
    Lines executed:100.00% of 19
    test.c:creating ''test.c.gcov''
    µ½ÏÖÔÚΪֹÿÌõ·¾¶¶¼²âÊÔ¹ýÁË£¬´úÂ븲¸ÇÂÊÒ²ÒѾ­´ïµ½ÁË100%£¬Ò²¿ÉÒԲ鿴һÏÂtest.c.gcovÎļþ
    ÀïÃæÒѾ­Ã»ÓÐ#####ÁË¡£

    ²Î¿¼×ÊÁÏ£º
    Linux® Debugging and Performance Tuning: Tips and Techniques By Steve Best
    man gcov
    http://gcc.gnu.org/onlinedocs/gcc/Gcov-Data-Files.html#Gcov-Data-Files

  • H.264¼òµ¥×ܽá(Èç˪µÄÌì¿Õ)(ÑÏÖØ²Î¿¼µÄÊDZϺñ½ÜµÄÊé)

    2008-7-28

    Ò»¡¢ÊÓÆµÐÅÏ¢ºÍÐźŵÄÌØµã

    1£®1 Ö±¹ÛÐÔ

           ÀûÓÃÈ˵ÄÊÓ¾õϵͳ£¬Ö±½Ó»ñÈ¡ÊÓÆµÐÅÏ¢

    1£®2 È·¶¨ÐÔ

           ÊÓÆµÐÅÏ¢Ö»¹Ü¾ßÌ壬²»Ò×ÓëÆäËûÄÚÈÝ»ìÏý

    1£®3 ¸ßЧÐÔ

           ÀûÓÃÊÓ¾õϵͳ£¬ÈËÃÇ¿ÉÒÔ²¢ÐеĹ۲ìͼÏñµÄ¸÷¸öÏóËØ£¬Òò´Ë¾ßÓиßЧÐÔ¡£

    1£®4 ¹ã·ºÐÔ

           ÊÓ¾õϵͳռÍâ½çÐÅÏ¢×ÜÁ¿µÄ70£¥

    1£®5ÊÓÆµÐźŵĸߴø¿íÐÔ

           ÊÓÆµÐÅÏ¢°üº¬´óÁ¿µÄ±ä»¯µÄÐÅÏ¢£¬ÐÅÏ¢Á¿¼«´ó£¬´«ÊäÍøÂçËùÐèÒªµÄ´ø¿íÏà¶Ô½Ï´ó¡£

    ¶þ¡¢ÊÓÆµÑ¹ËõµÄÒªÇóºÍ¿ÉÄÜÐÔ

    2£®1ÊÓÆµÑ¹Ëõ±àÂëµÄÄ¿±ê

    ÓÉÓÚÊÓÆµÐÅÏ¢Á¿´ó£¬´«Êä´ø¿í¸ß£¬¾ÍÒªÇóÏȶÔÊÓÆµÔ´Ñ¹Ëõ£¬È»ºó´«Ê䣬ÒÔ±ã½ÚÔ¼´ø¿íºÍ´æ´¢¿Õ¼ä¡£

                    £¨1£©       ÊÓÆµ±ØÐëѹËõÔÚÒ»¶¨µÄ´ø¿íÄÚ£¬Òª±£Ö¤×ã¹»µÄѹËõ±È¡£

                    £¨2£©       ÊÓÆµÑ¹Ëõºó£¬¾­»Ö¸´Òª±£Ö¤Ò»¶¨µÄÊÓÆµÖÊÁ¿

                    £¨3£©       ÊÓÆµ±àÂëÆ÷µÄʵÏÖ·½Ê½Ó¦Á¦Çó¼òµ¥¡¢Ò×ʵÏÖ¡¢µÍ³É±¾¡¢¿É¿¿ÐԸߡ£

    2£®2ÊÓÆµÑ¹ËõµÄ¿ÉÄÜÐÐ

                     £¨1£©Ê±¼äÏà¹ØÐÐ

                         ÔÚÒ»×éÊÓÆµÐòÁÐÖУ¬ÏàÁÚÁ½Ö¡Ö»Óм«ÉٵIJ»Í¬Ö®´¦£¬Õâ±ãÊÇʱ¼äÏà¹ØÐÔ¡£

                    £¨2£©¿Õ¼äÏà¹ØÐÔ

                         ÔÚͬһ֡ÖУ¬ÏàÁÚÏóËØÖ®¼äÓкܴóµÄÏà¹ØÐÔ£¬Á½ÏóËØÔ½½ü£¬²àÏà¹ØÐÔԽǿ¡£

    Èý¡¢ÊÓÆµ±àÂë¼¼Êõ

    3£®1»ù±¾½á¹¹

           ÊÓÆµ±àÂ뷽ʽÓë²ÉÓõÄÐÅÔ´Óйء£¸ù¾Ý²ÉÓõÄÐÅÔ´µÄÄ£ÐÍ£¬ÊÓÆµ±àÂë¿ÉÒÔ·ÖΪÁ½´óÀࣺ»ùÓÚ²¨ÐεıàÂëºÍ»ùÓÚÄÚÈݵıàÂë¡£

    3£®2 »ùÓÚ²¨ÐεıàÂë

           Èç¹û²ÉÓá°Ò»·ùͼÏñÓÉÐí¶àÏóËØ¹¹³É¡±µÄÐÅÔ´Ä£ÐÍ£¬ÕâÖÖÐÅÔ´Ä£Ð͵IJÎÊý¾ÍÊÇÏóËØµÄÁÁ¶ÈºÍÉ«¶ÈµÄ·ù¶ÈÖµ£¬¶ÔÕâЩ²ÎÊý½øÐбàÂëµÄ¼¼Êõ¼´Îª»ùÓÚ²¨ÐαàÂë¡£

           ÀûÓÃÏóËØ¿Õ¼äµÄÏà¹ØÐÔºÍÖ¡¼äµÄʱ¼äÏà¹ØÐÔ£¬²ÉÓÃÔ¤²â±àÂëºÍ±ä»¯±àÂë¼¼Êõ£¬¼õÉÙÊÓÆµÐźŵÄÏà¹ØÐÔ£¬´Ó¶øÏÔÖø½µµÍÊÓÆµÐòÁеÄÂëÂÊ£¬ÊµÏÖѹËõ±àÂëµÄÄ¿±ê¡£

    3£®3 »ùÓÚÄÚÈݵıàÂë

            Èç¹û²ÉÓÃÒ»¸ö·ÖÁ¿Óм¸¸öÎïÌå¹¹³ÉµÄÐÅÔ´Ä£ÐÍ£¬ÕâÖÖÐÅÔ´Ä£Ð͵IJÎÊýʸ÷¸öÎïÌåµÄÐÎ×´£¬ÎÆÀí£¬Ô˶¯£¬¶ÔÕâЩ²ÎÊý½øÐбàÂëµÄ¼¼Êõ¾ÍÊÇ»ùÓÚÄÚÈݵıàÂë¡£

    ËÄ¡¢h264µÄÓ¦ÓÃ

    4£®1 H. 264µÄ¼¼ÊõÌØµã¿ÉÒÔ¹éÄÉΪÈý¸ö·½Ãæ

    £¨1£©×¢ÖØÊµÓÃ;

    £¨2£©×¢ÖضÔÒÆ¶¯ºÍIPÍøÂçµÄÊÊÓ¦;

    £¨3£©ÔÚ»ìºÏ±àÂëÆ÷µÄ»ù±¾¿ò¼ÜÏ£¬¶ÔÆäÖ÷Òª¹Ø¼ü²¿¼þ¶¼×öÁËÖØ´ó¸Ä½ø£¬Èç¶àģʽÔ˶¯¹À¼Æ¡¢Ö¡ÄÚÔ¤²â¡¢¶àÖ¡Ô¤²â¡¢»ùÓÚÄÚÈݵı䳤±àÂë¡¢4X4¶þάÕûÊý±ä»»µÈ¡£

    £¨4£©ÔÚ¹Ø×¢H. 264µÄÓÅÔ½ÐÔÄܵÄͬʱ±ØÈ»ÐèÒªºâÁ¿ÆäʵÏÖÄѶȡ£´Ó×ÜÌåÉÏ˵£¬H. 264ÐÔÄܵĸĽøÊÇÒÔÔö¼Ó¸´ÔÓÐÔΪ´ú¼Û¶ø»ñµÃµÄ¡£¾Ý¹À¼Æ£¬H. 264 ±àÂëµÄ¼ÆË㸴ÔÓ¶È´óÔ¼Ï൱ÓÚH. 263µÄ3±¶£¬½âÂ븴ÔÓ¶È´óÔ¼Ï൱ÓÚH. 263µÄ2±¶.

    4£®2 h264Ó¦ÓÿɷÖΪ3¸ö¼¶±ð:

            (1) »ù±¾µµ´Î: (¼òµ¥°æ±¾, Ó¦ÓÃÃæ¹ã, Ö§³ÖÖ¡ÄÚºÍÖ¡¼ä±àÂë, »ùÓڿɱä³Ì¶ÈµÄìØ±àÂë.)

                                     Ó¦ÓÃÁìÓò: ÊÓÆµ»á»°, »áÒéµçÊÓ, ÎÞÏßͨÐŵÈʵʱͨÐÅ.

             (2) Ö÷Òªµµ´Î: ( ²ÉÓÃÁ˶àÏîÌá¸ßͼÏñÖÊÁ¿ºÍÔö¼ÓѹËõ±ÈµÄ¼¼Êõ´ëÊ©, Ö§³Ö¸ôÐÐÊÓÆµ, Ö§³Ö»ùÓÚÉÏÏÂÎĵÄ×ÔÊÊÓ¦µÄËãÊõ±àÂë.)

                                      Ó¦ÓÃÁìÓò: Êý×ֹ㲥ÓëÊý×ÖÊÓÆµ´æ´¢.

           £¨3£©À©Õ¹µµ´Î: Ó¦ÓÃÁìÓò: ¿ÉÓÃÓÚ¸÷ÖÖÍøÂçµÄÊÓÆµÁ÷´«Ê䣬ÊÓÆµµã²¥

    Îå¡¢ÊÓÆµ±àÂëÔ­Àí

    5£®1»ù±¾¸ÅÄî

    £¨1£©ÊÓÆµ±àÂëÆ÷Äܹ»¶ÔÒ»¸öͼÏñ»òÕßÒ»¸öÊÓÆµÐòÁнøÐÐѹËõ£¬²úÉúÂëÁ÷¡£

         

    ÔÚÉÏͼÖУ¬±àÂëÆ÷ÊäÈëµÄÖ¡»ò³¡Fn£¬ÒÔºê¿éΪµ¥Î»±»±àÂëÆ÷´¦Àí (ͼÉÏ´«²»Éϰ¡£¡)¡£

    Èç¹û²ÉÓÃÖ¡¼äÔ¤²â±àÂ룺ÆäÔ¤²âÖµP£¬ÊÇÓÉÒѱàÂëµÄͼÏñ×ö²Î¿¼£¬¾­Ô˶¯²¹³¥µÃµ½µÄ¡£Ô¤²âͼÏñPºÍµ±Ç°Ö¡FnÏà¼õ£¬µÃµ½Á½Í¼ÏñµÄ²Ð²îÖµDn£¬DnÔÚ¾­¹ýת»»T£¬Á¿»¯Q£¬È¥´¦¿Õ¼äÈßÓ࣬µÃµ½ÏµÊýX£¬½«XÖØÅÅ£¨Ê¹Êý¾Ý¸ü¼Ó½ô´Õ£©£¬ìرàÂ루¼ÓÈëÔ˶¯Ê¸Á¿¡£Ò»Ð©Í¼ÏñÏà¹ØµÃÐÅÏ¢£©£¬µÃµ½nalÊý¾Ý¡£

    ÔÚ±àÂëÆ÷ÖÐÓиöÖØ¹¹µÄ¹ý³Ì£¨½âÂëµÄ¹ý³Ì£©£¬Á¿»¯ÏµÊýX£¬·´Á¿»¯£¬·´±ä»»£¬µÃµ½Dn¡¯£¬Dn¡¯ºÍÔ¤²âͼÏñPÏà¼Ó£¬µÃµ½uFn¡¯,ÔÙÂ˲¨µÃµ½Fn¡¯£¬Fn¡¯¾ÍÊÇFn±àÂëÔÙ½âÂëºóµÃͼÏñ¡£

    Èç¹û²ÉÓÃÖ¡ÄÚÔ¤²â±àÂ룺Ԥ²âÖµP£¬ÊÇÓɵ±Ç°Æ¬ÖУ¬¼º±àÂëµÄºê¿éÔ¤²âµÃµ½µÄ£¨ÁÁ¶È4¡Á4»òÕß16¡Á16Ô¤²â£¬É«¶È8¡Á8Ô¤²â£©¡£µ±Ç°´ý´¦ÀíµÄ¿é£¬¼õÈ¥Ô¤²âÖµP£¬µÃ²Ð²îÖµDn£¬DnÔÚ¾­¹ýת»»T£¬Á¿»¯Q£¬µÃµ½ÏµÊýX£¬½«XÖØÅÅ£¨Ê¹Êý¾Ý¸ü¼Ó½ô´Õ£©£¬ìرàÂ룬µÃµ½nalÊý¾Ý¡£

    ÔÚÖØ¹¹µÄ¹ý³ÌÖУ¬Á¿»¯ÏµÊýX£¬·´Á¿»¯£¬·´±ä»»£¬µÃµ½Dn¡¯£¬Dn¡¯ºÍÔ¤²âͼÏñPÏà¼ÓµÃµ½µ±Ç°ºê¿é±àÂë½âÂëºóµÃÖµ£¬¸ÃÖµ¿ÉÒÔÓÃÀ´×öÖ¡ÄÚÔ¤²âµÄ²Î¿¼ºê¿é¡£

    ±àÂëÆ÷ÒªÓÐÖØ¹¹»úÖÆµÄÔ­Òò£ºÖع¹¹ý³Ì£¬ÊµÖÊÉÏÊǸö½âÂëµÄ¹ý³Ì£¬½âÂëºóµÄͼÏñºÍԴͼ¿Ï¶¨Óвî±ð£¬ÎÒÃÅÀûÓýâÂëºóµÄͼÏñ×ö²Î¿¼£¬¾ÍÄܹ»ºÍ½âÂëÆ÷Öб£ÖµÒ»Ö£¬¾ÍÄܹ»Ìá¸ßͼÏñµÄÔ¤²â¾«¶È¡££¨ÔÚ½âÂëÆ÷ÖУ¬ÊÇÀûÓüº½âÂëµÄͼÏñ×ö²Î¿¼£¬ÊÇ´Ó½âÂëµÄͼÏñÔ¤²â³öÏÂÒ»¸±Í¼Ïñ£©

                  £¨2£©ÊÓÆµ½âÂëÆ÷£º Äܹ»¶ÔÒ»¸öÂëÁ÷½âÂ룬²úÉúºÍԴͼ»òÔ´ÊÓÆµÐòÁÐÏà½üµÄͼÏñ»òÊÓÆµÐòÁС£Èç¹û½âÂë³öµÄͼÏñºÍԴͼÊÇÒ»ÑùµÄ£¬Õâ¸ö±à½âÂë¹ý³ÌÊÇÎÞËðµÄ£¬·ñÔòÊÇÓÐËð¡£

                         ½âÂëÆ÷µÄʵÏֺͱàÂëÆ÷µÄÖØ¹¹»úÖÆ£¬ÊÇÒ»ÑùµÄ¡£

                  £¨3£©³¡ ¡¢Ö¡¡¢Í¼Ïñ

                         ³¡£º¸ôÐÐɨÃèµÄͼÏñ£¬Å¼ÊýÐгÉΪ¶¥³¡ÐС£ÆæÊýÐгÉΪµ×³¡ÐС£ËùÓж¥³¡ÐгÆÎª¶¥³¡¡£ËùÓе׳¡ÐгÆÎªµ×³¡¡£

                         Ö¡£ºÖðÐÐɨÃèµÄͼÏñ¡£

                         ͼÏñ£º³¡ºÍÖ¡¶¼¿ÉÈÏΪÊÇͼÏñ¡£

                  £¨4£©ºê¿é¡¢Æ¬£º

                         ºê¿é£ºÒ»¸öºê¿éÓÉÒ»¸ö16¡Á16ÁÁ¶È¿é¡¢Ò»¸ö8¡Á8CbºÍÒ»¸ö8¡Á8Cr×é³É¡£

                         Ƭ£ºÒ»¸öͼÏñ¿ÉÒÔ»®·Ö³ÉÒ»¸ö»ò¶à¸öƬ£¬Ò»¸öƬÓÉÒ»¸ö»ò¶à¸öºê¿é×é³É¡£

    5£®2±àÂëÊý¾Ý¸ñʽ

                 5£®2£®1 h264Ö§³Ö4£º2£º0µÄÁ¬Ðø»ò¸ôÐÐÊÓÆµ±àÂë½âÂë¡£

            5£®2£®2 h264µÄ±àÂë¸ñʽ

    ÖÆ¶¨h264µÄÖ÷ҪĿ±êÓÐÁ½¸ö£º

    £¨1£©µÃµ½¸ßµÄÊÓÆµÑ¹Ëõ±È

    £¨2£©¾ßÓÐÁ¼ºÃµÄÍøÂçÇ׺ÍÐÔ£¬¼´¿ÉÊÊÓ¦ÓÚ¸÷ÖÖ´«ÊäÍøÂç¡£

    Ϊ´Ë£¬h264µÄ¹¦ÄÜ·ÖΪÁ½²ã£¬ÊÓÆµ±àÂë²ã£¨VCL£©ºÍÍøÂçÌáÈ¡²ã£¨NAL£©

    VCLÊý¾Ý¼´±»Ñ¹Ëõ±àÂëºóµÄÊÓÆµÊý¾ÝÐòÁС£ÔÚVCLÊý¾ÝÒª·â×°µ½NALµ¥ÔªÖÐÖ®ºó£¬²Å¿ÉÒÔÓÃÀ´´«Êä»ò´æ´¢¡£NALµ¥Ôª¸ñʽÈçÏÂͼ£º

    NalÍ·

    Rbsp

    NalÍ·

    Rbsp

    NalÍ·

    Rbsp

                 5£®2£®3         h264ÂëÁ÷½á¹¹

    ²é¿´(15) ÆÀÂÛ(0)

  • H.264½âÂëÆ÷Öвο¼Í¼ÏñµÄ¹ÜÀí(ת×Ô ÀîÊÀƽ)

    2008-7-28

    ¡¾Ð´ÔÚÇ°Ãæ¡¿
    ÓÉÓÚH.264²ÉÓÃÁ˶à²Î¿¼Ö¡Ô¤²â¼¼Êõ£¬ËùÒÔÆä²Î¿¼Í¼ÏóµÄ¹ÜÀí±È½Ï¸´ÔÓ¡£GO50Ö»ÊÇ˵Ã÷ÁËÔõôÓã¬Ã»Óн²Ã÷ΪʲôÕâôÓ㬴ó¼Ò¿´¹ýÖ®ºóÍùÍù»áÓкܶàÒɻ󡣱¾ÎıȽÏϸÖµĽ²½âÁ˲ο¼Í¼Ïó¹ÜÀíµÄÎÊÌ⣬ּÔÚ½øÒ»²½½Ò¿ªÆäëüëʵÄÃæÉ´£º£©
    NOTE£ºÎªÁ˱ãÓÚ´Óºê¹Û½Ç¶È½²½â²Î¿¼Í¼ÏóµÄ¹ÜÀí£¬±¾ÎÄûÓп¼ÂÇBÖ¡ºÍ³¡Ä£Ê½¡£
    PS£ºÔÚH.264ÖУ¬±à½âÂëÆ÷Ҫά»¤²Î¿¼Í¼ÏñÁбíµÄͬ²½£¬ËùÒÔÔÚ±àÂëÆ÷ºÍ½âÂëÆ÷Öвο¼Í¼ÏñµÄ¹ÜÀíÊÇ»ù±¾Ò»Ö¡£ÔÚ¿´´Ëƪ֮ǰ£¬´ó¼Ò¿ÉÒÔÏÈ¿´¿´ÎÒÒÔǰдµÄ¡¶JM85ÖеĶà²Î¿¼Ö¡ÎÊÌâ¡·: http://blog.csdn.net/sunshine1314/archive/2004/11/08/172498.aspx
     
    ¡¾outline¡¿
    Ò»¡¢Ïà¹Ø±äÁ¿º¬Òå
    ¶þ¡¢½âÂëÁ÷³Ì£¨Í»³ö²Î¿¼Í¼Ïñ¹ÜÀí²¿·Ö£©
    Èý¡¢²Î¿¼Í¼ÏñµÄ±ê¼Ç
    ËÄ¡¢²Î¿¼Í¼ÏñµÄ³õʼ»¯
    Îå¡¢²Î¿¼Í¼ÏñµÄÖØÅÅÐò
     
    Ò»¡¢Ïà¹Ø±äÁ¿º¬Òå
    DPB(Decoded Picture Buffer): ±£´æËùÓеÄÖØ½¨Í¼Ïñ£¬
    ListX[i]: ²Î¿¼Ö¡ÁÐ±í£¬Æä°üº¬µÄ²Î¿¼Ö¡Ö¸ÏòdpbÖеÄÖØ½¨Í¼Ïñ£¬¶øÇÒÊǾ­¹ýÅÅÐòµÄ¡£ListX[0]ÊÇǰÏò²Î¿¼Ö¡ÁÐ±í£¬P¡¢BÖ¡¶¼»áÓõ½£»ListX[1]ÊǺóÏò²Î¿¼Ö¡ÁÐ±í£¬Ö»ÓÐBÖ¡¶¼»áÓõ½£¬
    MaxFrameNum£º 1 << (active_sps->log2_max_frame_num_minus4 + 4);
    frame_num£º±íʾ²Î¿¼Ö¡µÄÐòºÅ£¨Ö¸µÄÊǽâÂë˳Ðò£©¡£¾ßÌå¼ûͼ1µÄÀý×Ó¡£
    ͼ1 frame_numȡֵʾÀý
    note:
    BÖ¡²»×÷²Î¿¼Ê±£¬ÎÒÃÇ¿ÉÒÔºöÂÔBÖ¡£¬È»ºóI/PÖ¡°´ÅÅÁÐ˳ÐòÊÇÒÀ´ÎµÝÔöµÃ¡£
    BÖ¡×÷²Î¿¼Ê±£¬frame_num¾ÍÍêÈ«µÈͬÓë±à½âÂëµÃ˳Ðò¡£
    PicNum: ¶ÌÆÚ²Î¿¼Í¼ÏñµÄÐòºÅ£¬Æä¼ÆËã¹ý³ÌÈçÏ£º
    //note: frame_numΪµ±Ç°Í¼ÏóµÄÐòºÅ
    if(listX[i]->frame_num > frame_num)
    {
           FrameNumWrap=listX[i]->frame_num - frame_num;
    }
    else
           FrameNumWrap=listX[i]->frame_num;
     
    listX[i]->PicNum=FrameNumWrap;
    LongTermPicNum: ³¤ÆÚ²Î¿¼Í¼ÏóµÄÐòºÅ£¬Íⲿָ¶¨¡£
     
    ¶þ¡¢½âÂëÁ÷³Ì£¨Í»³ö²Î¿¼Í¼Ïñ¹ÜÀí²¿·Ö£©
    ͼ2 ½âÂëÁ÷³Ì
    ²Î¿¼Í¼ÏñÁбí³õʼ»¯£º½«DBPÖзûºÏÒªÇóµÄÖØ½¨Í¼Ïñ·Åµ½listX[0]£¬²¢½øÐÐÅÅÐò¡£
    ²Î¿¼Í¼ÏñÁбíÖØÅÅÐò£º¸ù¾Ýµ±Ç°sliceÂëÁ÷ÖÐµÄ¾ä·¨ÔªËØ£¬¶ÔlistX[0]½øÐÐÖØÅÅÐò¡£
    ²Î¿¼Í¼ÏñµÄ±ê¼Ç£º¶ÔDBPÖеÄÖØ½¨Í¼Ïñ½øÐбê¼Ç£¬¿É±ê¼ÇΪ£º²»×÷²Î¿¼£¬¶ÌÆÚ²Î¿¼£¬»ò³¤ÆÚ²Î¿¼¡£
     
    ¶þ¡¢²Î¿¼Í¼ÏñµÄ±ê¼Ç
    note: Ö®ËùÒÔÏȽ²²Î¿¼Í¼ÏñµÄ±ê¼Ç£¬ÊÇΪÁ˺Íʵ¼Ê½âÂëµÄ¹ý³ÌÏàÒ»Ö£¬ÒòΪµÚ1Ö¡IÖ¡ÊDz»ÐèÒªÓõ½²Î¿¼Ö¡µÄ£¬Ö»»á±£´æ²Î¿¼Ö¡¡£
    Èç¹ûµ±Ç°Í¼Ïñ²»×÷²Î¿¼£¬ÔòÌø¹ý¸Ã»·½Ú¡£
    1¡¢±£´æÖؽ¨Í¼Ïñµ½DPB
    Èç¹ûµ±Ç°Í¼ÏñÊÇIDRÖ¡£¬Ôò¸ù¾Ý¶ÁÈëµÄÓï·¨ÔªËØ£¬Ö¸Ã÷ÊÇ·ñÇå¿ÕDPB£¬ÁíÍ⣬»¹È·¶¨½«IDRÖ¡×÷Ϊ³¤ÆÚ²Î¿¼»¹ÊÇ¶ÌÆÚ²Î¿¼¡£
    ·ÇIDRÖ¡Çé¿ö£¬µ±Ç°Ö¡×÷Ϊ¶ÌÆÚ²Î¿¼²åÈëDPB¡£
     
    2¡¢²Î¿¼Í¼Ïñ±ê¼Ç
    ²Î¿¼Í¼Ïñ±ê¼ÇÓÐÁ½ÖÖ·½·¨£¬×Ô¶¯»¬´°·¨ºÍ×Ô¶¨Òå±ê¼Ç·¨£¬ÓÉÏàÓ¦µÄ¾ä·¨ÔªËØÈ·¶¨²ÉÓúÎÖÖ·½·¨¡£
    ×Ô¶¯»¬´°·¨£º¼´FIFOµÄ·½·¨£¬µ±DPBÒÑÂúʱ£¬½«DPBÖÐPicNum×îСµÄ¶ÌÆÚ²Î¿¼Í¼Ïñ£¨¼´×îÔçµÄ²Î¿¼Í¼Ïñ£©ÒƳöDPB¡£
    ×Ô¶¨Òå±ê¼Ç·¨(adaptive_ref_pic_marking_mode)£ºÔÚ¾ä·¨ÔªËØÖÐÖ¸¶¨½«Ä³Ò»²Î¿¼Í¼ÏñÉèÖÃΪºÎÖÖÀàÐ͵IJο¼Í¼Ïñ»òÒÆ³ö¡£ÆäÃüÁîÈçÏÂ±í£º
    ±í1 ×Ô¶¨Òå²Î¿¼Í¼Ïó±ê¼ÇÃüÁî
    ÃüÁî
    ±ê¼Ç²Ù×÷
    0
    ½áÊø±ê¼Ç²Ù×÷
    1
    ½«Ò»¸ö¶ÌÆÚ²Î¿¼±ê¼ÇΪ·Ç²Î¿¼£¨¼´ÒƳö£©
    2
    ½«Ò»¸ö³¤ÆÚ²Î¿¼±ê¼ÇΪ·Ç²Î¿¼£¨¼´ÒƳö£©
    3
    ½«Ò»¸ö¶ÌÆÚ²Î¿¼±ê¼ÇΪ³¤ÆÚ²Î¿¼
    4
    Ö¸¶¨³¤ÆÚ²Î¿¼Í¼ÏñµÄ×î´óÊýÄ¿
    5
    Çå¿ÕDBP£¬²¢½ûÓó¤ÆÚ²Î¿¼
    6
    ½«µ±Ç°Í¼Ïñ´æÎª³¤ÆÚ²Î¿¼
     
    Èý¡¢²Î¿¼Í¼ÏñµÄ³õʼ»¯
    1¡¢½«DBPÖзûºÏÒªÇóµÄÖØ½¨Í¼Ïñ·Åµ½listX[0]
     
    2¡¢ÅÅÐò
    listX[0]ÖУ¬ÏÈ·Å¶ÌÆÚ²Î¿¼£¬Ôٷų¤ÆÚ²Î¿¼£¬
    ¶ÌÆÚ²Î¿¼°´PicNum½µÐòÅÅÁУ¬
    ³¤ÆÚ²Î¿¼°´LongTermPicNumÉýÐòÅÅÁС£
    ¾ßÌå¼û±í2µÄʾÀý£º
    ±í2 ²Î¿¼Í¼Ïó³õʼ»¯ÅÅÐòʵÀý
    ËÄ¡¢²Î¿¼Í¼ÏñµÄÖØÅÅÐò
    ÎªÊ²Ã´ÒªÖØÅÅÐò£º½ÚÊ¡ÂëÁ÷£¬µ±Ò»¸öÐòºÅ(ref_idx)±È½Ï´óµÄ²Î¿¼Í¼Ïó±»Óõ½µÄ±ÈÀýºÜ´ó£¬Õâ¸öʱºò½«¸Ã²Î¿¼Í¼ÏóµÄÐòºÅµ÷С¿ÉÒÔ½µµÍÂëÂÊ¡£Õâ¸ö¹ý³Ì¼´ÖØÅÅÐò¡£
     
    ²Î¿¼Í¼ÏóÖØÅÅÐòµÄ´óÖ¹ý³ÌÈçÏ£º
    ¶ÔlistX[0]ÖеIJο¼Í¼Ïó½øÐбéÀú£¬Ã¿±éÀúµ½Ò»¸ö²Î¿¼Í¼Ï󣬶ÁÈë¾ä·¨ÔªËØreordering_of_pic_nums_idc£¬¸üÐÂÆä²Î¿¼Í¼ÏóÐòºÅ¡£
     
    reordering_of_pic_nums_idc¾ßÌåÃüÁîÈçÏ£º
    0/1£ºÖ¸¶¨¶ÌÆÚ²Î¿¼Í¼ÏóÐòºÅ£¬·Ö±ðÓÃ¼ÓÆ«ÒÆÁ¿ºÍ¼õÆ«ÒÆÁ¿µÄ·½·¨
    2£ºÖ¸¶¨³¤ÆÚ²Î¿¼Í¼ÏóÐòºÅ
    3£º½áÊøÖØÅÅÐò¡£
     
    ²Î¿¼Í¼ÏóÖØÅÅÐòʵÀý£º
     
     
  • H.264Ãû´Ê

    2008-7-28

    A

    ABT: ×ÔÊÊÓ¦¿é±ä»»

    ABR: Average BitsRate - ƽ¾ùÂëÂÊ

    AC: ½»Á÷

    ASO: Arbitrary Slice Order - ÈÎÒâµÄƬ´ÎÐò

    B

    Bottom POC: µ×³¡ÐòÁкÅ

    C

    CABAC: Context-based Adaptive Binary Arithmetic Coding - »ùÓÚÉÏÏÂÎÄ×ÔÊÊÓ¦¶þ½øÖÆËãÊõìØ±àÂë

    CAVLC: Context Adaptive Variable Length Coding - »ùÓÚÉÏÏÂÎÄ×ÔÊÊÓ¦¿É±ä³¤±àÂë

    CBP: Coded Block Pattern - ±àÂëģʽ

    CBR: Constant Bit Rate - ºã¶¨±ÈÌØËÙÂÊ

    CPB: Coded Picture Buffer - ±àÂëͼÏñ»º´æÇø

    D

    DCT: Discrete Cosine Transform - ÀëÉ¢ÓàÏұ任

    dec : ²Î¿¼Ö¡

    DC : Ö±Á÷

    DPB: Decoded Picture Buffer - ½âÂëͼÏñ»º´æÇø

    E

    EBSP£ºÀ©Õ¹×Ö½ÚÐòÁÐÔØºÉ

    EC: Error Concealment - ÎóÂëÑÚ¸Ç

    enc: ±àÂëÖ¡

    EOB: ¿é½áÊø·û

    F

    FME: ¿ìËÙÔ˶¯¹À¼Æ

    FMO: Flexible Macroblock Order - Áé»îºê¿é´ÎÐò

    G

    GOP: ͼÏñ×é(ÏàÁÚIÖ¡Ö®¼äµÄÖ¡Êý)

    H

    HDTV: High Definition Television - ¸ßÇåÎúµçÊÓ

    I

    IDCT: ·´ÀëÉ¢ÓàÏұ仯

    IDR: Instantaneous Decoding Refresh - ¼´Ê±½âÂëË¢ÐÂ

    J

    K

    KAYAK: ¸ôÐÐɨÃèÐòÁÐ

    L

    LSB: Least Significant Bit - µÍÓÐЧλ

    M

    MAD: Mean Average Differences - ƽ¾ù²Ð²î¾ø¶ÔÖµ

    MB: MacroBlock - ºê¿é                            

    MBAFF: Macroblock-Adaptive Frame-Field Coding - ºê¿é×ÔÊÊÓ¦Ö¡³¡±àÂë           MC : Ô˶¯²¹³¥      

    ME: Ô˶¯¹À¼Æ

    MSB: Most Significant Bit - ¸ßÓÐЧλ

    MSE: Mean Square - ¾ù·½Îó²î

    MVD: Ô¤²âʸÁ¿Ó뵱ǰʸÁ¿µÄ²îÒì 

    MVP: Ô¤²âʸÁ¿

    N

    NAL: Network Abstract Layer - ÍøÂçÌáÈ¡²ã

    NALU: Network Abstract Layer Unit - NALµ¥Ôª

    NC: Number Current - µ±Ç°¿éÖµ

    O

    P

    POC: Picture Order Count - Í¼ÏñÐòÁкÅ

    POC Lsb: POCµÍÓÐЧλ

    POC Msb : POC¸ßÓÐЧλ

    PPS: ͼÏñ²ÎÊý¼¯

    PSNR: Peak Signal to Noise Ratio - ·åÖµÐÅÔë±È

    Q

    QP: Quantization Parameter - Á¿»¯²ÎÊý

    QStep: Á¿»¯²½³¤

    R

    RBSP: Raw Byte Sequence Payload - Ô­Ê¼×Ö½ÚÐòÁиººÉ

    RC: Rate Control - ÂëÂÊ¿ØÖÆ

    RD: ËÙÂÊÊ§Õæ

    RDO : ÂÊÊ§ÕæÓÅ»¯

    RDOPT: Rate Distortion Optimization Technology - ÂÊÊ§ÕæÓÅ»¯¼¼Êõ

    S

    SAD: Sum of Absolute Difference - ¾ø¶ÔÎó²îºÍ

    SAE: Sum of Absolute Error - ¾ø¶ÔÎó²îºÍ

    SATD: ±ä»»¾ø¶Ô²îÖµ×ÜÁ¿

    SCP: Start_Code_Prefix_one_3bytes ÆðʼÂëǰ׺ 0x000001

    SEI: Supplemental Enhancement Information - ²¹³äµÄÔöÇ¿ÐÅÏ¢

    SH: Slice Header - Ƭͷ

    SODB: String Of Data Bits - Êý¾Ý±ÈÌØ´®

    SPS: ÐòÁвÎÊý¼¯

    SSD: Sum of the Squared Differences - Îó²îƽ·½ºÍ

    TC : ±ä»»ÏµÊý

    Top POC : ¶¥³¡ÐòÁкÅ

    U

    UVLC: ͳһ¿É±ä³¤±àÂë

    V

    VBR: Variable Bit Rate - ¿É±ä±ÈÌØËÙÂÊ

    VBV: Video Buffer Verify(or Verifier) ÊÓÆµ»º³åÑéÖ¤(»òÑéÖ¤Æ÷)

    VCL: Video Coding Layer - ÊÓÆµ±àÂë²ã

    VLC: Variable Length Code - ±ä³¤±àÂë                     

    VQ: Video Quality - ʸÁ¿Á¿»¯

    W

    X

    Y

                                                                             

    Zig-Zag: Ö®×ֱ任ɨÃè

     

    ABTÖ¡¼ä±àÂë: °Ñ±ä»»±àÂëÔ¤²âÎó²îµÄ¿é³ß´çÓëÔ˶¯²¹³¥µÄ¿é³ß´çÏà¹ØÁª¡£ABTÏÞÖÆÆä×î´ó¿ÉÓõĿé³ß´çΪ8x8¡£(Ö¡¼ä±àÂë)

     

    IÖ¡ºÍIDRÖ¡µÄÇø±ð£¿

    IDRÖ¡µÄ×÷ÓÃÊÇÁ¢¿ÌË¢ÐÂ, ʹ´íÎó²»Ö´«²¥, ´ÓIDRÖ¡¿ªÊ¼, ÖØÐÂËãÒ»¸öеÄÐòÁпªÊ¼±àÂë¡£IDR»áµ¼ÖÂDPBÇå¿Õ£¬¶ø I ²»»á

     

    RD: RD±ê×¼Ö÷ÒªºâÁ¿±ä»»ÏµÊýºÍÏàÓ¦Ô¤²âÄ£¿éÏà¶ÔÓÚÔ¤²âÎó²îµÄЧÂÊ¡£(Ö¡¼ä±àÂë)

     

    SATD : SATDÌåÏÖÁ˱任ÖдæÔÚµÄÔ¤²âÎó²î¡£¼ÆËãÁËÔ¤²âÎó²îµÄ×ÜÁ¿ºÍ±ä»»µÄ»¨·Ñ(»¨·ÑÊÓΪ¶Ô±àÂëЧÂʵĹÀ¼Æ)¡£(Ö¡¼ä±àÂë)

     

    T1 : ÍÏβϵÊý£¬ÊýÄ¿·¶Î§ÊÇ0~3£¬Èç¹ûÕý¸º1µÄ¸öÊý´óÓÚ3¸ö£¬Ö»ÓÐ×îºó3¸ö±»ÊÓΪÍÏβϵÊý£¬ÆäÓàµÄ±»ÊÓΪÆÕͨµÄ·ÇÁãϵÊý¡£(CAVLC)   ±ÏÊéP119

     

     

    ±¸×¢£ºÐ­ÒéÀïµÄÃû´Ê

    ASO                 ÈÎÒâÌõ´øË³Ðò£¬Ìõ´ø±àÂë¿ÉÒÔ²»ÊǹâդɨÃè˳Ðò

    BAB                 ¶þÖµAlpha¿é£¬ÓÃÓÚ±êÊ¾ÇøÓòµÄ±ß½ç

    BAP                 ÉíÌ嶯»­²ÎÊý

    ¿é                  ×ö±ä»»µÄºê¿éÇøÓò 8x8 4x4

    ¿éÆ¥Åä              ¾ØÐÎͼÏóÇøÓòÉϵÄÔ˶¯¹À¼Æ

    ¿éЧӦ              Í¼ÏóµÄ·½¿é»ò¾ØÐÎÊ§ÕæÇøÓò

    BÖ¡                 Ë«ÏòÔ˶¯²¹³¥Ô¤²âµÄ±àÂëͼÏñ(Ìõ´ø)

    CABAC               »ùÓÚÉÏÏÂÎĵÄ×ÔÊÊÓ¦¶þÖµËãÊý±àÂë

    CAE                 »ùÓÚÉÏÏÂÎĵÄËãÊý±àÂë

    CAVLC               »ùÓÚÉÏÏÂÎĵÄ×ÔÊÊÓ¦±ä³¤±àÂë

    É«¶È                É«²Ê²îÒì·ÖÁ¿

    CIF                 ͨÓÃÖмä¸ñʽ,Ò»ÖÖ²ÊɫͼÏñ¸ñʽ 352 x 288

    É«²Ê¿Õ¼ä            ±íʾ²ÊɫͼÏñµÄ·½·¨

    DCT                 ÀëÉ¢ÓàÏұ任

    Ö±½ÓÔ¤²â            Ò»ÖÖ±àÂëģʽ,´ËģʽÖв»´«ÊäÔ˶¯ÊÊÁ¿

    DPCM                ²î·ÖÂö³å±àÂëµ÷ÖÆ

    DSCQS               Ë«¼¤ÀøÁ¬ÐøÖÊÁ¿µÈ¼¶£¬Ö÷¹ÜÖÊÁ¿ºâÁ¿µÄµÈ¼¶ºÍ·½·¨

    DWT                 ÀëɢС²¨±ä»»

    ìØ±àÂë              ½µµÍÈßÓàµÄ±àÂë·½·¨

    ´íÎóÒþ²Ø            ±àÂëͼÏñµÄºó´¦Àí£¬ÒÔÏû³ý»ò¼õС¿É¼ûµÄ´íÎóЧӦ

    Exp-Colomb          Ö¸Êý¸çÂײ¼±ä³¤±àÂë

    FAP                 Á³²¿¶¯»­²ÎÊý

    FBA                 Á³²¿ºÍÉíÌ嶯»­

    FGS                 ¾«Ï¸¿ÅÁ£·Ö¼¶

    ³¡                  ¸ôÐÐÊÓÆµÐòÁеÄżÊýÐлòÆæÊýÐÐ

    Á÷³Ìͼ              ±ä»»Ëã·¨µÄͼʾ±íʾ

    FMO                 Áé»îµÄºê¿é˳Ðò,ºê¿éµÄ±àÂë˳Ðò¿ÉÒÔ²»ÊǹâդɨÃè˳Ðò

    ÍêÈ«ËÑË÷            Ò»ÖÖÔ˶¯¹À¼ÆËã·¨

    GMC                 È«¾ÖÔ˶¯²¹³¥£¬ÓÃÓÚÕû¸ö±àÂë¶ÔÏó

    GOP                 ͼÏñ×é,±àÂëÊÓÆµÍ¼ÏñµÄ¼¯ºÏ

    ¹þ·òÂü±àÂë          ½µµÍÈßÓàµÄ±àÂë·½·¨

    HVS                 ÈËÌåÊÓ¾õϵͳ£¬ÓÃÀ´¹Ù³¡ºÍ½âÊÍÊÓÆµÍ¼ÏñµÄϵͳ

    »ìºÏ                ÒÔÓ¿¶¯²¹³¥ºÍ±ä»»ÎªÌØÕ÷µÄ±à½âÂëÆ÷

    IEC                 ¹ú¼Êµç¹¤Î¯Ô±»á,Ò»¸ö±ê×¼Ì壻

    Ö¡¼ä±àÂë            ʹÓÃʱ¼äÔ¤²âºÍ²¹³¥µÄÊÓÆµÖ¡±àÂë

    ¸ôÐÐɨÃè            ±íʾΪһϵÁг¡µÄÊÓÆµÊý¾Ý

    Ö¡ÄÚ±àÂë            ²»Ê¹ÓÃʱ¼äÔ¤²âµÄÊÓÆµÖ¡±àÂë

    ISO                 ¹ú¼Ê±ê×¼»¯×éÖ¯

    ITU                 ¹ú¼Êµ