[vlc-devel] [RFC PATCH] demux: subtitle: workaround out-of-order samples

Filip Roséen filip at atch.se
Thu Sep 20 14:59:19 CEST 2018

Hi Zhao,

On 2018-09-04 14:57, Zhao Zhili wrote:

> ---
> A test sample:
> https://drive.google.com/open?id=11kQP2OrbFyPnmbH9BPS__kJzbsXKmAQT
> I totally understand it may not worth to support such broken files. In
> this case, it looks like a small effort. The time takes by Fix() is
> less than 200 us on my PC with the sample.
>  modules/demux/subtitle.c | 3 +++
>  1 file changed, 3 insertions(+)
> diff --git a/modules/demux/subtitle.c b/modules/demux/subtitle.c
> index 9af186e..5e64ba4 100644
> --- a/modules/demux/subtitle.c
> +++ b/modules/demux/subtitle.c
> @@ -696,7 +696,10 @@ static int Open ( vlc_object_t *p_this )
>          fmt.subs.cc.i_reorder_depth = -1;
>      }
>      else
> +    {
> +        Fix( p_demux );
>          es_format_Init( &fmt, SPU_ES, VLC_CODEC_SUBT );
> +    }

I don't know how many samples there are in the wild where the order of
individual subtitles are not in increasing timestamp order, and
theoretically sorting the parsed entities is not a big thing (as you
have mentioned), but the location for this fix hurts my eyes a little.

As it is definitely possible to detect out-of-order subtitles during
parsing, *if* we want such an explicit invocation of `Fix` I vote that
one flags the necessity of that during parsing, and then invoke the
function later if that is needed.

Adding a call to `Fix` where your patch does also results in a rather
weird looking *if-else-tree* (given that a call to `Fix` already
exists in there).

While you are at it, you could also fix the issue of `p_sys->i_length`
being inaccurate, as it is populated with the timestamp of the last
subtitle, even if said input is later `Fix`ed (potentially resulting
in the last subtitle not at all being the last subtitle).

>      /* Stupid language detection in the filename */
>      char * psz_language = get_language_from_filename( p_demux->psz_filepath );

Best Regards,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20180920/7044ebcc/attachment.html>

More information about the vlc-devel mailing list