xref: /rockchip-linux_mpp/mpp/codec/dec/vp9/vpx_rac.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka *
3*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD
4*437bfbebSnyanmisaka *
5*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License");
6*437bfbebSnyanmisaka * you may not use this file except in compliance with the License.
7*437bfbebSnyanmisaka * You may obtain a copy of the License at
8*437bfbebSnyanmisaka *
9*437bfbebSnyanmisaka *      http://www.apache.org/licenses/LICENSE-2.0
10*437bfbebSnyanmisaka *
11*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software
12*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS,
13*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*437bfbebSnyanmisaka * See the License for the specific language governing permissions and
15*437bfbebSnyanmisaka * limitations under the License.
16*437bfbebSnyanmisaka */
17*437bfbebSnyanmisaka 
18*437bfbebSnyanmisaka /**
19*437bfbebSnyanmisaka  * @file
20*437bfbebSnyanmisaka  * VPX RangeCoder dec (common features)
21*437bfbebSnyanmisaka  */
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka #ifndef VPX_RAC_H
24*437bfbebSnyanmisaka #define VPX_RAC_H
25*437bfbebSnyanmisaka 
26*437bfbebSnyanmisaka #include <stdint.h>
27*437bfbebSnyanmisaka #include <stdlib.h>
28*437bfbebSnyanmisaka 
29*437bfbebSnyanmisaka #include "mpp_common.h"
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka #define DECLARE_ALIGNED(n,t,v)      t v
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka typedef struct Vpxmv {
34*437bfbebSnyanmisaka     DECLARE_ALIGNED(4, int16_t, x);
35*437bfbebSnyanmisaka     int16_t y;
36*437bfbebSnyanmisaka } Vpxmv;
37*437bfbebSnyanmisaka 
38*437bfbebSnyanmisaka typedef struct VpxRangeCoder {
39*437bfbebSnyanmisaka     int high;
40*437bfbebSnyanmisaka     int bits; /* stored negated (i.e. negative "bits" is a positive number of
41*437bfbebSnyanmisaka                  bits left) in order to eliminate a negate in cache refilling */
42*437bfbebSnyanmisaka     const uint8_t *buffer;
43*437bfbebSnyanmisaka     const uint8_t *end;
44*437bfbebSnyanmisaka     unsigned int code_word;
45*437bfbebSnyanmisaka } VpxRangeCoder;
46*437bfbebSnyanmisaka 
47*437bfbebSnyanmisaka /**
48*437bfbebSnyanmisaka  * vp56 specific range coder implementation
49*437bfbebSnyanmisaka  */
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka extern const uint8_t vpx_norm_shift[256];
52*437bfbebSnyanmisaka void vpx_init_range_decoder(VpxRangeCoder *c, const uint8_t *buf, int buf_size);
53*437bfbebSnyanmisaka unsigned int vpx_rac_renorm(VpxRangeCoder *c);
54*437bfbebSnyanmisaka int vpx_rac_get_prob(VpxRangeCoder *c, uint8_t prob);
55*437bfbebSnyanmisaka int vpx_rac_get_prob_branchy(VpxRangeCoder *c, int prob);
56*437bfbebSnyanmisaka // rounding is different than vpx_rac_get, is vpx_rac_get wrong?
57*437bfbebSnyanmisaka int vpx_rac_get(VpxRangeCoder *c);
58*437bfbebSnyanmisaka int vpx_rac_get_uint(VpxRangeCoder *c, int bits);
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka #endif /* VPX_RAC_H */
61