Mercurial > libavcodec.hg
comparison mpegvideo.c @ 1684:19e781619e3f libavcodec
stuffing to stay above min_bitrate
author | michael |
---|---|
date | Fri, 12 Dec 2003 21:30:47 +0000 |
parents | 7b810155650f |
children | cb09cf265a87 |
comparison
equal
deleted
inserted
replaced
1683:043b6d933fc6 | 1684:19e781619e3f |
---|---|
1713 int MPV_encode_picture(AVCodecContext *avctx, | 1713 int MPV_encode_picture(AVCodecContext *avctx, |
1714 unsigned char *buf, int buf_size, void *data) | 1714 unsigned char *buf, int buf_size, void *data) |
1715 { | 1715 { |
1716 MpegEncContext *s = avctx->priv_data; | 1716 MpegEncContext *s = avctx->priv_data; |
1717 AVFrame *pic_arg = data; | 1717 AVFrame *pic_arg = data; |
1718 int i; | 1718 int i, stuffing_count; |
1719 | 1719 |
1720 if(avctx->pix_fmt != PIX_FMT_YUV420P){ | 1720 if(avctx->pix_fmt != PIX_FMT_YUV420P){ |
1721 av_log(avctx, AV_LOG_ERROR, "this codec supports only YUV420P\n"); | 1721 av_log(avctx, AV_LOG_ERROR, "this codec supports only YUV420P\n"); |
1722 return -1; | 1722 return -1; |
1723 } | 1723 } |
1765 | 1765 |
1766 s->input_picture_number++; | 1766 s->input_picture_number++; |
1767 | 1767 |
1768 flush_put_bits(&s->pb); | 1768 flush_put_bits(&s->pb); |
1769 s->frame_bits = (pbBufPtr(&s->pb) - s->pb.buf) * 8; | 1769 s->frame_bits = (pbBufPtr(&s->pb) - s->pb.buf) * 8; |
1770 | |
1771 stuffing_count= ff_vbv_update(s, s->frame_bits); | |
1772 if(stuffing_count){ | |
1773 switch(s->codec_id){ | |
1774 case CODEC_ID_MPEG1VIDEO: | |
1775 case CODEC_ID_MPEG2VIDEO: | |
1776 while(stuffing_count--){ | |
1777 put_bits(&s->pb, 8, 0); | |
1778 } | |
1779 break; | |
1780 case CODEC_ID_MPEG4: | |
1781 put_bits(&s->pb, 16, 0); | |
1782 put_bits(&s->pb, 16, 0x1C3); | |
1783 stuffing_count -= 4; | |
1784 while(stuffing_count--){ | |
1785 put_bits(&s->pb, 8, 0xFF); | |
1786 } | |
1787 break; | |
1788 default: | |
1789 av_log(s->avctx, AV_LOG_ERROR, "vbv buffer overflow\n"); | |
1790 } | |
1791 flush_put_bits(&s->pb); | |
1792 s->frame_bits = (pbBufPtr(&s->pb) - s->pb.buf) * 8; | |
1793 } | |
1770 | 1794 |
1771 s->total_bits += s->frame_bits; | 1795 s->total_bits += s->frame_bits; |
1772 avctx->frame_bits = s->frame_bits; | 1796 avctx->frame_bits = s->frame_bits; |
1773 | 1797 |
1774 return pbBufPtr(&s->pb) - s->pb.buf; | 1798 return s->frame_bits/8; |
1775 } | 1799 } |
1776 | 1800 |
1777 #endif //CONFIG_ENCODERS | 1801 #endif //CONFIG_ENCODERS |
1778 | 1802 |
1779 static inline void gmc1_motion(MpegEncContext *s, | 1803 static inline void gmc1_motion(MpegEncContext *s, |