[Ffmpeg-devel] BUG - buffer overflow

Frank DiPrete fdiprete
Thu Nov 10 01:17:06 CET 2005


On Wed, 2005-11-09 at 16:39 +0000, Wolfram Gloger wrote:
> Hi,
> 
> [mpeg -> mpeg transcoding]
> 
> > After running for a long time (2G original file) at about the 50% mark I
> > get a ton of these errors:
> > 
> > [dvd @ 0x82adfc0]buffer underflow
> 
> I am sure there is a bug in the mpeg muxer but I don't know whether it
> is the same problem you are seeing.  Please try the patch below.  I
> noticed this problem only with subtitle substreams with a very low
> packets/second rate.
> 
> Regards,
> Wolfram.
> 
> diff -ur ffmpeg/libavformat/mpeg.c ffmpeg-wg/libavformat/mpeg.c
> --- ffmpeg/libavformat/mpeg.c	Fri Sep 23 19:54:33 2005
> +++ ffmpeg-wg/libavformat/mpeg.c	Tue Oct 18 10:47:48 2005
> @@ -30,7 +30,7 @@
>      int64_t dts;
>      int size;
>      int unwritten_size;
> -    int flags;
> +  //int flags;
>      struct PacketDesc *next;
>  } PacketDesc;
>  
> @@ -1181,7 +1190,8 @@
>      AVStream *st = ctx->streams[stream_index];
>      StreamInfo *stream = st->priv_data;
>      int64_t pts, dts;
> -    PacketDesc *pkt_desc;
> +    PacketDesc *pkt_desc, *dec_next;
> +    int requeue = 0;
>      const int preload= av_rescale(ctx->preload, 90000, AV_TIME_BASE);
>      const int is_iframe = st->codec->codec_type == CODEC_TYPE_VIDEO && (pkt->flags & PKT_FLAG_KEY);
>      
> @@ -1191,18 +1201,26 @@
>      if(pts != AV_NOPTS_VALUE) pts += preload;
>      if(dts != AV_NOPTS_VALUE) dts += preload;
>  
> -//av_log(ctx, AV_LOG_DEBUG, "dts:%f pts:%f flags:%d stream:%d nopts:%d\n", dts/90000.0, pts/90000.0, pkt->flags, pkt->stream_index, pts != AV_NOPTS_VALUE);
> -    if (!stream->premux_packet)
> +//av_log(ctx, AV_LOG_DEBUG, "dts:%f pts:%f flags:%d i=%d size:%d premux=%p\n", dts/90000.0, pts/90000.0, pkt->flags, pkt->stream_index, size, stream->premux_packet);
> +    if (!stream->premux_packet) {
>          stream->next_packet = &stream->premux_packet;
> +        requeue= 1;
> +    }
>      *stream->next_packet=
> -    pkt_desc= av_mallocz(sizeof(PacketDesc));
> +    pkt_desc= av_malloc(sizeof(PacketDesc));
>      pkt_desc->pts= pts;
>      pkt_desc->dts= dts;
>      pkt_desc->unwritten_size=
>      pkt_desc->size= size;
> +    pkt_desc->next= NULL;
>      if(!stream->predecode_packet)
>          stream->predecode_packet= pkt_desc;
> +    else if (requeue) {
> +        for (dec_next= stream->predecode_packet; dec_next->next; dec_next= dec_next->next);
> +        dec_next->next = pkt_desc;
> +    }
> +        
>      stream->next_packet= &pkt_desc->next;
>  
>      fifo_realloc(&stream->fifo, fifo_size(&stream->fifo, NULL) + size + 1);
>  
> 

Thanks for trying - unfortunately the patch made the problem worse.
many many more of the same errors - this time right away.

btw, after running the command, the mpg gets split into pieces my mpgtx.



> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/ffmpeg-devel





More information about the ffmpeg-devel mailing list