[FFmpeg-devel] [RFC] General design for subtitles demuxers

JULIAN GARDNER joolzg at btinternet.com
Wed Jun 13 09:20:48 CEST 2012





----- Original Message -----
> From: Clément Bœsch <ubitux at gmail.com>
> To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
> Cc: 
> Sent: Wednesday, 13 June 2012, 9:02
> Subject: Re: [FFmpeg-devel] [RFC] General design for subtitles demuxers
> 
> On Wed, Jun 13, 2012 at 08:53:27AM +0200, Nicolas George wrote:
>>  Le sextidi 26 prairial, an CCXX, Clément Bœsch a écrit :
>>  > Yet another subtitles thread, addressing this time several issues in a 
> row.
>>  > 
>>  > All the text subtitles formats are small files where it is interesting 
> to
>>  > consider them as such, and not as a stream. In practice I propose the
>>  > following:
>>  > 
>>  > 1) Parse the whole file
>>  > 
>>  >    Just like lavf/assdec or lavf/jacosubdec, the whole file should be 
> parsed on
>>  >    the read_header() callback.
>>  > 
>>  >    Why is it done like this? Because in "format" oriented 
> ("ASS"), the events
>>  >    can be in any order, require looking ahead, or preprocessing the 
> file; when
>>  >    they are muxed ("SSA") the timeline must makes sense, and 
> it doesn't matter
>>  >    since this demuxing belongs to the video demuxer.
>>  > 
>>  >    JACOsub also has that issue, but SubRip as well (remember the event
>>  >    numbers?), and actually all the others (see below).
>>  > 
>>  > 2) Set missing durations
>>  > 
>>  >    Since we now have the complete list of events in a list, it's 
> easy to work
>>  >    on them, and we can just set the packets duration when missing that
>>  >    information: this actually solves in a very simple way the
>>  >    last-to-next-subtitle feature I mentioned several times.
>>  > 
>>  > 3) Sort the events
>>  > 
>>  >    We should then export the sorting of all these subtitles (PTS 
> based) raw
>> 
>> 
>>  Until now, I agree at 100%.
>> 
> 
> Great. I'll see what I can do on this ASAP then.
> 
>>  >    events from lavf/assdec.c.
>> 
>>  This part I am not sure I understand. Do you mean that the demuxer is
>>  supposed to translate into ASS?
>> 
> 
> I'm just refering here to:
> 
>     static int event_cmp(uint8_t **a, uint8_t **b)
>     {
>         return get_pts(*a) - get_pts(*b);
>     }
> 
>     [...]
> 
>     qsort(ass->event, ass->event_count, sizeof(*ass->event), 
> (void*)event_cmp);
> 
>>  >    We should take out read_seek2() from lavf/assdec.
>> 
>>  Looks reasonable.
>> 
> 
> We just need to find a better way of storing the events & pts; maybe to
> something simple like
> 
>     typedef struct {
>         int64_t pts;
>         uint8_t *data;
>     } FFSubtitle;
> 
> We will BTW be able to have a generic read_packet() as well, and greatly
> simplify again all this stuff.
> 

Dont we already have that information in the AVSubtitle structure, this is what i used, i created a FIFO of pointers to structs as all subtitles are alreardy read in fully, which is what caused me problems in getting the conversion to dvb subtitles.

joolz


More information about the ffmpeg-devel mailing list