The original delogo algorithm interpolates both horizontally and
vertically and uses the average to compute the resulting sample. This
works reasonably well when the logo area is almost square. However
when the logo area is significantly larger than high or higher than
large, the result is largely suboptimal.
The issue can be clearly seen by testing the delogo filter with a fake
logo area that is 200 pixels large and 2 pixels high. Vertical
interpolation gives a very good result in that case, horizontal
interpolation gives a very bad result, and the overall result is poor,
because both are given the same weight.
Even when the logo is roughly square, the current algorithm gives poor
results on the borders of the logo area, because it always gives
horizontal and vertical interpolations an equal weight, and this is
suboptimal on borders. For example, in the middle of the left hand
side border of the logo, you want to trust the left known point much
more than the right known point (which the current algorithm already
does) but also much more than the top and bottom known points (which
the current algorithm doesn't do.)
By properly weighting each known point when computing the value of
each interpolated pixel, the visual result is much better, especially
on borders and/or for high or large logo areas.
The algorithm I implemented guarantees that the weight of each of the
4 known points directly depends on its distance to the interpolated
point. It is largely inspired from the original algorithm, the key
difference being that it computes the relative weights globally
instead of separating the vertical and horizontal interpolations and
combining them afterward.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Stefano Sabatini <stefasab@gmail.com>
* cus/stable:
ffplay: always send zero packets to flush audio decoders
ffplay: use frame->pkt_pts instead of pkt->pts in audio pts calculation
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* cehoyos/master:
Support compilation on aix with gcc.
Rename "AVClass class" as "AVClass component_class".
Rename constant FRAMESIZE in ra144 codec as FRAME_SIZE.
Rename thread_init() in libavcodec and libavfilter as library_thread_init().
Rename constant HZ in af_biquads.c as HERTZ.
Drop local lable from ppc asm timer.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '7798a59dc14ae27efe64e639a42646002608a908':
avconv: Don't include colorspace.h
No change as the commit is already part of ffmpeg.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '02ec656af72030eea4f3d63e30b25625cce6a3df':
wmapro: error out on impossible scale factor offsets
The check is replaced by an assert(), as the condition cannot be
true except through bugs elsewhere (which should have been fixed
already)
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '183880cfc4aae53ce504e13337791cad5841c80c':
pictor: use the correct logging context
No change, as this has already been fixed
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'c93ccf5a4cca722b39f05e9f5660b4cb75bc1740':
lpc: use levinson for the first pass of multipass cholesky
Conflicts:
libavcodec/lpc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '502ab21af0ca68f76d6112722c46d2f35c004053':
x86: lpc: simd av_update_lls
The versions are bumped due to changes in lls.h which is used across
libraries affecting intra library ABI
(This version bump also covers changes to lls.h in the immedeatly previous
commits)
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '41578f70cf8aec8e7565fba1ca7e07f3dc46c3d2':
lpc: use function pointers, in preparation for asm
Merged-by: Michael Niedermayer <michaelni@gmx.at>
And contextually check init_get_bits success and fix the reporting
message.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org