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