summaryrefslogtreecommitdiffstats
path: root/sub/sub.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-04-29 01:13:22 +0200
committerwm4 <wm4@nowhere>2013-05-30 22:40:32 +0200
commit26842806431a1d21e3c3c430994cd6901e36a08e (patch)
treeef0c302e3a60cd7c20e98787de1ccef9ed7ee32b /sub/sub.c
parent724f576211c1ea07e0423ac8a9c0e4f273c452fb (diff)
downloadmpv-26842806431a1d21e3c3c430994cd6901e36a08e.tar.bz2
mpv-26842806431a1d21e3c3c430994cd6901e36a08e.tar.xz
sub: add sd_spu.c to wrap spudec, cleanup mplayer.c
This unifies the subtitle rendering path. Now all subtitle rendering goes through sd_ass.c/sd_lavc.c/sd_spu.c. Before that commit, the spudec.h functions were used directly in mplayer.c, which introduced many special cases. Add sd_spu.c, which is just a small wrapper connecting the new subtitle render API with the dusty old vobsub decoder in spudec.c. One detail that changes is that we always pass the palette as extra data, instead of passing the libdvdread palette as pointer to spudec directly. This is a bit roundabout, but actually makes the code simpler and more elegant: the difference between DVD and non-DVD dvdsubs is reduced. Ideally, we would just delete spudec.c and use libavcodec's DVD sub decoder. However, DVD playback with demux_mpg produces packets incompatible to lavc. There are incompatibilities the other way around as well: packets from libavformat's vobsub demuxer are incompatible to spudec.c. So we define a new subtitle codec name for demux_mpg subs, "dvd_subtitle_mpg", which only sd_spu can decode. There is actually code in spudec.c to "assemble" fragments into complete packets, but using the whole spudec.c is easier than trying to move this code into demux_mpg to fix subtitle packets. As additional complication, Libav 9.x can't decode DVD subs correctly, so use sd_spu in that case as well.
Diffstat (limited to 'sub/sub.c')
-rw-r--r--sub/sub.c16
1 files changed, 1 insertions, 15 deletions
diff --git a/sub/sub.c b/sub/sub.c
index 4e5420627c..d26ce17551 100644
--- a/sub/sub.c
+++ b/sub/sub.c
@@ -37,7 +37,6 @@
#include "dec_sub.h"
#include "img_convert.h"
#include "draw_bmp.h"
-#include "spudec.h"
#include "subreader.h"
#include "video/mp_image.h"
#include "video/mp_image_pool.h"
@@ -48,9 +47,6 @@ int sub_visibility=1;
float sub_delay = 0;
float sub_fps = 0;
-void *vo_spudec=NULL;
-void *vo_vobsub=NULL;
-
static const struct osd_style_opts osd_style_opts_def = {
.font = "Sans",
.font_size = 45,
@@ -114,7 +110,6 @@ struct osd_state *osd_create(struct MPOpts *opts, struct ass_library *asslib)
osd->objs[n] = obj;
}
- osd->objs[OSDTYPE_SPU]->is_sub = true; // spudec.c
osd->objs[OSDTYPE_SUB]->is_sub = true; // dec_sub.c
osd->objs[OSDTYPE_SUBTEXT]->is_sub = true; // osd_libass.c
@@ -155,12 +150,6 @@ void osd_set_sub(struct osd_state *osd, const char *text)
vo_osd_changed(OSDTYPE_SUBTEXT);
}
-static bool spu_visible(struct osd_state *osd, struct osd_object *obj)
-{
- struct MPOpts *opts = osd->opts;
- return opts->sub_visibility && vo_spudec && spudec_visible(vo_spudec);
-}
-
static void render_object(struct osd_state *osd, struct osd_object *obj,
struct mp_osd_res res, double video_pts,
const bool sub_formats[SUBBITMAP_COUNT],
@@ -179,10 +168,7 @@ static void render_object(struct osd_state *osd, struct osd_object *obj,
obj->force_redraw = true;
obj->vo_res = res;
- if (obj->type == OSDTYPE_SPU) {
- if (spu_visible(osd, obj))
- spudec_get_indexed(vo_spudec, &obj->vo_res, out_imgs);
- } else if (obj->type == OSDTYPE_SUB) {
+ if (obj->type == OSDTYPE_SUB) {
if (osd->render_bitmap_subs) {
double sub_pts = video_pts;
if (sub_pts != MP_NOPTS_VALUE)