[FFmpeg-trac] #946(undetermined:new): ffplay: almost unreadable dvd subtitles due to wrong colors
FFmpeg
trac at avcodec.org
Sat Jan 28 19:23:58 CET 2012
#946: ffplay: almost unreadable dvd subtitles due to wrong colors
-------------------------------------+-------------------------------------
Reporter: ami_stuff | Type: defect
Status: new | Priority: normal
Component: | Version:
undetermined | unspecified
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
http://www.datafilehost.com/download-76a1c6a8.html
related to:
{{{
commit cf16104ad13f6c558ea386e5fa55a67e2b378f5e
Author: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
Date: Sat Apr 30 23:00:17 2011 +0200
Change guess_palette so its output matches the most common palette.
This means it uses full brightness range and brightness
increasing instead of decreasing with index of non-opaque
color.
Based on patch by Alexandre Colucci [alexandre elgato com]
diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
index bb3e124..6d5973c 100644
--- a/libavcodec/dvdsubdec.c
+++ b/libavcodec/dvdsubdec.c
@@ -120,6 +120,14 @@ static void guess_palette(uint32_t *rgba_palette,
uint8_t *alpha,
uint32_t subtitle_color)
{
+ static const uint8_t level_map[4][4] = {
+ // this configuration (full range, lowest to highest) in tests
+ // seemed most common, so assume this
+ {0xff},
+ {0x00, 0xff},
+ {0x00, 0x80, 0xff},
+ {0x00, 0x55, 0xaa, 0xff},
+ };
uint8_t color_used[16];
int nb_opaque_colors, i, level, j, r, g, b;
@@ -138,18 +146,18 @@ static void guess_palette(uint32_t *rgba_palette,
if (nb_opaque_colors == 0)
return;
- j = nb_opaque_colors;
+ j = 0;
memset(color_used, 0, 16);
for(i = 0; i < 4; i++) {
if (alpha[i] != 0) {
if (!color_used[colormap[i]]) {
- level = (0xff * j) / nb_opaque_colors;
+ level = level_map[nb_opaque_colors][j];
r = (((subtitle_color >> 16) & 0xff) * level) >> 8;
g = (((subtitle_color >> 8) & 0xff) * level) >> 8;
b = (((subtitle_color >> 0) & 0xff) * level) >> 8;
rgba_palette[i] = b | (g << 8) | (r << 16) | ((alpha[i] *
17) << 24);
color_used[colormap[i]] = (i + 1);
- j--;
+ j++;
} else {
rgba_palette[i] = (rgba_palette[color_used[colormap[i]] -
1] & 0x00ffffff) |
((alpha[i] * 17) << 24);
}}}
{{{
C:\>ffmpeg -i dvdsub.vob
ffmpeg version N-36890-g67f5650 Copyright (c) 2000-2012 the FFmpeg
developers
built on Jan 16 2012 21:57:13 with gcc 4.6.2
configuration: --enable-gpl --enable-version3 --disable-w32threads
--enable-ru
ntime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-
libope
ncore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-
libgsm --en
able-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-
libschroedinger -
-enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvo-
amrwben
c --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs
--enable-
libxvid --enable-zlib
libavutil 51. 34.100 / 51. 34.100
libavcodec 53. 56.105 / 53. 56.105
libavformat 53. 30.100 / 53. 30.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 59.100 / 2. 59.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 6.100 / 0. 6.100
libpostproc 51. 2.100 / 51. 2.100
[mpeg @ 020F2320] max_analyze_duration 5000000 reached at 5000000
Input #0, mpeg, from 'dvdsub.vob':
Duration: 00:00:07.96, start: 1556.319267, bitrate: 5263 kb/s
Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [SAR
64:45 DA
R 16:9], 7500 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0x80]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
Stream #0:2[0x20]: Subtitle: dvd_subtitle
Stream #0:3[0x22]: Subtitle: dvd_subtitle
Stream #0:4[0x24]: Subtitle: dvd_subtitle
Stream #0:5[0x25]: Subtitle: dvd_subtitle
Stream #0:6[0x26]: Subtitle: dvd_subtitle
Stream #0:7[0x28]: Subtitle: dvd_subtitle
Stream #0:8[0x29]: Subtitle: dvd_subtitle
Stream #0:9[0x21]: Subtitle: dvd_subtitle
Stream #0:10[0x23]: Subtitle: dvd_subtitle
Stream #0:11[0x27]: Subtitle: dvd_subtitle
Stream #0:12[0x2a]: Subtitle: dvd_subtitle
At least one output file must be specified
}}}
--
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/946>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list