...

Source file src/golang.org/x/image/vp8/token.go

Documentation: golang.org/x/image/vp8

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package vp8
     6  
     7  // This file contains token probabilities for decoding DCT/WHT coefficients, as
     8  // specified in chapter 13.
     9  
    10  func (d *Decoder) parseTokenProb() {
    11  	for i := range d.tokenProb {
    12  		for j := range d.tokenProb[i] {
    13  			for k := range d.tokenProb[i][j] {
    14  				for l := range d.tokenProb[i][j][k] {
    15  					if d.fp.readBit(tokenProbUpdateProb[i][j][k][l]) {
    16  						d.tokenProb[i][j][k][l] = uint8(d.fp.readUint(uniformProb, 8))
    17  					}
    18  				}
    19  			}
    20  		}
    21  	}
    22  }
    23  
    24  // The plane enumeration is specified in section 13.3.
    25  const (
    26  	planeY1WithY2 = iota
    27  	planeY2
    28  	planeUV
    29  	planeY1SansY2
    30  	nPlane
    31  )
    32  
    33  const (
    34  	nBand    = 8
    35  	nContext = 3
    36  	nProb    = 11
    37  )
    38  
    39  // Token probability update probabilities are specified in section 13.4.
    40  var tokenProbUpdateProb = [nPlane][nBand][nContext][nProb]uint8{
    41  	{
    42  		{
    43  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    44  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    45  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    46  		},
    47  		{
    48  			{176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    49  			{223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255},
    50  			{249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255},
    51  		},
    52  		{
    53  			{255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255},
    54  			{234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    55  			{253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    56  		},
    57  		{
    58  			{255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    59  			{239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    60  			{254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    61  		},
    62  		{
    63  			{255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    64  			{251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    65  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    66  		},
    67  		{
    68  			{255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    69  			{251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    70  			{254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    71  		},
    72  		{
    73  			{255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255},
    74  			{250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255},
    75  			{254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    76  		},
    77  		{
    78  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    79  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    80  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    81  		},
    82  	},
    83  	{
    84  		{
    85  			{217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    86  			{225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255},
    87  			{234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255},
    88  		},
    89  		{
    90  			{255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    91  			{223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    92  			{238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255},
    93  		},
    94  		{
    95  			{255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255},
    96  			{249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    97  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
    98  		},
    99  		{
   100  			{255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   101  			{247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   102  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   103  		},
   104  		{
   105  			{255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   106  			{252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   107  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   108  		},
   109  		{
   110  			{255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   111  			{253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   112  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   113  		},
   114  		{
   115  			{255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255},
   116  			{250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   117  			{254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   118  		},
   119  		{
   120  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   121  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   122  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   123  		},
   124  	},
   125  	{
   126  		{
   127  			{186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255},
   128  			{234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255},
   129  			{251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255},
   130  		},
   131  		{
   132  			{255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   133  			{236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   134  			{251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255},
   135  		},
   136  		{
   137  			{255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   138  			{254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   139  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   140  		},
   141  		{
   142  			{255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   143  			{254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   144  			{254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   145  		},
   146  		{
   147  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   148  			{254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   149  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   150  		},
   151  		{
   152  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   153  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   154  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   155  		},
   156  		{
   157  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   158  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   159  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   160  		},
   161  		{
   162  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   163  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   164  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   165  		},
   166  	},
   167  	{
   168  		{
   169  			{248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   170  			{250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255},
   171  			{248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255},
   172  		},
   173  		{
   174  			{255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255},
   175  			{246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255},
   176  			{252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255},
   177  		},
   178  		{
   179  			{255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255},
   180  			{248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255},
   181  			{253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255},
   182  		},
   183  		{
   184  			{255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   185  			{245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   186  			{253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   187  		},
   188  		{
   189  			{255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255},
   190  			{252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   191  			{255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   192  		},
   193  		{
   194  			{255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   195  			{249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   196  			{255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255},
   197  		},
   198  		{
   199  			{255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255},
   200  			{250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   201  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   202  		},
   203  		{
   204  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   205  			{254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   206  			{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
   207  		},
   208  	},
   209  }
   210  
   211  // Default token probabilities are specified in section 13.5.
   212  var defaultTokenProb = [nPlane][nBand][nContext][nProb]uint8{
   213  	{
   214  		{
   215  			{128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
   216  			{128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
   217  			{128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
   218  		},
   219  		{
   220  			{253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128},
   221  			{189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128},
   222  			{106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128},
   223  		},
   224  		{
   225  			{1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128},
   226  			{181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128},
   227  			{78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128},
   228  		},
   229  		{
   230  			{1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128},
   231  			{184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128},
   232  			{77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128},
   233  		},
   234  		{
   235  			{1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128},
   236  			{170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128},
   237  			{37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128},
   238  		},
   239  		{
   240  			{1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128},
   241  			{207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128},
   242  			{102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128},
   243  		},
   244  		{
   245  			{1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128},
   246  			{177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128},
   247  			{80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128},
   248  		},
   249  		{
   250  			{1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   251  			{246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   252  			{255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
   253  		},
   254  	},
   255  	{
   256  		{
   257  			{198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62},
   258  			{131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1},
   259  			{68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128},
   260  		},
   261  		{
   262  			{1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128},
   263  			{184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128},
   264  			{81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128},
   265  		},
   266  		{
   267  			{1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128},
   268  			{99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128},
   269  			{23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128},
   270  		},
   271  		{
   272  			{1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128},
   273  			{109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128},
   274  			{44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128},
   275  		},
   276  		{
   277  			{1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128},
   278  			{94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128},
   279  			{22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128},
   280  		},
   281  		{
   282  			{1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128},
   283  			{124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128},
   284  			{35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128},
   285  		},
   286  		{
   287  			{1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128},
   288  			{121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128},
   289  			{45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128},
   290  		},
   291  		{
   292  			{1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128},
   293  			{203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128},
   294  			{137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128},
   295  		},
   296  	},
   297  	{
   298  		{
   299  			{253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128},
   300  			{175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128},
   301  			{73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128},
   302  		},
   303  		{
   304  			{1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128},
   305  			{239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128},
   306  			{155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128},
   307  		},
   308  		{
   309  			{1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128},
   310  			{201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128},
   311  			{69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128},
   312  		},
   313  		{
   314  			{1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128},
   315  			{223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128},
   316  			{141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128},
   317  		},
   318  		{
   319  			{1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128},
   320  			{190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128},
   321  			{149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   322  		},
   323  		{
   324  			{1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   325  			{247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   326  			{240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   327  		},
   328  		{
   329  			{1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128},
   330  			{213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128},
   331  			{55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   332  		},
   333  		{
   334  			{128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
   335  			{128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
   336  			{128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
   337  		},
   338  	},
   339  	{
   340  		{
   341  			{202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255},
   342  			{126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128},
   343  			{61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128},
   344  		},
   345  		{
   346  			{1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128},
   347  			{166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128},
   348  			{39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128},
   349  		},
   350  		{
   351  			{1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128},
   352  			{124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128},
   353  			{24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128},
   354  		},
   355  		{
   356  			{1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128},
   357  			{149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128},
   358  			{28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128},
   359  		},
   360  		{
   361  			{1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128},
   362  			{123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128},
   363  			{20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128},
   364  		},
   365  		{
   366  			{1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128},
   367  			{168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128},
   368  			{47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128},
   369  		},
   370  		{
   371  			{1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128},
   372  			{141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128},
   373  			{42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128},
   374  		},
   375  		{
   376  			{1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   377  			{244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   378  			{238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128},
   379  		},
   380  	},
   381  }
   382  

View as plain text