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 }