[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