Mercurial > cgi-bin > hgwebdir.cgi > PR > Applications > VSs > VSs__H264__App
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 +
