Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (C) 2006  Aurelien Jacobs <aurel@gnuage.org>
  3.  *
  4.  * This file is part of FFmpeg.
  5.  *
  6.  * FFmpeg is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU Lesser General Public
  8.  * License as published by the Free Software Foundation; either
  9.  * version 2.1 of the License, or (at your option) any later version.
  10.  *
  11.  * FFmpeg is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * Lesser General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU Lesser General Public
  17.  * License along with FFmpeg; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19.  */
  20.  
  21. /**
  22.  * @file
  23.  * VP5 and VP6 compatible video decoder (common data)
  24.  */
  25.  
  26. #include "vp56data.h"
  27.  
  28. const uint8_t ff_vp56_b2p[]   = { 0, 0, 0, 0, 1, 2, 3, 3, 3, 3 };
  29. const uint8_t ff_vp56_b6to4[] = { 0, 0, 1, 1, 2, 3 };
  30.  
  31. const uint8_t ff_vp56_coeff_parse_table[6][11] = {
  32.     { 159,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0 },
  33.     { 145, 165,   0,   0,   0,   0,   0,   0,   0,   0,   0 },
  34.     { 140, 148, 173,   0,   0,   0,   0,   0,   0,   0,   0 },
  35.     { 135, 140, 155, 176,   0,   0,   0,   0,   0,   0,   0 },
  36.     { 130, 134, 141, 157, 180,   0,   0,   0,   0,   0,   0 },
  37.     { 129, 130, 133, 140, 153, 177, 196, 230, 243, 254, 254 },
  38. };
  39.  
  40. const uint8_t ff_vp56_def_mb_types_stats[3][10][2] = {
  41.     { {  69, 42 }, {   1,  2 }, {  1,   7 }, {  44, 42 }, {  6, 22 },
  42.       {   1,  3 }, {   0,  2 }, {  1,   5 }, {   0,  1 }, {  0,  0 }, },
  43.     { { 229,  8 }, {   1,  1 }, {  0,   8 }, {   0,  0 }, {  0,  0 },
  44.       {   1,  2 }, {   0,  1 }, {  0,   0 }, {   1,  1 }, {  0,  0 }, },
  45.     { { 122, 35 }, {   1,  1 }, {  1,   6 }, {  46, 34 }, {  0,  0 },
  46.       {   1,  2 }, {   0,  1 }, {  0,   1 }, {   1,  1 }, {  0,  0 }, },
  47. };
  48.  
  49. const VP56Tree ff_vp56_pva_tree[] = {
  50.     { 8, 0},
  51.     { 4, 1},
  52.     { 2, 2}, {-0}, {-1},
  53.     { 2, 3}, {-2}, {-3},
  54.     { 4, 4},
  55.     { 2, 5}, {-4}, {-5},
  56.     { 2, 6}, {-6}, {-7},
  57. };
  58.  
  59. const VP56Tree ff_vp56_pc_tree[] = {
  60.     { 4, 6},
  61.     { 2, 7}, {-0}, {-1},
  62.     { 4, 8},
  63.     { 2, 9}, {-2}, {-3},
  64.     { 2,10}, {-4}, {-5},
  65. };
  66.  
  67. const uint8_t ff_vp56_coeff_bias[] = { 0, 1, 2, 3, 4, 5, 7, 11, 19, 35, 67 };
  68. const uint8_t ff_vp56_coeff_bit_length[] = { 0, 1, 2, 3, 4, 10 };
  69.  
  70. const VP56Frame ff_vp56_reference_frame[] = {
  71.     VP56_FRAME_PREVIOUS,  /* VP56_MB_INTER_NOVEC_PF */
  72.     VP56_FRAME_CURRENT,   /* VP56_MB_INTRA */
  73.     VP56_FRAME_PREVIOUS,  /* VP56_MB_INTER_DELTA_PF */
  74.     VP56_FRAME_PREVIOUS,  /* VP56_MB_INTER_V1_PF */
  75.     VP56_FRAME_PREVIOUS,  /* VP56_MB_INTER_V2_PF */
  76.     VP56_FRAME_GOLDEN,    /* VP56_MB_INTER_NOVEC_GF */
  77.     VP56_FRAME_GOLDEN,    /* VP56_MB_INTER_DELTA_GF */
  78.     VP56_FRAME_PREVIOUS,  /* VP56_MB_INTER_4V */
  79.     VP56_FRAME_GOLDEN,    /* VP56_MB_INTER_V1_GF */
  80.     VP56_FRAME_GOLDEN,    /* VP56_MB_INTER_V2_GF */
  81. };
  82.  
  83. const uint8_t ff_vp56_ac_dequant[64] = {
  84.     94, 92, 90, 88, 86, 82, 78, 74,
  85.     70, 66, 62, 58, 54, 53, 52, 51,
  86.     50, 49, 48, 47, 46, 45, 44, 43,
  87.     42, 40, 39, 37, 36, 35, 34, 33,
  88.     32, 31, 30, 29, 28, 27, 26, 25,
  89.     24, 23, 22, 21, 20, 19, 18, 17,
  90.     16, 15, 14, 13, 12, 11, 10,  9,
  91.      8,  7,  6,  5,  4,  3,  2,  1,
  92. };
  93.  
  94. const uint8_t ff_vp56_dc_dequant[64] = {
  95.     47, 47, 47, 47, 45, 43, 43, 43,
  96.     43, 43, 42, 41, 41, 40, 40, 40,
  97.     40, 35, 35, 35, 35, 33, 33, 33,
  98.     33, 32, 32, 32, 27, 27, 26, 26,
  99.     25, 25, 24, 24, 23, 23, 19, 19,
  100.     19, 19, 18, 18, 17, 16, 16, 16,
  101.     16, 16, 15, 11, 11, 11, 10, 10,
  102.      9,  8,  7,  5,  3,  3,  2,  2,
  103. };
  104.  
  105. const uint8_t ff_vp56_pre_def_mb_type_stats[16][3][10][2] = {
  106.   { { {   9, 15 }, {  32, 25 }, {  7,  19 }, {   9, 21 }, {  1, 12 },
  107.       {  14, 12 }, {   3, 18 }, { 14,  23 }, {   3, 10 }, {  0,  4 }, },
  108.     { {  41, 22 }, {   1,  0 }, {  1,  31 }, {   0,  0 }, {  0,  0 },
  109.       {   0,  1 }, {   1,  7 }, {  0,   1 }, {  98, 25 }, {  4, 10 }, },
  110.     { {   2,  3 }, {   2,  3 }, {  0,   2 }, {   0,  2 }, {  0,  0 },
  111.       {  11,  4 }, {   1,  4 }, {  0,   2 }, {   3,  2 }, {  0,  4 }, }, },
  112.   { { {  48, 39 }, {   1,  2 }, { 11,  27 }, {  29, 44 }, {  7, 27 },
  113.       {   1,  4 }, {   0,  3 }, {  1,   6 }, {   1,  2 }, {  0,  0 }, },
  114.     { { 123, 37 }, {   6,  4 }, {  1,  27 }, {   0,  0 }, {  0,  0 },
  115.       {   5,  8 }, {   1,  7 }, {  0,   1 }, {  12, 10 }, {  0,  2 }, },
  116.     { {  49, 46 }, {   3,  4 }, {  7,  31 }, {  42, 41 }, {  0,  0 },
  117.       {   2,  6 }, {   1,  7 }, {  1,   4 }, {   2,  4 }, {  0,  1 }, }, },
  118.   { { {  21, 32 }, {   1,  2 }, {  4,  10 }, {  32, 43 }, {  6, 23 },
  119.       {   2,  3 }, {   1, 19 }, {  1,   6 }, {  12, 21 }, {  0,  7 }, },
  120.     { {  26, 14 }, {  14, 12 }, {  0,  24 }, {   0,  0 }, {  0,  0 },
  121.       {  55, 17 }, {   1,  9 }, {  0,  36 }, {   5,  7 }, {  1,  3 }, },
  122.     { {  26, 25 }, {   1,  1 }, {  2,  10 }, {  67, 39 }, {  0,  0 },
  123.       {   1,  1 }, {   0, 14 }, {  0,   2 }, {  31, 26 }, {  1,  6 }, }, },
  124.   { { {  69, 83 }, {   0,  0 }, {  0,   2 }, {  10, 29 }, {  3, 12 },
  125.       {   0,  1 }, {   0,  3 }, {  0,   3 }, {   2,  2 }, {  0,  0 }, },
  126.     { { 209,  5 }, {   0,  0 }, {  0,  27 }, {   0,  0 }, {  0,  0 },
  127.       {   0,  1 }, {   0,  1 }, {  0,   1 }, {   0,  0 }, {  0,  0 }, },
  128.     { { 103, 46 }, {   1,  2 }, {  2,  10 }, {  33, 42 }, {  0,  0 },
  129.       {   1,  4 }, {   0,  3 }, {  0,   1 }, {   1,  3 }, {  0,  0 }, }, },
  130.   { { {  11, 20 }, {   1,  4 }, { 18,  36 }, {  43, 48 }, { 13, 35 },
  131.       {   0,  2 }, {   0,  5 }, {  3,  12 }, {   1,  2 }, {  0,  0 }, },
  132.     { {   2,  5 }, {   4,  5 }, {  0, 121 }, {   0,  0 }, {  0,  0 },
  133.       {   0,  3 }, {   2,  4 }, {  1,   4 }, {   2,  2 }, {  0,  1 }, },
  134.     { {  14, 31 }, {   9, 13 }, { 14,  54 }, {  22, 29 }, {  0,  0 },
  135.       {   2,  6 }, {   4, 18 }, {  6,  13 }, {   1,  5 }, {  0,  1 }, }, },
  136.   { { {  70, 44 }, {   0,  1 }, {  2,  10 }, {  37, 46 }, {  8, 26 },
  137.       {   0,  2 }, {   0,  2 }, {  0,   2 }, {   0,  1 }, {  0,  0 }, },
  138.     { { 175,  5 }, {   0,  1 }, {  0,  48 }, {   0,  0 }, {  0,  0 },
  139.       {   0,  2 }, {   0,  1 }, {  0,   2 }, {   0,  1 }, {  0,  0 }, },
  140.     { {  85, 39 }, {   0,  0 }, {  1,   9 }, {  69, 40 }, {  0,  0 },
  141.       {   0,  1 }, {   0,  3 }, {  0,   1 }, {   2,  3 }, {  0,  0 }, }, },
  142.   { { {   8, 15 }, {   0,  1 }, {  8,  21 }, {  74, 53 }, { 22, 42 },
  143.       {   0,  1 }, {   0,  2 }, {  0,   3 }, {   1,  2 }, {  0,  0 }, },
  144.     { {  83,  5 }, {   2,  3 }, {  0, 102 }, {   0,  0 }, {  0,  0 },
  145.       {   1,  3 }, {   0,  2 }, {  0,   1 }, {   0,  0 }, {  0,  0 }, },
  146.     { {  31, 28 }, {   0,  0 }, {  3,  14 }, { 130, 34 }, {  0,  0 },
  147.       {   0,  1 }, {   0,  3 }, {  0,   1 }, {   3,  3 }, {  0,  1 }, }, },
  148.   { { { 141, 42 }, {   0,  0 }, {  1,   4 }, {  11, 24 }, {  1, 11 },
  149.       {   0,  1 }, {   0,  1 }, {  0,   2 }, {   0,  0 }, {  0,  0 }, },
  150.     { { 233,  6 }, {   0,  0 }, {  0,   8 }, {   0,  0 }, {  0,  0 },
  151.       {   0,  1 }, {   0,  1 }, {  0,   0 }, {   0,  1 }, {  0,  0 }, },
  152.     { { 171, 25 }, {   0,  0 }, {  1,   5 }, {  25, 21 }, {  0,  0 },
  153.       {   0,  1 }, {   0,  1 }, {  0,   0 }, {   0,  0 }, {  0,  0 }, }, },
  154.   { { {   8, 19 }, {   4, 10 }, { 24,  45 }, {  21, 37 }, {  9, 29 },
  155.       {   0,  3 }, {   1,  7 }, { 11,  25 }, {   0,  2 }, {  0,  1 }, },
  156.     { {  34, 16 }, { 112, 21 }, {  1,  28 }, {   0,  0 }, {  0,  0 },
  157.       {   6,  8 }, {   1,  7 }, {  0,   3 }, {   2,  5 }, {  0,  2 }, },
  158.     { {  17, 21 }, {  68, 29 }, {  6,  15 }, {  13, 22 }, {  0,  0 },
  159.       {   6, 12 }, {   3, 14 }, {  4,  10 }, {   1,  7 }, {  0,  3 }, }, },
  160.   { { {  46, 42 }, {   0,  1 }, {  2,  10 }, {  54, 51 }, { 10, 30 },
  161.       {   0,  2 }, {   0,  2 }, {  0,   1 }, {   0,  1 }, {  0,  0 }, },
  162.     { { 159, 35 }, {   2,  2 }, {  0,  25 }, {   0,  0 }, {  0,  0 },
  163.       {   3,  6 }, {   0,  5 }, {  0,   1 }, {   4,  4 }, {  0,  1 }, },
  164.     { {  51, 39 }, {   0,  1 }, {  2,  12 }, {  91, 44 }, {  0,  0 },
  165.       {   0,  2 }, {   0,  3 }, {  0,   1 }, {   2,  3 }, {  0,  1 }, }, },
  166.   { { {  28, 32 }, {   0,  0 }, {  3,  10 }, {  75, 51 }, { 14, 33 },
  167.       {   0,  1 }, {   0,  2 }, {  0,   1 }, {   1,  2 }, {  0,  0 }, },
  168.     { {  75, 39 }, {   5,  7 }, {  2,  48 }, {   0,  0 }, {  0,  0 },
  169.       {   3, 11 }, {   2, 16 }, {  1,   4 }, {   7, 10 }, {  0,  2 }, },
  170.     { {  81, 25 }, {   0,  0 }, {  2,   9 }, { 106, 26 }, {  0,  0 },
  171.       {   0,  1 }, {   0,  1 }, {  0,   1 }, {   1,  1 }, {  0,  0 }, }, },
  172.   { { { 100, 46 }, {   0,  1 }, {  3,   9 }, {  21, 37 }, {  5, 20 },
  173.       {   0,  1 }, {   0,  2 }, {  1,   2 }, {   0,  1 }, {  0,  0 }, },
  174.     { { 212, 21 }, {   0,  1 }, {  0,   9 }, {   0,  0 }, {  0,  0 },
  175.       {   1,  2 }, {   0,  2 }, {  0,   0 }, {   2,  2 }, {  0,  0 }, },
  176.     { { 140, 37 }, {   0,  1 }, {  1,   8 }, {  24, 33 }, {  0,  0 },
  177.       {   1,  2 }, {   0,  2 }, {  0,   1 }, {   1,  2 }, {  0,  0 }, }, },
  178.   { { {  27, 29 }, {   0,  1 }, {  9,  25 }, {  53, 51 }, { 12, 34 },
  179.       {   0,  1 }, {   0,  3 }, {  1,   5 }, {   0,  2 }, {  0,  0 }, },
  180.     { {   4,  2 }, {   0,  0 }, {  0, 172 }, {   0,  0 }, {  0,  0 },
  181.       {   0,  1 }, {   0,  2 }, {  0,   0 }, {   2,  0 }, {  0,  0 }, },
  182.     { {  14, 23 }, {   1,  3 }, { 11,  53 }, {  90, 31 }, {  0,  0 },
  183.       {   0,  3 }, {   1,  5 }, {  2,   6 }, {   1,  2 }, {  0,  0 }, }, },
  184.   { { {  80, 38 }, {   0,  0 }, {  1,   4 }, {  69, 33 }, {  5, 16 },
  185.       {   0,  1 }, {   0,  1 }, {  0,   0 }, {   0,  1 }, {  0,  0 }, },
  186.     { { 187, 22 }, {   1,  1 }, {  0,  17 }, {   0,  0 }, {  0,  0 },
  187.       {   3,  6 }, {   0,  4 }, {  0,   1 }, {   4,  4 }, {  0,  1 }, },
  188.     { { 123, 29 }, {   0,  0 }, {  1,   7 }, {  57, 30 }, {  0,  0 },
  189.       {   0,  1 }, {   0,  1 }, {  0,   1 }, {   0,  1 }, {  0,  0 }, }, },
  190.   { { {  16, 20 }, {   0,  0 }, {  2,   8 }, { 104, 49 }, { 15, 33 },
  191.       {   0,  1 }, {   0,  1 }, {  0,   1 }, {   1,  1 }, {  0,  0 }, },
  192.     { { 133,  6 }, {   1,  2 }, {  1,  70 }, {   0,  0 }, {  0,  0 },
  193.       {   0,  2 }, {   0,  4 }, {  0,   3 }, {   1,  1 }, {  0,  0 }, },
  194.     { {  13, 14 }, {   0,  0 }, {  4,  20 }, { 175, 20 }, {  0,  0 },
  195.       {   0,  1 }, {   0,  1 }, {  0,   1 }, {   1,  1 }, {  0,  0 }, }, },
  196.   { { { 194, 16 }, {   0,  0 }, {  1,   1 }, {   1,  9 }, {  1,  3 },
  197.       {   0,  0 }, {   0,  1 }, {  0,   1 }, {   0,  0 }, {  0,  0 }, },
  198.     { { 251,  1 }, {   0,  0 }, {  0,   2 }, {   0,  0 }, {  0,  0 },
  199.       {   0,  0 }, {   0,  0 }, {  0,   0 }, {   0,  0 }, {  0,  0 }, },
  200.     { { 202, 23 }, {   0,  0 }, {  1,   3 }, {   2,  9 }, {  0,  0 },
  201.       {   0,  1 }, {   0,  1 }, {  0,   1 }, {   0,  0 }, {  0,  0 }, }, },
  202. };
  203.  
  204. const uint8_t ff_vp56_filter_threshold[] = {
  205.     14, 14, 13, 13, 12, 12, 10, 10,
  206.     10, 10,  8,  8,  8,  8,  8,  8,
  207.      8,  8,  8,  8,  8,  8,  8,  8,
  208.      8,  8,  8,  8,  8,  8,  8,  8,
  209.      8,  8,  8,  8,  7,  7,  7,  7,
  210.      7,  7,  6,  6,  6,  6,  6,  6,
  211.      5,  5,  5,  5,  4,  4,  4,  4,
  212.      4,  4,  4,  3,  3,  3,  3,  2,
  213. };
  214.  
  215. const uint8_t ff_vp56_mb_type_model_model[] = {
  216.     171, 83, 199, 140, 125, 104,
  217. };
  218.  
  219. const VP56Tree ff_vp56_pmbtm_tree[] = {
  220.     { 4, 0},
  221.     { 2, 1}, {-8}, {-4},
  222.     { 8, 2},
  223.     { 6, 3},
  224.     { 4, 4},
  225.     { 2, 5}, {-24}, {-20}, {-16}, {-12}, {-0},
  226. };
  227.  
  228. const VP56Tree ff_vp56_pmbt_tree[] = {
  229.     { 8, 1},
  230.     { 4, 2},
  231.     { 2, 4}, {-VP56_MB_INTER_NOVEC_PF}, {-VP56_MB_INTER_DELTA_PF},
  232.     { 2, 5}, {-VP56_MB_INTER_V1_PF},    {-VP56_MB_INTER_V2_PF},
  233.     { 4, 3},
  234.     { 2, 6}, {-VP56_MB_INTRA},          {-VP56_MB_INTER_4V},
  235.     { 4, 7},
  236.     { 2, 8}, {-VP56_MB_INTER_NOVEC_GF}, {-VP56_MB_INTER_DELTA_GF},
  237.     { 2, 9}, {-VP56_MB_INTER_V1_GF},    {-VP56_MB_INTER_V2_GF},
  238. };
  239.  
  240. /* relative pos of surrounding blocks, from closest to farthest */
  241. const int8_t ff_vp56_candidate_predictor_pos[12][2] = {
  242.     {  0, -1 },
  243.     { -1,  0 },
  244.     { -1, -1 },
  245.     {  1, -1 },
  246.     {  0, -2 },
  247.     { -2,  0 },
  248.     { -2, -1 },
  249.     { -1, -2 },
  250.     {  1, -2 },
  251.     {  2, -1 },
  252.     { -2, -2 },
  253.     {  2, -2 },
  254. };
  255.