diff libavcodec/cell/cabac_spu.c @ 2:897f711a7157

rearrange to work with autoconf
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Tue, 25 Sep 2012 15:55:33 +0200
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/libavcodec/cell/cabac_spu.c	Tue Sep 25 15:55:33 2012 +0200
     1.3 @@ -0,0 +1,140 @@
     1.4 +/*
     1.5 + * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
     1.6 + * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
     1.7 + *
     1.8 + * This file is part of FFmpeg.
     1.9 + *
    1.10 + * FFmpeg is free software; you can redistribute it and/or
    1.11 + * modify it under the terms of the GNU Lesser General Public
    1.12 + * License as published by the Free Software Foundation; either
    1.13 + * version 2.1 of the License, or (at your option) any later version.
    1.14 + *
    1.15 + * FFmpeg is distributed in the hope that it will be useful,
    1.16 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.17 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    1.18 + * Lesser General Public License for more details.
    1.19 + *
    1.20 + * You should have received a copy of the GNU Lesser General Public
    1.21 + * License along with FFmpeg; if not, write to the Free Software
    1.22 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    1.23 + */
    1.24 +
    1.25 +/**
    1.26 + * @file
    1.27 + * Context Adaptive Binary Arithmetic Coder.
    1.28 + */
    1.29 +
    1.30 +#include <string.h>
    1.31 +
    1.32 +#include "libavutil/common.h"
    1.33 +//#include "get_bits.h"
    1.34 +#include "cabac_spu.h"
    1.35 +#define av_log(...)
    1.36 +
    1.37 +int bytecount =0;
    1.38 +static const uint8_t lps_range[64][4]= {
    1.39 +{128,176,208,240}, {128,167,197,227}, {128,158,187,216}, {123,150,178,205},
    1.40 +{116,142,169,195}, {111,135,160,185}, {105,128,152,175}, {100,122,144,166},
    1.41 +{ 95,116,137,158}, { 90,110,130,150}, { 85,104,123,142}, { 81, 99,117,135},
    1.42 +{ 77, 94,111,128}, { 73, 89,105,122}, { 69, 85,100,116}, { 66, 80, 95,110},
    1.43 +{ 62, 76, 90,104}, { 59, 72, 86, 99}, { 56, 69, 81, 94}, { 53, 65, 77, 89},
    1.44 +{ 51, 62, 73, 85}, { 48, 59, 69, 80}, { 46, 56, 66, 76}, { 43, 53, 63, 72},
    1.45 +{ 41, 50, 59, 69}, { 39, 48, 56, 65}, { 37, 45, 54, 62}, { 35, 43, 51, 59},
    1.46 +{ 33, 41, 48, 56}, { 32, 39, 46, 53}, { 30, 37, 43, 50}, { 29, 35, 41, 48},
    1.47 +{ 27, 33, 39, 45}, { 26, 31, 37, 43}, { 24, 30, 35, 41}, { 23, 28, 33, 39},
    1.48 +{ 22, 27, 32, 37}, { 21, 26, 30, 35}, { 20, 24, 29, 33}, { 19, 23, 27, 31},
    1.49 +{ 18, 22, 26, 30}, { 17, 21, 25, 28}, { 16, 20, 23, 27}, { 15, 19, 22, 25},
    1.50 +{ 14, 18, 21, 24}, { 14, 17, 20, 23}, { 13, 16, 19, 22}, { 12, 15, 18, 21},
    1.51 +{ 12, 14, 17, 20}, { 11, 14, 16, 19}, { 11, 13, 15, 18}, { 10, 12, 15, 17},
    1.52 +{ 10, 12, 14, 16}, {  9, 11, 13, 15}, {  9, 11, 12, 14}, {  8, 10, 12, 14},
    1.53 +{  8,  9, 11, 13}, {  7,  9, 11, 12}, {  7,  9, 10, 12}, {  7,  8, 10, 11},
    1.54 +{  6,  8,  9, 11}, {  6,  7,  9, 10}, {  6,  7,  8,  9}, {  2,  2,  2,  2},
    1.55 +};
    1.56 +
    1.57 +uint8_t ff_h264_mlps_state[4*64];
    1.58 +uint8_t ff_h264_lps_range[4*2*64];
    1.59 +uint8_t ff_h264_lps_state[2*64];
    1.60 +uint8_t ff_h264_mps_state[2*64];
    1.61 +
    1.62 +static const uint8_t mps_state[64]= {
    1.63 +  1, 2, 3, 4, 5, 6, 7, 8,
    1.64 +  9,10,11,12,13,14,15,16,
    1.65 + 17,18,19,20,21,22,23,24,
    1.66 + 25,26,27,28,29,30,31,32,
    1.67 + 33,34,35,36,37,38,39,40,
    1.68 + 41,42,43,44,45,46,47,48,
    1.69 + 49,50,51,52,53,54,55,56,
    1.70 + 57,58,59,60,61,62,62,63,
    1.71 +};
    1.72 +
    1.73 +static const uint8_t lps_state[64]= {
    1.74 +  0, 0, 1, 2, 2, 4, 4, 5,
    1.75 +  6, 7, 8, 9, 9,11,11,12,
    1.76 + 13,13,15,15,16,16,18,18,
    1.77 + 19,19,21,21,22,22,23,24,
    1.78 + 24,25,26,26,27,27,28,29,
    1.79 + 29,30,30,30,31,32,32,33,
    1.80 + 33,33,34,34,35,35,35,36,
    1.81 + 36,36,37,37,37,38,38,63,
    1.82 +};
    1.83 +
    1.84 +const uint8_t ff_h264_norm_shift[512]= {
    1.85 + 9,8,7,7,6,6,6,6,5,5,5,5,5,5,5,5,
    1.86 + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
    1.87 + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
    1.88 + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
    1.89 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    1.90 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    1.91 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    1.92 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    1.93 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1.94 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1.95 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1.96 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1.97 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    1.98 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    1.99 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   1.100 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   1.101 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   1.102 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   1.103 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   1.104 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   1.105 +};
   1.106 +
   1.107 +/**
   1.108 + *
   1.109 + * @param buf_size size of buf in bits
   1.110 + */
   1.111 +
   1.112 +void ff_init_cabac_states(){
   1.113 +    int i, j;
   1.114 +
   1.115 +    for(i=0; i<64; i++){
   1.116 +        for(j=0; j<4; j++){ //FIXME check if this is worth the 1 shift we save
   1.117 +            ff_h264_lps_range[j*2*64+2*i+0]=
   1.118 +            ff_h264_lps_range[j*2*64+2*i+1]= lps_range[i][j];
   1.119 +        }
   1.120 +
   1.121 +        ff_h264_mlps_state[128+2*i+0]=
   1.122 +        ff_h264_mps_state[2*i+0]= 2*mps_state[i]+0;
   1.123 +        ff_h264_mlps_state[128+2*i+1]=
   1.124 +        ff_h264_mps_state[2*i+1]= 2*mps_state[i]+1;
   1.125 +
   1.126 +        if( i ){
   1.127 +#ifdef BRANCHLESS_CABAC_DECODER
   1.128 +            ff_h264_mlps_state[128-2*i-1]= 2*lps_state[i]+0;
   1.129 +            ff_h264_mlps_state[128-2*i-2]= 2*lps_state[i]+1;
   1.130 +        }else{
   1.131 +            ff_h264_mlps_state[128-2*i-1]= 1;
   1.132 +            ff_h264_mlps_state[128-2*i-2]= 0;
   1.133 +#else
   1.134 +            ff_h264_lps_state[2*i+0]= 2*lps_state[i]+0;
   1.135 +            ff_h264_lps_state[2*i+1]= 2*lps_state[i]+1;
   1.136 +        }else{
   1.137 +            ff_h264_lps_state[2*i+0]= 1;
   1.138 +            ff_h264_lps_state[2*i+1]= 0;
   1.139 +#endif
   1.140 +        }
   1.141 +    }
   1.142 +}
   1.143 +