demux_asf: Fix play duration calculation error
[mplayer.git] / sub / dec_sub.c
blob6a6d1d77e549cf9f6f9bd8be877d7ac6cfe3f3bd
1 /*
2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #include <stdlib.h>
20 #include <stdbool.h>
21 #include <assert.h>
23 #include "config.h"
24 #include "libmpdemux/stheader.h"
25 #include "sd.h"
26 #include "dec_sub.h"
27 #include "options.h"
29 extern const struct sd_functions sd_ass;
31 void sub_init(struct sh_sub *sh, struct osd_state *osd)
33 struct MPOpts *opts = sh->opts;
35 #ifdef CONFIG_ASS
36 if (opts->ass_enabled && is_text_sub(sh->type))
37 sh->sd_driver = &sd_ass;
38 #endif
39 if (sh->sd_driver) {
40 sh->sd_driver->init(sh, osd);
41 sh->initialized = true;
42 sh->active = true;
46 void sub_decode(struct sh_sub *sh, struct osd_state *osd, void *data,
47 int data_len, double pts, double duration)
49 if (sh->active && sh->sd_driver->decode)
50 sh->sd_driver->decode(sh, osd, data, data_len, pts, duration);
53 void sub_reset(struct sh_sub *sh, struct osd_state *osd)
55 if (sh->active && sh->sd_driver->reset)
56 sh->sd_driver->reset(sh, osd);
59 void sub_switchoff(struct sh_sub *sh, struct osd_state *osd)
61 if (sh->active && sh->sd_driver->switch_off)
62 sh->sd_driver->switch_off(sh, osd);
63 sh->active = false;
66 void sub_uninit(struct sh_sub *sh)
68 assert (!sh->active);
69 if (sh->initialized && sh->sd_driver->uninit)
70 sh->sd_driver->uninit(sh);
71 sh->initialized = false;