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,