Doxygen Source Code Documentation
slice.c File Reference
#include "config.h"#include <inttypes.h>#include "mpeg2.h"#include "mpeg2_internal.h"#include "attributes.h"#include "vlc.h"Go to the source code of this file.
Defines | |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | SATURATE(val) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | MOTION(table, ref, motion_x, motion_y, size, y) |
| #define | MOTION_FIELD(table, ref, motion_x, motion_y, dest_field, op, src_field) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | MOTION_CALL(routine, direction) |
| #define | NEXT_MACROBLOCK |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
| #define | bit_buf (decoder->bitstream_buf) |
| #define | bits (decoder->bitstream_bits) |
| #define | bit_ptr (decoder->bitstream_ptr) |
Functions | |
| int | get_macroblock_modes (decoder_t *const decoder) |
| int | get_quantizer_scale (decoder_t *const decoder) |
| int | get_motion_delta (decoder_t *const decoder, const int f_code) |
| int | bound_motion_vector (const int vector, const int f_code) |
| int | get_dmv (decoder_t *const decoder) |
| int | get_coded_block_pattern (decoder_t *const decoder) |
| int | get_luma_dc_dct_diff (decoder_t *const decoder) |
| int | get_chroma_dc_dct_diff (decoder_t *const decoder) |
| void | get_intra_block_B14 (decoder_t *const decoder) |
| void | get_intra_block_B15 (decoder_t *const decoder) |
| int | get_non_intra_block (decoder_t *const decoder) |
| void | get_mpeg1_intra_block (decoder_t *const decoder) |
| int | get_mpeg1_non_intra_block (decoder_t *const decoder) |
| void | slice_intra_DCT (decoder_t *const decoder, const int cc, uint8_t *const dest, const int stride) |
| void | slice_non_intra_DCT (decoder_t *const decoder, uint8_t *const dest, const int stride) |
| void | motion_mp1 (decoder_t *const decoder, motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_fr_frame (decoder_t *const decoder, motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_fr_field (decoder_t *const decoder, motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_fr_dmv (decoder_t *const decoder, motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_reuse (const decoder_t *const decoder, const motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_zero (const decoder_t *const decoder, const motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_fr_conceal (decoder_t *const decoder) |
| void | motion_fi_field (decoder_t *const decoder, motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_fi_16x8 (decoder_t *const decoder, motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_fi_dmv (decoder_t *const decoder, motion_t *const motion, mpeg2_mc_fct *const *const table) |
| void | motion_fi_conceal (decoder_t *const decoder) |
| void | mpeg2_init_fbuf (decoder_t *decoder, uint8_t *current_fbuf[3], uint8_t *forward_fbuf[3], uint8_t *backward_fbuf[3]) |
| int | slice_init (decoder_t *const decoder, int code) |
| void | mpeg2_slice (decoder_t *const decoder, const int code, const uint8_t *const buffer) |
Variables | |
| mpeg2_mc_t | mpeg2_mc |
| void(* | mpeg2_idct_copy )(int16_t *block, uint8_t *dest, int stride) |
| void(* | mpeg2_idct_add )(int last, int16_t *block, uint8_t *dest, int stride) |
| void(* | mpeg2_cpu_state_save )(cpu_state_t *state) |
| void(* | mpeg2_cpu_state_restore )(cpu_state_t *state) |
| int | non_linear_quantizer_scale [] |
Define Documentation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Value: pos_x = 2 * decoder->offset + motion_x; \
pos_y = 2 * decoder->v_offset + motion_y + 2 * y; \
if ((pos_x > decoder->limit_x) || (pos_y > decoder->limit_y_ ## size)) \
return; \
xy_half = ((pos_y & 1) << 1) | (pos_x & 1); \
table[xy_half] (decoder->dest[0] + y * decoder->stride + decoder->offset, \
ref[0] + (pos_x >> 1) + (pos_y >> 1) * decoder->stride, \
decoder->stride, size); \
motion_x /= 2; motion_y /= 2; \
xy_half = ((motion_y & 1) << 1) | (motion_x & 1); \
offset = (((decoder->offset + motion_x) >> 1) + \
((((decoder->v_offset + motion_y) >> 1) + y/2) * \
decoder->uv_stride)); \
table[4+xy_half] (decoder->dest[1] + y/2 * decoder->uv_stride + \
(decoder->offset >> 1), ref[1] + offset, \
decoder->uv_stride, size/2); \
table[4+xy_half] (decoder->dest[2] + y/2 * decoder->uv_stride + \
(decoder->offset >> 1), ref[2] + offset, \
decoder->uv_stride, size/2) |
|
|
Value: do { \ if ((direction) & MACROBLOCK_MOTION_FORWARD) \ routine (decoder, &(decoder->f_motion), mpeg2_mc.put); \ if ((direction) & MACROBLOCK_MOTION_BACKWARD) \ routine (decoder, &(decoder->b_motion), \ ((direction) & MACROBLOCK_MOTION_FORWARD ? \ mpeg2_mc.avg : mpeg2_mc.put)); \ } while (0) Definition at line 1411 of file slice.c. Referenced by mpeg2_slice(). |
|
|
Value: pos_x = 2 * decoder->offset + motion_x; \
pos_y = decoder->v_offset + motion_y; \
if ((pos_x > decoder->limit_x) || (pos_y > decoder->limit_y)) \
return; \
xy_half = ((pos_y & 1) << 1) | (pos_x & 1); \
table[xy_half] (decoder->dest[0] + dest_field * decoder->stride + \
decoder->offset, \
(ref[0] + (pos_x >> 1) + \
((pos_y op) + src_field) * decoder->stride), \
2 * decoder->stride, 8); \
motion_x /= 2; motion_y /= 2; \
xy_half = ((motion_y & 1) << 1) | (motion_x & 1); \
offset = (((decoder->offset + motion_x) >> 1) + \
(((decoder->v_offset >> 1) + (motion_y op) + src_field) * \
decoder->uv_stride)); \
table[4+xy_half] (decoder->dest[1] + dest_field * decoder->uv_stride + \
(decoder->offset >> 1), ref[1] + offset, \
2 * decoder->uv_stride, 4); \
table[4+xy_half] (decoder->dest[2] + dest_field * decoder->uv_stride + \
(decoder->offset >> 1), ref[2] + offset, \
2 * decoder->uv_stride, 4)Definition at line 1019 of file slice.c. Referenced by motion_fr_dmv(), and motion_fr_field(). |
|
|
Value: do { \ decoder->offset += 16; \ if (decoder->offset == decoder->width) { \ do { \ if (decoder->convert) { \ decoder->convert (decoder->fbuf_id, decoder->dest, \ decoder->v_offset); \ if (decoder->coding_type == B_TYPE) \ break; \ } \ decoder->dest[0] += 16 * decoder->stride; \ decoder->dest[1] += 4 * decoder->stride; \ decoder->dest[2] += 4 * decoder->stride; \ } while (0); \ decoder->v_offset += 16; \ if (decoder->v_offset > decoder->limit_y) { \ if (mpeg2_cpu_state_restore) \ mpeg2_cpu_state_restore (&cpu_state); \ return; \ } \ decoder->offset = 0; \ } \ } while (0) Definition at line 1421 of file slice.c. Referenced by mpeg2_slice(). |
|
|
Value: Definition at line 352 of file slice.c. Referenced by get_intra_block_B14(), get_intra_block_B15(), get_mpeg1_intra_block(), get_mpeg1_non_intra_block(), and get_non_intra_block(). |
Function Documentation
|
||||||||||||
|
Definition at line 215 of file slice.c. Referenced by motion_fi_16x8(), motion_fi_conceal(), motion_fi_dmv(), motion_fi_field(), motion_fr_conceal(), motion_fr_dmv(), motion_fr_field(), motion_fr_frame(), and motion_mp1().
00216 {
00217 #if 0
00218 unsigned int limit;
00219 int sign;
00220
00221 limit = 16 << f_code;
00222
00223 if ((unsigned int)(vector + limit) < 2 * limit)
00224 return vector;
00225 else {
00226 sign = ((int32_t)vector) >> 31;
00227 return vector - ((2 * limit) ^ sign) + sign;
00228 }
00229 #else
00230 return ((int32_t)vector << (27 - f_code)) >> (27 - f_code);
00231 #endif
00232 }
|
|
|
Definition at line 315 of file slice.c. References DUMPBITS, DCtab::len, NEEDBITS, SBITS, DCtab::size, and UBITS. Referenced by slice_intra_DCT().
00316 {
00317 #define bit_buf (decoder->bitstream_buf)
00318 #define bits (decoder->bitstream_bits)
00319 #define bit_ptr (decoder->bitstream_ptr)
00320 const DCtab * tab;
00321 int size;
00322 int dc_diff;
00323
00324 if (bit_buf < 0xf8000000) {
00325 tab = DC_chrom_5 + UBITS (bit_buf, 5);
00326 size = tab->size;
00327 if (size) {
00328 bits += tab->len + size;
00329 bit_buf <<= tab->len;
00330 dc_diff =
00331 UBITS (bit_buf, size) - UBITS (SBITS (~bit_buf, 1), size);
00332 bit_buf <<= size;
00333 return dc_diff;
00334 } else {
00335 DUMPBITS (bit_buf, bits, 2);
00336 return 0;
00337 }
00338 } else {
00339 tab = DC_long + (UBITS (bit_buf, 10) - 0x3e0);
00340 size = tab->size;
00341 DUMPBITS (bit_buf, bits, tab->len + 1);
00342 NEEDBITS (bit_buf, bits, bit_ptr);
00343 dc_diff = UBITS (bit_buf, size) - UBITS (SBITS (~bit_buf, 1), size);
00344 DUMPBITS (bit_buf, bits, size);
00345 return dc_diff;
00346 }
00347 #undef bit_buf
00348 #undef bits
00349 #undef bit_ptr
00350 }
|
|
|
Definition at line 250 of file slice.c. References CBPtab::cbp, DUMPBITS, CBPtab::len, NEEDBITS, and UBITS. Referenced by mpeg2_slice().
00251 {
00252 #define bit_buf (decoder->bitstream_buf)
00253 #define bits (decoder->bitstream_bits)
00254 #define bit_ptr (decoder->bitstream_ptr)
00255
00256 const CBPtab * tab;
00257
00258 NEEDBITS (bit_buf, bits, bit_ptr);
00259
00260 if (bit_buf >= 0x20000000) {
00261
00262 tab = CBP_7 + (UBITS (bit_buf, 7) - 16);
00263 DUMPBITS (bit_buf, bits, tab->len);
00264 return tab->cbp;
00265
00266 } else {
00267
00268 tab = CBP_9 + UBITS (bit_buf, 9);
00269 DUMPBITS (bit_buf, bits, tab->len);
00270 return tab->cbp;
00271 }
00272
00273 #undef bit_buf
00274 #undef bits
00275 #undef bit_ptr
00276 }
|
|
|
Definition at line 234 of file slice.c. References DMVtab::dmv, DUMPBITS, DMVtab::len, and UBITS. Referenced by motion_fi_dmv(), and motion_fr_dmv().
00235 {
00236 #define bit_buf (decoder->bitstream_buf)
00237 #define bits (decoder->bitstream_bits)
00238 #define bit_ptr (decoder->bitstream_ptr)
00239
00240 const DMVtab * tab;
00241
00242 tab = DMV_2 + UBITS (bit_buf, 2);
00243 DUMPBITS (bit_buf, bits, tab->len);
00244 return tab->dmv;
00245 #undef bit_buf
00246 #undef bits
00247 #undef bit_ptr
00248 }
|
|
|
Definition at line 358 of file slice.c. References decoder_s::bitstream_bits, decoder_s::bitstream_buf, decoder_s::bitstream_ptr, decoder_s::DCTblock, DUMPBITS, GETWORD, i, decoder_s::intra_quantizer_matrix, DCTtab::len, DCTtab::level, NEEDBITS, decoder_s::quantizer_scale, DCTtab::run, SATURATE, SBITS, decoder_s::scan, UBITS, uint32_t, and uint8_t. Referenced by slice_intra_DCT().
00359 {
00360 int i;
00361 int j;
00362 int val;
00363 const uint8_t * scan = decoder->scan;
00364 const uint8_t * quant_matrix = decoder->intra_quantizer_matrix;
00365 int quantizer_scale = decoder->quantizer_scale;
00366 int mismatch;
00367 const DCTtab * tab;
00368 uint32_t bit_buf;
00369 int bits;
00370 const uint8_t * bit_ptr;
00371 int16_t * dest;
00372
00373 dest = decoder->DCTblock;
00374 i = 0;
00375 mismatch = ~dest[0];
00376
00377 bit_buf = decoder->bitstream_buf;
00378 bits = decoder->bitstream_bits;
00379 bit_ptr = decoder->bitstream_ptr;
00380
00381 NEEDBITS (bit_buf, bits, bit_ptr);
00382
00383 while (1) {
00384 if (bit_buf >= 0x28000000) {
00385
00386 tab = DCT_B14AC_5 + (UBITS (bit_buf, 5) - 5);
00387
00388 i += tab->run;
00389 if (i >= 64)
00390 break; /* end of block */
00391
00392 normal_code:
00393 j = scan[i];
00394 bit_buf <<= tab->len;
00395 bits += tab->len + 1;
00396 val = (tab->level * quantizer_scale * quant_matrix[j]) >> 4;
00397
00398 /* if (bitstream_get (1)) val = -val; */
00399 val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);
00400
00401 SATURATE (val);
00402 dest[j] = val;
00403 mismatch ^= val;
00404
00405 bit_buf <<= 1;
00406 NEEDBITS (bit_buf, bits, bit_ptr);
00407
00408 continue;
00409
00410 } else if (bit_buf >= 0x04000000) {
00411
00412 tab = DCT_B14_8 + (UBITS (bit_buf, 8) - 4);
00413
00414 i += tab->run;
00415 if (i < 64)
00416 goto normal_code;
00417
00418 /* escape code */
00419
00420 i += UBITS (bit_buf << 6, 6) - 64;
00421 if (i >= 64)
00422 break; /* illegal, check needed to avoid buffer overflow */
00423
00424 j = scan[i];
00425
00426 DUMPBITS (bit_buf, bits, 12);
00427 NEEDBITS (bit_buf, bits, bit_ptr);
00428 val = (SBITS (bit_buf, 12) *
00429 quantizer_scale * quant_matrix[j]) / 16;
00430
00431 SATURATE (val);
00432 dest[j] = val;
00433 mismatch ^= val;
00434
00435 DUMPBITS (bit_buf, bits, 12);
00436 NEEDBITS (bit_buf, bits, bit_ptr);
00437
00438 continue;
00439
00440 } else if (bit_buf >= 0x02000000) {
00441 tab = DCT_B14_10 + (UBITS (bit_buf, 10) - 8);
00442 i += tab->run;
00443 if (i < 64)
00444 goto normal_code;
00445 } else if (bit_buf >= 0x00800000) {
00446 tab = DCT_13 + (UBITS (bit_buf, 13) - 16);
00447 i += tab->run;
00448 if (i < 64)
00449 goto normal_code;
00450 } else if (bit_buf >= 0x00200000) {
00451 tab = DCT_15 + (UBITS (bit_buf, 15) - 16);
00452 i += tab->run;
00453 if (i < 64)
00454 goto normal_code;
00455 } else {
00456 tab = DCT_16 + UBITS (bit_buf, 16);
00457 bit_buf <<= 16;
00458 GETWORD (bit_buf, bits + 16, bit_ptr);
00459 i += tab->run;
00460 if (i < 64)
00461 goto normal_code;
00462 }
00463 break; /* illegal, check needed to avoid buffer overflow */
00464 }
00465 dest[63] ^= mismatch & 1;
00466 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
00467 decoder->bitstream_buf = bit_buf;
00468 decoder->bitstream_bits = bits;
00469 decoder->bitstream_ptr = bit_ptr;
00470 }
|
|
|
Definition at line 472 of file slice.c. References decoder_s::bitstream_bits, decoder_s::bitstream_buf, decoder_s::bitstream_ptr, decoder_s::DCTblock, DUMPBITS, GETWORD, i, decoder_s::intra_quantizer_matrix, DCTtab::len, DCTtab::level, NEEDBITS, decoder_s::quantizer_scale, DCTtab::run, SATURATE, SBITS, decoder_s::scan, UBITS, uint32_t, and uint8_t. Referenced by slice_intra_DCT().
00473 {
00474 int i;
00475 int j;
00476 int val;
00477 const uint8_t * scan = decoder->scan;
00478 const uint8_t * quant_matrix = decoder->intra_quantizer_matrix;
00479 int quantizer_scale = decoder->quantizer_scale;
00480 int mismatch;
00481 const DCTtab * tab;
00482 uint32_t bit_buf;
00483 int bits;
00484 const uint8_t * bit_ptr;
00485 int16_t * dest;
00486
00487 dest = decoder->DCTblock;
00488 i = 0;
00489 mismatch = ~dest[0];
00490
00491 bit_buf = decoder->bitstream_buf;
00492 bits = decoder->bitstream_bits;
00493 bit_ptr = decoder->bitstream_ptr;
00494
00495 NEEDBITS (bit_buf, bits, bit_ptr);
00496
00497 while (1) {
00498 if (bit_buf >= 0x04000000) {
00499
00500 tab = DCT_B15_8 + (UBITS (bit_buf, 8) - 4);
00501
00502 i += tab->run;
00503 if (i < 64) {
00504
00505 normal_code:
00506 j = scan[i];
00507 bit_buf <<= tab->len;
00508 bits += tab->len + 1;
00509 val = (tab->level * quantizer_scale * quant_matrix[j]) >> 4;
00510
00511 /* if (bitstream_get (1)) val = -val; */
00512 val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);
00513
00514 SATURATE (val);
00515 dest[j] = val;
00516 mismatch ^= val;
00517
00518 bit_buf <<= 1;
00519 NEEDBITS (bit_buf, bits, bit_ptr);
00520
00521 continue;
00522
00523 } else {
00524
00525 /* end of block. I commented out this code because if we */
00526 /* dont exit here we will still exit at the later test :) */
00527
00528 /* if (i >= 128) break; */ /* end of block */
00529
00530 /* escape code */
00531
00532 i += UBITS (bit_buf << 6, 6) - 64;
00533 if (i >= 64)
00534 break; /* illegal, check against buffer overflow */
00535
00536 j = scan[i];
00537
00538 DUMPBITS (bit_buf, bits, 12);
00539 NEEDBITS (bit_buf, bits, bit_ptr);
00540 val = (SBITS (bit_buf, 12) *
00541 quantizer_scale * quant_matrix[j]) / 16;
00542
00543 SATURATE (val);
00544 dest[j] = val;
00545 mismatch ^= val;
00546
00547 DUMPBITS (bit_buf, bits, 12);
00548 NEEDBITS (bit_buf, bits, bit_ptr);
00549
00550 continue;
00551
00552 }
00553 } else if (bit_buf >= 0x02000000) {
00554 tab = DCT_B15_10 + (UBITS (bit_buf, 10) - 8);
00555 i += tab->run;
00556 if (i < 64)
00557 goto normal_code;
00558 } else if (bit_buf >= 0x00800000) {
00559 tab = DCT_13 + (UBITS (bit_buf, 13) - 16);
00560 i += tab->run;
00561 if (i < 64)
00562 goto normal_code;
00563 } else if (bit_buf >= 0x00200000) {
00564 tab = DCT_15 + (UBITS (bit_buf, 15) - 16);
00565 i += tab->run;
00566 if (i < 64)
00567 goto normal_code;
00568 } else {
00569 tab = DCT_16 + UBITS (bit_buf, 16);
00570 bit_buf <<= 16;
00571 GETWORD (bit_buf, bits + 16, bit_ptr);
00572 i += tab->run;
00573 if (i < 64)
00574 goto normal_code;
00575 }
00576 break; /* illegal, check needed to avoid buffer overflow */
00577 }
00578 dest[63] ^= mismatch & 1;
00579 DUMPBITS (bit_buf, bits, 4); /* dump end of block code */
00580 decoder->bitstream_buf = bit_buf;
00581 decoder->bitstream_bits = bits;
00582 decoder->bitstream_ptr = bit_ptr;
00583 }
|
|
|
Definition at line 278 of file slice.c. References DUMPBITS, DCtab::len, NEEDBITS, SBITS, DCtab::size, and UBITS. Referenced by slice_intra_DCT().
00279 {
00280 #define bit_buf (decoder->bitstream_buf)
00281 #define bits (decoder->bitstream_bits)
00282 #define bit_ptr (decoder->bitstream_ptr)
00283 const DCtab * tab;
00284 int size;
00285 int dc_diff;
00286
00287 if (bit_buf < 0xf8000000) {
00288 tab = DC_lum_5 + UBITS (bit_buf, 5);
00289 size = tab->size;
00290 if (size) {
00291 bits += tab->len + size;
00292 bit_buf <<= tab->len;
00293 dc_diff =
00294 UBITS (bit_buf, size) - UBITS (SBITS (~bit_buf, 1), size);
00295 bit_buf <<= size;
00296 return dc_diff;
00297 } else {
00298 DUMPBITS (bit_buf, bits, 3);
00299 return 0;
00300 }
00301 } else {
00302 tab = DC_long + (UBITS (bit_buf, 9) - 0x1e0);
00303 size = tab->size;
00304 DUMPBITS (bit_buf, bits, tab->len);
00305 NEEDBITS (bit_buf, bits, bit_ptr);
00306 dc_diff = UBITS (bit_buf, size) - UBITS (SBITS (~bit_buf, 1), size);
00307 DUMPBITS (bit_buf, bits, size);
00308 return dc_diff;
00309 }
00310 #undef bit_buf
00311 #undef bits
00312 #undef bit_ptr
00313 }
|
|
|
Definition at line 48 of file slice.c. References B_TYPE, decoder_s::coding_type, D_TYPE, DCT_TYPE_INTERLACED, DUMPBITS, FRAME_PICTURE, decoder_s::frame_pred_frame_dct, I_TYPE, MBtab::len, MACROBLOCK_INTRA, MACROBLOCK_MOTION_FORWARD, MACROBLOCK_PATTERN, MC_FRAME, MBtab::modes, MOTION_TYPE_BASE, P_TYPE, decoder_s::picture_structure, and UBITS. Referenced by mpeg2_slice().
00049 {
00050 #define bit_buf (decoder->bitstream_buf)
00051 #define bits (decoder->bitstream_bits)
00052 #define bit_ptr (decoder->bitstream_ptr)
00053 int macroblock_modes;
00054 const MBtab * tab;
00055
00056 switch (decoder->coding_type) {
00057 case I_TYPE:
00058
00059 tab = MB_I + UBITS (bit_buf, 1);
00060 DUMPBITS (bit_buf, bits, tab->len);
00061 macroblock_modes = tab->modes;
00062
00063 if ((! (decoder->frame_pred_frame_dct)) &&
00064 (decoder->picture_structure == FRAME_PICTURE)) {
00065 macroblock_modes |= UBITS (bit_buf, 1) * DCT_TYPE_INTERLACED;
00066 DUMPBITS (bit_buf, bits, 1);
00067 }
00068
00069 return macroblock_modes;
00070
00071 case P_TYPE:
00072
00073 tab = MB_P + UBITS (bit_buf, 5);
00074 DUMPBITS (bit_buf, bits, tab->len);
00075 macroblock_modes = tab->modes;
00076
00077 if (decoder->picture_structure != FRAME_PICTURE) {
00078 if (macroblock_modes & MACROBLOCK_MOTION_FORWARD) {
00079 macroblock_modes |= UBITS (bit_buf, 2) * MOTION_TYPE_BASE;
00080 DUMPBITS (bit_buf, bits, 2);
00081 }
00082 return macroblock_modes;
00083 } else if (decoder->frame_pred_frame_dct) {
00084 if (macroblock_modes & MACROBLOCK_MOTION_FORWARD)
00085 macroblock_modes |= MC_FRAME;
00086 return macroblock_modes;
00087 } else {
00088 if (macroblock_modes & MACROBLOCK_MOTION_FORWARD) {
00089 macroblock_modes |= UBITS (bit_buf, 2) * MOTION_TYPE_BASE;
00090 DUMPBITS (bit_buf, bits, 2);
00091 }
00092 if (macroblock_modes & (MACROBLOCK_INTRA | MACROBLOCK_PATTERN)) {
00093 macroblock_modes |= UBITS (bit_buf, 1) * DCT_TYPE_INTERLACED;
00094 DUMPBITS (bit_buf, bits, 1);
00095 }
00096 return macroblock_modes;
00097 }
00098
00099 case B_TYPE:
00100
00101 tab = MB_B + UBITS (bit_buf, 6);
00102 DUMPBITS (bit_buf, bits, tab->len);
00103 macroblock_modes = tab->modes;
00104
00105 if (decoder->picture_structure != FRAME_PICTURE) {
00106 if (! (macroblock_modes & MACROBLOCK_INTRA)) {
00107 macroblock_modes |= UBITS (bit_buf, 2) * MOTION_TYPE_BASE;
00108 DUMPBITS (bit_buf, bits, 2);
00109 }
00110 return macroblock_modes;
00111 } else if (decoder->frame_pred_frame_dct) {
00112 /* if (! (macroblock_modes & MACROBLOCK_INTRA)) */
00113 macroblock_modes |= MC_FRAME;
00114 return macroblock_modes;
00115 } else {
00116 if (macroblock_modes & MACROBLOCK_INTRA)
00117 goto intra;
00118 macroblock_modes |= UBITS (bit_buf, 2) * MOTION_TYPE_BASE;
00119 DUMPBITS (bit_buf, bits, 2);
00120 if (macroblock_modes & (MACROBLOCK_INTRA | MACROBLOCK_PATTERN)) {
00121 intra:
00122 macroblock_modes |= UBITS (bit_buf, 1) * DCT_TYPE_INTERLACED;
00123 DUMPBITS (bit_buf, bits, 1);
00124 }
00125 return macroblock_modes;
00126 }
00127
00128 case D_TYPE:
00129
00130 DUMPBITS (bit_buf, bits, 1);
00131 return MACROBLOCK_INTRA;
00132
00133 default:
00134 return 0;
00135 }
00136 #undef bit_buf
00137 #undef bits
00138 #undef bit_ptr
00139 }
|
|
||||||||||||
|
Definition at line 161 of file slice.c. References MVtab::delta, DUMPBITS, f_code, MVtab::len, NEEDBITS, SBITS, and UBITS. Referenced by motion_fi_16x8(), motion_fi_conceal(), motion_fi_dmv(), motion_fi_field(), motion_fr_conceal(), motion_fr_dmv(), motion_fr_field(), motion_fr_frame(), and motion_mp1().
00163 {
00164 #define bit_buf (decoder->bitstream_buf)
00165 #define bits (decoder->bitstream_bits)
00166 #define bit_ptr (decoder->bitstream_ptr)
00167
00168 int delta;
00169 int sign;
00170 const MVtab * tab;
00171
00172 if (bit_buf & 0x80000000) {
00173 DUMPBITS (bit_buf, bits, 1);
00174 return 0;
00175 } else if (bit_buf >= 0x0c000000) {
00176
00177 tab = MV_4 + UBITS (bit_buf, 4);
00178 delta = (tab->delta << f_code) + 1;
00179 bits += tab->len + f_code + 1;
00180 bit_buf <<= tab->len;
00181
00182 sign = SBITS (bit_buf, 1);
00183 bit_buf <<= 1;
00184
00185 if (f_code)
00186 delta += UBITS (bit_buf, f_code);
00187 bit_buf <<= f_code;
00188
00189 return (delta ^ sign) - sign;
00190
00191 } else {
00192
00193 tab = MV_10 + UBITS (bit_buf, 10);
00194 delta = (tab->delta << f_code) + 1;
00195 bits += tab->len + 1;
00196 bit_buf <<= tab->len;
00197
00198 sign = SBITS (bit_buf, 1);
00199 bit_buf <<= 1;
00200
00201 if (f_code) {
00202 NEEDBITS (bit_buf, bits, bit_ptr);
00203 delta += UBITS (bit_buf, f_code);
00204 DUMPBITS (bit_buf, bits, f_code);
00205 }
00206
00207 return (delta ^ sign) - sign;
00208
00209 }
00210 #undef bit_buf
00211 #undef bits
00212 #undef bit_ptr
00213 }
|
|
|
Definition at line 709 of file slice.c. References decoder_s::bitstream_bits, decoder_s::bitstream_buf, decoder_s::bitstream_ptr, decoder_s::DCTblock, DUMPBITS, GETWORD, i, decoder_s::intra_quantizer_matrix, DCTtab::len, DCTtab::level, NEEDBITS, decoder_s::quantizer_scale, DCTtab::run, SATURATE, SBITS, decoder_s::scan, UBITS, uint32_t, and uint8_t. Referenced by slice_intra_DCT().
00710 {
00711 int i;
00712 int j;
00713 int val;
00714 const uint8_t * scan = decoder->scan;
00715 const uint8_t * quant_matrix = decoder->intra_quantizer_matrix;
00716 int quantizer_scale = decoder->quantizer_scale;
00717 const DCTtab * tab;
00718 uint32_t bit_buf;
00719 int bits;
00720 const uint8_t * bit_ptr;
00721 int16_t * dest;
00722
00723 i = 0;
00724 dest = decoder->DCTblock;
00725
00726 bit_buf = decoder->bitstream_buf;
00727 bits = decoder->bitstream_bits;
00728 bit_ptr = decoder->bitstream_ptr;
00729
00730 NEEDBITS (bit_buf, bits, bit_ptr);
00731
00732 while (1) {
00733 if (bit_buf >= 0x28000000) {
00734
00735 tab = DCT_B14AC_5 + (UBITS (bit_buf, 5) - 5);
00736
00737 i += tab->run;
00738 if (i >= 64)
00739 break; /* end of block */
00740
00741 normal_code:
00742 j = scan[i];
00743 bit_buf <<= tab->len;
00744 bits += tab->len + 1;
00745 val = (tab->level * quantizer_scale * quant_matrix[j]) >> 4;
00746
00747 /* oddification */
00748 val = (val - 1) | 1;
00749
00750 /* if (bitstream_get (1)) val = -val; */
00751 val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);
00752
00753 SATURATE (val);
00754 dest[j] = val;
00755
00756 bit_buf <<= 1;
00757 NEEDBITS (bit_buf, bits, bit_ptr);
00758
00759 continue;
00760
00761 } else if (bit_buf >= 0x04000000) {
00762
00763 tab = DCT_B14_8 + (UBITS (bit_buf, 8) - 4);
00764
00765 i += tab->run;
00766 if (i < 64)
00767 goto normal_code;
00768
00769 /* escape code */
00770
00771 i += UBITS (bit_buf << 6, 6) - 64;
00772 if (i >= 64)
00773 break; /* illegal, check needed to avoid buffer overflow */
00774
00775 j = scan[i];
00776
00777 DUMPBITS (bit_buf, bits, 12);
00778 NEEDBITS (bit_buf, bits, bit_ptr);
00779 val = SBITS (bit_buf, 8);
00780 if (! (val & 0x7f)) {
00781 DUMPBITS (bit_buf, bits, 8);
00782 val = UBITS (bit_buf, 8) + 2 * val;
00783 }
00784 val = (val * quantizer_scale * quant_matrix[j]) / 16;
00785
00786 /* oddification */
00787 val = (val + ~SBITS (val, 1)) | 1;
00788
00789 SATURATE (val);
00790 dest[j] = val;
00791
00792 DUMPBITS (bit_buf, bits, 8);
00793 NEEDBITS (bit_buf, bits, bit_ptr);
00794
00795 continue;
00796
00797 } else if (bit_buf >= 0x02000000) {
00798 tab = DCT_B14_10 + (UBITS (bit_buf, 10) - 8);
00799 i += tab->run;
00800 if (i < 64)
00801 goto normal_code;
00802 } else if (bit_buf >= 0x00800000) {
00803 tab = DCT_13 + (UBITS (bit_buf, 13) - 16);
00804 i += tab->run;
00805 if (i < 64)
00806 goto normal_code;
00807 } else if (bit_buf >= 0x00200000) {
00808 tab = DCT_15 + (UBITS (bit_buf, 15) - 16);
00809 i += tab->run;
00810 if (i < 64)
00811 goto normal_code;
00812 } else {
00813 tab = DCT_16 + UBITS (bit_buf, 16);
00814 bit_buf <<= 16;
00815 GETWORD (bit_buf, bits + 16, bit_ptr);
00816 i += tab->run;
00817 if (i < 64)
00818 goto normal_code;
00819 }
00820 break; /* illegal, check needed to avoid buffer overflow */
00821 }
00822 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
00823 decoder->bitstream_buf = bit_buf;
00824 decoder->bitstream_bits = bits;
00825 decoder->bitstream_ptr = bit_ptr;
00826 }
|
|
|
Definition at line 828 of file slice.c. References decoder_s::bitstream_bits, decoder_s::bitstream_buf, decoder_s::bitstream_ptr, decoder_s::DCTblock, DUMPBITS, GETWORD, i, DCTtab::len, DCTtab::level, NEEDBITS, decoder_s::non_intra_quantizer_matrix, decoder_s::quantizer_scale, DCTtab::run, SATURATE, SBITS, decoder_s::scan, UBITS, uint32_t, and uint8_t. Referenced by slice_non_intra_DCT().
00829 {
00830 int i;
00831 int j;
00832 int val;
00833 const uint8_t * scan = decoder->scan;
00834 const uint8_t * quant_matrix = decoder->non_intra_quantizer_matrix;
00835 int quantizer_scale = decoder->quantizer_scale;
00836 const DCTtab * tab;
00837 uint32_t bit_buf;
00838 int bits;
00839 const uint8_t * bit_ptr;
00840 int16_t * dest;
00841
00842 i = -1;
00843 dest = decoder->DCTblock;
00844
00845 bit_buf = decoder->bitstream_buf;
00846 bits = decoder->bitstream_bits;
00847 bit_ptr = decoder->bitstream_ptr;
00848
00849 NEEDBITS (bit_buf, bits, bit_ptr);
00850 if (bit_buf >= 0x28000000) {
00851 tab = DCT_B14DC_5 + (UBITS (bit_buf, 5) - 5);
00852 goto entry_1;
00853 } else
00854 goto entry_2;
00855
00856 while (1) {
00857 if (bit_buf >= 0x28000000) {
00858
00859 tab = DCT_B14AC_5 + (UBITS (bit_buf, 5) - 5);
00860
00861 entry_1:
00862 i += tab->run;
00863 if (i >= 64)
00864 break; /* end of block */
00865
00866 normal_code:
00867 j = scan[i];
00868 bit_buf <<= tab->len;
00869 bits += tab->len + 1;
00870 val = ((2*tab->level+1) * quantizer_scale * quant_matrix[j]) >> 5;
00871
00872 /* oddification */
00873 val = (val - 1) | 1;
00874
00875 /* if (bitstream_get (1)) val = -val; */
00876 val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);
00877
00878 SATURATE (val);
00879 dest[j] = val;
00880
00881 bit_buf <<= 1;
00882 NEEDBITS (bit_buf, bits, bit_ptr);
00883
00884 continue;
00885
00886 }
00887
00888 entry_2:
00889 if (bit_buf >= 0x04000000) {
00890
00891 tab = DCT_B14_8 + (UBITS (bit_buf, 8) - 4);
00892
00893 i += tab->run;
00894 if (i < 64)
00895 goto normal_code;
00896
00897 /* escape code */
00898
00899 i += UBITS (bit_buf << 6, 6) - 64;
00900 if (i >= 64)
00901 break; /* illegal, check needed to avoid buffer overflow */
00902
00903 j = scan[i];
00904
00905 DUMPBITS (bit_buf, bits, 12);
00906 NEEDBITS (bit_buf, bits, bit_ptr);
00907 val = SBITS (bit_buf, 8);
00908 if (! (val & 0x7f)) {
00909 DUMPBITS (bit_buf, bits, 8);
00910 val = UBITS (bit_buf, 8) + 2 * val;
00911 }
00912 val = 2 * (val + SBITS (val, 1)) + 1;
00913 val = (val * quantizer_scale * quant_matrix[j]) / 32;
00914
00915 /* oddification */
00916 val = (val + ~SBITS (val, 1)) | 1;
00917
00918 SATURATE (val);
00919 dest[j] = val;
00920
00921 DUMPBITS (bit_buf, bits, 8);
00922 NEEDBITS (bit_buf, bits, bit_ptr);
00923
00924 continue;
00925
00926 } else if (bit_buf >= 0x02000000) {
00927 tab = DCT_B14_10 + (UBITS (bit_buf, 10) - 8);
00928 i += tab->run;
00929 if (i < 64)
00930 goto normal_code;
00931 } else if (bit_buf >= 0x00800000) {
00932 tab = DCT_13 + (UBITS (bit_buf, 13) - 16);
00933 i += tab->run;
00934 if (i < 64)
00935 goto normal_code;
00936 } else if (bit_buf >= 0x00200000) {
00937 tab = DCT_15 + (UBITS (bit_buf, 15) - 16);
00938 i += tab->run;
00939 if (i < 64)
00940 goto normal_code;
00941 } else {
00942 tab = DCT_16 + UBITS (bit_buf, 16);
00943 bit_buf <<= 16;
00944 GETWORD (bit_buf, bits + 16, bit_ptr);
00945 i += tab->run;
00946 if (i < 64)
00947 goto normal_code;
00948 }
00949 break; /* illegal, check needed to avoid buffer overflow */
00950 }
00951 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
00952 decoder->bitstream_buf = bit_buf;
00953 decoder->bitstream_bits = bits;
00954 decoder->bitstream_ptr = bit_ptr;
00955 return i;
00956 }
|
|
|
Definition at line 585 of file slice.c. References decoder_s::bitstream_bits, decoder_s::bitstream_buf, decoder_s::bitstream_ptr, decoder_s::DCTblock, DUMPBITS, GETWORD, i, DCTtab::len, DCTtab::level, NEEDBITS, decoder_s::non_intra_quantizer_matrix, decoder_s::quantizer_scale, DCTtab::run, SATURATE, SBITS, decoder_s::scan, UBITS, uint32_t, and uint8_t. Referenced by slice_non_intra_DCT().
00586 {
00587 int i;
00588 int j;
00589 int val;
00590 const uint8_t * scan = decoder->scan;
00591 const uint8_t * quant_matrix = decoder->non_intra_quantizer_matrix;
00592 int quantizer_scale = decoder->quantizer_scale;
00593 int mismatch;
00594 const DCTtab * tab;
00595 uint32_t bit_buf;
00596 int bits;
00597 const uint8_t * bit_ptr;
00598 int16_t * dest;
00599
00600 i = -1;
00601 mismatch = 1;
00602 dest = decoder->DCTblock;
00603
00604 bit_buf = decoder->bitstream_buf;
00605 bits = decoder->bitstream_bits;
00606 bit_ptr = decoder->bitstream_ptr;
00607
00608 NEEDBITS (bit_buf, bits, bit_ptr);
00609 if (bit_buf >= 0x28000000) {
00610 tab = DCT_B14DC_5 + (UBITS (bit_buf, 5) - 5);
00611 goto entry_1;
00612 } else
00613 goto entry_2;
00614
00615 while (1) {
00616 if (bit_buf >= 0x28000000) {
00617
00618 tab = DCT_B14AC_5 + (UBITS (bit_buf, 5) - 5);
00619
00620 entry_1:
00621 i += tab->run;
00622 if (i >= 64)
00623 break; /* end of block */
00624
00625 normal_code:
00626 j = scan[i];
00627 bit_buf <<= tab->len;
00628 bits += tab->len + 1;
00629 val = ((2*tab->level+1) * quantizer_scale * quant_matrix[j]) >> 5;
00630
00631 /* if (bitstream_get (1)) val = -val; */
00632 val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);
00633
00634 SATURATE (val);
00635 dest[j] = val;
00636 mismatch ^= val;
00637
00638 bit_buf <<= 1;
00639 NEEDBITS (bit_buf, bits, bit_ptr);
00640
00641 continue;
00642
00643 }
00644
00645 entry_2:
00646 if (bit_buf >= 0x04000000) {
00647
00648 tab = DCT_B14_8 + (UBITS (bit_buf, 8) - 4);
00649
00650 i += tab->run;
00651 if (i < 64)
00652 goto normal_code;
00653
00654 /* escape code */
00655
00656 i += UBITS (bit_buf << 6, 6) - 64;
00657 if (i >= 64)
00658 break; /* illegal, check needed to avoid buffer overflow */
00659
00660 j = scan[i];
00661
00662 DUMPBITS (bit_buf, bits, 12);
00663 NEEDBITS (bit_buf, bits, bit_ptr);
00664 val = 2 * (SBITS (bit_buf, 12) + SBITS (bit_buf, 1)) + 1;
00665 val = (val * quantizer_scale * quant_matrix[j]) / 32;
00666
00667 SATURATE (val);
00668 dest[j] = val;
00669 mismatch ^= val;
00670
00671 DUMPBITS (bit_buf, bits, 12);
00672 NEEDBITS (bit_buf, bits, bit_ptr);
00673
00674 continue;
00675
00676 } else if (bit_buf >= 0x02000000) {
00677 tab = DCT_B14_10 + (UBITS (bit_buf, 10) - 8);
00678 i += tab->run;
00679 if (i < 64)
00680 goto normal_code;
00681 } else if (bit_buf >= 0x00800000) {
00682 tab = DCT_13 + (UBITS (bit_buf, 13) - 16);
00683 i += tab->run;
00684 if (i < 64)
00685 goto normal_code;
00686 } else if (bit_buf >= 0x00200000) {
00687 tab = DCT_15 + (UBITS (bit_buf, 15) - 16);
00688 i += tab->run;
00689 if (i < 64)
00690 goto normal_code;
00691 } else {
00692 tab = DCT_16 + UBITS (bit_buf, 16);
00693 bit_buf <<= 16;
00694 GETWORD (bit_buf, bits + 16, bit_ptr);
00695 i += tab->run;
00696 if (i < 64)
00697 goto normal_code;
00698 }
00699 break; /* illegal, check needed to avoid buffer overflow */
00700 }
00701 dest[63] ^= mismatch & 1;
00702 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
00703 decoder->bitstream_buf = bit_buf;
00704 decoder->bitstream_bits = bits;
00705 decoder->bitstream_ptr = bit_ptr;
00706 return i;
00707 }
|
|
|
Definition at line 141 of file slice.c. References DUMPBITS, non_linear_quantizer_scale, decoder_s::q_scale_type, and UBITS. Referenced by mpeg2_slice(), and slice_init().
00142 {
00143 #define bit_buf (decoder->bitstream_buf)
00144 #define bits (decoder->bitstream_bits)
00145 #define bit_ptr (decoder->bitstream_ptr)
00146
00147 int quantizer_scale_code;
00148
00149 quantizer_scale_code = UBITS (bit_buf, 5);
00150 DUMPBITS (bit_buf, bits, 5);
00151
00152 if (decoder->q_scale_type)
00153 return non_linear_quantizer_scale [quantizer_scale_code];
00154 else
00155 return quantizer_scale_code << 1;
00156 #undef bit_buf
00157 #undef bits
00158 #undef bit_ptr
00159 }
|
|
||||||||||||||||
|
Definition at line 1305 of file slice.c. References bound_motion_vector(), DUMPBITS, motion_t::f_code, get_motion_delta(), MOTION, mpeg2_mc_fct, NEEDBITS, offset, motion_t::pmv, motion_t::ref2, UBITS, and uint8_t. Referenced by mpeg2_slice().
01307 {
01308 #define bit_buf (decoder->bitstream_buf)
01309 #define bits (decoder->bitstream_bits)
01310 #define bit_ptr (decoder->bitstream_ptr)
01311 int motion_x, motion_y;
01312 uint8_t ** ref_field;
01313 unsigned int pos_x, pos_y, xy_half, offset;
01314
01315 NEEDBITS (bit_buf, bits, bit_ptr);
01316 ref_field = motion->ref2[UBITS (bit_buf, 1)];
01317 DUMPBITS (bit_buf, bits, 1);
01318
01319 motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
01320 motion->f_code[0]);
01321 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01322 motion->pmv[0][0] = motion_x;
01323
01324 NEEDBITS (bit_buf, bits, bit_ptr);
01325 motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
01326 motion->f_code[1]);
01327 motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
01328 motion->pmv[0][1] = motion_y;
01329
01330 MOTION (table, ref_field, motion_x, motion_y, 8, 0);
01331
01332 NEEDBITS (bit_buf, bits, bit_ptr);
01333 ref_field = motion->ref2[UBITS (bit_buf, 1)];
01334 DUMPBITS (bit_buf, bits, 1);
01335
01336 motion_x = motion->pmv[1][0] + get_motion_delta (decoder,
01337 motion->f_code[0]);
01338 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01339 motion->pmv[1][0] = motion_x;
01340
01341 NEEDBITS (bit_buf, bits, bit_ptr);
01342 motion_y = motion->pmv[1][1] + get_motion_delta (decoder,
01343 motion->f_code[1]);
01344 motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
01345 motion->pmv[1][1] = motion_y;
01346
01347 MOTION (table, ref_field, motion_x, motion_y, 8, 8);
01348 #undef bit_buf
01349 #undef bits
01350 #undef bit_ptr
01351 }
|
|
|
Definition at line 1384 of file slice.c. References bound_motion_vector(), DUMPBITS, motion_t::f_code, decoder_s::f_motion, get_motion_delta(), NEEDBITS, and motion_t::pmv. Referenced by mpeg2_slice().
01385 {
01386 #define bit_buf (decoder->bitstream_buf)
01387 #define bits (decoder->bitstream_bits)
01388 #define bit_ptr (decoder->bitstream_ptr)
01389 int tmp;
01390
01391 NEEDBITS (bit_buf, bits, bit_ptr);
01392 DUMPBITS (bit_buf, bits, 1); /* remove field_select */
01393
01394 tmp = (decoder->f_motion.pmv[0][0] +
01395 get_motion_delta (decoder, decoder->f_motion.f_code[0]));
01396 tmp = bound_motion_vector (tmp, decoder->f_motion.f_code[0]);
01397 decoder->f_motion.pmv[1][0] = decoder->f_motion.pmv[0][0] = tmp;
01398
01399 NEEDBITS (bit_buf, bits, bit_ptr);
01400 tmp = (decoder->f_motion.pmv[0][1] +
01401 get_motion_delta (decoder, decoder->f_motion.f_code[1]));
01402 tmp = bound_motion_vector (tmp, decoder->f_motion.f_code[1]);
01403 decoder->f_motion.pmv[1][1] = decoder->f_motion.pmv[0][1] = tmp;
01404
01405 DUMPBITS (bit_buf, bits, 1); /* remove marker_bit */
01406 #undef bit_buf
01407 #undef bits
01408 #undef bit_ptr
01409 }
|
|
||||||||||||||||
|
Definition at line 1353 of file slice.c. References mpeg2_mc_t::avg, bound_motion_vector(), decoder_s::dmv_offset, motion_t::f_code, get_dmv(), get_motion_delta(), MOTION, mpeg2_mc_fct, NEEDBITS, offset, motion_t::pmv, mpeg2_mc_t::put, and motion_t::ref. Referenced by mpeg2_slice().
01355 {
01356 #define bit_buf (decoder->bitstream_buf)
01357 #define bits (decoder->bitstream_bits)
01358 #define bit_ptr (decoder->bitstream_ptr)
01359 int motion_x, motion_y, other_x, other_y;
01360 unsigned int pos_x, pos_y, xy_half, offset;
01361
01362 NEEDBITS (bit_buf, bits, bit_ptr);
01363 motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
01364 motion->f_code[0]);
01365 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01366 motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
01367 NEEDBITS (bit_buf, bits, bit_ptr);
01368 other_x = ((motion_x + (motion_x > 0)) >> 1) + get_dmv (decoder);
01369
01370 motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
01371 motion->f_code[1]);
01372 motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
01373 motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
01374 other_y = (((motion_y + (motion_y > 0)) >> 1) + get_dmv (decoder) +
01375 decoder->dmv_offset);
01376
01377 MOTION (mpeg2_mc.put, motion->ref[0], motion_x, motion_y, 16, 0);
01378 MOTION (mpeg2_mc.avg, motion->ref[1], other_x, other_y, 16, 0);
01379 #undef bit_buf
01380 #undef bits
01381 #undef bit_ptr
01382 }
|
|
||||||||||||||||
|
Definition at line 1273 of file slice.c. References bound_motion_vector(), DUMPBITS, motion_t::f_code, get_motion_delta(), MOTION, mpeg2_mc_fct, NEEDBITS, offset, motion_t::pmv, motion_t::ref2, UBITS, and uint8_t. Referenced by mpeg2_slice().
01276 {
01277 #define bit_buf (decoder->bitstream_buf)
01278 #define bits (decoder->bitstream_bits)
01279 #define bit_ptr (decoder->bitstream_ptr)
01280 int motion_x, motion_y;
01281 uint8_t ** ref_field;
01282 unsigned int pos_x, pos_y, xy_half, offset;
01283
01284 NEEDBITS (bit_buf, bits, bit_ptr);
01285 ref_field = motion->ref2[UBITS (bit_buf, 1)];
01286 DUMPBITS (bit_buf, bits, 1);
01287
01288 motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
01289 motion->f_code[0]);
01290 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01291 motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
01292
01293 NEEDBITS (bit_buf, bits, bit_ptr);
01294 motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
01295 motion->f_code[1]);
01296 motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
01297 motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
01298
01299 MOTION (table, ref_field, motion_x, motion_y, 16, 0);
01300 #undef bit_buf
01301 #undef bits
01302 #undef bit_ptr
01303 }
|
|
|
Definition at line 1248 of file slice.c. References bound_motion_vector(), DUMPBITS, motion_t::f_code, decoder_s::f_motion, get_motion_delta(), NEEDBITS, and motion_t::pmv. Referenced by mpeg2_slice().
01249 {
01250 #define bit_buf (decoder->bitstream_buf)
01251 #define bits (decoder->bitstream_bits)
01252 #define bit_ptr (decoder->bitstream_ptr)
01253 int tmp;
01254
01255 NEEDBITS (bit_buf, bits, bit_ptr);
01256 tmp = (decoder->f_motion.pmv[0][0] +
01257 get_motion_delta (decoder, decoder->f_motion.f_code[0]));
01258 tmp = bound_motion_vector (tmp, decoder->f_motion.f_code[0]);
01259 decoder->f_motion.pmv[1][0] = decoder->f_motion.pmv[0][0] = tmp;
01260
01261 NEEDBITS (bit_buf, bits, bit_ptr);
01262 tmp = (decoder->f_motion.pmv[0][1] +
01263 get_motion_delta (decoder, decoder->f_motion.f_code[1]));
01264 tmp = bound_motion_vector (tmp, decoder->f_motion.f_code[1]);
01265 decoder->f_motion.pmv[1][1] = decoder->f_motion.pmv[0][1] = tmp;
01266
01267 DUMPBITS (bit_buf, bits, 1); /* remove marker_bit */
01268 #undef bit_buf
01269 #undef bits
01270 #undef bit_ptr
01271 }
|
|
||||||||||||||||
|
Definition at line 1149 of file slice.c. References mpeg2_mc_t::avg, bound_motion_vector(), decoder_s::dest, motion_t::f_code, get_dmv(), get_motion_delta(), MOTION_FIELD, mpeg2_mc_fct, NEEDBITS, decoder_s::offset, offset, motion_t::pmv, mpeg2_mc_t::put, motion_t::ref, decoder_s::stride, decoder_s::top_field_first, decoder_s::uv_stride, and decoder_s::v_offset. Referenced by mpeg2_slice().
01151 {
01152 #define bit_buf (decoder->bitstream_buf)
01153 #define bits (decoder->bitstream_bits)
01154 #define bit_ptr (decoder->bitstream_ptr)
01155 int motion_x, motion_y, dmv_x, dmv_y, m, other_x, other_y;
01156 unsigned int pos_x, pos_y, xy_half, offset;
01157
01158 NEEDBITS (bit_buf, bits, bit_ptr);
01159 motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
01160 motion->f_code[0]);
01161 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01162 motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
01163 NEEDBITS (bit_buf, bits, bit_ptr);
01164 dmv_x = get_dmv (decoder);
01165
01166 motion_y = (motion->pmv[0][1] >> 1) + get_motion_delta (decoder,
01167 motion->f_code[1]);
01168 /* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
01169 motion->pmv[1][1] = motion->pmv[0][1] = motion_y << 1;
01170 dmv_y = get_dmv (decoder);
01171
01172 m = decoder->top_field_first ? 1 : 3;
01173 other_x = ((motion_x * m + (motion_x > 0)) >> 1) + dmv_x;
01174 other_y = ((motion_y * m + (motion_y > 0)) >> 1) + dmv_y - 1;
01175 MOTION_FIELD (mpeg2_mc.put, motion->ref[0], other_x, other_y, 0, | 1, 0);
01176
01177 m = decoder->top_field_first ? 3 : 1;
01178 other_x = ((motion_x * m + (motion_x > 0)) >> 1) + dmv_x;
01179 other_y = ((motion_y * m + (motion_y > 0)) >> 1) + dmv_y + 1;
01180 MOTION_FIELD (mpeg2_mc.put, motion->ref[0], other_x, other_y, 1, & ~1, 0);
01181
01182 xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
01183 offset = (decoder->offset + (motion_x >> 1) +
01184 (decoder->v_offset + (motion_y & ~1)) * decoder->stride);
01185 mpeg2_mc.avg[xy_half]
01186 (decoder->dest[0] + decoder->offset,
01187 motion->ref[0][0] + offset, 2 * decoder->stride, 8);
01188 mpeg2_mc.avg[xy_half]
01189 (decoder->dest[0] + decoder->stride + decoder->offset,
01190 motion->ref[0][0] + decoder->stride + offset, 2 * decoder->stride, 8);
01191 motion_x /= 2; motion_y /= 2;
01192 xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
01193 offset = (((decoder->offset + motion_x) >> 1) +
01194 (((decoder->v_offset >> 1) + (motion_y & ~1)) *
01195 decoder->uv_stride));
01196 mpeg2_mc.avg[4+xy_half]
01197 (decoder->dest[1] + (decoder->offset >> 1),
01198 motion->ref[0][1] + offset, 2 * decoder->uv_stride, 4);
01199 mpeg2_mc.avg[4+xy_half]
01200 (decoder->dest[1] + decoder->uv_stride + (decoder->offset >> 1),
01201 motion->ref[0][1] + decoder->uv_stride + offset,
01202 2 * decoder->uv_stride, 4);
01203 mpeg2_mc.avg[4+xy_half]
01204 (decoder->dest[2] + (decoder->offset >> 1),
01205 motion->ref[0][2] + offset, 2 * decoder->uv_stride, 4);
01206 mpeg2_mc.avg[4+xy_half]
01207 (decoder->dest[2] + decoder->uv_stride + (decoder->offset >> 1),
01208 motion->ref[0][2] + decoder->uv_stride + offset,
01209 2 * decoder->uv_stride, 4);
01210 #undef bit_buf
01211 #undef bits
01212 #undef bit_ptr
01213 }
|
|
||||||||||||||||
|
Definition at line 1101 of file slice.c. References bound_motion_vector(), DUMPBITS, motion_t::f_code, get_motion_delta(), MOTION_FIELD, mpeg2_mc_fct, NEEDBITS, offset, motion_t::pmv, motion_t::ref, and UBITS. Referenced by mpeg2_slice().
01104 {
01105 #define bit_buf (decoder->bitstream_buf)
01106 #define bits (decoder->bitstream_bits)
01107 #define bit_ptr (decoder->bitstream_ptr)
01108 int motion_x, motion_y, field;
01109 unsigned int pos_x, pos_y, xy_half, offset;
01110
01111 NEEDBITS (bit_buf, bits, bit_ptr);
01112 field = UBITS (bit_buf, 1);
01113 DUMPBITS (bit_buf, bits, 1);
01114
01115 motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
01116 motion->f_code[0]);
01117 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01118 motion->pmv[0][0] = motion_x;
01119
01120 NEEDBITS (bit_buf, bits, bit_ptr);
01121 motion_y = (motion->pmv[0][1] >> 1) + get_motion_delta (decoder,
01122 motion->f_code[1]);
01123 /* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
01124 motion->pmv[0][1] = motion_y << 1;
01125
01126 MOTION_FIELD (table, motion->ref[0], motion_x, motion_y, 0, & ~1, field);
01127
01128 NEEDBITS (bit_buf, bits, bit_ptr);
01129 field = UBITS (bit_buf, 1);
01130 DUMPBITS (bit_buf, bits, 1);
01131
01132 motion_x = motion->pmv[1][0] + get_motion_delta (decoder,
01133 motion->f_code[0]);
01134 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01135 motion->pmv[1][0] = motion_x;
01136
01137 NEEDBITS (bit_buf, bits, bit_ptr);
01138 motion_y = (motion->pmv[1][1] >> 1) + get_motion_delta (decoder,
01139 motion->f_code[1]);
01140 /* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
01141 motion->pmv[1][1] = motion_y << 1;
01142
01143 MOTION_FIELD (table, motion->ref[0], motion_x, motion_y, 1, & ~1, field);
01144 #undef bit_buf
01145 #undef bits
01146 #undef bit_ptr
01147 }
|
|
||||||||||||||||
|
Definition at line 1073 of file slice.c. References bound_motion_vector(), motion_t::f_code, get_motion_delta(), MOTION, mpeg2_mc_fct, NEEDBITS, offset, motion_t::pmv, and motion_t::ref. Referenced by mpeg2_slice().
01076 {
01077 #define bit_buf (decoder->bitstream_buf)
01078 #define bits (decoder->bitstream_bits)
01079 #define bit_ptr (decoder->bitstream_ptr)
01080 int motion_x, motion_y;
01081 unsigned int pos_x, pos_y, xy_half, offset;
01082
01083 NEEDBITS (bit_buf, bits, bit_ptr);
01084 motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
01085 motion->f_code[0]);
01086 motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
01087 motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
01088
01089 NEEDBITS (bit_buf, bits, bit_ptr);
01090 motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
01091 motion->f_code[1]);
01092 motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
01093 motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
01094
01095 MOTION (table, motion->ref[0], motion_x, motion_y, 16, 0);
01096 #undef bit_buf
01097 #undef bits
01098 #undef bit_ptr
01099 }
|
|
||||||||||||||||
|
Definition at line 1042 of file slice.c. References bound_motion_vector(), motion_t::f_code, get_motion_delta(), MOTION, mpeg2_mc_fct, NEEDBITS, offset, motion_t::pmv, and motion_t::ref. Referenced by mpeg2_slice().
01044 {
01045 #define bit_buf (decoder->bitstream_buf)
01046 #define bits (decoder->bitstream_bits)
01047 #define bit_ptr (decoder->bitstream_ptr)
01048 int motion_x, motion_y;
01049 unsigned int pos_x, pos_y, xy_half, offset;
01050
01051 NEEDBITS (bit_buf, bits, bit_ptr);
01052 motion_x = (motion->pmv[0][0] +
01053 (get_motion_delta (decoder,
01054 motion->f_code[0]) << motion->f_code[1]));
01055 motion_x = bound_motion_vector (motion_x,
01056 motion->f_code[0] + motion->f_code[1]);
01057 motion->pmv[0][0] = motion_x;
01058
01059 NEEDBITS (bit_buf, bits, bit_ptr);
01060 motion_y = (motion->pmv[0][1] +
01061 (get_motion_delta (decoder,
01062 motion->f_code[0]) << motion->f_code[1]));
01063 motion_y = bound_motion_vector (motion_y,
01064 motion->f_code[0] + motion->f_code[1]);
01065 motion->pmv[0][1] = motion_y;
01066
01067 MOTION (table, motion->ref[0], motion_x, motion_y, 16, 0);
01068 #undef bit_buf
01069 #undef bits
01070 #undef bit_ptr
01071 }
|
|
||||||||||||||||
|
Definition at line 1215 of file slice.c. References MOTION, mpeg2_mc_fct, offset, motion_t::pmv, and motion_t::ref. Referenced by mpeg2_slice().
|
|
||||||||||||||||
|
Definition at line 1228 of file slice.c. References decoder_s::dest, mpeg2_mc_fct, decoder_s::offset, offset, motion_t::ref, decoder_s::stride, decoder_s::uv_stride, and decoder_s::v_offset. Referenced by mpeg2_slice().
01231 {
01232 unsigned int offset;
01233
01234 table[0] (decoder->dest[0] + decoder->offset,
01235 (motion->ref[0][0] + decoder->offset +
01236 decoder->v_offset * decoder->stride),
01237 decoder->stride, 16);
01238
01239 offset = ((decoder->offset >> 1) +
01240 (decoder->v_offset >> 1) * decoder->uv_stride);
01241 table[4] (decoder->dest[1] + (decoder->offset >> 1),
01242 motion->ref[0][1] + offset, decoder->uv_stride, 8);
01243 table[4] (decoder->dest[2] + (decoder->offset >> 1),
01244 motion->ref[0][2] + offset, decoder->uv_stride, 8);
01245 }
|
|
||||||||||||||||||||
|
Definition at line 1446 of file slice.c. References decoder_s::b_motion, B_TYPE, BOTTOM_FIELD, decoder_s::coding_type, decoder_s::dmv_offset, decoder_s::f_motion, FRAME_PICTURE, decoder_s::height, decoder_s::limit_x, decoder_s::limit_y, decoder_s::limit_y_16, decoder_s::limit_y_8, offset, decoder_s::picture_dest, decoder_s::picture_structure, motion_t::ref, motion_t::ref2, decoder_s::second_field, decoder_s::stride, stride, uint8_t, decoder_s::uv_stride, and decoder_s::width. Referenced by mpeg2_header_slice_start().
01448 {
01449 int offset, stride, height, bottom_field;
01450
01451 stride = decoder->width;
01452 bottom_field = (decoder->picture_structure == BOTTOM_FIELD);
01453 offset = bottom_field ? stride : 0;
01454 height = decoder->height;
01455
01456 decoder->picture_dest[0] = current_fbuf[0] + offset;
01457 decoder->picture_dest[1] = current_fbuf[1] + (offset >> 1);
01458 decoder->picture_dest[2] = current_fbuf[2] + (offset >> 1);
01459
01460 decoder->f_motion.ref[0][0] = forward_fbuf[0] + offset;
01461 decoder->f_motion.ref[0][1] = forward_fbuf[1] + (offset >> 1);
01462 decoder->f_motion.ref[0][2] = forward_fbuf[2] + (offset >> 1);
01463
01464 decoder->b_motion.ref[0][0] = backward_fbuf[0] + offset;
01465 decoder->b_motion.ref[0][1] = backward_fbuf[1] + (offset >> 1);
01466 decoder->b_motion.ref[0][2] = backward_fbuf[2] + (offset >> 1);
01467
01468 if (decoder->picture_structure != FRAME_PICTURE) {
01469 decoder->dmv_offset = bottom_field ? 1 : -1;
01470 decoder->f_motion.ref2[0] = decoder->f_motion.ref[bottom_field];
01471 decoder->f_motion.ref2[1] = decoder->f_motion.ref[!bottom_field];
01472 decoder->b_motion.ref2[0] = decoder->b_motion.ref[bottom_field];
01473 decoder->b_motion.ref2[1] = decoder->b_motion.ref[!bottom_field];
01474 offset = stride - offset;
01475
01476 if (decoder->second_field && (decoder->coding_type != B_TYPE))
01477 forward_fbuf = current_fbuf;
01478
01479 decoder->f_motion.ref[1][0] = forward_fbuf[0] + offset;
01480 decoder->f_motion.ref[1][1] = forward_fbuf[1] + (offset >> 1);
01481 decoder->f_motion.ref[1][2] = forward_fbuf[2] + (offset >> 1);
01482
01483 decoder->b_motion.ref[1][0] = backward_fbuf[0] + offset;
01484 decoder->b_motion.ref[1][1] = backward_fbuf[1] + (offset >> 1);
01485 decoder->b_motion.ref[1][2] = backward_fbuf[2] + (offset >> 1);
01486
01487 stride <<= 1;
01488 height >>= 1;
01489 }
01490
01491 decoder->stride = stride;
01492 decoder->uv_stride = stride >> 1;
01493 decoder->limit_x = 2 * decoder->width - 32;
01494 decoder->limit_y_16 = 2 * height - 32;
01495 decoder->limit_y_8 = 2 * height - 16;
01496 decoder->limit_y = height - 16;
01497 }
|
|
||||||||||||||||
|
Definition at line 1581 of file slice.c. References decoder_s::b_motion, bitstream_init(), decoder_s::coding_type, decoder_s::concealment_motion_vectors, D_TYPE, decoder_s::dc_dct_pred, DCT_TYPE_INTERLACED, decoder_s::dest, DUMPBITS, decoder_s::f_motion, FRAME_PICTURE, get_coded_block_pattern(), get_macroblock_modes(), get_quantizer_scale(), decoder_s::intra_dc_precision, MBAtab::len, MACROBLOCK_INTRA, MACROBLOCK_MOTION_FORWARD, MACROBLOCK_PATTERN, MACROBLOCK_QUANT, MBAtab::mba, MC_16X8, MC_DMV, MC_FIELD, MC_FRAME, MOTION_CALL, motion_fi_16x8(), motion_fi_conceal(), motion_fi_dmv(), motion_fi_field(), motion_fr_conceal(), motion_fr_dmv(), motion_fr_field(), motion_fr_frame(), motion_mp1(), motion_reuse(), MOTION_TYPE_MASK, motion_zero(), decoder_s::mpeg1, mpeg2_cpu_state_restore, mpeg2_cpu_state_save, NEEDBITS, NEXT_MACROBLOCK, decoder_s::offset, offset, P_TYPE, decoder_s::picture_structure, motion_t::pmv, decoder_s::quantizer_scale, slice_init(), slice_intra_DCT(), slice_non_intra_DCT(), decoder_s::stride, UBITS, uint8_t, and decoder_s::uv_stride. Referenced by mpeg2_parse().
01583 {
01584 #define bit_buf (decoder->bitstream_buf)
01585 #define bits (decoder->bitstream_bits)
01586 #define bit_ptr (decoder->bitstream_ptr)
01587 cpu_state_t cpu_state;
01588
01589 bitstream_init (decoder, buffer);
01590
01591 if (slice_init (decoder, code))
01592 return;
01593
01594 if (mpeg2_cpu_state_save)
01595 mpeg2_cpu_state_save (&cpu_state);
01596
01597 while (1) {
01598 int macroblock_modes;
01599 int mba_inc;
01600 const MBAtab * mba;
01601
01602 NEEDBITS (bit_buf, bits, bit_ptr);
01603
01604 macroblock_modes = get_macroblock_modes (decoder);
01605
01606 /* maybe integrate MACROBLOCK_QUANT test into get_macroblock_modes ? */
01607 if (macroblock_modes & MACROBLOCK_QUANT)
01608 decoder->quantizer_scale = get_quantizer_scale (decoder);
01609
01610 if (macroblock_modes & MACROBLOCK_INTRA) {
01611
01612 int DCT_offset, DCT_stride;
01613 int offset;
01614 uint8_t * dest_y;
01615
01616 if (decoder->concealment_motion_vectors) {
01617 if (decoder->picture_structure == FRAME_PICTURE)
01618 motion_fr_conceal (decoder);
01619 else
01620 motion_fi_conceal (decoder);
01621 } else {
01622 decoder->f_motion.pmv[0][0] = decoder->f_motion.pmv[0][1] = 0;
01623 decoder->f_motion.pmv[1][0] = decoder->f_motion.pmv[1][1] = 0;
01624 decoder->b_motion.pmv[0][0] = decoder->b_motion.pmv[0][1] = 0;
01625 decoder->b_motion.pmv[1][0] = decoder->b_motion.pmv[1][1] = 0;
01626 }
01627
01628 if (macroblock_modes & DCT_TYPE_INTERLACED) {
01629 DCT_offset = decoder->stride;
01630 DCT_stride = decoder->stride * 2;
01631 } else {
01632 DCT_offset = decoder->stride * 8;
01633 DCT_stride = decoder->stride;
01634 }
01635
01636 offset = decoder->offset;
01637 dest_y = decoder->dest[0] + offset;
01638 slice_intra_DCT (decoder, 0, dest_y, DCT_stride);
01639 slice_intra_DCT (decoder, 0, dest_y + 8, DCT_stride);
01640 slice_intra_DCT (decoder, 0, dest_y + DCT_offset, DCT_stride);
01641 slice_intra_DCT (decoder, 0, dest_y + DCT_offset + 8, DCT_stride);
01642 slice_intra_DCT (decoder, 1, decoder->dest[1] + (offset >> 1),
01643 decoder->uv_stride);
01644 slice_intra_DCT (decoder, 2, decoder->dest[2] + (offset >> 1),
01645 decoder->uv_stride);
01646
01647 if (decoder->coding_type == D_TYPE) {
01648 NEEDBITS (bit_buf, bits, bit_ptr);
01649 DUMPBITS (bit_buf, bits, 1);
01650 }
01651 } else {
01652
01653 if (decoder->picture_structure == FRAME_PICTURE)
01654 switch (macroblock_modes & MOTION_TYPE_MASK) {
01655 case MC_FRAME:
01656 if (decoder->mpeg1)
01657 MOTION_CALL (motion_mp1, macroblock_modes);
01658 else
01659 MOTION_CALL (motion_fr_frame, macroblock_modes);
01660 break;
01661
01662 case MC_FIELD:
01663 MOTION_CALL (motion_fr_field, macroblock_modes);
01664 break;
01665
01666 case MC_DMV:
01667 MOTION_CALL (motion_fr_dmv, MACROBLOCK_MOTION_FORWARD);
01668 break;
01669
01670 case 0:
01671 /* non-intra mb without forward mv in a P picture */
01672 decoder->f_motion.pmv[0][0] = 0;
01673 decoder->f_motion.pmv[0][1] = 0;
01674 decoder->f_motion.pmv[1][0] = 0;
01675 decoder->f_motion.pmv[1][1] = 0;
01676 MOTION_CALL (motion_zero, MACROBLOCK_MOTION_FORWARD);
01677 break;
01678 }
01679 else
01680 switch (macroblock_modes & MOTION_TYPE_MASK) {
01681 case MC_FIELD:
01682 MOTION_CALL (motion_fi_field, macroblock_modes);
01683 break;
01684
01685 case MC_16X8:
01686 MOTION_CALL (motion_fi_16x8, macroblock_modes);
01687 break;
01688
01689 case MC_DMV:
01690 MOTION_CALL (motion_fi_dmv, MACROBLOCK_MOTION_FORWARD);
01691 break;
01692
01693 case 0:
01694 /* non-intra mb without forward mv in a P picture */
01695 decoder->f_motion.pmv[0][0] = 0;
01696 decoder->f_motion.pmv[0][1] = 0;
01697 decoder->f_motion.pmv[1][0] = 0;
01698 decoder->f_motion.pmv[1][1] = 0;
01699 MOTION_CALL (motion_zero, MACROBLOCK_MOTION_FORWARD);
01700 break;
01701 }
01702
01703 if (macroblock_modes & MACROBLOCK_PATTERN) {
01704 int coded_block_pattern;
01705 int DCT_offset, DCT_stride;
01706 int offset;
01707 uint8_t * dest_y;
01708
01709 if (macroblock_modes & DCT_TYPE_INTERLACED) {
01710 DCT_offset = decoder->stride;
01711 DCT_stride = decoder->stride * 2;
01712 } else {
01713 DCT_offset = decoder->stride * 8;
01714 DCT_stride = decoder->stride;
01715 }
01716
01717 coded_block_pattern = get_coded_block_pattern (decoder);
01718
01719 offset = decoder->offset;
01720 dest_y = decoder->dest[0] + offset;
01721 if (coded_block_pattern & 0x20)
01722 slice_non_intra_DCT (decoder, dest_y, DCT_stride);
01723 if (coded_block_pattern & 0x10)
01724 slice_non_intra_DCT (decoder, dest_y + 8, DCT_stride);
01725 if (coded_block_pattern & 0x08)
01726 slice_non_intra_DCT (decoder, dest_y + DCT_offset,
01727 DCT_stride);
01728 if (coded_block_pattern & 0x04)
01729 slice_non_intra_DCT (decoder, dest_y + DCT_offset + 8,
01730 DCT_stride);
01731 if (coded_block_pattern & 0x2)
01732 slice_non_intra_DCT (decoder,
01733 decoder->dest[1] + (offset >> 1),
01734 decoder->uv_stride);
01735 if (coded_block_pattern & 0x1)
01736 slice_non_intra_DCT (decoder,
01737 decoder->dest[2] + (offset >> 1),
01738 decoder->uv_stride);
01739 }
01740
01741 decoder->dc_dct_pred[0] = decoder->dc_dct_pred[1] =
01742 decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
01743 }
01744
01745 NEXT_MACROBLOCK;
01746
01747 NEEDBITS (bit_buf, bits, bit_ptr);
01748 mba_inc = 0;
01749 while (1) {
01750 if (bit_buf >= 0x10000000) {
01751 mba = MBA_5 + (UBITS (bit_buf, 5) - 2);
01752 break;
01753 } else if (bit_buf >= 0x03000000) {
01754 mba = MBA_11 + (UBITS (bit_buf, 11) - 24);
01755 break;
01756 } else switch (UBITS (bit_buf, 11)) {
01757 case 8: /* macroblock_escape */
01758 mba_inc += 33;
01759 /* pass through */
01760 case 15: /* macroblock_stuffing (MPEG1 only) */
01761 DUMPBITS (bit_buf, bits, 11);
01762 NEEDBITS (bit_buf, bits, bit_ptr);
01763 continue;
01764 default: /* end of slice, or error */
01765 if (mpeg2_cpu_state_restore)
01766 mpeg2_cpu_state_restore (&cpu_state);
01767 return;
01768 }
01769 }
01770 DUMPBITS (bit_buf, bits, mba->len);
01771 mba_inc += mba->mba;
01772
01773 if (mba_inc) {
01774 decoder->dc_dct_pred[0] = decoder->dc_dct_pred[1] =
01775 decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
01776
01777 if (decoder->coding_type == P_TYPE) {
01778 decoder->f_motion.pmv[0][0] = decoder->f_motion.pmv[0][1] = 0;
01779 decoder->f_motion.pmv[1][0] = decoder->f_motion.pmv[1][1] = 0;
01780
01781 do {
01782 MOTION_CALL (motion_zero, MACROBLOCK_MOTION_FORWARD);
01783 NEXT_MACROBLOCK;
01784 } while (--mba_inc);
01785 } else {
01786 do {
01787 MOTION_CALL (motion_reuse, macroblock_modes);
01788 NEXT_MACROBLOCK;
01789 } while (--mba_inc);
01790 }
01791 }
01792 }
01793 #undef bit_buf
01794 #undef bits
01795 #undef bit_ptr
01796 }
|
|
||||||||||||
|
Definition at line 1499 of file slice.c. References decoder_s::b_motion, B_TYPE, decoder_s::coding_type, decoder_s::convert, decoder_s::dc_dct_pred, decoder_s::dest, DUMPBITS, decoder_s::f_motion, get_quantizer_scale(), decoder_s::intra_dc_precision, MBAtab::len, decoder_s::limit_y, MBAtab::mba, NEEDBITS, decoder_s::offset, offset, decoder_s::picture_dest, motion_t::pmv, decoder_s::quantizer_scale, decoder_s::stride, UBITS, decoder_s::v_offset, decoder_s::vertical_position_extension, and decoder_s::width. Referenced by mpeg2_slice().
01500 {
01501 #define bit_buf (decoder->bitstream_buf)
01502 #define bits (decoder->bitstream_bits)
01503 #define bit_ptr (decoder->bitstream_ptr)
01504 int offset;
01505 const MBAtab * mba;
01506
01507 decoder->dc_dct_pred[0] = decoder->dc_dct_pred[1] =
01508 decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
01509
01510 decoder->f_motion.pmv[0][0] = decoder->f_motion.pmv[0][1] = 0;
01511 decoder->f_motion.pmv[1][0] = decoder->f_motion.pmv[1][1] = 0;
01512 decoder->b_motion.pmv[0][0] = decoder->b_motion.pmv[0][1] = 0;
01513 decoder->b_motion.pmv[1][0] = decoder->b_motion.pmv[1][1] = 0;
01514
01515 if (decoder->vertical_position_extension) {
01516 code += UBITS (bit_buf, 3) << 7;
01517 DUMPBITS (bit_buf, bits, 3);
01518 }
01519 decoder->v_offset = (code - 1) * 16;
01520 offset = 0;
01521 if (!(decoder->convert) || decoder->coding_type != B_TYPE)
01522 offset = (code - 1) * decoder->stride * 4;
01523
01524 decoder->dest[0] = decoder->picture_dest[0] + offset * 4;
01525 decoder->dest[1] = decoder->picture_dest[1] + offset;
01526 decoder->dest[2] = decoder->picture_dest[2] + offset;
01527
01528 decoder->quantizer_scale = get_quantizer_scale (decoder);
01529
01530 /* ignore intra_slice and all the extra data */
01531 while (bit_buf & 0x80000000) {
01532 DUMPBITS (bit_buf, bits, 9);
01533 NEEDBITS (bit_buf, bits, bit_ptr);
01534 }
01535
01536 /* decode initial macroblock address increment */
01537 offset = 0;
01538 while (1) {
01539 if (bit_buf >= 0x08000000) {
01540 mba = MBA_5 + (UBITS (bit_buf, 6) - 2);
01541 break;
01542 } else if (bit_buf >= 0x01800000) {
01543 mba = MBA_11 + (UBITS (bit_buf, 12) - 24);
01544 break;
01545 } else switch (UBITS (bit_buf, 12)) {
01546 case 8: /* macroblock_escape */
01547 offset += 33;
01548 DUMPBITS (bit_buf, bits, 11);
01549 NEEDBITS (bit_buf, bits, bit_ptr);
01550 continue;
01551 case 15: /* macroblock_stuffing (MPEG1 only) */
01552 bit_buf &= 0xfffff;
01553 DUMPBITS (bit_buf, bits, 11);
01554 NEEDBITS (bit_buf, bits, bit_ptr);
01555 continue;
01556 default: /* error */
01557 return 1;
01558 }
01559 }
01560 DUMPBITS (bit_buf, bits, mba->len + 1);
01561 decoder->offset = (offset + mba->mba) << 4;
01562
01563 while (decoder->offset - decoder->width >= 0) {
01564 decoder->offset -= decoder->width;
01565 if (!(decoder->convert) || decoder->coding_type != B_TYPE) {
01566 decoder->dest[0] += 16 * decoder->stride;
01567 decoder->dest[1] += 4 * decoder->stride;
01568 decoder->dest[2] += 4 * decoder->stride;
01569 }
01570 decoder->v_offset += 16;
01571 }
01572 if (decoder->v_offset > decoder->limit_y)
01573 return 1;
01574
01575 return 0;
01576 #undef bit_buf
01577 #undef bits
01578 #undef bit_ptr
01579 }
|
|
||||||||||||||||||||
|
Definition at line 958 of file slice.c. References decoder_s::coding_type, D_TYPE, decoder_s::dc_dct_pred, decoder_s::DCTblock, get_chroma_dc_dct_diff(), get_intra_block_B14(), get_intra_block_B15(), get_luma_dc_dct_diff(), get_mpeg1_intra_block(), decoder_s::intra_dc_precision, decoder_s::intra_vlc_format, decoder_s::mpeg1, mpeg2_idct_copy, NEEDBITS, stride, and uint8_t. Referenced by mpeg2_slice().
00960 {
00961 #define bit_buf (decoder->bitstream_buf)
00962 #define bits (decoder->bitstream_bits)
00963 #define bit_ptr (decoder->bitstream_ptr)
00964 NEEDBITS (bit_buf, bits, bit_ptr);
00965 /* Get the intra DC coefficient and inverse quantize it */
00966 if (cc == 0)
00967 decoder->dc_dct_pred[0] += get_luma_dc_dct_diff (decoder);
00968 else
00969 decoder->dc_dct_pred[cc] += get_chroma_dc_dct_diff (decoder);
00970 decoder->DCTblock[0] =
00971 decoder->dc_dct_pred[cc] << (3 - decoder->intra_dc_precision);
00972
00973 if (decoder->mpeg1) {
00974 if (decoder->coding_type != D_TYPE)
00975 get_mpeg1_intra_block (decoder);
00976 } else if (decoder->intra_vlc_format)
00977 get_intra_block_B15 (decoder);
00978 else
00979 get_intra_block_B14 (decoder);
00980 mpeg2_idct_copy (decoder->DCTblock, dest, stride);
00981 #undef bit_buf
00982 #undef bits
00983 #undef bit_ptr
00984 }
|
|
||||||||||||||||
|
Definition at line 986 of file slice.c. References decoder_s::DCTblock, get_mpeg1_non_intra_block(), get_non_intra_block(), decoder_s::mpeg1, mpeg2_idct_add, stride, and uint8_t. Referenced by mpeg2_slice().
00988 {
00989 int last;
00990
00991 if (decoder->mpeg1)
00992 last = get_mpeg1_non_intra_block (decoder);
00993 else
00994 last = get_non_intra_block (decoder);
00995 mpeg2_idct_add (last, decoder->DCTblock, dest, stride);
00996 }
|
Variable Documentation
|
|
Definition at line 37 of file slice.c. Referenced by mpeg2_cpu_state_init(), and mpeg2_slice(). |
|
|
Definition at line 36 of file slice.c. Referenced by mpeg2_cpu_state_init(), and mpeg2_slice(). |
|
|
Definition at line 34 of file slice.c. Referenced by mpeg2_idct_init(), and slice_non_intra_DCT(). |
|
|
Definition at line 33 of file slice.c. Referenced by mpeg2_idct_init(), and slice_intra_DCT(). |
|
|
|
|
|
Initial value: {
0, 1, 2, 3, 4, 5, 6, 7,
8, 10, 12, 14, 16, 18, 20, 22,
24, 28, 32, 36, 40, 44, 48, 52,
56, 64, 72, 80, 88, 96, 104, 112
}Definition at line 41 of file slice.c. Referenced by get_quantizer_scale(). |