[FFmpeg-devel] [PATCH 2/4] add ASS parser

Aurelien Jacobs aurel
Thu Jul 8 10:06:14 CEST 2010


On Thu, Jul 08, 2010 at 12:46:17AM +0200, Michael Niedermayer wrote:
> On Thu, Jul 08, 2010 at 12:22:33AM +0200, Aurelien Jacobs wrote:
> > On Wed, Jul 07, 2010 at 09:13:38PM +0200, Michael Niedermayer wrote:
> > > On Tue, Jul 06, 2010 at 10:54:54PM +0200, Aurelien Jacobs wrote:
> > > [...]
> > > > -static int read_packet(AVFormatContext *s, AVPacket *pkt)
> > > > +static int ass_parse(AVCodecParserContext *s, AVCodecContext *avctx,
> > > > +                     const uint8_t **poutbuf, int *poutbuf_size,
> > > > +                     const uint8_t *buf, int buf_size)
> > > >  {
> > > >      ASSContext *ass = s->priv_data;
> > > > +    if (!ass->event_buffer)
> > > > +        ass_read_header(s, avctx, buf, buf_size);
> > > >  
> > > > +    if (ass->event_index >= ass->event_count) {
> > > > +        *poutbuf = NULL;
> > > > +        *poutbuf_size = 0;
> > > > +        return buf_size;
> > > > +    }
> > > >  
> > > > +    *poutbuf = ass->event[ass->event_index++];
> > > > +    *poutbuf_size = strlen(*poutbuf);
> > > > +    s->pts = s->dts = get_pts(*poutbuf);
> > > > +    if (ass->event_index >= ass->event_count)
> > > > +        return buf_size;
> > > > +    return *poutbuf_size;
> > > >  }
> > > 
> > > i dont see how this would work with seeking?
> > 
> > I'm not sure what you have in mind. Actually, I don't really know how a
> > parser can handle seeking... And especially the ASS parser.
> > 
> > Just for the record, the ASS parser currently require to be feeded with
> > the *whole* ASS file/stream before it can start outputing the first
> > packet. This is due to this stupidity in the ASS spec allowing events to
> > be stored out of order.
> > 
> > The only alternative I could see to this, would be to do the reordering
> > at a higher level, in av_read_frame() for example. This would also allow
> > to properly interleave the ASS packets with the other streams, but this
> > seems slightly hackish...
> 
> what is the problem with reordering in the demuxer, as done currently?

The AVI demuxer don't do reordering currently... It only contains one
blob that contains some subtitles, that it passes as a single AVPacket
to the parser. The AVI demuxer don't even know if the subtitle packet
contains ASS or SRT...

Aurel



More information about the ffmpeg-devel mailing list