From 22ddd60bc247c7487b4e91416d18da712415630a Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 26 Aug 2003 20:14:28 +0000 Subject: fixing CODEC_FLAG_GLOBAL_HEADER Originally committed as revision 2167 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/h263.c | 22 +++++++++++++++------- libavcodec/mpegvideo.c | 7 ++++++- 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/h263.c b/libavcodec/h263.c index 46ed231ffd..c2659d6495 100644 --- a/libavcodec/h263.c +++ b/libavcodec/h263.c @@ -69,6 +69,8 @@ static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr); #ifdef CONFIG_ENCODERS static void mpeg4_inv_pred_ac(MpegEncContext * s, DCTELEM *block, int n, int dir); +static void mpeg4_encode_visual_object_header(MpegEncContext * s); +static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number); #endif //CONFIG_ENCODERS static void mpeg4_decode_sprite_trajectory(MpegEncContext * s); static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr, int *dir_ptr); @@ -1579,6 +1581,19 @@ void h263_encode_init(MpegEncContext *s) s->luma_dc_vlc_length= uni_DCtab_lum_len; s->chroma_dc_vlc_length= uni_DCtab_chrom_len; s->ac_esc_length= 7+2+1+6+1+12+1; + + if(s->flags & CODEC_FLAG_GLOBAL_HEADER){ + s->avctx->extradata= av_malloc(1024); + init_put_bits(&s->pb, s->avctx->extradata, 1024, NULL, NULL); + + mpeg4_encode_visual_object_header(s); + mpeg4_encode_vol_header(s, 0, 0); + +// ff_mpeg4_stuffing(&s->pb); ? + flush_put_bits(&s->pb); + s->avctx->extradata_size= (get_bit_count(&s->pb)+7)>>3; + } + break; case CODEC_ID_H263P: s->fcode_tab= umv_fcode_tab; @@ -1715,13 +1730,6 @@ void ff_mpeg4_stuffing(PutBitContext * pbc) void ff_set_mpeg4_time(MpegEncContext * s, int picture_number){ int time_div, time_mod; - if(s->pict_type==I_TYPE){ //we will encode a vol header - int dummy; - av_reduce(&s->time_increment_resolution, &dummy, s->avctx->frame_rate, s->avctx->frame_rate_base, (1<<16)-1); - - s->time_increment_bits = av_log2(s->time_increment_resolution - 1) + 1; - } - if(s->current_picture.pts) s->time= (s->current_picture.pts*s->time_increment_resolution + 500*1000)/(1000*1000); else diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index f675d1cd53..ffd71a69be 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -549,7 +549,7 @@ void MPV_common_end(MpegEncContext *s) int MPV_encode_init(AVCodecContext *avctx) { MpegEncContext *s = avctx->priv_data; - int i; + int i, dummy; int chroma_h_shift, chroma_v_shift; avctx->pix_fmt = PIX_FMT_YUV420P; // FIXME @@ -646,6 +646,9 @@ int MPV_encode_init(AVCodecContext *avctx) avcodec_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift, &chroma_v_shift); + av_reduce(&s->time_increment_resolution, &dummy, s->avctx->frame_rate, s->avctx->frame_rate_base, (1<<16)-1); + s->time_increment_bits = av_log2(s->time_increment_resolution - 1) + 1; + switch(avctx->codec->id) { case CODEC_ID_MPEG1VIDEO: s->out_format = FMT_MPEG1; @@ -872,6 +875,8 @@ int MPV_encode_end(AVCodecContext *avctx) MPV_common_end(s); if (s->out_format == FMT_MJPEG) mjpeg_close(s); + + av_freep(&avctx->extradata); return 0; } -- cgit v1.2.3