Changeset 1069

Show
Ignore:
Timestamp:
06/06/09 04:44:12 (9 months ago)
Author:
astrange
Message:

Fix Indeo.
- Add missing codec ID mapping (from Madd_the_sane)
- Add missing color conversion (inefficient and with bad code duplication)

Closes #53

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ColorConversions.c

    r1039 r1069  
    422422} 
    423423 
     424static FASTCALL void Y410toY422(AVFrame *picture, UInt8 *o, int outRB, unsigned width, unsigned height) 
     425{ 
     426        UInt8   *yc = picture->data[0], *u = picture->data[1], *v = picture->data[2]; 
     427        int             rY = picture->linesize[0], rU = picture->linesize[1], rV = picture->linesize[2]; 
     428        int             x, y, halfwidth = width / 2; 
     429         
     430        for (y = 0; y < height; y++) { 
     431                for (x = 0; x < halfwidth; x++) { 
     432                        int x2 = x * 2, x4 = x * 4; 
     433                        o[x4] = u[x/2]; 
     434                        o[x4 + 1] = yc[x2]; 
     435                        o[x4 + 2] = v[x/2]; 
     436                        o[x4 + 3] = yc[x2 + 1]; 
     437                } 
     438                 
     439                o += outRB; 
     440                yc += rY; 
     441                 
     442                if (y % 4 == 3) { 
     443                        u += rU; 
     444                        v += rV; 
     445                } 
     446        } 
     447} 
     448 
    424449static void ClearRGB(UInt8 *baseAddr, int rowBytes, unsigned width, unsigned height, int bytesPerPixel) 
    425450{ 
     
    485510{ 
    486511        switch (ffPixFmt) { 
     512                case PIX_FMT_RGB555LE: 
     513                case PIX_FMT_RGB555BE: 
     514                        return k16BE555PixelFormat; 
     515                case PIX_FMT_BGR24: 
     516                        return k24RGBPixelFormat; //XXX try k24BGRPixelFormat 
     517                case PIX_FMT_RGB24: 
     518                        return k24RGBPixelFormat; 
     519                case PIX_FMT_RGB32: // XXX not a specific pixel format, need LE & BE like 16-bit 
     520                        return k32ARGBPixelFormat; 
     521                case PIX_FMT_YUV410P: 
     522                        return k2vuyPixelFormat; 
    487523                case PIX_FMT_YUV420P: 
    488524                        return k2vuyPixelFormat; //disables "fast YUV" path 
    489                 case PIX_FMT_BGR24: 
    490                         return k24RGBPixelFormat; //XXX try k24BGRPixelFormat 
    491                 case PIX_FMT_RGB32: // XXX not a specific pixel format 
    492                         return k32ARGBPixelFormat; 
    493                 case PIX_FMT_RGB24: 
    494                         return k24RGBPixelFormat; 
    495525                case PIX_FMT_YUV422P: 
    496526                        return k2vuyPixelFormat; 
    497527                case PIX_FMT_YUVA420P: 
    498528                        return k4444YpCbCrA8PixelFormat; 
    499                 case PIX_FMT_RGB555LE: 
    500                 case PIX_FMT_RGB555BE: 
    501                         return k16BE555PixelFormat; 
    502529                default: 
    503530                        return 0; // error 
     
    538565                        funcs->convert = RGB24toRGB24; 
    539566                        break; 
     567                case PIX_FMT_RGB555LE: 
     568                        funcs->clear = ClearRGB16; 
     569                        funcs->convert = RGB16LEtoRGB16; 
     570                        break; 
     571                case PIX_FMT_RGB555BE: 
     572                        funcs->clear = ClearRGB16; 
     573                        funcs->convert = RGB16toRGB16; 
     574                        break; 
     575                case PIX_FMT_YUV410P: 
     576                        funcs->clear = ClearY422; 
     577                        funcs->convert = Y410toY422; 
     578                        break; 
    540579                case PIX_FMT_YUV422P: 
    541580                        funcs->clear = ClearY422; 
     
    546585                        funcs->convert = YA420toV408; 
    547586                        break; 
    548                 case PIX_FMT_RGB555LE: 
    549                         funcs->clear = ClearRGB16; 
    550                         funcs->convert = RGB16LEtoRGB16; 
    551                         break; 
    552                 case PIX_FMT_RGB555BE: 
    553                         funcs->clear = ClearRGB16; 
    554                         funcs->convert = RGB16toRGB16; 
    555                         break; 
    556587                default: 
    557588                        return paramErr; 
  • trunk/FFusionCodec.c

    r1065 r1069  
    713713                        case 'VP6A': 
    714714                                codecID = CODEC_ID_VP6A; 
     715                                break; 
     716                                 
     717                        case 'RT21': 
     718                                codecID = CODEC_ID_INDEO2; 
     719                                break; 
     720                                 
     721                        case 'IV31': 
     722                        case 'IV32': 
     723                        case 'iv31': 
     724                        case 'iv32': 
     725                                codecID = CODEC_ID_INDEO3; 
    715726                                break; 
    716727                                 
     
    15241535                break; 
    15251536                                 
    1526                        case 'IV31':   // Indeo 3 
     1537            case 'IV31':      // Indeo 3 
    15271538            case 'IV32': 
    1528                        case 'iv31': 
     1539            case 'iv31': 
    15291540            case 'iv32': 
    15301541                err = GetComponentResource((Component)glob->self, codecInfoResourceType, kIndeo3CodecInfoResID, (Handle *)&tempCodecInfo); 
    15311542                break; 
    15321543                                 
    1533                        case 'RT21':   // Indeo 2 
     1544            case 'RT21':      // Indeo 2 
    15341545                err = GetComponentResource((Component)glob->self, codecInfoResourceType, kIndeo2CodecInfoResID, (Handle *)&tempCodecInfo); 
    15351546                break;