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) {