Ticket #9474: 50-synmusic.diff

File 50-synmusic.diff, 5.6 KB (added by Lawrence Rust <lvr@…>, 10 years ago)
  • mythplugins/mythmusic/mythmusic/synaesthesia.cpp

    diff --git mythplugins/mythmusic/mythmusic/synaesthesia.cpp mythplugins/mythmusic/mythmusic/synaesthesia.cpp
    index 5c50357..8460f3c 100644
    Synaesthesia::Synaesthesia(long int winid) 
    3535    (void) winid;
    3636
    3737    fps = 29;
    38     fadeMode = Stars;
     38#define FADEMODE Stars /* Stars Flame Wave */
     39    fadeMode = FADEMODE;
    3940    pointsAreDiamonds = true;
    4041    energy_avg = 80.0;
    4142
    void Synaesthesia::setupPalette(void) 
    105106
    106107    for (i = 0; i < 256; i++) {
    107108        int f = i & 15, b = i / 16;
    108         //palette[i * 3 + 0] = sPEAKIFY(b*bgRed*16+f*fgRed*16);
    109         //palette[i * 3 + 1] = sPEAKIFY(b*bgGreen*16+f*fgGreen*16);
    110         //palette[i * 3 + 2] = sPEAKIFY(b*bgBlue*16+f*fgBlue*16);
    111 
     109#if 0
     110        palette[i * 3 + 0] = sPEAKIFY(b*bgRed*16+f*fgRed*16);
     111        palette[i * 3 + 1] = sPEAKIFY(b*bgGreen*16+f*fgGreen*16);
     112        palette[i * 3 + 2] = sPEAKIFY(b*bgBlue*16+f*fgBlue*16);
     113#else
    112114        double red = b * bgRed * 16 + f * fgRed * 16;
    113115        double green = b * bgGreen * 16 + f * fgGreen * 16;
    114116        double blue = b * bgBlue * 16 + f * fgBlue * 16;
    void Synaesthesia::setupPalette(void) 
    132134        green *= scale;
    133135        blue *= scale;
    134136
    135         palette[i * 3 + 0] = sBOUND(int(Qt::red));
    136         palette[i * 3 + 1] = sBOUND(int(Qt::green));
    137         palette[i * 3 + 2] = sBOUND(int(Qt::blue));
     137        palette[i * 3 + 0] = sBOUND((int)(red + .5));
     138        palette[i * 3 + 1] = sBOUND((int)(green + .5));
     139        palette[i * 3 + 2] = sBOUND((int)(blue + .5));
     140#endif
    138141    }
    139142}
    140143
    unsigned char Synaesthesia::getPixel(int x, int y, int where) 
    297300    return lastOutput[where];
    298301}
    299302
     303#if FADEMODE == Stars
    300304void Synaesthesia::fadeFade(void)
    301305{
    302306    register uint32_t *ptr = (uint32_t *)output;
    void Synaesthesia::fadeFade(void) 
    310314            ptr++;
    311315    } while (--i > 0);
    312316}
     317#endif
    313318
     319#if FADEMODE == Wave
    314320void Synaesthesia::fadePixelWave(int x, int y, int where, int step)
    315321{
    316322    short j = short((int(getPixel(x - 1, y, where - 2)) +
    void Synaesthesia::fadeWave(void) 
    384390        } while(++i < end);
    385391    }
    386392}
     393#endif /* FADEMODE == Wave */
    387394
     395#if FADEMODE == Flame
    388396void Synaesthesia::fadePixelHeat(int x, int y, int where, int step)
    389397{
    390398    short j = short((int(getPixel(x - 1, y, where - 2)) +
    void Synaesthesia::fadeHeat(void) 
    459467        } while(++i < end);
    460468    }
    461469}
     470#endif /* FADEMODE == Flame */
    462471
    463472void Synaesthesia::fade(void)
    464473{
    465     switch(fadeMode) {
    466         case Stars: fadeFade(); break;
    467         case Flame: fadeHeat(); break;
    468         case Wave: fadeWave(); break;
    469         default: break;
    470     }
     474#if FADEMODE == Stars
     475    fadeFade();
     476#elif FADEMODE == Flame
     477    fadeHeat();
     478#elif FADEMODE == Wave
     479    fadeWave();
     480#else
     481#   error Invalid FADMODE
     482#endif
    471483}
    472484
    473485bool Synaesthesia::process(VisualNode *node)
    bool Synaesthesia::process(VisualNode *node) 
    611623
    612624bool Synaesthesia::draw(QPainter *p, const QColor &back)
    613625{
    614     (void)p;
    615626    (void)back;
    616627#ifdef SDL_SUPPORT
     628    (void)p;
     629
    617630    if (!surface)
    618631    {
    619632        VERBOSE(VB_IMPORTANT, "No sdl surface");
    bool Synaesthesia::draw(QPainter *p, const QColor &back) 
    621634    }
    622635
    623636    SDL_LockSurface(surface);
     637#else
     638    if (!outputImage)
     639        return false;
     640#endif
    624641
    625642    register uint32_t *ptrOutput = (uint32_t *)output;
    626643
    627644    for (int j = 0; j < outHeight * 2; j += 2)
    628645    {           
     646#ifdef SDL_SUPPORT
    629647        uint32_t *ptrTop = (uint32_t *)(surface->pixels) + outWidth / 4 * j;
    630         uint32_t *ptrBot = (uint32_t *)(surface->pixels) +
     648        uint32_t *ptrBot = (uint32_t *)(surface->pixels) +
    631649                                                         outWidth / 4 * (j + 1);
     650#else
     651        uint32_t *ptrTop = (uint32_t *)(outputImage->scanLine(j));
     652        uint32_t *ptrBot = (uint32_t *)(outputImage->scanLine(j+1));
     653#endif
    632654               
    633655        int i = outWidth / 4;
    634656
    bool Synaesthesia::draw(QPainter *p, const QColor &back) 
    651673        }while(--i);
    652674    }
    653675
     676#ifdef SDL_SUPPORT
    654677    SDL_UnlockSurface(surface);
    655678    SDL_Flip(surface);
    656 
    657679    return false;
    658680#else
    659 
    660     if (!outputImage)
    661         return false;
    662 
    663     register uint32_t *ptrOutput = (uint32_t *)output;
    664 
    665     for (int j = 0; j < outHeight * 2; j += 2)
    666     {
    667         uint32_t *ptrTop = (uint32_t *)(outputImage->scanLine(j));
    668         uint32_t *ptrBot = (uint32_t *)(outputImage->scanLine(j+1));
    669 
    670         int i = outWidth / 4;
    671 
    672         do
    673         {
    674             register unsigned int const r1 = *(ptrOutput++);
    675             register unsigned int const r2 = *(ptrOutput++);
    676 
    677             register unsigned int const v = ((r1 & 0x000000f0ul) >> 4) |
    678                                             ((r1 & 0x0000f000ul) >> 8) |
    679                                             ((r1 & 0x00f00000ul) >> 12) |
    680                                             ((r1 & 0xf0000000ul) >> 16);
    681 
    682             *(ptrTop++) = v | (((r2 & 0x000000f0ul) << 12) |
    683                                ((r2 & 0x0000f000ul) << 8) |
    684                                ((r2 & 0x00f00000ul) << 4) |
    685                                ((r2 & 0xf0000000ul)));
    686 
    687             *(ptrBot++) = v | (((r2 & 0x000000f0ul) << 12) |
    688                                ((r2 & 0x0000f000ul) << 8) |
    689                                ((r2 & 0x00f00000ul) << 4) |
    690                                ((r2 & 0xf0000000ul)));
    691         } while (--i);
    692     }
    693 
    694     p->drawImage(QRect(0, 0, 800, 600), *outputImage);
    695 
     681    p->drawImage(QRect(0, 0, outWidth, outHeight*2), *outputImage);
    696682    return true;
    697683#endif
    698684}