Ticket #148: subtitle.diff

File subtitle.diff, 6.9 KB (added by anonymous, 19 years ago)
  • libs/libmythtv/osdtypes.cpp

     
    884884
    885885    m_isvalid = true;
    886886
    887     int imwidth = (img.width() / 2) * 2;
    888     int imheight = (img.height() / 2) * 2;
     887    int imwidth = (img.width() + 1) & ~1;
     888    int imheight = (img.height() + 1) & ~1;
    889889
    890890    m_yuv = new unsigned char[imwidth * imheight * 3 / 2];
    891891    m_ybuffer = m_yuv;
     
    894894
    895895    m_alpha = new unsigned char[imwidth * imheight];
    896896
    897897    rgb32_to_yuv420p(m_ybuffer, m_ubuffer, m_vbuffer, m_alpha, img.bits(),
    898                      imwidth, imheight, img.width());
     898                     img.width(), img.height(), img.bytesPerLine() / 4);
    899899
    900900    m_imagesize = QRect(0, 0, imwidth, imheight);
    901901}
  • libs/libmythtv/yuv2rgb.cpp

     
    488510#define A_II  3
    489511#endif
    490512
    491     wrap = width;
     513    wrap = (width + 1) & ~1;
    492514    wrap4 = srcwidth * 4;
    493515    p = src;
    494     for(y=0;y<height;y+=2) {
    495         for(x=0;x<width;x+=2) {
     516    for(y=0;y+1<height;y+=2) {
     517        for(x=0;x+1<width;x+=2) {
    496518            r = p[R_II];
    497519            g = p[G_II];
    498520            b = p[B_II];
     
    550572            lum += -wrap + 2;
    551573            alpha += -wrap + 2;
    552574        }
    553         p += wrap4;
     575        if (width & 1) {
     576            r = p[R_II];
     577            g = p[G_II];
     578            b = p[B_II];
     579            r1 = r;
     580            g1 = g;
     581            b1 = b;
     582            lum[0] = (FIX(0.29900) * r + FIX(0.58700) * g +
     583                      FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
     584            alpha[0] = p[A_II];
     585
     586            lum[1] = 16;
     587            alpha[1] = 0;
     588
     589            p += wrap4;
     590            lum += wrap;
     591            alpha += wrap;
     592
     593            r = p[R_II];
     594            g = p[G_II];
     595            b = p[B_II];
     596            r1 += r;
     597            g1 += g;
     598            b1 += b;
     599            lum[0] = (FIX(0.29900) * r + FIX(0.58700) * g +
     600                      FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
     601            alpha[0] = p[A_II];
     602
     603            lum[1] = 16;
     604            alpha[1] = 0;
     605
     606            cr[0] = ((- FIX(0.16874) * r1 - FIX(0.33126) * g1 +
     607                    FIX(0.50000) * b1 + 2 * ONE_HALF - 1) >> (SCALEBITS + 1)) +
     608                    128;
     609            cb[0] = ((FIX(0.50000) * r1 - FIX(0.41869) * g1 -
     610                    FIX(0.08131) * b1 + 2 * ONE_HALF - 1) >> (SCALEBITS + 1)) +
     611                    128;
     612
     613            cb++;
     614            cr++;
     615            p += -wrap4 + 4;
     616            lum += -wrap + 2;
     617            alpha += -wrap + 2;
     618        }
     619        p += wrap4 * 2 - width * 4;
    554620        lum += wrap;
    555621        alpha += wrap;
    556622    }
     623    if (height & 1) {
     624        for(x=0;x+1<width;x+=2) {
     625            r = p[R_II];
     626            g = p[G_II];
     627            b = p[B_II];
     628            r1 = r;
     629            g1 = g;
     630            b1 = b;
     631            lum[0] = (FIX(0.29900) * r + FIX(0.58700) * g +
     632                      FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
     633            alpha[0] = p[A_II];
     634
     635            r = p[R_II+4];
     636            g = p[G_II+4];
     637            b = p[B_II+4];
     638            r1 += r;
     639            g1 += g;
     640            b1 += b;
     641            lum[1] = (FIX(0.29900) * r + FIX(0.58700) * g +
     642                      FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
     643            alpha[1] = p[A_II+4];
     644
     645            lum += wrap;
     646            alpha += wrap;
     647
     648            lum[0] = 16;
     649            alpha[0] = 0;
     650
     651            lum[1] = 16;
     652            alpha[1] = 0;
     653
     654            cr[0] = ((- FIX(0.16874) * r1 - FIX(0.33126) * g1 +
     655                    FIX(0.50000) * b1 + 2 * ONE_HALF - 1) >> (SCALEBITS + 1)) +
     656                    128;
     657            cb[0] = ((FIX(0.50000) * r1 - FIX(0.41869) * g1 -
     658                    FIX(0.08131) * b1 + 2 * ONE_HALF - 1) >> (SCALEBITS + 1)) +
     659                    128;
     660
     661            cb++;
     662            cr++;
     663            p += 2 * 4;
     664            lum += -wrap + 2;
     665            alpha += -wrap + 2;
     666        }
     667        if (width & 1) {
     668            r = p[R_II];
     669            g = p[G_II];
     670            b = p[B_II];
     671            r1 = r;
     672            g1 = g;
     673            b1 = b;
     674            lum[0] = (FIX(0.29900) * r + FIX(0.58700) * g +
     675                      FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
     676            alpha[0] = p[A_II];
     677
     678            lum[1] = 16;
     679            alpha[1] = 0;
     680
     681            lum += wrap;
     682            alpha += wrap;
     683
     684            lum[0] = 16;
     685            alpha[0] = 0;
     686
     687            lum[1] = 16;
     688            alpha[1] = 0;
     689
     690            cr[0] = ((- FIX(0.16874) * r1 - FIX(0.33126) * g1 +
     691                    FIX(0.50000) * b1 + ONE_HALF - 1) >> SCALEBITS) +
     692                    128;
     693            cb[0] = ((FIX(0.50000) * r1 - FIX(0.41869) * g1 -
     694                    FIX(0.08131) * b1 + ONE_HALF - 1) >> SCALEBITS) +
     695                    128;
     696
     697            cb++;
     698            cr++;
     699            p += 4;
     700            lum += -wrap + 2;
     701            alpha += -wrap + 2;
     702       }
     703    }
    557704}
    558705
    559706#ifdef HAVE_ALTIVEC
  • libs/libmythtv/osd.cpp

     
    18141814        if (*i && (*i)->Displaying())
    18151815        {
    18161816            QString name = (*i)->GetName();
    1817             if (name != "cc_page" && name != "menu" && name != other &&
    1818                 (!oset || !oset->CanShowWith(name)))
     1817            if (name != "cc_page" && name != "menu" && name != "subtitles" &&
     1818                name != other && (!oset || !oset->CanShowWith(name)))
    18191819            {
    18201820                (*i)->Hide();
    18211821                result = true;
  • libs/libavcodec/dvbsubdec.c

     
    13101310
    13111311    sub->num_rects = ctx->display_list_size;
    13121312   
    1313     if (sub->num_rects == 0)
    1314         return 0;
    1315    
    1316     sub->rects = av_mallocz(sizeof(AVSubtitleRect) * sub->num_rects);
     1313    if (sub->num_rects > 0)
     1314        sub->rects = av_mallocz(sizeof(AVSubtitleRect) * sub->num_rects);
    13171315
    13181316    i = 0;
    13191317
  • libs/libmythtv/NuppelVideoPlayer.cpp

     
    41924253                {
    41934254                    for (int x = 0; x < rect->w; ++x)
    41944255                    {
    4195                         const uint8_t color = rect->bitmap[y*rect->w + x];
     4256                        const uint8_t color = rect->bitmap[y*rect->linesize + x];
    41964257                        const uint32_t pixel = rect->rgba_palette[color];
    41974258                        qImage.setPixel(x, y, pixel);
    41984259                    }