Mercurial > libavcodec.hg
comparison h263.c @ 1354:1f89adb69349 libavcodec
flv cleanup / simplify
author | michaelni |
---|---|
date | Thu, 10 Jul 2003 00:15:27 +0000 |
parents | cfc80b3a4ada |
children | 9e31b6bfb1a2 |
comparison
equal
deleted
inserted
replaced
1353:cfc80b3a4ada | 1354:1f89adb69349 |
---|---|
150 } | 150 } |
151 | 151 |
152 s->aspect_ratio_info= FF_ASPECT_EXTENDED; | 152 s->aspect_ratio_info= FF_ASPECT_EXTENDED; |
153 } | 153 } |
154 | 154 |
155 void h263_encode_picture_header(MpegEncContext * s, int picture_number) | 155 void ff_flv_encode_picture_header(MpegEncContext * s, int picture_number) |
156 { | 156 { |
157 int format; | 157 int format; |
158 | 158 |
159 align_put_bits(&s->pb); | 159 align_put_bits(&s->pb); |
160 | 160 |
161 if (s->h263_flv) { | |
162 put_bits(&s->pb, 17, 1); | 161 put_bits(&s->pb, 17, 1); |
163 put_bits(&s->pb, 5, (s->h263_flv-1)); /* 0: h263 escape codes 1: 11-bit escape codes */ | 162 put_bits(&s->pb, 5, (s->h263_flv-1)); /* 0: h263 escape codes 1: 11-bit escape codes */ |
164 put_bits(&s->pb, 8, (((int64_t)s->picture_number * 30 * s->avctx->frame_rate_base) / | 163 put_bits(&s->pb, 8, (((int64_t)s->picture_number * 30 * s->avctx->frame_rate_base) / |
165 s->avctx->frame_rate) & 0xff); /* TemporalReference */ | 164 s->avctx->frame_rate) & 0xff); /* TemporalReference */ |
166 if (s->width == 352 && s->height == 288) | 165 if (s->width == 352 && s->height == 288) |
195 s->c_dc_scale_table= h263_aic_dc_scale_table; | 194 s->c_dc_scale_table= h263_aic_dc_scale_table; |
196 }else{ | 195 }else{ |
197 s->y_dc_scale_table= | 196 s->y_dc_scale_table= |
198 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; | 197 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; |
199 } | 198 } |
200 return; | 199 } |
201 } | 200 |
201 void h263_encode_picture_header(MpegEncContext * s, int picture_number) | |
202 { | |
203 int format; | |
204 | |
205 align_put_bits(&s->pb); | |
202 | 206 |
203 /* Update the pointer to last GOB */ | 207 /* Update the pointer to last GOB */ |
204 s->ptr_lastgob = pbBufPtr(&s->pb); | 208 s->ptr_lastgob = pbBufPtr(&s->pb); |
205 s->gob_number = 0; | 209 s->gob_number = 0; |
206 | 210 |
1009 } | 1013 } |
1010 } | 1014 } |
1011 | 1015 |
1012 for(i=0; i<6; i++) { | 1016 for(i=0; i<6; i++) { |
1013 /* encode each block */ | 1017 /* encode each block */ |
1014 if (s->h263_flv > 1) | 1018 h263_encode_block(s, block[i], i); |
1015 h263_flv_encode_block(s, block[i], i); | |
1016 else | |
1017 h263_encode_block(s, block[i], i); | |
1018 | 1019 |
1019 /* Update INTRADC for decoding */ | 1020 /* Update INTRADC for decoding */ |
1020 if (s->h263_aic && s->mb_intra) { | 1021 if (s->h263_aic && s->mb_intra) { |
1021 block[i][0] = rec_intradc[i]; | 1022 block[i][0] = rec_intradc[i]; |
1022 | 1023 |
1611 level = -level; | 1612 level = -level; |
1612 } | 1613 } |
1613 code = get_rl_index(rl, last, run, level); | 1614 code = get_rl_index(rl, last, run, level); |
1614 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]); | 1615 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]); |
1615 if (code == rl->n) { | 1616 if (code == rl->n) { |
1617 if(s->h263_flv <= 1){ | |
1616 put_bits(&s->pb, 1, last); | 1618 put_bits(&s->pb, 1, last); |
1617 put_bits(&s->pb, 6, run); | 1619 put_bits(&s->pb, 6, run); |
1618 | 1620 |
1619 assert(slevel != 0); | 1621 assert(slevel != 0); |
1620 | 1622 |
1623 else{ | 1625 else{ |
1624 put_bits(&s->pb, 8, 128); | 1626 put_bits(&s->pb, 8, 128); |
1625 put_bits(&s->pb, 5, slevel & 0x1f); | 1627 put_bits(&s->pb, 5, slevel & 0x1f); |
1626 put_bits(&s->pb, 6, (slevel>>5)&0x3f); | 1628 put_bits(&s->pb, 6, (slevel>>5)&0x3f); |
1627 } | 1629 } |
1628 } else { | 1630 }else{ |
1629 put_bits(&s->pb, 1, sign); | 1631 if(slevel < 64 && slevel > -64) { |
1630 } | 1632 /* 7-bit level */ |
1631 last_non_zero = i; | 1633 put_bits(&s->pb, 1, 0); |
1632 } | 1634 put_bits(&s->pb, 1, last); |
1633 } | 1635 put_bits(&s->pb, 6, run); |
1634 } | 1636 |
1635 | 1637 put_bits(&s->pb, 7, slevel & 0x7f); |
1636 /** | 1638 } else { |
1637 * encodes a 8x8 block. | 1639 /* 11-bit level */ |
1638 * @param block the 8x8 block | 1640 put_bits(&s->pb, 1, 1); |
1639 * @param n block index (0-3 are luma, 4-5 are chroma) | 1641 put_bits(&s->pb, 1, last); |
1640 */ | 1642 put_bits(&s->pb, 6, run); |
1641 static void h263_flv_encode_block(MpegEncContext * s, DCTELEM * block, int n) | 1643 |
1642 { | 1644 put_bits(&s->pb, 11, slevel & 0x7ff); |
1643 int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code; | 1645 } |
1644 RLTable *rl; | 1646 } |
1645 | |
1646 rl = &rl_inter; | |
1647 if (s->mb_intra && !s->h263_aic) { | |
1648 /* DC coef */ | |
1649 level = block[0]; | |
1650 /* 255 cannot be represented, so we clamp */ | |
1651 if (level > 254) { | |
1652 level = 254; | |
1653 block[0] = 254; | |
1654 } | |
1655 /* 0 cannot be represented also */ | |
1656 else if (level < 1) { | |
1657 level = 1; | |
1658 block[0] = 1; | |
1659 } | |
1660 if (level == 128) //FIXME check rv10 | |
1661 put_bits(&s->pb, 8, 0xff); | |
1662 else | |
1663 put_bits(&s->pb, 8, level & 0xff); | |
1664 i = 1; | |
1665 } else { | |
1666 i = 0; | |
1667 if (s->h263_aic && s->mb_intra) | |
1668 rl = &rl_intra_aic; | |
1669 } | |
1670 | |
1671 /* AC coefs */ | |
1672 last_index = s->block_last_index[n]; | |
1673 last_non_zero = i - 1; | |
1674 for (; i <= last_index; i++) { | |
1675 j = s->intra_scantable.permutated[i]; | |
1676 level = block[j]; | |
1677 if (level) { | |
1678 run = i - last_non_zero - 1; | |
1679 last = (i == last_index); | |
1680 sign = 0; | |
1681 slevel = level; | |
1682 if (level < 0) { | |
1683 sign = 1; | |
1684 level = -level; | |
1685 } | |
1686 code = get_rl_index(rl, last, run, level); | |
1687 put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]); | |
1688 if (code == rl->n) { | |
1689 assert(slevel != 0); | |
1690 if(slevel < 64 && slevel > -64) { | |
1691 /* 7-bit level */ | |
1692 put_bits(&s->pb, 1, 0); | |
1693 put_bits(&s->pb, 1, last); | |
1694 put_bits(&s->pb, 6, run); | |
1695 | |
1696 put_bits(&s->pb, 7, slevel & 0x7f); | |
1697 } else { | |
1698 /* 11-bit level */ | |
1699 put_bits(&s->pb, 1, 1); | |
1700 put_bits(&s->pb, 1, last); | |
1701 put_bits(&s->pb, 6, run); | |
1702 | |
1703 put_bits(&s->pb, 11, slevel & 0x7ff); | |
1704 } | |
1705 } else { | 1647 } else { |
1706 put_bits(&s->pb, 1, sign); | 1648 put_bits(&s->pb, 1, sign); |
1707 } | 1649 } |
1708 last_non_zero = i; | 1650 last_non_zero = i; |
1709 } | 1651 } |