[FFmpeg-devel] [PATCH 7/8] add seeking support in ASS demuxer

Aurelien Jacobs aurel
Fri Jul 30 00:10:35 CEST 2010


On Thu, Jul 29, 2010 at 04:02:49AM +0200, Michael Niedermayer wrote:
> On Wed, Jul 21, 2010 at 11:53:22AM +0200, Aurelien Jacobs wrote:
> > 
> > ---
> >  libavformat/assdec.c |   37 ++++++++++++++++++++++++++++++++++++-
> >  1 files changed, 36 insertions(+), 1 deletions(-)
> 
> i realize we have noone in MAINTAINERS for this so i guess i have to ...

Maybe you should add yourself ?
Or if you don't want to, I can maintain it.

> > diff --git a/libavformat/assdec.c b/libavformat/assdec.c
> > index ff1009c..a87f84b 100644
> > --- a/libavformat/assdec.c
> > +++ b/libavformat/assdec.c
> > @@ -162,6 +162,41 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
> >      return 0;
> >  }
> >  
> > +static int read_seek2(AVFormatContext *s, int stream_index,
> > +                      int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
> > +{
> > +    ASSContext *ass = s->priv_data;
> > +
> > +    if (flags & AVSEEK_FLAG_BYTE) {
> > +        return AVERROR_NOTSUPP;
> > +    } else if (flags & AVSEEK_FLAG_FRAME) {
> > +        if (ts < 0 || ts >= ass->event_count)
> > +            return AVERROR(ERANGE);
> > +        ass->event_index = ts;
> > +    } else {
> > +        int i, idx = -1;
> > +        int64_t min_ts_diff = INT64_MAX;
> > +        if (stream_index == -1) {
> > +            AVRational time_base = s->streams[0]->time_base;
> > +                ts = av_rescale_q(    ts, AV_TIME_BASE_Q, time_base);
> 
> > +            min_ts = av_rescale_q(min_ts, AV_TIME_BASE_Q, time_base);
> > +            max_ts = av_rescale_q(max_ts, AV_TIME_BASE_Q, time_base);
> 
> these strictly need to round up and down so the min/max is strictly correct

OK. Fixed.

> > +        }
> > +        for (i=0; i<ass->event_count; i++) {
> 
> if the events are sorted then a search either starting from the previous
> point and going both ways or a binary search could be done and would be
> a bit faster for really huge subtitle files.
> this doesnt need to be done before commiting this, its just an idea/note

I thought about doing a binary search too. But I also thought it was not
worth the complexity for now. It can be improved later.
For now, I've added a comment to not forget.

> ok otherwise if tested

Applied.

Aurel



More information about the ffmpeg-devel mailing list