Lines Matching refs:pdec

41 static void build_subblock_pattern(struct pwc_dec23_private *pdec)
62 pdec->table_subblock[i][j] = temp_values[j];
68 static void build_bit_powermask_table(struct pwc_dec23_private *pdec)
76 p = pdec->table_bitpowermask[bit];
142 static void fill_table_dc00_d800(struct pwc_dec23_private *pdec)
151 pdec->table_dc00[i] = offset1 & ~(ONE_HALF);
152 pdec->table_d800[i] = offset2;
288 struct pwc_dec23_private *pdec = &pdev->dec23;
290 mutex_init(&pdec->lock);
292 if (pdec->last_cmd_valid && pdec->last_cmd == cmd[2])
298 pdec->nbits = 7; /* More bits, mean more bits to encode the stream, but better quality */
300 pdec->nbits = 8;
302 pdec->nbits = 6;
305 build_table_color(KiaraRomTable[version][0], pdec->table_0004_pass1, pdec->table_8004_pass1);
306 build_table_color(KiaraRomTable[version][1], pdec->table_0004_pass2, pdec->table_8004_pass2);
312 pdec->nbits = 7;
314 pdec->nbits = 8;
316 pdec->nbits = 6;
319 build_table_color(TimonRomTable[version][0], pdec->table_0004_pass1, pdec->table_8004_pass1);
320 build_table_color(TimonRomTable[version][1], pdec->table_0004_pass2, pdec->table_8004_pass2);
324 shift = 8 - pdec->nbits;
325 pdec->scalebits = SCALEBITS - shift;
326 pdec->nbitsmask = 0xFF >> shift;
328 fill_table_dc00_d800(pdec);
329 build_subblock_pattern(pdec);
330 build_bit_powermask_table(pdec);
342 pdec->last_cmd = cmd[2];
343 pdec->last_cmd_valid = 1;
457 #define fill_nbits(pdec, nbits_wanted) do { \
458 while (pdec->nbits_in_reservoir<(nbits_wanted)) \
460 pdec->reservoir |= (*(pdec->stream)++) << (pdec->nbits_in_reservoir); \
461 pdec->nbits_in_reservoir += 8; \
465 #define skip_nbits(pdec, nbits_to_skip) do { \
466 pdec->reservoir >>= (nbits_to_skip); \
467 pdec->nbits_in_reservoir -= (nbits_to_skip); \
470 #define get_nbits(pdec, nbits_wanted, result) do { \
471 fill_nbits(pdec, nbits_wanted); \
472 result = (pdec->reservoir) & ((1U<<(nbits_wanted))-1); \
473 skip_nbits(pdec, nbits_wanted); \
476 #define __get_nbits(pdec, nbits_wanted, result) do { \
477 result = (pdec->reservoir) & ((1U<<(nbits_wanted))-1); \
478 skip_nbits(pdec, nbits_wanted); \
481 #define look_nbits(pdec, nbits_wanted) \
482 ((pdec->reservoir) & ((1U<<(nbits_wanted))-1))
487 static void decode_block(struct pwc_dec23_private *pdec,
495 fill_nbits(pdec, 16);
496 __get_nbits(pdec, pdec->nbits, primary_color);
498 if (look_nbits(pdec,2) == 0) {
499 skip_nbits(pdec, 2);
502 pdec->temp_colors[i] = pdec->table_dc00[primary_color];
509 pdec->temp_colors[i] = pdec->table_d800[primary_color];
511 __get_nbits(pdec, 3, channel_v);
529 fill_nbits(pdec, 16);
530 htable_idx = look_nbits(pdec, 6);
534 skip_nbits(pdec, 2);
545 skip_nbits(pdec, 3);
547 __get_nbits(pdec, 4, yyyy);
553 __get_nbits(pdec, nbits+1, col1);
556 mask = pdec->table_bitpowermask[nbits][col1];
560 block = pdec->table_subblock[rows];
562 pdec->temp_colors[i] += block[MulIdx[offset1][i]];
574 block = pdec->table_subblock[rows];
576 pdec->temp_colors[i] += block[MulIdx[offset1][i]];
579 skip_nbits(pdec, shift);
586 static void DecompressBand23(struct pwc_dec23_private *pdec,
598 pdec->reservoir = 0;
599 pdec->nbits_in_reservoir = 0;
600 pdec->stream = rawyuv + 1; /* The first byte of the stream is skipped */
602 get_nbits(pdec, 4, compression_index);
607 ptable0004 = pdec->table_0004_pass1[compression_index];
608 ptable8004 = pdec->table_8004_pass1[compression_index];
612 decode_block(pdec, ptable0004, ptable8004);
613 copy_image_block_Y(pdec->temp_colors, planar_y, real_image_width, pdec->scalebits);
621 ptable0004 = pdec->table_0004_pass2[compression_index];
622 ptable8004 = pdec->table_8004_pass2[compression_index];
626 decode_block(pdec, ptable0004, ptable8004);
627 copy_image_block_CrCb(pdec->temp_colors, planar_u, real_image_width/2, pdec->scalebits);
629 decode_block(pdec, ptable0004, ptable8004);
630 copy_image_block_CrCb(pdec->temp_colors, planar_v, real_image_width/2, pdec->scalebits);
650 struct pwc_dec23_private *pdec = &pdev->dec23;
658 mutex_lock(&pdec->lock);
669 DecompressBand23(pdec, src,
677 mutex_unlock(&pdec->lock);