Mercurial > mplayer.hg
comparison libmpeg2/slice.c @ 27572:da2271c341ee
Update internal libmpeg2 copy to version 0.5.1.
author | diego |
---|---|
date | Sat, 13 Sep 2008 17:31:45 +0000 |
parents | fd18fa10de53 |
children | e83eef58b30a |
comparison
equal
deleted
inserted
replaced
27571:fd18fa10de53 | 27572:da2271c341ee |
---|---|
448 goto normal_code; | 448 goto normal_code; |
449 } | 449 } |
450 break; /* illegal, check needed to avoid buffer overflow */ | 450 break; /* illegal, check needed to avoid buffer overflow */ |
451 } | 451 } |
452 dest[63] ^= mismatch & 16; | 452 dest[63] ^= mismatch & 16; |
453 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */ | 453 DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */ |
454 decoder->bitstream_buf = bit_buf; | 454 decoder->bitstream_buf = bit_buf; |
455 decoder->bitstream_bits = bits; | 455 decoder->bitstream_bits = bits; |
456 decoder->bitstream_ptr = bit_ptr; | 456 decoder->bitstream_ptr = bit_ptr; |
457 } | 457 } |
458 | 458 |
506 continue; | 506 continue; |
507 | 507 |
508 } else { | 508 } else { |
509 | 509 |
510 /* end of block. I commented out this code because if we */ | 510 /* end of block. I commented out this code because if we */ |
511 /* dont exit here we will still exit at the later test :) */ | 511 /* do not exit here we will still exit at the later test :) */ |
512 | 512 |
513 /* if (i >= 128) break; */ /* end of block */ | 513 /* if (i >= 128) break; */ /* end of block */ |
514 | 514 |
515 /* escape code */ | 515 /* escape code */ |
516 | 516 |
558 goto normal_code; | 558 goto normal_code; |
559 } | 559 } |
560 break; /* illegal, check needed to avoid buffer overflow */ | 560 break; /* illegal, check needed to avoid buffer overflow */ |
561 } | 561 } |
562 dest[63] ^= mismatch & 16; | 562 dest[63] ^= mismatch & 16; |
563 DUMPBITS (bit_buf, bits, 4); /* dump end of block code */ | 563 DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */ |
564 decoder->bitstream_buf = bit_buf; | 564 decoder->bitstream_buf = bit_buf; |
565 decoder->bitstream_bits = bits; | 565 decoder->bitstream_bits = bits; |
566 decoder->bitstream_ptr = bit_ptr; | 566 decoder->bitstream_ptr = bit_ptr; |
567 } | 567 } |
568 | 568 |
679 goto normal_code; | 679 goto normal_code; |
680 } | 680 } |
681 break; /* illegal, check needed to avoid buffer overflow */ | 681 break; /* illegal, check needed to avoid buffer overflow */ |
682 } | 682 } |
683 dest[63] ^= mismatch & 16; | 683 dest[63] ^= mismatch & 16; |
684 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */ | 684 DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */ |
685 decoder->bitstream_buf = bit_buf; | 685 decoder->bitstream_buf = bit_buf; |
686 decoder->bitstream_bits = bits; | 686 decoder->bitstream_bits = bits; |
687 decoder->bitstream_ptr = bit_ptr; | 687 decoder->bitstream_ptr = bit_ptr; |
688 return i; | 688 return i; |
689 } | 689 } |
797 if (i < 64) | 797 if (i < 64) |
798 goto normal_code; | 798 goto normal_code; |
799 } | 799 } |
800 break; /* illegal, check needed to avoid buffer overflow */ | 800 break; /* illegal, check needed to avoid buffer overflow */ |
801 } | 801 } |
802 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */ | 802 DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */ |
803 decoder->bitstream_buf = bit_buf; | 803 decoder->bitstream_buf = bit_buf; |
804 decoder->bitstream_bits = bits; | 804 decoder->bitstream_bits = bits; |
805 decoder->bitstream_ptr = bit_ptr; | 805 decoder->bitstream_ptr = bit_ptr; |
806 } | 806 } |
807 | 807 |
924 if (i < 64) | 924 if (i < 64) |
925 goto normal_code; | 925 goto normal_code; |
926 } | 926 } |
927 break; /* illegal, check needed to avoid buffer overflow */ | 927 break; /* illegal, check needed to avoid buffer overflow */ |
928 } | 928 } |
929 DUMPBITS (bit_buf, bits, 2); /* dump end of block code */ | 929 DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */ |
930 decoder->bitstream_buf = bit_buf; | 930 decoder->bitstream_buf = bit_buf; |
931 decoder->bitstream_bits = bits; | 931 decoder->bitstream_bits = bits; |
932 decoder->bitstream_ptr = bit_ptr; | 932 decoder->bitstream_ptr = bit_ptr; |
933 return i; | 933 return i; |
934 } | 934 } |
1567 mpeg2_mc.avg : mpeg2_mc.put)); \ | 1567 mpeg2_mc.avg : mpeg2_mc.put)); \ |
1568 } while (0) | 1568 } while (0) |
1569 | 1569 |
1570 #define NEXT_MACROBLOCK \ | 1570 #define NEXT_MACROBLOCK \ |
1571 do { \ | 1571 do { \ |
1572 if(decoder->quant_store) { \ | 1572 if(decoder->quant_store) { \ |
1573 if (decoder->picture_structure == TOP_FIELD) \ | 1573 if (decoder->picture_structure == TOP_FIELD) \ |
1574 decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \ | 1574 decoder->quant_store[2 * decoder->quant_stride \ |
1575 +(decoder->offset>>4)] = decoder->quantizer_scale; \ | 1575 * (decoder->v_offset >> 4) \ |
1576 else if (decoder->picture_structure == BOTTOM_FIELD) \ | 1576 + (decoder->offset >> 4)] \ |
1577 decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \ | 1577 = decoder->quantizer_scale; \ |
1578 + decoder->quant_stride \ | 1578 else if (decoder->picture_structure == BOTTOM_FIELD) \ |
1579 +(decoder->offset>>4)] = decoder->quantizer_scale; \ | 1579 decoder->quant_store[2 * decoder->quant_stride \ |
1580 else \ | 1580 * (decoder->v_offset >> 4) \ |
1581 decoder->quant_store[decoder->quant_stride*(decoder->v_offset>>4) \ | 1581 + decoder->quant_stride \ |
1582 +(decoder->offset>>4)] = decoder->quantizer_scale; \ | 1582 + (decoder->offset >> 4)] \ |
1583 } \ | 1583 = decoder->quantizer_scale; \ |
1584 else \ | |
1585 decoder->quant_store[decoder->quant_stride \ | |
1586 * (decoder->v_offset >> 4) \ | |
1587 + (decoder->offset >> 4)] \ | |
1588 = decoder->quantizer_scale; \ | |
1589 } \ | |
1584 decoder->offset += 16; \ | 1590 decoder->offset += 16; \ |
1585 if (decoder->offset == decoder->width) { \ | 1591 if (decoder->offset == decoder->width) { \ |
1586 do { /* just so we can use the break statement */ \ | 1592 do { /* just so we can use the break statement */ \ |
1587 if (decoder->convert) { \ | 1593 if (decoder->convert) { \ |
1588 decoder->convert (decoder->convert_id, decoder->dest, \ | 1594 decoder->convert (decoder->convert_id, decoder->dest, \ |
1602 } \ | 1608 } \ |
1603 decoder->offset = 0; \ | 1609 decoder->offset = 0; \ |
1604 } \ | 1610 } \ |
1605 } while (0) | 1611 } while (0) |
1606 | 1612 |
1613 /** | |
1614 * Dummy motion decoding function, to avoid calling NULL in | |
1615 * case of malformed streams. | |
1616 */ | |
1607 static void motion_dummy (mpeg2_decoder_t * const decoder, | 1617 static void motion_dummy (mpeg2_decoder_t * const decoder, |
1608 motion_t * const motion, | 1618 motion_t * const motion, |
1609 mpeg2_mc_fct * const * const table) | 1619 mpeg2_mc_fct * const * const table) |
1610 { | 1620 { |
1611 } | 1621 } |
1666 decoder->limit_y = height - 16; | 1676 decoder->limit_y = height - 16; |
1667 | 1677 |
1668 if (decoder->mpeg1) { | 1678 if (decoder->mpeg1) { |
1669 decoder->motion_parser[0] = motion_zero_420; | 1679 decoder->motion_parser[0] = motion_zero_420; |
1670 decoder->motion_parser[MC_FIELD] = motion_dummy; | 1680 decoder->motion_parser[MC_FIELD] = motion_dummy; |
1671 decoder->motion_parser[MC_FRAME] = motion_mp1; | 1681 decoder->motion_parser[MC_FRAME] = motion_mp1; |
1672 decoder->motion_parser[MC_DMV] = motion_dummy; | 1682 decoder->motion_parser[MC_DMV] = motion_dummy; |
1673 decoder->motion_parser[4] = motion_reuse_420; | 1683 decoder->motion_parser[4] = motion_reuse_420; |
1674 } else if (decoder->picture_structure == FRAME_PICTURE) { | 1684 } else if (decoder->picture_structure == FRAME_PICTURE) { |
1675 if (decoder->chroma_format == 0) { | 1685 if (decoder->chroma_format == 0) { |
1676 decoder->motion_parser[0] = motion_zero_420; | 1686 decoder->motion_parser[0] = motion_zero_420; |
1892 } | 1902 } |
1893 } else { | 1903 } else { |
1894 | 1904 |
1895 motion_parser_t * parser; | 1905 motion_parser_t * parser; |
1896 | 1906 |
1907 if ( ((macroblock_modes >> MOTION_TYPE_SHIFT) < 0) | |
1908 || ((macroblock_modes >> MOTION_TYPE_SHIFT) >= | |
1909 (int)(sizeof(decoder->motion_parser) | |
1910 / sizeof(decoder->motion_parser[0]))) | |
1911 ) { | |
1912 break; // Illegal ! | |
1913 } | |
1914 | |
1897 parser = | 1915 parser = |
1898 decoder->motion_parser[macroblock_modes >> MOTION_TYPE_SHIFT]; | 1916 decoder->motion_parser[macroblock_modes >> MOTION_TYPE_SHIFT]; |
1899 MOTION_CALL (parser, macroblock_modes); | 1917 MOTION_CALL (parser, macroblock_modes); |
1900 | 1918 |
1901 if (macroblock_modes & MACROBLOCK_PATTERN) { | 1919 if (macroblock_modes & MACROBLOCK_PATTERN) { |