⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slice.c

📁 linux下实现视频播放的播放器
💻 C
📖 第 1 页 / 共 5 页
字号:
	    NEEDBITS (bit_buf, bits, bit_ptr);	    continue;	} else if (bit_buf >= 0x04000000) {	    tab = DCT_B14_8 + (UBITS (bit_buf, 8) - 4);	    i += tab->run;	    if (i < 64)		goto normal_code;	    /* escape code */	    i += UBITS (bit_buf << 6, 6) - 64;	    if (i >= 64)		break;	/* illegal, check needed to avoid buffer overflow */	    j = scan[i];	    DUMPBITS (bit_buf, bits, 12);	    NEEDBITS (bit_buf, bits, bit_ptr);	    val = (SBITS (bit_buf, 12) * quant_matrix[j]) / 16;	    SATURATE (val);	    dest[j] = val;	    mismatch ^= val;	    DUMPBITS (bit_buf, bits, 12);	    NEEDBITS (bit_buf, bits, bit_ptr);	    continue;	} else if (bit_buf >= 0x02000000) {	    tab = DCT_B14_10 + (UBITS (bit_buf, 10) - 8);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else if (bit_buf >= 0x00800000) {	    tab = DCT_13 + (UBITS (bit_buf, 13) - 16);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else if (bit_buf >= 0x00200000) {	    tab = DCT_15 + (UBITS (bit_buf, 15) - 16);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else {	    tab = DCT_16 + UBITS (bit_buf, 16);	    bit_buf <<= 16;	    GETWORD (bit_buf, bits + 16, bit_ptr);	    i += tab->run;	    if (i < 64)		goto normal_code;	}	break;	/* illegal, check needed to avoid buffer overflow */    }    dest[63] ^= mismatch & 16;    DUMPBITS (bit_buf, bits, tab->len);	/* dump end of block code */    decoder->bitstream_buf = bit_buf;    decoder->bitstream_bits = bits;    decoder->bitstream_ptr = bit_ptr;}static void get_intra_block_B15 (mpeg2_decoder_t * const decoder,				 const uint16_t * const quant_matrix){    int i;    int j;    int val;    const uint8_t * const scan = decoder->scan;    int mismatch;    const DCTtab * tab;    uint32_t bit_buf;    int bits;    const uint8_t * bit_ptr;    int16_t * const dest = decoder->DCTblock;    i = 0;    mismatch = ~dest[0];    bit_buf = decoder->bitstream_buf;    bits = decoder->bitstream_bits;    bit_ptr = decoder->bitstream_ptr;    NEEDBITS (bit_buf, bits, bit_ptr);    while (1) {	if (bit_buf >= 0x04000000) {	    tab = DCT_B15_8 + (UBITS (bit_buf, 8) - 4);	    i += tab->run;	    if (i < 64) {	    normal_code:		j = scan[i];		bit_buf <<= tab->len;		bits += tab->len + 1;		val = (tab->level * quant_matrix[j]) >> 4;		/* if (bitstream_get (1)) val = -val; */		val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);		SATURATE (val);		dest[j] = val;		mismatch ^= val;		bit_buf <<= 1;		NEEDBITS (bit_buf, bits, bit_ptr);		continue;	    } else {		/* end of block. I commented out this code because if we */		/* dont exit here we will still exit at the later test :) */		/* if (i >= 128) break;	*/	/* end of block */		/* escape code */		i += UBITS (bit_buf << 6, 6) - 64;		if (i >= 64)		    break;	/* illegal, check against buffer overflow */		j = scan[i];		DUMPBITS (bit_buf, bits, 12);		NEEDBITS (bit_buf, bits, bit_ptr);		val = (SBITS (bit_buf, 12) * quant_matrix[j]) / 16;		SATURATE (val);		dest[j] = val;		mismatch ^= val;		DUMPBITS (bit_buf, bits, 12);		NEEDBITS (bit_buf, bits, bit_ptr);		continue;	    }	} else if (bit_buf >= 0x02000000) {	    tab = DCT_B15_10 + (UBITS (bit_buf, 10) - 8);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else if (bit_buf >= 0x00800000) {	    tab = DCT_13 + (UBITS (bit_buf, 13) - 16);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else if (bit_buf >= 0x00200000) {	    tab = DCT_15 + (UBITS (bit_buf, 15) - 16);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else {	    tab = DCT_16 + UBITS (bit_buf, 16);	    bit_buf <<= 16;	    GETWORD (bit_buf, bits + 16, bit_ptr);	    i += tab->run;	    if (i < 64)		goto normal_code;	}	break;	/* illegal, check needed to avoid buffer overflow */    }    dest[63] ^= mismatch & 16;    DUMPBITS (bit_buf, bits, tab->len);	/* dump end of block code */    decoder->bitstream_buf = bit_buf;    decoder->bitstream_bits = bits;    decoder->bitstream_ptr = bit_ptr;}static int get_non_intra_block (mpeg2_decoder_t * const decoder,				const uint16_t * const quant_matrix){    int i;    int j;    int val;    const uint8_t * const scan = decoder->scan;    int mismatch;    const DCTtab * tab;    uint32_t bit_buf;    int bits;    const uint8_t * bit_ptr;    int16_t * const dest = decoder->DCTblock;    i = -1;    mismatch = -1;    bit_buf = decoder->bitstream_buf;    bits = decoder->bitstream_bits;    bit_ptr = decoder->bitstream_ptr;    NEEDBITS (bit_buf, bits, bit_ptr);    if (bit_buf >= 0x28000000) {	tab = DCT_B14DC_5 + (UBITS (bit_buf, 5) - 5);	goto entry_1;    } else	goto entry_2;    while (1) {	if (bit_buf >= 0x28000000) {	    tab = DCT_B14AC_5 + (UBITS (bit_buf, 5) - 5);	entry_1:	    i += tab->run;	    if (i >= 64)		break;	/* end of block */	normal_code:	    j = scan[i];	    bit_buf <<= tab->len;	    bits += tab->len + 1;	    val = ((2 * tab->level + 1) * quant_matrix[j]) >> 5;	    /* if (bitstream_get (1)) val = -val; */	    val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);	    SATURATE (val);	    dest[j] = val;	    mismatch ^= val;	    bit_buf <<= 1;	    NEEDBITS (bit_buf, bits, bit_ptr);	    continue;	}    entry_2:	if (bit_buf >= 0x04000000) {	    tab = DCT_B14_8 + (UBITS (bit_buf, 8) - 4);	    i += tab->run;	    if (i < 64)		goto normal_code;	    /* escape code */	    i += UBITS (bit_buf << 6, 6) - 64;	    if (i >= 64)		break;	/* illegal, check needed to avoid buffer overflow */	    j = scan[i];	    DUMPBITS (bit_buf, bits, 12);	    NEEDBITS (bit_buf, bits, bit_ptr);	    val = 2 * (SBITS (bit_buf, 12) + SBITS (bit_buf, 1)) + 1;	    val = (val * quant_matrix[j]) / 32;	    SATURATE (val);	    dest[j] = val;	    mismatch ^= val;	    DUMPBITS (bit_buf, bits, 12);	    NEEDBITS (bit_buf, bits, bit_ptr);	    continue;	} else if (bit_buf >= 0x02000000) {	    tab = DCT_B14_10 + (UBITS (bit_buf, 10) - 8);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else if (bit_buf >= 0x00800000) {	    tab = DCT_13 + (UBITS (bit_buf, 13) - 16);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else if (bit_buf >= 0x00200000) {	    tab = DCT_15 + (UBITS (bit_buf, 15) - 16);	    i += tab->run;	    if (i < 64)		goto normal_code;	} else {	    tab = DCT_16 + UBITS (bit_buf, 16);	    bit_buf <<= 16;	    GETWORD (bit_buf, bits + 16, bit_ptr);	    i += tab->run;	    if (i < 64)		goto normal_code;	}	break;	/* illegal, check needed to avoid buffer overflow */    }    dest[63] ^= mismatch & 16;    DUMPBITS (bit_buf, bits, tab->len);	/* dump end of block code */    decoder->bitstream_buf = bit_buf;    decoder->bitstream_bits = bits;    decoder->bitstream_ptr = bit_ptr;    return i;}static void get_mpeg1_intra_block (mpeg2_decoder_t * const decoder){    int i;    int j;    int val;    const uint8_t * const scan = decoder->scan;    const uint16_t * const quant_matrix = decoder->quantizer_matrix[0];    const DCTtab * tab;    uint32_t bit_buf;    int bits;    const uint8_t * bit_ptr;    int16_t * const dest = decoder->DCTblock;    i = 0;    bit_buf = decoder->bitstream_buf;    bits = decoder->bitstream_bits;    bit_ptr = decoder->bitstream_ptr;    NEEDBITS (bit_buf, bits, bit_ptr);    while (1) {	if (bit_buf >= 0x28000000) {	    tab = DCT_B14AC_5 + (UBITS (bit_buf, 5) - 5);	    i += tab->run;	    if (i >= 64)		break;	/* end of block */	normal_code:	    j = scan[i];	    bit_buf <<= tab->len;	    bits += tab->len + 1;	    val = (tab->level * quant_matrix[j]) >> 4;	    /* oddification */	    val = (val - 1) | 1;	    /* if (bitstream_get (1)) val = -val; */	    val = (val ^ SBITS (bit_buf, 1)) - SBITS (bit_buf, 1);	    SATURATE (val);	    dest[j] = val;	    bit_buf <<= 1;	    NEEDBITS (bit_buf, bits, bit_ptr);	    continue;	} else if (bit_buf >= 0x04000000) {	    tab = DCT_B14_8 + (UBITS (bit_buf, 8) - 4);	    i += tab->run;	    if (i < 64)		goto normal_code;	    /* escape code */	    i += UBITS (bit_buf << 6, 6) - 64;	    if (i >= 64)		break;	/* illegal, check needed to avoid buffer overflow */	    j = scan[i];	    DUMPBITS (bit_buf, bits, 12);	    NEEDBITS (bit_buf, bits, bit_ptr);	    val = SBITS (bit_buf, 8);	    if (! (val & 0x7f)) {		DUMPBITS (bit_buf, bits, 8);		val = UBITS (bit_buf, 8) + 2 * val;	    }	    val = (val * quant_matrix[j]) / 16;	    /* oddification */	    val = (val + ~SBITS (val, 1)) | 1;	    SATURATE (val);	    dest[j] = val;	    DUMPBITS (bit_buf, bits, 8);	    NEEDBITS (bit_buf, bits, bit_ptr);	    continue;	} else if (bit_buf >= 0x02000000) {	    tab = DCT_B14_10 + (UBITS (bit_buf, 10) - 8);	    i += tab->run;	    if (i < 64)		goto normal_code;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -