summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2012-08-31 15:42:30 +0300
committerwm4 <wm4@nowhere>2012-09-18 21:07:30 +0200
commit1959ba006ce1a4591f3dcd5093901993e3fdda5f (patch)
tree93fcd19aa07e47cddb875b1ca714ae69a453c8e8 /libmpcodecs
parentae9c3d530c55e86eb54d8cf23a23c5ce6301ec6e (diff)
downloadmpv-1959ba006ce1a4591f3dcd5093901993e3fdda5f.tar.bz2
mpv-1959ba006ce1a4591f3dcd5093901993e3fdda5f.tar.xz
subs, vo_vdpau: support RGBA color for PGS subtitles
Support passing bitmap subtitles to VOs in full RGBA color, and implement this for libavcodec-decoded subtitle formats on decoding side and vo_vdpau on display side. Currently this is enabled for PGS (blu-ray) and DVB subtitles. VDPAU seems to have sampling issues similar to known GL ones when drawing a sub-rectangle from a larger texture with scaling, where adjacent pixels outside the specified source rectangle affect the result. As the bitmap subtitles may be scaled, add padding support to the bitmap packer code. In principle, this could be used for colored DVD subtitles too. However, the libavcodec DVD decoder lacks parts of the resolution and palette handling that are present in spudec.c. Conflicts: libvo/vo_gl.c sub/dec_sub.h sub/sd_lavc.c
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/vf_ass.c1
-rw-r--r--libmpcodecs/vf_vo.c1
-rw-r--r--libmpcodecs/vfcap.h1
3 files changed, 3 insertions, 0 deletions
diff --git a/libmpcodecs/vf_ass.c b/libmpcodecs/vf_ass.c
index ad4671fe57..f0b2e6ab77 100644
--- a/libmpcodecs/vf_ass.c
+++ b/libmpcodecs/vf_ass.c
@@ -364,6 +364,7 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts)
osd->normal_scale = vf->priv->aspect_correction;
osd->vsfilter_scale = 1;
osd->sub_pts = pts - osd->sub_offset;
+ osd->support_rgba = false;
struct sub_bitmaps b;
sub_get_bitmaps(osd, &b);
images = b.imgs;
diff --git a/libmpcodecs/vf_vo.c b/libmpcodecs/vf_vo.c
index 3aec40cd15..862cd63492 100644
--- a/libmpcodecs/vf_vo.c
+++ b/libmpcodecs/vf_vo.c
@@ -119,6 +119,7 @@ static int control(struct vf_instance *vf, int request, void *data)
}
case VFCTRL_DRAW_EOSD: {
struct osd_state *osd = data;
+ osd->support_rgba = vf->default_caps & VFCAP_EOSD_RGBA;
osd->dim = (struct mp_eosd_res){0};
if (!video_out->config_ok ||
vo_control(video_out, VOCTRL_GET_EOSD_RES, &osd->dim) != true)
diff --git a/libmpcodecs/vfcap.h b/libmpcodecs/vfcap.h
index 86c6f6e477..aef75840ae 100644
--- a/libmpcodecs/vfcap.h
+++ b/libmpcodecs/vfcap.h
@@ -48,5 +48,6 @@
#define VOCAP_NOSLICES 0x8000
#define VFCAP_OSD_FILTER 0x10000 // OSD is drawn in filter chain
#define VFCAP_EOSD_FILTER 0x20000 // EOSD is drawn in filter chain
+#define VFCAP_EOSD_RGBA 0x40000
#endif /* MPLAYER_VFCAP_H */