2c2fd3c257
In the past xbmc delivered its own ffmpeg source code with specific patches to address bugs found during the use of xbmc. For Helix the ffmpeg source code was removed, Helix uses a vanilla ffmpeg source tarball and applies this patchset on top of it. Downloaded from https://github.com/xbmc/FFmpeg/compare/FFmpeg:release/2.5...release/2.5-xbmc.patch [Thomas: use individual patches instead.] Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
64 lines
1.9 KiB
Diff
64 lines
1.9 KiB
Diff
From 74f1c9b43b191a9d6b494e90a4a11677fca33c13 Mon Sep 17 00:00:00 2001
|
|
From: Joakim Plate <elupus@ecce.se>
|
|
Date: Sun, 11 Sep 2011 19:04:51 +0200
|
|
Subject: [PATCH 01/13] Support raw dvdsub palette as stored on normal dvd's
|
|
|
|
This is how the palette is stored on dvd's. Currently
|
|
only xbmc passes the palette information to libavcodec
|
|
this way.
|
|
|
|
Patch part of the XBMC patch set for ffmpeg, downloaded from
|
|
https://github.com/xbmc/FFmpeg/.
|
|
|
|
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
---
|
|
libavcodec/dvdsubdec.c | 24 ++++++++++++++++++++++++
|
|
1 file changed, 24 insertions(+)
|
|
|
|
diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
|
|
index 39604f3..a711e16 100644
|
|
--- a/libavcodec/dvdsubdec.c
|
|
+++ b/libavcodec/dvdsubdec.c
|
|
@@ -64,6 +64,24 @@ static void yuv_a_to_rgba(const uint8_t *ycbcr, const uint8_t *alpha, uint32_t *
|
|
}
|
|
}
|
|
|
|
+static void ayvu_to_argb(const uint8_t *ayvu, uint32_t *argb, int num_values)
|
|
+{
|
|
+ uint8_t *cm = ff_crop_tab + MAX_NEG_CROP;
|
|
+ uint8_t r, g, b;
|
|
+ int i, y, cb, cr, a;
|
|
+ int r_add, g_add, b_add;
|
|
+
|
|
+ for (i = num_values; i > 0; i--) {
|
|
+ a = *ayvu++;
|
|
+ y = *ayvu++;
|
|
+ cr = *ayvu++;
|
|
+ cb = *ayvu++;
|
|
+ YUV_TO_RGB1_CCIR(cb, cr);
|
|
+ YUV_TO_RGB2_CCIR(r, g, b, y);
|
|
+ *argb++ = (a << 24) | (r << 16) | (g << 8) | b;
|
|
+ }
|
|
+}
|
|
+
|
|
static int decode_run_2bit(GetBitContext *gb, int *color)
|
|
{
|
|
unsigned int v, t;
|
|
@@ -697,6 +715,12 @@ static av_cold int dvdsub_init(AVCodecContext *avctx)
|
|
parse_ifo_palette(ctx, ctx->ifo_str);
|
|
if (ctx->palette_str)
|
|
parse_palette(ctx, ctx->palette_str);
|
|
+
|
|
+ if (!ctx->has_palette && avctx->extradata_size == 64) {
|
|
+ ayvu_to_argb((uint8_t*)avctx->extradata, ctx->palette, 16);
|
|
+ ctx->has_palette = 1;
|
|
+ }
|
|
+
|
|
if (ctx->has_palette) {
|
|
int i;
|
|
av_log(avctx, AV_LOG_DEBUG, "palette:");
|
|
--
|
|
2.1.0
|
|
|