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

Aurelien Jacobs aurel
Thu Jul 8 00:22:33 CEST 2010


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...

Aurel



More information about the ffmpeg-devel mailing list