[vlc-devel] commit: Workaround buggy flv files (#2590). (Laurent Aimar )

Derk-Jan Hartman hartman at videolan.org
Fri Jun 19 01:25:32 CEST 2009


On 19 jun 2009, at 01:09, git version control wrote:
> vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Fri Jun  
> 19 01:02:04 2009 +0200| [d1bf1bcfba6af6ac76250d7953afc1e1b894b5f7] |  
> committer: Laurent Aimar
>
> Workaround buggy flv files (#2590).
>
> It seems that (a lot of?) flv files does not correctly set PTS,
> so ignore them, with luck the decoder (avcodec) will recreate
> them.
> It might break some valid files, so report any regression.
>
> (It needs the AVCodecContext::ticks_per_frame change).


This one does need some considerate amount of testing. I invite  
everyone to throw all his flv files and streams at it.

DJ



>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d1bf1bcfba6af6ac76250d7953afc1e1b894b5f7
> ---
>
> modules/demux/avformat/demux.c |   21 +++++++++++++++------
> 1 files changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/modules/demux/avformat/demux.c b/modules/demux/avformat/ 
> demux.c
> index 9bf5684..6320621 100644
> --- a/modules/demux/avformat/demux.c
> +++ b/modules/demux/avformat/demux.c
> @@ -438,6 +438,8 @@ static int Demux( demux_t *p_demux )
>         av_free_packet( &pkt );
>         return 1;
>     }
> +    const AVStream *p_stream = p_sys->ic->streams[pkt.stream_index];
> +
>     if( ( p_frame = block_New( p_demux, pkt.size ) ) == NULL )
>     {
>         return 0;
> @@ -453,17 +455,24 @@ static int Demux( demux_t *p_demux )
>
>     p_frame->i_dts = ( pkt.dts == (int64_t)AV_NOPTS_VALUE ) ?
>         0 : (pkt.dts) * 1000000 *
> -        p_sys->ic->streams[pkt.stream_index]->time_base.num /
> -        p_sys->ic->streams[pkt.stream_index]->time_base.den -  
> i_start_time;
> +        p_stream->time_base.num /
> +        p_stream->time_base.den - i_start_time;
>     p_frame->i_pts = ( pkt.pts == (int64_t)AV_NOPTS_VALUE ) ?
>         0 : (pkt.pts) * 1000000 *
> -        p_sys->ic->streams[pkt.stream_index]->time_base.num /
> -        p_sys->ic->streams[pkt.stream_index]->time_base.den -  
> i_start_time;
> +        p_stream->time_base.num /
> +        p_stream->time_base.den - i_start_time;
>     if( pkt.duration > 0 )
>         p_frame->i_length = pkt.duration * 1000000 *
> -            p_sys->ic->streams[pkt.stream_index]->time_base.num /
> -            p_sys->ic->streams[pkt.stream_index]->time_base.den -  
> i_start_time;
> +            p_stream->time_base.num /
> +            p_stream->time_base.den - i_start_time;
>
> +    if( pkt.dts != AV_NOPTS_VALUE && pkt.dts == pkt.pts &&
> +        p_stream->codec->codec_type == CODEC_TYPE_VIDEO )
> +    {
> +        /* Add here notoriously bugged file formats/samples  
> regarding PTS */
> +        if( !strcmp( p_sys->fmt->name, "flv" ) )
> +            p_frame->i_pts = 0;
> +    }
> #ifdef AVFORMAT_DEBUG
>     msg_Dbg( p_demux, "tk[%d] dts=%"PRId64" pts=%"PRId64,
>              pkt.stream_index, p_frame->i_dts, p_frame->i_pts );
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel
>




More information about the vlc-devel mailing list