H A D | pwc-dec23.c | 53 static void build_subblock_pattern(struct pwc_dec23_private *pdec) build_subblock_pattern() argument 74 pdec->table_subblock[i][j] = temp_values[j]; build_subblock_pattern() 80 static void build_bit_powermask_table(struct pwc_dec23_private *pdec) build_bit_powermask_table() argument 88 p = pdec->table_bitpowermask[bit]; build_bit_powermask_table() 154 static void fill_table_dc00_d800(struct pwc_dec23_private *pdec) fill_table_dc00_d800() argument 163 pdec->table_dc00[i] = offset1 & ~(ONE_HALF); fill_table_dc00_d800() 164 pdec->table_d800[i] = offset2; fill_table_dc00_d800() 300 struct pwc_dec23_private *pdec = &pdev->dec23; pwc_dec23_init() local 302 mutex_init(&pdec->lock); pwc_dec23_init() 304 if (pdec->last_cmd_valid && pdec->last_cmd == cmd[2]) pwc_dec23_init() 310 pdec->nbits = 7; /* More bits, mean more bits to encode the stream, but better quality */ pwc_dec23_init() 312 pdec->nbits = 8; pwc_dec23_init() 314 pdec->nbits = 6; pwc_dec23_init() 317 build_table_color(KiaraRomTable[version][0], pdec->table_0004_pass1, pdec->table_8004_pass1); pwc_dec23_init() 318 build_table_color(KiaraRomTable[version][1], pdec->table_0004_pass2, pdec->table_8004_pass2); pwc_dec23_init() 324 pdec->nbits = 7; pwc_dec23_init() 326 pdec->nbits = 8; pwc_dec23_init() 328 pdec->nbits = 6; pwc_dec23_init() 331 build_table_color(TimonRomTable[version][0], pdec->table_0004_pass1, pdec->table_8004_pass1); pwc_dec23_init() 332 build_table_color(TimonRomTable[version][1], pdec->table_0004_pass2, pdec->table_8004_pass2); pwc_dec23_init() 336 shift = 8 - pdec->nbits; pwc_dec23_init() 337 pdec->scalebits = SCALEBITS - shift; pwc_dec23_init() 338 pdec->nbitsmask = 0xFF >> shift; pwc_dec23_init() 340 fill_table_dc00_d800(pdec); pwc_dec23_init() 341 build_subblock_pattern(pdec); pwc_dec23_init() 342 build_bit_powermask_table(pdec); pwc_dec23_init() 354 pdec->last_cmd = cmd[2]; pwc_dec23_init() 355 pdec->last_cmd_valid = 1; pwc_dec23_init() 469 #define fill_nbits(pdec, nbits_wanted) do { \ 470 while (pdec->nbits_in_reservoir<(nbits_wanted)) \ 472 pdec->reservoir |= (*(pdec->stream)++) << (pdec->nbits_in_reservoir); \ 473 pdec->nbits_in_reservoir += 8; \ 477 #define skip_nbits(pdec, nbits_to_skip) do { \ 478 pdec->reservoir >>= (nbits_to_skip); \ 479 pdec->nbits_in_reservoir -= (nbits_to_skip); \ 482 #define get_nbits(pdec, nbits_wanted, result) do { \ 483 fill_nbits(pdec, nbits_wanted); \ 484 result = (pdec->reservoir) & ((1U<<(nbits_wanted))-1); \ 485 skip_nbits(pdec, nbits_wanted); \ 488 #define __get_nbits(pdec, nbits_wanted, result) do { \ 489 result = (pdec->reservoir) & ((1U<<(nbits_wanted))-1); \ 490 skip_nbits(pdec, nbits_wanted); \ 493 #define look_nbits(pdec, nbits_wanted) \ 494 ((pdec->reservoir) & ((1U<<(nbits_wanted))-1)) 499 static void decode_block(struct pwc_dec23_private *pdec, decode_block() argument 507 fill_nbits(pdec, 16); decode_block() 508 __get_nbits(pdec, pdec->nbits, primary_color); decode_block() 510 if (look_nbits(pdec,2) == 0) { decode_block() 511 skip_nbits(pdec, 2); decode_block() 514 pdec->temp_colors[i] = pdec->table_dc00[primary_color]; decode_block() 521 pdec->temp_colors[i] = pdec->table_d800[primary_color]; decode_block() 523 __get_nbits(pdec, 3, channel_v); decode_block() 541 fill_nbits(pdec, 16); decode_block() 542 htable_idx = look_nbits(pdec, 6); decode_block() 546 skip_nbits(pdec, 2); decode_block() 557 skip_nbits(pdec, 3); decode_block() 559 __get_nbits(pdec, 4, yyyy); decode_block() 565 __get_nbits(pdec, nbits+1, col1); decode_block() 568 mask = pdec->table_bitpowermask[nbits][col1]; decode_block() 572 block = pdec->table_subblock[rows]; decode_block() 574 pdec->temp_colors[i] += block[MulIdx[offset1][i]]; decode_block() 586 block = pdec->table_subblock[rows]; decode_block() 588 pdec->temp_colors[i] += block[MulIdx[offset1][i]]; decode_block() 591 skip_nbits(pdec, shift); decode_block() 598 static void DecompressBand23(struct pwc_dec23_private *pdec, DecompressBand23() argument 610 pdec->reservoir = 0; DecompressBand23() 611 pdec->nbits_in_reservoir = 0; DecompressBand23() 612 pdec->stream = rawyuv + 1; /* The first byte of the stream is skipped */ DecompressBand23() 614 get_nbits(pdec, 4, compression_index); DecompressBand23() 619 ptable0004 = pdec->table_0004_pass1[compression_index]; DecompressBand23() 620 ptable8004 = pdec->table_8004_pass1[compression_index]; DecompressBand23() 624 decode_block(pdec, ptable0004, ptable8004); DecompressBand23() 625 copy_image_block_Y(pdec->temp_colors, planar_y, real_image_width, pdec->scalebits); DecompressBand23() 633 ptable0004 = pdec->table_0004_pass2[compression_index]; DecompressBand23() 634 ptable8004 = pdec->table_8004_pass2[compression_index]; DecompressBand23() 638 decode_block(pdec, ptable0004, ptable8004); DecompressBand23() 639 copy_image_block_CrCb(pdec->temp_colors, planar_u, real_image_width/2, pdec->scalebits); DecompressBand23() 641 decode_block(pdec, ptable0004, ptable8004); DecompressBand23() 642 copy_image_block_CrCb(pdec->temp_colors, planar_v, real_image_width/2, pdec->scalebits); DecompressBand23() 663 struct pwc_dec23_private *pdec = &pdev->dec23; pwc_dec23_decompress() local 671 mutex_lock(&pdec->lock); pwc_dec23_decompress() 682 DecompressBand23(pdec, src, pwc_dec23_decompress() 690 mutex_unlock(&pdec->lock); pwc_dec23_decompress()
|