summaryrefslogtreecommitdiffstats
path: root/sub/spudec.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-12-08 13:59:49 +0100
committerwm4 <wm4@nowhere>2012-12-11 00:37:54 +0100
commit5bf8706d1f6536cd89207b777161ab83195ddb20 (patch)
tree1e4ba07a00da6dcde3f8f308f2aa1128af56619e /sub/spudec.c
parentb3fb7c2cade9d70a4ca05821c87f68e941da6237 (diff)
downloadmpv-5bf8706d1f6536cd89207b777161ab83195ddb20.tar.bz2
mpv-5bf8706d1f6536cd89207b777161ab83195ddb20.tar.xz
sub: remove vobsub reader in favor of ffmpeg vobsub demuxer
ffmpeg recently added a demuxer that can read vobsubs (pairs of .sub and .idx files). Get rid of the internal vobsub reader, and use the ffmpeg demuxer instead. Sneak in an unrelated manpage change (autosub default).
Diffstat (limited to 'sub/spudec.c')
-rw-r--r--sub/spudec.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/sub/spudec.c b/sub/spudec.c
index 22f121e92c..59c3058251 100644
--- a/sub/spudec.c
+++ b/sub/spudec.c
@@ -43,7 +43,6 @@
#include "core/mp_msg.h"
#include "spudec.h"
-#include "vobsub.h"
#include "sub.h"
#include "core/mp_common.h"
#include "video/csputils.h"
@@ -659,6 +658,33 @@ void spudec_get_indexed(void *this, struct mp_osd_res *dim,
}
}
+static unsigned int vobsub_palette_to_yuv(unsigned int pal)
+{
+ int r, g, b, y, u, v;
+ // Palette in idx file is not rgb value, it was calculated by wrong formula.
+ // Here's reversed formula of the one used to generate palette in idx file.
+ r = pal >> 16 & 0xff;
+ g = pal >> 8 & 0xff;
+ b = pal & 0xff;
+ y = av_clip_uint8( 0.1494 * r + 0.6061 * g + 0.2445 * b);
+ u = av_clip_uint8( 0.6066 * r - 0.4322 * g - 0.1744 * b + 128);
+ v = av_clip_uint8(-0.08435 * r - 0.3422 * g + 0.4266 * b + 128);
+ y = y * 219 / 255 + 16;
+ return y << 16 | u << 8 | v;
+}
+
+static unsigned int vobsub_rgb_to_yuv(unsigned int rgb)
+{
+ int r, g, b, y, u, v;
+ r = rgb >> 16 & 0xff;
+ g = rgb >> 8 & 0xff;
+ b = rgb & 0xff;
+ y = ( 0.299 * r + 0.587 * g + 0.114 * b) * 219 / 255 + 16.5;
+ u = (-0.16874 * r - 0.33126 * g + 0.5 * b) * 224 / 255 + 128.5;
+ v = ( 0.5 * r - 0.41869 * g - 0.08131 * b) * 224 / 255 + 128.5;
+ return y << 16 | u << 8 | v;
+}
+
static void spudec_parse_extradata(spudec_handle_t *this,
uint8_t *extradata, int extradata_len)
{