Hello Kyle,
You should also try vf_removelogo. It is supposedly better than the
more simple vf_delogo.

I tried (with a box in a PNG mask as logo cover).

That is no alternative both quality wise and from usability point of view:

1. It gave me blurry borders with several pixels widths from outside to the inner. They were very symmetrical and showed a 45 degree "lines" from the edges to the middle. Hardly the nice blurred box I wanted.

2. If you want to cover the logo by simple coordinates (a box), it's unnecessary effort to create a PNG mask with that box in it instead of giving the coordinates as parameter.


Because removelogo can handle arbitrary masks and the calculation I posted is using a simple rectangular box (and this is my typical use case), I suggested to add it to the "delogo" filter.

So my offer stands, would be nice if someone can add this additional mode.

Here's the relevant code to add (+ some config variable to set the mode
I guess):

// Precalculate weights once.
void TimgFilterLogoaway::Tplane::calcUweWeightTable(int w, int h, int power)
{
      double e = 1.0 + (0.3 * power);
      int x;
      for (x = 0; x < w; x++)
          for (int y = 0; y < h; y++)
              if (x + y != 0) {
                  double d = pow(sqrt(double(x * x + y * y)), e);
                  uwetable[x + y * w] = 1.0 / d;
              } else {
                  uwetable[x + y * w] = 1.0;
              }

      for (x = 1; x < w - 1; x++)
          for (int y = 1; y < h - 1; y++) {
              double weightsum = 0;
              for (int bx = 0; bx < w; bx++) {
                  weightsum += uwetable[abs(bx - x) + y * w];
                  weightsum += uwetable[abs(bx - x) + abs(h - 1 - y) * w];
              }
              for (int by = 1; by < h - 1; by++) {
                  weightsum += uwetable[x + abs(by - y) * w];
                  weightsum += uwetable[abs(w - 1 - x) + abs(by - y) * w];
              }
              uweweightsum[y * w + x] = weightsum;
          }
}

// apply filter
void TimgFilterLogoaway::Tplane::uwe(const TlogoawaySettings *cfg)
{
      if (!uwetable) {
          uwetable = (double*)aligned_malloc(w * h * sizeof(double));
          uweweightsum = (double*)aligned_malloc(w * h * sizeof(double));
          calcUweWeightTable(w, h, cfg->blur);
      }

      for (int x = 1; x < w - 1; x++)
          for (int y = 1; y < h - 1; y++) {
              double r = 0;
              const unsigned char *lineN = bordn, *lineS = bords;
              for (int bx = 0; bx < w; bx++) {
                  r += lineN[bx] * uwetable[abs(bx - x) + y * w];
                  r += lineS[bx] * uwetable[abs(bx - x) + abs(h - 1 - y)
* w];
              }
              const unsigned char *lineW = bordw, *lineE = borde;
              for (int by = 1; by < h - 1; by++) {
                  r += lineW[by] * uwetable[x + abs(by - y) * w];
                  r += lineE[by] * uwetable[abs(w - 1 - x) + abs(by - y)
* w];
              }
              logotempdata[y * logotempstride + x] = uint8_t(r /
uweweightsum[y * w + x]);
          }

}


Regards,
Uwe

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Thanks,
Kyle
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to