[MPlayer-dev-eng] [PATCH] vobsub custom colors rgb->yuv fix.
Ulion
ulion2002 at gmail.com
Sat Dec 8 18:22:52 CET 2007
2007/12/8, Reimar Döffinger <Reimar.Doeffinger at stud.uni-karlsruhe.de>:
> Hello,
> On Sat, Dec 08, 2007 at 10:32:05PM +0800, Ulion wrote:
> > 2007/12/8, Reimar Döffinger <Reimar.Doeffinger at stud.uni-karlsruhe.de>:
> > > On Sat, Dec 08, 2007 at 08:37:51PM +0800, Ulion wrote:
> > > [...]
> > > > +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 = round(( 0.299 * r + 0.587 * g + 0.114 * b) * 219 / 255 + 16);
> > > > + u = round((-0.16874 * r - 0.33126 * g + 0.5 * b) * 224 / 255 + 128);
> > > > + v = round(( 0.5 * r - 0.41869 * g - 0.08131 * b) * 224 / 255 + 128);
> > > > + return y << 16 | u << 8 | v;
> > > > +}
> > >
> > > The *219/255 etc. is a really bad idea IMO, since it means the subtitles
> > > can at best become a muddy gray and never truly white.
> > > This may be acceptable or even good for videos, but not for subtitles.
> >
> > I don't think so. Value 235 of Y is truly white, values above 235 is
> > lighter than white.
> > Or value 255 of Y is truly white? Anyone make it clear?
>
> That depends on the video that is playing, MPlayer does not correctly
> distinguish it yet.
> Well, it is easily changed if it ever bothers anyone, and like this we
> don't have to bother with overflow checking, so apply it as is if you
> want.
>
> > static int
> > vobsub_parse_custom_colors (sh_sub_t *sh, const char *start)
> > {
> > - int use_custom_colors, i;
> > + int use_custom_colors, i, tmp;
> >
> > use_custom_colors = 0;
> > start += 14;
> > @@ -361,8 +361,9 @@
> > start++;
> > for (i = 0; i < 4; i++)
> > {
> > - if (sscanf(start, "%06x", &sh->colors[i]) != 1)
> > + if (sscanf(start, "%06x", &tmp) != 1)
> > break;
> > + sh->colors[i] = vobsub_rgb_to_yuv(tmp);
>
> I think it would be better to declare tmp in this block,
> since it is not used outside of it.
> Also for consistency making it "unsigned" instead of "int" might be
> better.
Sure, then I will commit it in tomorrow.
--
Ulion
More information about the MPlayer-dev-eng
mailing list