2012-01-23 2 views
1

Я делаю быстрое приложение Qt, и мне нужно сделать декларативный виджет с видео (я не хочу использовать мобильность qt). Например, это не проблема. Но я не знаю, как сделать blur libVLC. Кто-нибудь знает, как сделать размытие видео с помощью libVLC?libVLC и blur videos

+0

Я думаю, что эта функция размытия происходит от одного из плагинов VLC. Я не знаю, как получить доступ к функции плагина из модуля libVLC, который мне нужен, чтобы проверить его документацию. –

ответ

0

Возможно, вы могли бы просто использовать expoblur над QImage и перекодировать размытое видео.

http://www.qtcentre.org/archive/index.php/t-26534.html

static QImage blurred(const QImage& image, const QRect& rect, int radius, bool alphaOnly = false) 
{ 
    int tab[] = { 14, 10, 8, 6, 5, 5, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 }; 
    int alpha = (radius < 1) ? 16 : (radius > 17) ? 1 : tab[radius-1]; 

    QImage result = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); 
    int r1 = rect.top(); 
    int r2 = rect.bottom(); 
    int c1 = rect.left(); 
    int c2 = rect.right(); 

    int bpl = result.bytesPerLine(); 
    int rgba[4]; 
    unsigned char* p; 

    int i1 = 0; 
    int i2 = 3; 

    if (alphaOnly) 
     i1 = i2 = (QSysInfo::ByteOrder == QSysInfo::BigEndian ? 0 : 3); 

    for (int col = c1; col <= c2; col++) { 
     p = result.scanLine(r1) + col * 4; 
     for (int i = i1; i <= i2; i++) 
      rgba[i] = p[i] << 4; 

     p += bpl; 
     for (int j = r1; j < r2; j++, p += bpl) 
      for (int i = i1; i <= i2; i++) 
       p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha/16) >> 4; 
    } 

    for (int row = r1; row <= r2; row++) { 
     p = result.scanLine(row) + c1 * 4; 
     for (int i = i1; i <= i2; i++) 
      rgba[i] = p[i] << 4; 

     p += 4; 
     for (int j = c1; j < c2; j++, p += 4) 
      for (int i = i1; i <= i2; i++) 
       p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha/16) >> 4; 
    } 

    for (int col = c1; col <= c2; col++) { 
     p = result.scanLine(r2) + col * 4; 
     for (int i = i1; i <= i2; i++) 
      rgba[i] = p[i] << 4; 

     p -= bpl; 
     for (int j = r1; j < r2; j++, p -= bpl) 
      for (int i = i1; i <= i2; i++) 
       p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha/16) >> 4; 
    } 

    for (int row = r1; row <= r2; row++) { 
     p = result.scanLine(row) + c2 * 4; 
     for (int i = i1; i <= i2; i++) 
      rgba[i] = p[i] << 4; 

     p -= 4; 
     for (int j = c1; j < c2; j++, p -= 4) 
      for (int i = i1; i <= i2; i++) 
       p[i] = (rgba[i] += ((p[i] << 4) - rgba[i]) * alpha/16) >> 4; 
    } 

    return result; 
} 
+0

Это неправда. В первую очередь потому, что проигрыватель VLC способен размыть видео. И я серьезно сомневаюсь, что это невозможно сделать проще – Dcow