[FFmpeg-devel] [RFC] AST subtitles
Clément Bœsch
ubitux at gmail.com
Sun Nov 25 19:49:00 CET 2012
On Sun, Nov 25, 2012 at 07:28:35PM +0100, Michael Niedermayer wrote:
> On Sat, Nov 24, 2012 at 10:08:33PM +0100, Clément Bœsch wrote:
> > Hi there,
> >
> > I wrote a new prototype for storing text subtitles instead of a custom ASS
> > line like we currently do. It's trying to be flexible enough to be able to
> > deal with any kind of text subtitles markups, while being as simple as
> > possible for our users, but also for decoders and encoders.
> >
> > Of course, we will have to deal with retro compat. The simpler I found
> > here was to introduce a new AVSubtitleType (SUBTITLE_AST), and we would
> > use a new field AVSubtitleRect->ast instead of AVSubtitleRect->ass.
> >
> > I used "AST" initially, but it's actually not an AST, so far it's just
> > kind of a list, feel free to propose a better random name; I took this
> > name because it expresses the fact that it's an arbitrary structure
> > layout, and not a data buffer like currently.
> >
> > Anyway, here are the basic structures:
> >
> > typedef struct AVSubtitleASTChunk {
>
> > int type; ///< one of the AVSUBTITLE_AST_SETTING_TYPE_*
>
> enum
>
I didn't know how to name the enum :(
>
> > int reset; /**< this chunk restores the setting to the default
> > value (or disable the previous one in nested
> > mode) */
>
> what does "previous" refer to here ?
> it could be previous in the list, previous as in from the last packet
> or possibly something else
It's the previous chunk, see the SubRip decoding example I gave below;
it's all about nested/flat.
>
>
> > union {
> > char *s; ///< must be a av_malloc'ed string if string type
>
> > double d;
> > int i;
> > int64_t i64;
> > uint32_t u32;
>
> isnt double or double+int64 enough for these ?
>
It should yes, but for a semantic usage it's pretty handy to have
different versions. It doesn't take more memory, so is there any problem
doing this?
> also i was wondering if having a pointer to the string that was
> parsed could be usefull or allow some simplifications.
> What i had in mind here would be along the lines of parsing a
> marked up string and point back into the string where text is needed
> from it.
> If for nothing else such a additional field could help debuging
Why not, but it will require decoders to provide the information in the chunk,
it's likely it will get a bit laborious for them; here is an example on how a
decoder queue chunks:
} else if (!buffer[1] && strchr("bisu", av_tolower(buffer[0]))) {
AVSubtitleASTChunk tag = {.reset = tag_close, .i = !tag_close};
switch (av_tolower(buffer[0])) {
case 'b': tag.type = AVSUBTITLE_AST_CHUNK_BOLD; break;
case 'i': tag.type = AVSUBTITLE_AST_CHUNK_ITALIC; break;
case 's': tag.type = AVSUBTITLE_AST_CHUNK_STRIKEOUT; break;
case 'u': tag.type = AVSUBTITLE_AST_CHUNK_UNDERLINE; break;
}
av_sub_ast_add_chunk(sub, tag);
}
What you would propose instead is a bunch of chunks associated with position
range in the original event instead of a stack of successive chunks?
[...]
Anyway, note that before this is ready we have to deal with various
issues. I'll eventually make a new thread about them if people care.
--
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20121125/83e0f136/attachment.asc>
More information about the ffmpeg-devel
mailing list