[FFmpeg-devel] [PATCH] Yet another stab at RGB48 support

Michael Niedermayer michaelni
Fri May 15 16:14:37 CEST 2009


On Fri, May 15, 2009 at 08:56:28AM +0300, Kostya wrote:
> On Wed, May 13, 2009 at 01:59:19AM +0200, Michael Niedermayer wrote:
> > On Sun, May 10, 2009 at 03:21:23PM +0300, Kostya wrote:
[...]
> > > +SwsRGBFunc sws_hires_getRGBFunc(SwsContext *c)
> > > +{
> > > +    const enum PixelFormat srcFormat = c->srcFormat;
> > > +    const enum PixelFormat dstFormat = c->dstFormat;
> > > +    const int srcCbe = srcFormat==PIX_FMT_RGB48BE; /* components big-endian */
> > > +    const int dstCbe = dstFormat==PIX_FMT_RGB48BE;
> > > +    const int srcBpp = (fmt_depth(srcFormat) + 7) >> 3;
> > > +    const int dstBpp = (fmt_depth(dstFormat) + 7) >> 3;
> > > +    const int srcId = (fmt_depth(srcFormat) >> 2) - (srcBpp > 4); /* 1:0, 4:1, 8:2, 15:3, 16:4, 24:6, 32:8, 48:11 */
> > > +    const int dstId = (fmt_depth(dstFormat) >> 2) - (dstBpp > 4);
> > > +    SwsRGBFunc conv = NULL;
> > > +
> > > +    if (  (isBGR(srcFormat) && isBGR(dstFormat))
> > > +       || (isRGB(srcFormat) && isRGB(dstFormat))) {
> > > +        switch(srcId | (dstId<<4) | (srcCbe<<8) | (dstCbe<<12)){
> > > +        case 0x013B: conv = rgb48beto15; break;
> > > +        case 0x003B: conv = rgb48leto15; break;
> > > +        case 0x014B: conv = rgb48beto16; break;
> > > +        case 0x004B: conv = rgb48leto16; break;
> > > +        case 0x016B: conv = rgb48beto24; break;
> > > +        case 0x006B: conv = rgb48leto24; break;
> > > +        case 0x018B: conv = rgb48beto32; break;
> > > +        case 0x008B: conv = rgb48leto32; break;
> > > +        case 0x10B3: conv = rgb15to48be; break;
> > > +        case 0x00B3: conv = rgb15to48le; break;
> > > +        case 0x10B4: conv = rgb16to48be; break;
> > > +        case 0x00B4: conv = rgb16to48le; break;
> > > +        case 0x10B6:
> > > +        case 0x00B6: conv = rgb24to48; break;
> > > +        case 0x10B8:
> > > +        case 0x00B8: conv = rgb32to48; break;
> > > +        case 0x10BB:
> > > +        case 0x01BB: conv = rgb48to48; break;
> > > +        default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
> > > +                        sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
> > > +        }
> > > +    } else if (  (isBGR(srcFormat) && isRGB(dstFormat))
> > > +             || (isRGB(srcFormat) && isBGR(dstFormat))) {
> > > +        switch(srcId | (dstId<<4) | (srcCbe<<8) | (dstCbe<<12)){
> > > +        case 0x013B: conv = rgb48betobgr15; break;
> > > +        case 0x003B: conv = rgb48letobgr15; break;
> > > +        case 0x014B: conv = rgb48betobgr16; break;
> > > +        case 0x004B: conv = rgb48letobgr16; break;
> > > +        case 0x016B: conv = rgb48betobgr24; break;
> > > +        case 0x006B: conv = rgb48letobgr24; break;
> > > +        case 0x018B: conv = rgb48betobgr32; break;
> > > +        case 0x008B: conv = rgb48letobgr32; break;
> > > +        case 0x10B3: conv = bgr15torgb48be; break;
> > > +        case 0x00B3: conv = bgr15torgb48le; break;
> > > +        case 0x10B4: conv = bgr16torgb48be; break;
> > > +        case 0x00B4: conv = bgr16torgb48le; break;
> > > +        case 0x10B6:
> > > +        case 0x00B6: conv = bgr24torgb48; break;
> > > +        case 0x10B8:
> > > +        case 0x00B8: conv = bgr32torgb48; break;
> > > +        default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
> > > +                        sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
> > > +        }
> > > +    } else {
> > > +        av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
> > > +               sws_format_name(srcFormat), sws_format_name(dstFormat));
> > > +    }
> > > +
> > > +    return conv;
> > > +}
> > 
> > code duplication
> 
> hmm? 

there aleady is a function that does rgb<->rgb adding another duplicates
parts of its code

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Breaking DRM is a little like attempting to break through a door even
though the window is wide open and the only thing in the house is a bunch
of things you dont want and which you would get tomorrow for free anyway
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090515/e9f1f1c3/attachment.pgp>



More information about the ffmpeg-devel mailing list