[MPlayer-dev-eng] [PATCH] vobsub custom colors rgb->yuv fix.
Ulion
ulion2002 at gmail.com
Sun Dec 9 08:00:01 CET 2007
2007/12/9, Ulion <ulion2002 at gmail.com>:
> 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.
Done.
--
Ulion
More information about the MPlayer-dev-eng
mailing list