Changes in branches/zorg/src/mpc_decoder.c [18:25]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/zorg/src/mpc_decoder.c
r18 r25 59 59 #endif 60 60 61 #ifndef MPC_LITTLE_ENDIAN 62 #define SWAP(X) mpc_swap32(X) 63 #else 64 #define SWAP(X) X 65 #endif 66 67 #ifdef SCF_HACK 68 #define SCF_DIFF(SCF, D) (SCF == -128 ? -128 : SCF + D) 69 #else 70 #define SCF_DIFF(SCF, D) SCF + D 71 #endif 72 73 #define LOOKUP(x, e, q) mpc_decoder_make_huffman_lookup ( (q), sizeof(q), (x), (e) ) 74 #define DECODE_DSCF() HUFFMAN_DECODE_FASTEST ( d, mpc_table_HuffDSCF, LUTDSCF, 6 ) 75 #define HUFFMAN_DECODE_FASTEST(d,a,b,c) mpc_decoder_huffman_decode_fastest ( (d), (a), (b), 32-(c) ) 76 #define HUFFMAN_DECODE_FASTERER(d,a,b,c) mpc_decoder_huffman_decode_fasterer ( (d), (a), (b), 32-(c) ) 77 78 mpc_uint8_t LUT1_0 [1<< 6]; 79 mpc_uint8_t LUT1_1 [1<< 9]; // 576 Bytes 80 mpc_uint8_t LUT2_0 [1<< 7]; 81 mpc_uint8_t LUT2_1 [1<<10]; // 1152 Bytes 82 mpc_uint8_t LUT3_0 [1<< 4]; 83 mpc_uint8_t LUT3_1 [1<< 5]; // 48 Bytes 84 mpc_uint8_t LUT4_0 [1<< 4]; 85 mpc_uint8_t LUT4_1 [1<< 5]; // 48 Bytes 86 mpc_uint8_t LUT5_0 [1<< 6]; 87 mpc_uint8_t LUT5_1 [1<< 8]; // 320 Bytes 88 mpc_uint8_t LUT6_0 [1<< 7]; 89 mpc_uint8_t LUT6_1 [1<< 7]; // 256 Bytes 90 mpc_uint8_t LUT7_0 [1<< 8]; 91 mpc_uint8_t LUT7_1 [1<< 8]; // 512 Bytes 92 mpc_uint8_t LUTDSCF [1<< 6]; // 64 Bytes = 2976 Bytes 93 61 94 //------------------------------------------------------------------------------ 62 95 // types … … 76 109 //------------------------------------------------------------------------------ 77 110 void mpc_decoder_read_bitstream_sv6(mpc_decoder *d); 78 void mpc_decoder_read_bitstream_sv7(mpc_decoder *d );79 void mpc_decoder_update_buffer(mpc_decoder *d , mpc_uint32_t RING);111 void mpc_decoder_read_bitstream_sv7(mpc_decoder *d, mpc_bool_t isFastSeeking); 112 void mpc_decoder_update_buffer(mpc_decoder *d); 80 113 mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample); 81 114 void mpc_decoder_requantisierung(mpc_decoder *d, const mpc_int32_t Last_Band); 115 void mpc_decoder_seek_to(mpc_decoder *d, mpc_uint32_t bitPos); 116 void mpc_decoder_seek_forward(mpc_decoder *d, mpc_uint32_t bits); 117 mpc_uint32_t mpc_decoder_jump_frame(mpc_decoder *d); 118 void mpc_decoder_fill_buffer(mpc_decoder *d); 119 void mpc_decoder_reset_state(mpc_decoder *d); 120 static mpc_uint32_t get_initial_fpos(mpc_decoder *d, mpc_uint32_t StreamVersion); 121 static __inline mpc_int32_t mpc_decoder_huffman_decode_fastest(mpc_decoder *d, const HuffmanTyp* Table, const mpc_uint8_t* tab, mpc_uint16_t unused_bits); 122 static void mpc_move_next(mpc_decoder *d); 82 123 83 124 //------------------------------------------------------------------------------ … … 130 171 d->dword = 0; 131 172 d->pos = 0; 173 d->next = 0; 132 174 d->Zaehler = 0; 133 175 d->WordsRead = 0; … … 141 183 } 142 184 185 static void 186 mpc_move_next(mpc_decoder *d) 187 { 188 d->Zaehler = (d->Zaehler + 1) & MEMMASK; 189 d->dword = d->next; 190 d->next = SWAP(d->Speicher[(d->Zaehler + 1) & MEMMASK]); 191 d->pos -= 32; 192 ++(d->WordsRead); 193 } 194 143 195 // read desired number of bits out of the bitstream 144 static mpc_uint32_t196 static __inline mpc_uint32_t 145 197 mpc_decoder_bitstream_read(mpc_decoder *d, const mpc_uint32_t bits) 146 198 { … … 153 205 } 154 206 else { 155 d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK]; 156 d->pos -= 32; 207 mpc_move_next(d); 157 208 if (d->pos) { 158 209 out <<= d->pos; 159 210 out |= d->dword >> (32 - d->pos); 160 211 } 161 ++(d->WordsRead);162 212 } 163 213 164 214 return out & mask[bits]; 215 } 216 217 static void 218 mpc_decoder_make_huffman_lookup( 219 mpc_uint8_t* lookup, size_t length, const HuffmanTyp* Table, size_t elements) 220 { 221 size_t i, idx = elements; 222 mpc_uint32_t dval = (mpc_uint32_t)0x80000000L / length * 2; 223 mpc_uint32_t val = dval - 1; 224 225 for ( i = 0; i < length; i++, val += dval ) { 226 while ( idx > 0 && val >= Table[idx-1].Code ) 227 idx--; 228 *lookup++ = (mpc_uint8_t)idx; 229 } 230 231 return; 165 232 } 166 233 … … 174 241 mpc_uint32_t code = d->dword << d->pos; 175 242 if (d->pos > 26) { 176 code |= d-> Speicher[(d->Zaehler + 1) & MEMMASK]>> (32 - d->pos);243 code |= d->next >> (32 - d->pos); 177 244 } 178 245 while (code < Table->Code) { … … 182 249 // set the new position within bitstream without performing a dummy-read 183 250 if ((d->pos += Table->Length) >= 32) { 184 d->pos -= 32; 185 d->dword = d->Speicher[d->Zaehler = (d->Zaehler+1) & MEMMASK]; 186 ++(d->WordsRead); 251 mpc_move_next(d); 187 252 } 188 253 … … 199 264 mpc_uint32_t code = d->dword << d->pos; 200 265 if (d->pos > 18) { 201 code |= d-> Speicher[(d->Zaehler + 1) & MEMMASK]>> (32 - d->pos);266 code |= d->next >> (32 - d->pos); 202 267 } 203 268 while (code < Table->Code) { … … 207 272 // set the new position within bitstream without performing a dummy-read 208 273 if ((d->pos += Table->Length) >= 32) { 209 d->pos -= 32; 210 d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK]; 211 ++(d->WordsRead); 274 mpc_move_next(d); 212 275 } 213 276 … … 223 286 mpc_uint32_t code = d->dword << d->pos; 224 287 if (d->pos > 22) { 225 code |= d-> Speicher[(d->Zaehler + 1) & MEMMASK]>> (32 - d->pos);288 code |= d->next >> (32 - d->pos); 226 289 } 227 290 while (code < Table->Code) { … … 231 294 // set the new position within bitstream without performing a dummy-read 232 295 if ((d->pos += Table->Length) >= 32) { 233 d->pos -= 32; 234 d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK]; 235 ++(d->WordsRead); 296 mpc_move_next(d); 236 297 } 237 298 … … 247 308 mpc_uint32_t code = d->dword << d->pos; 248 309 if (d->pos > 27) { 249 code |= d-> Speicher[(d->Zaehler + 1) & MEMMASK]>> (32 - d->pos);310 code |= d->next >> (32 - d->pos); 250 311 } 251 312 while (code < Table->Code) { … … 255 316 // set the new position within bitstream without performing a dummy-read 256 317 if ((d->pos += Table->Length) >= 32) { 257 d->pos -= 32; 258 d->dword = d->Speicher[d->Zaehler = (d->Zaehler + 1) & MEMMASK]; 259 ++(d->WordsRead); 318 mpc_move_next(d); 319 } 320 321 return Table->Value; 322 } 323 324 /* partial lookup table decode */ 325 static mpc_int32_t 326 mpc_decoder_huffman_decode_fasterer( 327 mpc_decoder *d, 328 const HuffmanTyp* Table, const mpc_uint8_t* tab, mpc_uint16_t unused_bits) 329 { 330 // load preview and decode 331 mpc_uint32_t code = d->dword << d->pos; 332 333 if (d->pos > 18) { // preview 14 bits 334 code |= d->next >> (32 - d->pos); 335 } 336 337 Table += tab [(size_t)(code >> unused_bits) ]; 338 339 while (code < Table->Code) { 340 Table++; 341 } 342 343 // set the new position within bitstream without performing a dummy-read 344 if ((d->pos += Table->Length) >= 32) { 345 mpc_move_next(d); 346 } 347 348 return Table->Value; 349 } 350 351 /* full decode using lookup table */ 352 static __inline mpc_int32_t 353 mpc_decoder_huffman_decode_fastest( 354 mpc_decoder *d, 355 const HuffmanTyp* Table, const mpc_uint8_t* tab, mpc_uint16_t unused_bits) 356 { 357 // load preview and decode 358 mpc_uint32_t code = d->dword << d->pos; 359 360 if (d->pos > unused_bits) { 361 code |= d->next >> (32 - d->pos); 362 } 363 364 Table+=tab [(size_t)(code >> unused_bits) ]; 365 366 // set the new position within bitstream without performing a dummy-read 367 if ((d->pos += Table->Length) >= 32) { 368 mpc_move_next(d); 260 369 } 261 370 … … 289 398 290 399 d->DecodedFrames = 0; 400 d->SeekTableIndex = 0; 401 d->MaxDecodedFrames = 0; 291 402 d->StreamVersion = 0; 292 403 d->MS_used = 0; … … 314 425 mpc_uint32_t in_len, MPC_SAMPLE_FORMAT *out_buffer) 315 426 { 316 unsigned int i;317 427 mpc_decoder_reset_bitstream_decode(d); 318 428 if (in_len > sizeof(d->Speicher)) in_len = sizeof(d->Speicher); 319 429 memcpy(d->Speicher, in_buffer, in_len); 320 #ifdef MPC_LITTLE_ENDIAN 321 for (i = 0; i < (in_len + 3) / 4; i++) 322 d->Speicher[i] = mpc_swap32(d->Speicher[i]); 323 #endif 324 d->dword = d->Speicher[0]; 430 d->dword = SWAP(d->Speicher[0]); 431 d->next = SWAP(d->Speicher[1]); 325 432 switch (d->StreamVersion) { 326 433 #ifdef MPC_SUPPORT_SV456 … … 333 440 case 0x07: 334 441 case 0x17: 335 mpc_decoder_read_bitstream_sv7(d );442 mpc_decoder_read_bitstream_sv7(d, FALSE); 336 443 break; 337 444 default: … … 353 460 return (mpc_uint32_t)(-1); // end of file -> abort decoding 354 461 } 462 463 if (d->DecodedFrames == 0 && d->Use_SeekTable) 464 d->SeekTable[0] = mpc_decoder_bits_read(d); 355 465 356 466 // read jump-info for validity check of frame … … 371 481 case 0x07: 372 482 case 0x17: 373 mpc_decoder_read_bitstream_sv7(d );483 mpc_decoder_read_bitstream_sv7(d, FALSE); 374 484 break; 375 485 default: … … 378 488 d->FrameWasValid = mpc_decoder_bits_read(d) - FrameBitCnt == d->FwdJumpInfo; 379 489 490 d->DecodedFrames++; 491 492 if (d->Use_SeekTable) { 493 if (d->SeekTable_Step == 1) { 494 d->SeekTable [d->DecodedFrames] = d->FwdJumpInfo + 20; 495 } else { 496 if ((d->DecodedFrames-1) % d->SeekTable_Step == 0) { 497 d->SeekTable[d->SeekTableIndex] = d->SeekTableCounter; 498 d->SeekTableIndex += 1; 499 d->SeekTableCounter = 0; 500 } 501 d->SeekTableCounter += d->FwdJumpInfo + 20; 502 } 503 } 504 380 505 // synthesize signal 381 506 mpc_decoder_requantisierung(d, d->Max_Band); … … 385 510 386 511 mpc_decoder_synthese_filter_float(d, buffer); 387 388 d->DecodedFrames++;389 512 390 513 // cut off first MPC_DECODER_SYNTH_DELAY zero-samples … … 406 529 } else { 407 530 mpc_decoder_bitstream_read(d, 20); 408 mpc_decoder_read_bitstream_sv7(d );531 mpc_decoder_read_bitstream_sv7(d, FALSE); 409 532 mpc_decoder_requantisierung(d, d->Max_Band); 410 533 } … … 472 595 473 596 } 474 mpc_decoder_update_buffer(d , RING);597 mpc_decoder_update_buffer(d); 475 598 476 599 if (valid_samples > 0) { … … 887 1010 /****************************************** SV 7 ******************************************/ 888 1011 void 889 mpc_decoder_read_bitstream_sv7(mpc_decoder *d )1012 mpc_decoder_read_bitstream_sv7(mpc_decoder *d, mpc_bool_t isFastSeeking) 890 1013 { 891 1014 // these arrays hold decoding results for bundled quantizers (3- and 5-step) … … 904 1027 mpc_int8_t *ResL, *ResR; 905 1028 mpc_uint32_t tmp; 1029 mpc_uint8_t *LUT; 1030 mpc_uint8_t max_length; 906 1031 907 1032 /***************************** Header *****************************/ … … 914 1039 if (d->MS_used && !(*ResL==0 && *ResR==0)) { 915 1040 d->MS_Flag[0] = mpc_decoder_bitstream_read(d, 1); 1041 } else { 1042 d->MS_Flag[0] = 0; 916 1043 } 917 1044 … … 928 1055 if (d->MS_used && !(*ResL==0 && *ResR==0)) { 929 1056 d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1); 1057 } else { 1058 d->MS_Flag[n] = 0; 930 1059 } 931 1060 … … 957 1086 { 958 1087 case 1: 959 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);960 L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);961 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);962 L[1] = (idx!=8) ? L[0] + idx : (int)mpc_decoder_bitstream_read(d, 6);1088 idx = DECODE_DSCF(); 1089 L[0] = (idx!=8) ? SCF_DIFF(L[2], idx) : mpc_decoder_bitstream_read(d, 6); 1090 idx = DECODE_DSCF(); 1091 L[1] = (idx!=8) ? SCF_DIFF(L[0], idx) : mpc_decoder_bitstream_read(d, 6); 963 1092 L[2] = L[1]; 964 1093 break; 965 1094 case 3: 966 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);967 L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);1095 idx = DECODE_DSCF(); 1096 L[0] = (idx!=8) ? SCF_DIFF(L[2], idx) : mpc_decoder_bitstream_read(d, 6); 968 1097 L[1] = L[0]; 969 1098 L[2] = L[1]; 970 1099 break; 971 1100 case 2: 972 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);973 L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);1101 idx = DECODE_DSCF(); 1102 L[0] = (idx!=8) ? SCF_DIFF(L[2], idx) : mpc_decoder_bitstream_read(d, 6); 974 1103 L[1] = L[0]; 975 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);976 L[2] = (idx!=8) ? L[1] + idx : (int)mpc_decoder_bitstream_read(d, 6);1104 idx = DECODE_DSCF(); 1105 L[2] = (idx!=8) ? SCF_DIFF(L[1], idx) : mpc_decoder_bitstream_read(d, 6); 977 1106 break; 978 1107 case 0: 979 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);980 L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);981 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);982 L[1] = (idx!=8) ? L[0] + idx : (int)mpc_decoder_bitstream_read(d, 6);983 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);984 L[2] = (idx!=8) ? L[1] + idx : (int)mpc_decoder_bitstream_read(d, 6);1108 idx = DECODE_DSCF(); 1109 L[0] = (idx!=8) ? SCF_DIFF(L[2], idx) : mpc_decoder_bitstream_read(d, 6); 1110 idx = DECODE_DSCF(); 1111 L[1] = (idx!=8) ? SCF_DIFF(L[0], idx) : mpc_decoder_bitstream_read(d, 6); 1112 idx = DECODE_DSCF(); 1113 L[2] = (idx!=8) ? SCF_DIFF(L[1], idx) : mpc_decoder_bitstream_read(d, 6); 985 1114 break; 986 1115 default: … … 997 1126 { 998 1127 case 1: 999 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1000 R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);1001 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1002 R[1] = (idx!=8) ? R[0] + idx : (int)mpc_decoder_bitstream_read(d, 6);1128 idx = DECODE_DSCF(); 1129 R[0] = (idx!=8) ? SCF_DIFF(R[2], idx) : mpc_decoder_bitstream_read(d, 6); 1130 idx = DECODE_DSCF(); 1131 R[1] = (idx!=8) ? SCF_DIFF(R[0], idx) : mpc_decoder_bitstream_read(d, 6); 1003 1132 R[2] = R[1]; 1004 1133 break; 1005 1134 case 3: 1006 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1007 R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);1135 idx = DECODE_DSCF(); 1136 R[0] = (idx!=8) ? SCF_DIFF(R[2], idx) : mpc_decoder_bitstream_read(d, 6); 1008 1137 R[1] = R[0]; 1009 1138 R[2] = R[1]; 1010 1139 break; 1011 1140 case 2: 1012 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1013 R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);1141 idx = DECODE_DSCF(); 1142 R[0] = (idx!=8) ? SCF_DIFF(R[2], idx) : mpc_decoder_bitstream_read(d, 6); 1014 1143 R[1] = R[0]; 1015 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1016 R[2] = (idx!=8) ? R[1] + idx : (int)mpc_decoder_bitstream_read(d, 6);1144 idx = DECODE_DSCF(); 1145 R[2] = (idx!=8) ? SCF_DIFF(R[1], idx) : mpc_decoder_bitstream_read(d, 6); 1017 1146 break; 1018 1147 case 0: 1019 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1020 R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6);1021 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1022 R[1] = (idx!=8) ? R[0] + idx : (int)mpc_decoder_bitstream_read(d, 6);1023 idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF);1024 R[2] = (idx!=8) ? R[1] + idx : (int)mpc_decoder_bitstream_read(d, 6);1148 idx = DECODE_DSCF(); 1149 R[0] = (idx!=8) ? SCF_DIFF(R[2], idx) : mpc_decoder_bitstream_read(d, 6); 1150 idx = DECODE_DSCF(); 1151 R[1] = (idx!=8) ? SCF_DIFF(R[0], idx) : mpc_decoder_bitstream_read(d, 6); 1152 idx = DECODE_DSCF(); 1153 R[2] = (idx!=8) ? SCF_DIFF(R[1], idx) : mpc_decoder_bitstream_read(d, 6); 1025 1154 break; 1026 1155 default: … … 1032 1161 } 1033 1162 } 1163 1164 if(isFastSeeking) 1165 return; 1166 1034 1167 /***************************** Samples ****************************/ 1035 1168 ResL = d->Res_L; … … 1056 1189 break; 1057 1190 case 1: 1058 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][1]; 1191 if (mpc_decoder_bitstream_read(d, 1)) { 1192 Table = mpc_table_HuffQ[1][1]; 1193 LUT = LUT1_1; 1194 max_length = 9; 1195 } else { 1196 Table = mpc_table_HuffQ[0][1]; 1197 LUT = LUT1_0; 1198 max_length = 6; 1199 } 1059 1200 for (k=0; k<12; ++k) 1060 1201 { 1061 idx = mpc_decoder_huffman_decode_fast(d, Table);1202 idx = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1062 1203 *LQ++ = idx30[idx]; 1063 1204 *LQ++ = idx31[idx]; … … 1066 1207 break; 1067 1208 case 2: 1068 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][2]; 1209 if (mpc_decoder_bitstream_read(d, 1)) { 1210 Table = mpc_table_HuffQ[1][2]; 1211 LUT = LUT2_1; 1212 max_length = 10; 1213 } else { 1214 Table = mpc_table_HuffQ[0][2]; 1215 LUT = LUT2_0; 1216 max_length = 7; 1217 } 1069 1218 for (k=0; k<18; ++k) 1070 1219 { 1071 idx = mpc_decoder_huffman_decode_fast(d, Table);1220 idx = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1072 1221 *LQ++ = idx50[idx]; 1073 1222 *LQ++ = idx51[idx]; … … 1075 1224 break; 1076 1225 case 3: 1226 if (mpc_decoder_bitstream_read(d, 1)) { 1227 Table = mpc_table_HuffQ[1][3]; 1228 LUT = LUT3_1; 1229 max_length = 5; 1230 } else { 1231 Table = mpc_table_HuffQ[0][3]; 1232 LUT = LUT3_0; 1233 max_length = 4; 1234 } 1235 for (k=0; k<36; ++k) 1236 *LQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1237 break; 1077 1238 case 4: 1078 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; 1239 if (mpc_decoder_bitstream_read(d, 1)) { 1240 Table = mpc_table_HuffQ[1][4]; 1241 LUT = LUT4_1; 1242 max_length = 5; 1243 } else { 1244 Table = mpc_table_HuffQ[0][4]; 1245 LUT = LUT4_0; 1246 max_length = 4; 1247 } 1079 1248 for (k=0; k<36; ++k) 1080 *LQ++ = mpc_decoder_huffman_decode_faster(d, Table);1249 *LQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1081 1250 break; 1082 1251 case 5: 1083 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; 1252 if (mpc_decoder_bitstream_read(d, 1)) { 1253 Table = mpc_table_HuffQ[1][5]; 1254 LUT = LUT5_1; 1255 max_length = 8; 1256 } else { 1257 Table = mpc_table_HuffQ[0][5]; 1258 LUT = LUT5_0; 1259 max_length = 6; 1260 } 1084 1261 for (k=0; k<36; ++k) 1085 *LQ++ = mpc_decoder_huffman_decode_fast(d, Table);1262 *LQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1086 1263 break; 1087 1264 case 6: 1265 if (mpc_decoder_bitstream_read(d, 1)) { 1266 Table = mpc_table_HuffQ[1][6]; 1267 LUT = LUT6_1; 1268 max_length = 7; 1269 for (k=0; k<36; ++k) 1270 *LQ++ = HUFFMAN_DECODE_FASTERER ( d, Table, LUT, max_length ); 1271 } else { 1272 Table = mpc_table_HuffQ[0][6]; 1273 LUT = LUT6_0; 1274 max_length = 7; 1275 for (k=0; k<36; ++k) 1276 *LQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1277 } 1278 break; 1088 1279 case 7: 1089 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; 1090 for (k=0; k<36; ++k) 1091 *LQ++ = mpc_decoder_huffman_decode(d, Table); 1280 if (mpc_decoder_bitstream_read(d, 1)) { 1281 Table = mpc_table_HuffQ[1][7]; 1282 LUT = LUT7_1; 1283 max_length = 8; 1284 for (k=0; k<36; ++k) 1285 *LQ++ = HUFFMAN_DECODE_FASTERER ( d, Table, LUT, max_length ); 1286 } else { 1287 Table = mpc_table_HuffQ[0][7]; 1288 LUT = LUT7_0; 1289 max_length = 8; 1290 for (k=0; k<36; ++k) 1291 *LQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1292 } 1092 1293 break; 1093 1294 case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: 1094 1295 tmp = Dc[*ResL]; 1095 1296 for (k=0; k<36; ++k) 1096 *LQ++ = (mpc_int 32_t)mpc_decoder_bitstream_read(d, Res_bit[*ResL]) - tmp;1297 *LQ++ = (mpc_int16_t) mpc_decoder_bitstream_read(d, Res_bit[*ResL]) - tmp; 1097 1298 break; 1098 1299 default: … … 1116 1317 break; 1117 1318 case 1: 1118 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][1]; 1319 if (mpc_decoder_bitstream_read(d, 1)) { 1320 Table = mpc_table_HuffQ[1][1]; 1321 LUT = LUT1_1; 1322 max_length = 9; 1323 } else { 1324 Table = mpc_table_HuffQ[0][1]; 1325 LUT = LUT1_0; 1326 max_length = 6; 1327 } 1119 1328 for (k=0; k<12; ++k) 1120 1329 { 1121 idx = mpc_decoder_huffman_decode_fast(d, Table);1330 idx = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1122 1331 *RQ++ = idx30[idx]; 1123 1332 *RQ++ = idx31[idx]; … … 1126 1335 break; 1127 1336 case 2: 1128 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][2]; 1337 if (mpc_decoder_bitstream_read(d, 1)) { 1338 Table = mpc_table_HuffQ[1][2]; 1339 LUT = LUT2_1; 1340 max_length = 10; 1341 } else { 1342 Table = mpc_table_HuffQ[0][2]; 1343 LUT = LUT2_0; 1344 max_length = 7; 1345 } 1129 1346 for (k=0; k<18; ++k) 1130 1347 { 1131 idx = mpc_decoder_huffman_decode_fast(d, Table);1348 idx = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1132 1349 *RQ++ = idx50[idx]; 1133 1350 *RQ++ = idx51[idx]; … … 1135 1352 break; 1136 1353 case 3: 1354 if (mpc_decoder_bitstream_read(d, 1)) { 1355 Table = mpc_table_HuffQ[1][3]; 1356 LUT = LUT3_1; 1357 max_length = 5; 1358 } else { 1359 Table = mpc_table_HuffQ[0][3]; 1360 LUT = LUT3_0; 1361 max_length = 4; 1362 } 1363 for (k=0; k<36; ++k) 1364 *RQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1365 break; 1137 1366 case 4: 1138 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; 1367 if (mpc_decoder_bitstream_read(d, 1)) { 1368 Table = mpc_table_HuffQ[1][4]; 1369 LUT = LUT4_1; 1370 max_length = 5; 1371 } else { 1372 Table = mpc_table_HuffQ[0][4]; 1373 LUT = LUT4_0; 1374 max_length = 4; 1375 } 1139 1376 for (k=0; k<36; ++k) 1140 *RQ++ = mpc_decoder_huffman_decode_faster(d, Table);1377 *RQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1141 1378 break; 1142 1379 case 5: 1143 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; 1380 if (mpc_decoder_bitstream_read(d, 1)) { 1381 Table = mpc_table_HuffQ[1][5]; 1382 LUT = LUT5_1; 1383 max_length = 8; 1384 } else { 1385 Table = mpc_table_HuffQ[0][5]; 1386 LUT = LUT5_0; 1387 max_length = 6; 1388 } 1144 1389 for (k=0; k<36; ++k) 1145 *RQ++ = mpc_decoder_huffman_decode_fast(d, Table);1390 *RQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1146 1391 break; 1147 1392 case 6: 1393 if (mpc_decoder_bitstream_read(d, 1)) { 1394 Table = mpc_table_HuffQ[1][6]; 1395 LUT = LUT6_1; 1396 max_length = 7; 1397 for (k=0; k<36; ++k) 1398 *RQ++ = HUFFMAN_DECODE_FASTERER ( d, Table, LUT, max_length ); 1399 } else { 1400 Table = mpc_table_HuffQ[0][6]; 1401 LUT = LUT6_0; 1402 max_length = 7; 1403 for (k=0; k<36; ++k) 1404 *RQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1405 } 1406 break; 1148 1407 case 7: 1149 Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; 1150 for (k=0; k<36; ++k) 1151 *RQ++ = mpc_decoder_huffman_decode(d, Table); 1408 if (mpc_decoder_bitstream_read(d, 1)) { 1409 Table = mpc_table_HuffQ[1][7]; 1410 LUT = LUT7_1; 1411 max_length = 8; 1412 for (k=0; k<36; ++k) 1413 *RQ++ = HUFFMAN_DECODE_FASTERER ( d, Table, LUT, max_length ); 1414 } else { 1415 Table = mpc_table_HuffQ[0][7]; 1416 LUT = LUT7_0; 1417 max_length = 8; 1418 for (k=0; k<36; ++k) 1419 *RQ++ = HUFFMAN_DECODE_FASTEST ( d, Table, LUT, max_length ); 1420 } 1152 1421 break; 1153 1422 case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: 1154 1423 tmp = Dc[*ResR]; 1155 1424 for (k=0; k<36; ++k) 1156 *RQ++ = (mpc_int 32_t)mpc_decoder_bitstream_read(d, Res_bit[*ResR]) - tmp;1425 *RQ++ = (mpc_int16_t) mpc_decoder_bitstream_read(d, Res_bit[*ResR]) - tmp; 1157 1426 break; 1158 1427 default: … … 1174 1443 d->OverallFrames = 0; 1175 1444 d->DecodedFrames = 0; 1445 d->MaxDecodedFrames = 0; 1176 1446 d->TrueGaplessPresent = 0; 1177 1447 d->WordsRead = 0; … … 1184 1454 d->pos = 0; 1185 1455 d->Zaehler = 0; 1456 d->Ring = 0; 1186 1457 d->WordsRead = 0; 1187 1458 d->Max_Band = 0; 1459 d->SeekTable = NULL; 1460 d->Use_FastSeek = TRUE; 1461 d->Use_SeekTable = TRUE; 1462 d->Use_StaticSeekTable = FALSE; 1463 d->SeekTable_Step = 1; 1464 d->SeekTableIndex = 0; 1465 d->SeekTableCounter = 0; 1466 d->Max_SeekTable_Size = 0; 1188 1467 1189 1468 mpc_decoder_initialisiere_quantisierungstabellen(d, 1.0f); 1190 1469 #if 0 1191 mpc_decoder_init_huffman_sv6(d);1192 mpc_decoder_init_huffman_sv7(d);1470 mpc_decoder_init_huffman_sv6(d); 1471 mpc_decoder_init_huffman_sv7(d); 1193 1472 #endif 1473 1474 LOOKUP ( mpc_table_HuffQ[0][1], 27, LUT1_0 ); 1475 LOOKUP ( mpc_table_HuffQ[1][1], 27, LUT1_1 ); 1476 LOOKUP ( mpc_table_HuffQ[0][2], 25, LUT2_0 ); 1477 LOOKUP ( mpc_table_HuffQ[1][2], 25, LUT2_1 ); 1478 LOOKUP ( mpc_table_HuffQ[0][3], 7, LUT3_0 ); 1479 LOOKUP ( mpc_table_HuffQ[1][3], 7, LUT3_1 ); 1480 LOOKUP ( mpc_table_HuffQ[0][4], 9, LUT4_0 ); 1481 LOOKUP ( mpc_table_HuffQ[1][4], 9, LUT4_1 ); 1482 LOOKUP ( mpc_table_HuffQ[0][5], 15, LUT5_0 ); 1483 LOOKUP ( mpc_table_HuffQ[1][5], 15, LUT5_1 ); 1484 LOOKUP ( mpc_table_HuffQ[0][6], 31, LUT6_0 ); 1485 LOOKUP ( mpc_table_HuffQ[1][6], 31, LUT6_1 ); 1486 LOOKUP ( mpc_table_HuffQ[0][7], 63, LUT7_0 ); 1487 LOOKUP ( mpc_table_HuffQ[1][7], 63, LUT7_1 ); 1488 LOOKUP ( mpc_table_HuffDSCF, 16, LUTDSCF ); 1489 } 1490 1491 void mpc_decoder_destroy(mpc_decoder *d) 1492 { 1493 free(d->Speicher); 1494 if (d->SeekTable != NULL && d->Use_StaticSeekTable == FALSE) 1495 free(d->SeekTable); 1194 1496 } 1195 1497 1196 1498 void mpc_decoder_set_streaminfo(mpc_decoder *d, mpc_streaminfo *si) 1197 1499 { 1500 mpc_uint16_t seekTableSize; 1501 1198 1502 mpc_decoder_reset_synthesis(d); 1199 1503 mpc_decoder_reset_globals(d); … … 1208 1512 1209 1513 d->samples_to_skip = MPC_DECODER_SYNTH_DELAY; 1514 1515 if (d->SeekTable != NULL && d->Use_StaticSeekTable == FALSE) 1516 free(d->SeekTable); 1517 1518 if (d->Use_SeekTable) { 1519 if (d->Use_StaticSeekTable == FALSE) { 1520 if (d->Max_SeekTable_Size == 0) { 1521 seekTableSize = si->frames +1; 1522 } else { 1523 seekTableSize = min(si->frames +1, d->Max_SeekTable_Size / sizeof(mpc_uint32_t)); 1524 } 1525 d->SeekTable = (mpc_uint32_t*) calloc(seekTableSize, sizeof(mpc_uint32_t)); 1526 d->SeekTable_Step = (si->frames +1) / seekTableSize; 1527 if ((si->frames +1) % seekTableSize) 1528 d->SeekTable_Step+=1; 1529 } else { 1530 seekTableSize = d->Max_SeekTable_Size / sizeof(mpc_uint32_t); 1531 d->SeekTable_Step = (si->frames +1) / seekTableSize; 1532 if ((si->frames +1) % seekTableSize) 1533 d->SeekTable_Step+=1; 1534 } 1535 } 1210 1536 } 1211 1537 1212 1538 mpc_bool_t mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si) 1213 1539 { 1540 mpc_uint32_t bitPos; 1541 mpc_uint32_t fpos; 1542 1543 d->Speicher = malloc(MPC_DECODER_MEMSIZE * sizeof(mpc_uint32_t)); 1214 1544 mpc_decoder_set_streaminfo(d, si); 1215 1545 1216 // AB: setting position to the beginning of the data-bitstream 1217 switch (d->StreamVersion) { 1218 case 0x04: f_seek(d, 4 + d->MPCHeaderPos); d->pos = 16; break; // Geht auch über eine der Helperfunktionen 1219 case 0x05: 1220 case 0x06: f_seek(d, 8 + d->MPCHeaderPos); d->pos = 0; break; 1221 case 0x07: 1222 case 0x17: /*f_seek ( 24 + d->MPCHeaderPos );*/ d->pos = 8; break; 1223 default: return FALSE; 1224 } 1225 1226 // AB: fill buffer and initialize decoder 1546 // setting position to the beginning of the data-bitstream 1547 bitPos = get_initial_fpos(d, d->StreamVersion); 1548 fpos = bitPos >> 5; 1549 1550 // fill buffer and initialize decoder 1551 f_seek(d, fpos*4 + d->MPCHeaderPos); 1227 1552 f_read_dword(d, d->Speicher, MEMSIZE ); 1228 d->dword = d->Speicher[d->Zaehler = 0]; 1553 d->Ring = 0; 1554 d->Zaehler = 0; 1555 d->pos = bitPos & 31; 1556 d->WordsRead = fpos; 1557 d->dword = SWAP(d->Speicher[0]); 1558 d->next = SWAP(d->Speicher[1]); 1559 d->SeekTable_Step = 1; 1229 1560 1230 1561 return TRUE; … … 1241 1572 f_seek(d, (bitpos >> 5) * 4 + d->MPCHeaderPos); 1242 1573 f_read_dword(d, d->Speicher, 2); 1243 d->dword = d->Speicher[d->Zaehler = 0];1574 d->dword = SWAP(d->Speicher[d->Zaehler = 0]); 1244 1575 d->pos = bitpos & 31; 1245 1576 } 1246 #endif1247 1577 1248 1578 static void … … 1251 1581 f_seek(d, (bitpos>>5) * 4 + d->MPCHeaderPos); 1252 1582 f_read_dword(d, d->Speicher, MEMSIZE); 1253 d->dword = d->Speicher[d->Zaehler = 0];1583 d->dword = SWAP(d->Speicher[d->Zaehler = 0]); 1254 1584 d->pos = bitpos & 31; 1255 1585 } 1256 1586 1257 #if 01258 1587 static void 1259 1588 helper3(mpc_decoder *d, mpc_uint32_t bitpos, mpc_uint32_t* buffoffs) … … 1266 1595 f_read_dword(d, d->Speicher, MEMSIZE ); 1267 1596 } 1268 d->dword = d->Speicher[d->Zaehler = bitpos - *buffoffs ];1597 d->dword = SWAP(d->Speicher[d->Zaehler = bitpos - *buffoffs ]); 1269 1598 } 1270 1599 #endif 1600 1601 // jumps over the current frame 1602 mpc_uint32_t mpc_decoder_jump_frame(mpc_decoder *d) { 1603 1604 mpc_uint32_t frameSize; 1605 1606 // ensure the buffer is full 1607 mpc_decoder_update_buffer(d); 1608 1609 // bits in frame 1610 frameSize = mpc_decoder_bitstream_read(d, 20); 1611 1612 // jump forward 1613 mpc_decoder_seek_forward(d, frameSize); 1614 1615 return frameSize + 20; 1616 1617 } 1271 1618 1272 1619 static mpc_uint32_t get_initial_fpos(mpc_decoder *d, mpc_uint32_t StreamVersion) … … 1289 1636 } 1290 1637 1291 mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) 1292 { 1293 mpc_uint32_t fpos; 1294 mpc_uint32_t fwd; 1295 1296 fwd = (mpc_uint32_t) (destsample / MPC_FRAME_LENGTH); 1297 d->samples_to_skip = MPC_DECODER_SYNTH_DELAY + (mpc_uint32_t)(destsample % MPC_FRAME_LENGTH); 1638 void mpc_decoder_reset_state(mpc_decoder *d) { 1298 1639 1299 1640 memset(d->Y_L , 0, sizeof d->Y_L ); 1300 1641 memset(d->Y_R , 0, sizeof d->Y_R ); 1642 #ifdef SCF_HACK 1643 memset(d->SCF_Index_L , -128, sizeof d->SCF_Index_L ); 1644 memset(d->SCF_Index_R , -128, sizeof d->SCF_Index_R ); 1645 #else 1301 1646 memset(d->SCF_Index_L , 0, sizeof d->SCF_Index_L ); 1302 1647 memset(d->SCF_Index_R , 0, sizeof d->SCF_Index_R ); 1648 #endif 1303 1649 memset(d->Res_L , 0, sizeof d->Res_L ); 1304 1650 memset(d->Res_R , 0, sizeof d->Res_R ); … … 1313 1659 memset(d->Q , 0, sizeof d->Q ); 1314 1660 memset(d->MS_Flag , 0, sizeof d->MS_Flag ); 1315 1316 // resetting synthesis filter to avoid "clicks" 1317 mpc_decoder_reset_synthesis(d); 1661 } 1662 1663 mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) 1664 { 1665 mpc_uint32_t fpos; 1666 mpc_uint32_t seekFrame = 0; // the frame to seek to 1667 mpc_uint32_t lastFrame = 0; // last frame to seek to before scanning scale factors 1668 mpc_uint32_t delta = 0; // direction of seeks 1669 1670 destsample += MPC_DECODER_SYNTH_DELAY; 1671 seekFrame = (mpc_uint32_t) ((destsample) / MPC_FRAME_LENGTH); 1672 d->samples_to_skip = (mpc_uint32_t)((destsample) % MPC_FRAME_LENGTH); 1318 1673 1319 1674 // prevent from desired position out of allowed range 1320 fwd = fwd < d->OverallFrames ? fwd : d->OverallFrames; 1321 1322 // reset number of decoded frames 1323 d->DecodedFrames = 0; 1324 1325 fpos = get_initial_fpos(d, d->StreamVersion); 1326 if (fpos == 0) { 1327 return FALSE; 1328 } 1329 1330 helper2(d, fpos); 1331 1332 // read the last 32 frames before the desired position to scan the scalefactors (artifactless jumping) 1333 for ( ; d->DecodedFrames < fwd; d->DecodedFrames++ ) { 1675 seekFrame = seekFrame < d->OverallFrames ? seekFrame : d->OverallFrames; 1676 1677 // seek direction (note: avoids casting to int64) 1678 delta = (d->DecodedFrames > seekFrame ? -(mpc_int32_t)(d->DecodedFrames - seekFrame) : (mpc_int32_t)(seekFrame - d->DecodedFrames)); 1679 1680 // update max decoded frames 1681 if (d->DecodedFrames > d->MaxDecodedFrames) 1682 d->MaxDecodedFrames = d->DecodedFrames; 1683 1684 if (seekFrame > 33) 1685 lastFrame = seekFrame - 33 + 1 - d->SeekTable_Step; 1686 1687 if ((!d->Use_SeekTable && delta < 0) || d->MaxDecodedFrames == 0) 1688 { 1689 1690 mpc_decoder_reset_state(d); 1691 1692 // starts from the beginning since no frames have been decoded yet, or not using seek table 1693 fpos = get_initial_fpos(d, d->StreamVersion); 1694 1695 // seek to the first frame 1696 mpc_decoder_seek_to(d, fpos); 1697 1698 // reset number of decoded frames 1699 d->DecodedFrames = 0; 1700 1701 if (d->Use_SeekTable) 1702 { 1703 // jump to the last frame, updating seek table 1704 if (d->SeekTable_Step == 1) 1705 { 1706 d->SeekTable[0] = (mpc_uint32_t)fpos; 1707 for (;d->DecodedFrames < lastFrame; d->DecodedFrames++) 1708 d->SeekTable[d->DecodedFrames+1] = mpc_decoder_jump_frame(d); 1709 } 1710 else 1711 { 1712 d->SeekTableIndex = 0; 1713 d->SeekTableCounter = (mpc_uint32_t)fpos; 1714 for (;d->DecodedFrames < lastFrame; d->DecodedFrames++) 1715 { 1716 if (d->DecodedFrames % d->SeekTable_Step == 0) 1717 { 1718 d->SeekTable[d->SeekTableIndex] = d->SeekTableCounter; 1719 d->SeekTableIndex += 1; 1720 d->SeekTableCounter = 0; 1721 } 1722 d->SeekTableCounter += mpc_decoder_jump_frame(d); 1723 } 1724 } 1725 } 1726 else 1727 { 1728 // just jump to the last frame 1729 for (;d->DecodedFrames < lastFrame; d->DecodedFrames++) 1730 mpc_decoder_jump_frame(d); 1731 } 1732 } 1733 else if (delta < 0) 1734 { 1735 1736 mpc_decoder_reset_state(d); 1737 1738 // jumps backwards using the seek table 1739 fpos = d->SeekTable[0]; 1740 if (d->SeekTable_Step == 1) 1741 { 1742 for (d->DecodedFrames = 0;d->DecodedFrames < lastFrame; d->DecodedFrames++) 1743 fpos += d->SeekTable[d->DecodedFrames+1]; 1744 } 1745 else 1746 { 1747 d->SeekTableIndex = 0; 1748 //d->SeekTableCounter = 0; 1749 for (d->DecodedFrames = 0;d->DecodedFrames < lastFrame; d->DecodedFrames+=d->SeekTable_Step, d->SeekTableIndex++) 1750 fpos += d->SeekTable[d->SeekTableIndex+1]; 1751 d->SeekTableCounter = d->SeekTable[d->SeekTableIndex]; 1752 } 1753 mpc_decoder_seek_to(d, fpos); 1754 1755 } 1756 else if (delta > 33) 1757 { 1758 1759 mpc_decoder_reset_state(d); 1760 1761 // jumps forward from the current position 1762 if (d->Use_SeekTable) 1763 { 1764 if (d->MaxDecodedFrames > lastFrame) // REVIEW: Correct?? or (d->MaxDecodedFrames > d->DecodedFrames) 1765 { 1766 // jump to the last usable position in the seek table 1767 if (d->SeekTable_Step == 1) 1768 { 1769 fpos = mpc_decoder_bits_read(d); 1770 for (; d->DecodedFrames < d->MaxDecodedFrames && d->DecodedFrames < lastFrame; d->DecodedFrames++) 1771 fpos += d->SeekTable[d->DecodedFrames+1]; 1772 } 1773 else 1774 { 1775 // could test SeekTable offset and jump to next entry but this is easier for now... 1776 //d->SeekTableIndex = 0; 1777 //d->SeekTableCounter = 0; 1778 fpos = d->SeekTable[0]; 1779 d->SeekTableIndex = 0; 1780 for (d->DecodedFrames = 0;d->DecodedFrames < d->MaxDecodedFrames && d->DecodedFrames < lastFrame; d->DecodedFrames+=d->SeekTable_Step, d->SeekTableIndex++) 1781 fpos += d->SeekTable[d->SeekTableIndex+1]; 1782 d->SeekTableCounter = d->SeekTable[d->SeekTableIndex]; 1783 } 1784 mpc_decoder_seek_to(d, fpos); 1785 } 1786 1787 if (d->SeekTable_Step == 1) 1788 { 1789 for (;d->DecodedFrames < lastFrame; d->DecodedFrames++) 1790 d->SeekTable[d->DecodedFrames+1] = mpc_decoder_jump_frame(d); 1791 } 1792 else 1793 { 1794 for (;d->DecodedFrames < lastFrame; d->DecodedFrames++) 1795 { 1796 if (d->DecodedFrames % d->SeekTable_Step == 0) 1797 { 1798 d->SeekTable[d->SeekTableIndex] = d->SeekTableCounter; 1799 d->SeekTableIndex += 1; 1800 d->SeekTableCounter = 0; 1801 } 1802 d->SeekTableCounter += mpc_decoder_jump_frame(d); 1803 } 1804 } 1805 } 1806 else 1807 { 1808 for (;d->DecodedFrames < lastFrame; d->DecodedFrames++) 1809 mpc_decoder_jump_frame(d); 1810 } 1811 } 1812 1813 // REVIEW: Needed? 1814 mpc_decoder_update_buffer(d); 1815 1816 for (;d->DecodedFrames < seekFrame; d->DecodedFrames++) { 1334 1817 mpc_uint32_t FrameBitCnt; 1335 mpc_uint32_t RING;1336 RING = d->Zaehler;1337 1818 d->FwdJumpInfo = mpc_decoder_bitstream_read(d, 20); // read jump-info 1338 1819 d->ActDecodePos = (d->Zaehler << 5) + d->pos; 1339 FrameBitCnt = mpc_decoder_bits_read(d); // scanning the scalefactors and check for validity of frame 1820 FrameBitCnt = mpc_decoder_bits_read(d); 1821 // scanning the scalefactors (and check for validity of frame) 1340 1822 if (d->StreamVersion >= 7) { 1341 mpc_decoder_read_bitstream_sv7(d );1823 mpc_decoder_read_bitstream_sv7(d, d->Use_FastSeek && (d->DecodedFrames < seekFrame - 1)); 1342 1824 } 1343 1825 else { … … 1348 1830 #endif 1349 1831 } 1350 if (mpc_decoder_bits_read(d) - FrameBitCnt != d->FwdJumpInfo ) { 1351 // Box ("Bug in perform_jump"); 1832 FrameBitCnt = mpc_decoder_bits_read(d) - FrameBitCnt; 1833 1834 if (d->Use_FastSeek && d->FwdJumpInfo > FrameBitCnt) 1835 mpc_decoder_seek_forward(d, d->FwdJumpInfo - FrameBitCnt); 1836 else if (FrameBitCnt != d->FwdJumpInfo ) 1837 // Bug in perform_jump; 1352 1838 return FALSE; 1353 } 1839 1840 // REVIEW: Only if decodedFrames < maxDecodedFrames?? 1841 if (d->Use_SeekTable) 1842 { 1843 if (d->SeekTable_Step == 1) 1844 { 1845 // check that the frame length corresponds with any data already in the seek table 1846 if (d->SeekTable[d->DecodedFrames+1] != 0 && d->SeekTable[d->DecodedFrames+1] != d->FwdJumpInfo + 20) 1847 return FALSE; 1848 d->SeekTable [d->DecodedFrames+1] = d->FwdJumpInfo + 20; 1849 } 1850 else 1851 { 1852 if (d->DecodedFrames % d->SeekTable_Step == 0) 1853 { 1854 if (d->SeekTable[d->SeekTableIndex] != 0 && d->SeekTable[d->SeekTableIndex] != d->SeekTableCounter) 1855 return FALSE; 1856 d->SeekTable[d->SeekTableIndex] = d->SeekTableCounter; 1857 d->SeekTableIndex += 1; 1858 d->SeekTableCounter = 0; 1859 } 1860 d->SeekTableCounter += d->FwdJumpInfo + 20; 1861 } 1862 } 1863 1354 1864 // update buffer 1355 if ((RING ^ d->Zaehler) & MEMSIZE2) { 1356 f_read_dword(d, d->Speicher + (RING & MEMSIZE2), MEMSIZE2); 1357 } 1358 } 1359 1360 // LastBitsRead = BitsRead (); 1361 // LastFrame = d->DecodedFrames; 1865 mpc_decoder_update_buffer(d); 1866 1867 if (d->DecodedFrames == seekFrame - 1) 1868 { 1869 // initialize the synth correctly for perfect decoding 1870 mpc_decoder_requantisierung(d, d->Max_Band); 1871 mpc_decoder_synthese_filter_float(d, NULL); 1872 } 1873 } 1362 1874 1363 1875 return TRUE; 1364 1876 } 1365 1877 1366 void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING) 1367 { 1368 if ((RING ^ d->Zaehler) & MEMSIZE2 ) { 1878 void mpc_decoder_fill_buffer(mpc_decoder *d) 1879 { 1880 f_read_dword(d, d->Speicher, MEMSIZE); 1881 d->dword = SWAP(d->Speicher[d->Zaehler = 0]); 1882 d->next = SWAP(d->Speicher[1]); 1883 d->Ring = 0; 1884 } 1885 1886 void mpc_decoder_update_buffer(mpc_decoder *d) 1887 { 1888 if ((d->Ring ^ d->Zaehler) & MEMSIZE2) { 1369 1889 // update buffer 1370 f_read_dword(d, d->Speicher + (RING & MEMSIZE2), MEMSIZE2); 1371 } 1372 } 1373 1374 1890 f_read_dword(d, d->Speicher + (d->Ring & MEMSIZE2), MEMSIZE2); 1891 d->Ring = d->Zaehler; 1892 } 1893 } 1894 1895 1896 void mpc_decoder_seek_to(mpc_decoder *d, mpc_uint32_t bitPos) 1897 { 1898 // required dword 1899 mpc_uint32_t fpos = (bitPos >> 5); 1900 mpc_uint32_t bufferStart = d->WordsRead - d->Zaehler; 1901 if ((d->Zaehler & MEMSIZE2) != FALSE) 1902 bufferStart += MEMSIZE2; 1903 1904 if (fpos >= bufferStart && fpos < bufferStart + MEMSIZE) 1905 { 1906 // required position is within the buffer, no need to seek 1907 d->Zaehler = (fpos - bufferStart + ((d->Zaehler & MEMSIZE2) != FALSE ? MEMSIZE2 : 0)) & MEMMASK; 1908 d->pos = bitPos & 31; 1909 d->WordsRead = fpos; 1910 d->dword = SWAP(d->Speicher[d->Zaehler]); 1911 d->next = SWAP(d->Speicher[(d->Zaehler + 1) & MEMMASK]); 1912 1913 mpc_decoder_update_buffer(d); 1914 } 1915 else 1916 { 1917 // DWORD aligned 1918 f_seek(d, fpos*4 + d->MPCHeaderPos); 1919 d->Zaehler = 0; 1920 d->pos = bitPos & 31; 1921 d->WordsRead = fpos; 1922 1923 mpc_decoder_fill_buffer(d); 1924 } 1925 } 1926 1927 void mpc_decoder_seek_forward(mpc_decoder *d, mpc_uint32_t bits) 1928 { 1929 bits += d->pos; 1930 d->pos = bits & 31; 1931 bits = bits >> 5; // to DWORDs 1932 d->Zaehler = (d->Zaehler + bits) & MEMMASK; 1933 d->dword = SWAP(d->Speicher[d->Zaehler]); 1934 d->next = SWAP(d->Speicher[(d->Zaehler + 1) & MEMMASK]); 1935 d->WordsRead += bits; 1936 } 1937 1938 void mpc_decoder_set_seek_table(mpc_decoder *d, mpc_uint32_t *seek_table, mpc_uint32_t max_table_size) 1939 { 1940 d->Use_StaticSeekTable = TRUE; 1941 d->SeekTable = seek_table; 1942 d->Max_SeekTable_Size = max_table_size; 1943 }
Note: See TracChangeset
for help on using the changeset viewer.