[FFmpeg-cvslog] lavfi/delogo: avoid propagation of rounding errors in chroma planes
Jean Delvare
git at videolan.org
Wed Jul 3 23:19:19 CEST 2013
ffmpeg | branch: master | Jean Delvare <khali at linux-fr.org> | Tue Jul 2 13:50:02 2013 +0200| [f0bcb13aedcff8b4a454347c634ac41aefab9e86] | committer: Michael Niedermayer
lavfi/delogo: avoid propagation of rounding errors in chroma planes
When operating on subsampled chroma planes, some rounding is taking
place. The left and top borders are rounded down while the width and
height are rounded up, so all rounding is done outward to guarantee the
logo area is fully covered.
The problem is that the width and height are counted from the
unrounded left and top borders, respectively. So if the left or top
border position has indeed been rounded down, and the width or height
needs no rounding (up), the position of the the right or bottom border
will be effectively rounded down, i.e. inward.
The issue can easily be seen with a yuv240p input and
-vf delogo=45:45:60:40:show=1 -vframes 1 delogo-bug.png
(or virtually any logo area with odd x and y and even width and
height.) The right and bottom chroma borders (in green) are clearly
off.
In order to fix this, the width and height must be adjusted to include
the bits lost in the rounding of the left and top border positions,
respectively, prior to being themselves rounded up.
Signed-off-by: Jean Delvare <khali at linux-fr.org>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f0bcb13aedcff8b4a454347c634ac41aefab9e86
---
libavfilter/vf_delogo.c | 6 +-
tests/ref/fate/filter-delogo | 218 +++++++++++++++++++++---------------------
2 files changed, 113 insertions(+), 111 deletions(-)
diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c
index ba35cf5..e882dd5 100644
--- a/libavfilter/vf_delogo.c
+++ b/libavfilter/vf_delogo.c
@@ -246,8 +246,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
FF_CEIL_RSHIFT(inlink->w, hsub),
FF_CEIL_RSHIFT(inlink->h, vsub),
sar, s->x>>hsub, s->y>>vsub,
- FF_CEIL_RSHIFT(s->w, hsub),
- FF_CEIL_RSHIFT(s->h, vsub),
+ /* Up and left borders were rounded down, inject lost bits
+ * into width and height to avoid error accumulation */
+ FF_CEIL_RSHIFT(s->w + (s->x & ((1<<hsub)-1)), hsub),
+ FF_CEIL_RSHIFT(s->h + (s->y & ((1<<vsub)-1)), vsub),
s->band>>FFMIN(hsub, vsub),
s->show, direct);
}
diff --git a/tests/ref/fate/filter-delogo b/tests/ref/fate/filter-delogo
index fc31ce5..80342ee 100644
--- a/tests/ref/fate/filter-delogo
+++ b/tests/ref/fate/filter-delogo
@@ -1,110 +1,110 @@
#tb 0: 32768/982057
-0, 0, 0, 1, 126720, 0x41c3ebfc
-0, 1, 1, 1, 126720, 0x16dfec9a
-0, 2, 2, 1, 126720, 0x16dfec9a
-0, 3, 3, 1, 126720, 0x16dfec9a
-0, 4, 4, 1, 126720, 0xd390ecdc
-0, 5, 5, 1, 126720, 0xf2eaf468
-0, 6, 6, 1, 126720, 0x2bcef4a8
-0, 7, 7, 1, 126720, 0x996ff488
-0, 8, 8, 1, 126720, 0x5adbb7e4
-0, 9, 9, 1, 126720, 0xce00b8a4
-0, 10, 10, 1, 126720, 0xc752b8e4
-0, 11, 11, 1, 126720, 0xd8c9b8b0
-0, 12, 12, 1, 126720, 0x3003b914
-0, 13, 13, 1, 126720, 0xaf93bb84
-0, 14, 14, 1, 126720, 0x0df4bc04
-0, 15, 15, 1, 126720, 0xe4f7bb90
-0, 16, 16, 1, 126720, 0xf4f0b8f4
-0, 17, 17, 1, 126720, 0x6bbbae4c
-0, 18, 18, 1, 126720, 0x189799b5
-0, 19, 19, 1, 126720, 0xb3aba7b9
-0, 20, 20, 1, 126720, 0xaa58ba49
-0, 21, 21, 1, 126720, 0xd458a85d
-0, 22, 22, 1, 126720, 0xe2f7ab39
-0, 23, 23, 1, 126720, 0xda46aa66
-0, 24, 24, 1, 126720, 0x5a87bca9
-0, 25, 25, 1, 126720, 0x30aea71a
-0, 26, 26, 1, 126720, 0xe7f2eafc
-0, 27, 27, 1, 126720, 0xb181b566
-0, 28, 28, 1, 126720, 0x06fc036b
-0, 29, 29, 1, 126720, 0x5b1184d0
-0, 30, 30, 1, 126720, 0xe0dd0159
-0, 31, 31, 1, 126720, 0x984eb9c2
-0, 32, 32, 1, 126720, 0x18de046e
-0, 33, 33, 1, 126720, 0x7739d63b
-0, 34, 34, 1, 126720, 0xa8aedbe1
-0, 35, 35, 1, 126720, 0x3a8bad65
-0, 36, 36, 1, 126720, 0xa0d879dd
-0, 37, 37, 1, 126720, 0x9880c604
-0, 38, 38, 1, 126720, 0xad34b4e2
-0, 39, 39, 1, 126720, 0x62ece114
-0, 40, 40, 1, 126720, 0x06321e84
-0, 41, 41, 1, 126720, 0xb8a278f7
-0, 42, 42, 1, 126720, 0xf3794872
-0, 43, 43, 1, 126720, 0x40228bd8
-0, 44, 44, 1, 126720, 0xd9eb99be
-0, 45, 45, 1, 126720, 0xcd71085c
-0, 46, 46, 1, 126720, 0x53b50e7d
-0, 47, 47, 1, 126720, 0x115825d5
-0, 48, 48, 1, 126720, 0xadb2d397
-0, 49, 49, 1, 126720, 0xd8c9e7b3
-0, 50, 50, 1, 126720, 0xb8b1e4c6
-0, 51, 51, 1, 126720, 0xcf7102d2
-0, 52, 52, 1, 126720, 0x9458eab9
-0, 53, 53, 1, 126720, 0x9654ee85
-0, 54, 54, 1, 126720, 0xf9c8f16b
-0, 55, 55, 1, 126720, 0x37bb27c6
-0, 56, 56, 1, 126720, 0x01f29e29
-0, 57, 57, 1, 126720, 0x2090dc6b
-0, 58, 58, 1, 126720, 0x3f6fd6cb
-0, 59, 59, 1, 126720, 0x16110602
-0, 60, 60, 1, 126720, 0x8f56b840
-0, 61, 61, 1, 126720, 0x12f44aa7
-0, 62, 62, 1, 126720, 0x8a3b2db5
-0, 63, 63, 1, 126720, 0xea6e4b48
-0, 64, 64, 1, 126720, 0xf72e3057
-0, 65, 65, 1, 126720, 0xbcb28cb0
-0, 66, 66, 1, 126720, 0xd8d08db4
-0, 67, 67, 1, 126720, 0x93cd8232
-0, 68, 68, 1, 126720, 0x58421200
-0, 69, 69, 1, 126720, 0xb9754164
-0, 70, 70, 1, 126720, 0xeb259b9c
-0, 71, 71, 1, 126720, 0xaa726578
-0, 72, 72, 1, 126720, 0xe66825b1
-0, 73, 73, 1, 126720, 0x9742aa58
-0, 74, 74, 1, 126720, 0x8fa5815e
-0, 75, 75, 1, 126720, 0xbaf341c7
-0, 76, 76, 1, 126720, 0x94ed5495
-0, 77, 77, 1, 126720, 0x0c11685f
-0, 78, 78, 1, 126720, 0x9ba46776
-0, 79, 79, 1, 126720, 0x3ee0921d
-0, 80, 80, 1, 126720, 0x736df713
-0, 81, 81, 1, 126720, 0xed1aa7dc
-0, 82, 82, 1, 126720, 0x916661df
-0, 83, 83, 1, 126720, 0xa4e75cb4
-0, 84, 84, 1, 126720, 0xb341408d
-0, 85, 85, 1, 126720, 0x3dbf5bf7
-0, 86, 86, 1, 126720, 0x03c990aa
-0, 87, 87, 1, 126720, 0x4d598768
-0, 88, 88, 1, 126720, 0xfd953b86
-0, 89, 89, 1, 126720, 0xf9796c69
-0, 90, 90, 1, 126720, 0xe125664e
-0, 91, 91, 1, 126720, 0x7afc671f
-0, 92, 92, 1, 126720, 0x5cb8e0d5
-0, 93, 93, 1, 126720, 0x5d7d2928
-0, 94, 94, 1, 126720, 0xa9f8faa8
-0, 95, 95, 1, 126720, 0x2c767188
-0, 96, 96, 1, 126720, 0x0188e449
-0, 97, 97, 1, 126720, 0x8483812a
-0, 98, 98, 1, 126720, 0x54953eb4
-0, 99, 99, 1, 126720, 0x7980503e
-0, 100, 100, 1, 126720, 0xc6931503
-0, 101, 101, 1, 126720, 0xc15613f4
-0, 102, 102, 1, 126720, 0xd59fe8fd
-0, 103, 103, 1, 126720, 0x71ed62b7
-0, 104, 104, 1, 126720, 0x4c154002
-0, 105, 105, 1, 126720, 0x7219bca5
-0, 106, 106, 1, 126720, 0x3a04a755
-0, 107, 107, 1, 126720, 0x0784ad95
-0, 108, 108, 1, 126720, 0x29575bd4
+0, 0, 0, 1, 126720, 0x77a5ebed
+0, 1, 1, 1, 126720, 0x4cc1ec8b
+0, 2, 2, 1, 126720, 0x4cc1ec8b
+0, 3, 3, 1, 126720, 0x4cc1ec8b
+0, 4, 4, 1, 126720, 0x0981eccd
+0, 5, 5, 1, 126720, 0x04fef463
+0, 6, 6, 1, 126720, 0x3dd3f4a3
+0, 7, 7, 1, 126720, 0xab74f483
+0, 8, 8, 1, 126720, 0x5ed7b7db
+0, 9, 9, 1, 126720, 0xd1fcb89b
+0, 10, 10, 1, 126720, 0xcb4eb8db
+0, 11, 11, 1, 126720, 0xdcc5b8a7
+0, 12, 12, 1, 126720, 0x33ffb90b
+0, 13, 13, 1, 126720, 0xb38fbb7b
+0, 14, 14, 1, 126720, 0x11f0bbfb
+0, 15, 15, 1, 126720, 0xe8f3bb87
+0, 16, 16, 1, 126720, 0xf8ecb8eb
+0, 17, 17, 1, 126720, 0x5db2ae48
+0, 18, 18, 1, 126720, 0x4e7999a6
+0, 19, 19, 1, 126720, 0xdb84a7a6
+0, 20, 20, 1, 126720, 0x9c4fba45
+0, 21, 21, 1, 126720, 0xe635a858
+0, 22, 22, 1, 126720, 0xd4eeab35
+0, 23, 23, 1, 126720, 0xc416aa56
+0, 24, 24, 1, 126720, 0x4c7ebca5
+0, 25, 25, 1, 126720, 0x2887a70e
+0, 26, 26, 1, 126720, 0xc978eaf1
+0, 27, 27, 1, 126720, 0x8a29b563
+0, 28, 28, 1, 126720, 0x275a0352
+0, 29, 29, 1, 126720, 0x446484bb
+0, 30, 30, 1, 126720, 0xdbe00151
+0, 31, 31, 1, 126720, 0x5874b9aa
+0, 32, 32, 1, 126720, 0xdeb30460
+0, 33, 33, 1, 126720, 0xc6d2d62a
+0, 34, 34, 1, 126720, 0x9270dbc7
+0, 35, 35, 1, 126720, 0x30e4ad59
+0, 36, 36, 1, 126720, 0x117479cd
+0, 37, 37, 1, 126720, 0x0567c5d2
+0, 38, 38, 1, 126720, 0x87c8b4a5
+0, 39, 39, 1, 126720, 0xe5c5e0d1
+0, 40, 40, 1, 126720, 0x78d61e3f
+0, 41, 41, 1, 126720, 0xda8d787f
+0, 42, 42, 1, 126720, 0xf32547f7
+0, 43, 43, 1, 126720, 0x70bc8b60
+0, 44, 44, 1, 126720, 0x3ad09927
+0, 45, 45, 1, 126720, 0x5d9607d6
+0, 46, 46, 1, 126720, 0x348a0e02
+0, 47, 47, 1, 126720, 0x7d21255c
+0, 48, 48, 1, 126720, 0x308ed32b
+0, 49, 49, 1, 126720, 0x79fbe734
+0, 50, 50, 1, 126720, 0xdc5de409
+0, 51, 51, 1, 126720, 0x4ee00283
+0, 52, 52, 1, 126720, 0x2697ea2e
+0, 53, 53, 1, 126720, 0x0885edeb
+0, 54, 54, 1, 126720, 0xc041f0d8
+0, 55, 55, 1, 126720, 0xa893272e
+0, 56, 56, 1, 126720, 0x55419d4e
+0, 57, 57, 1, 126720, 0xbc47dbb5
+0, 58, 58, 1, 126720, 0x9666d60b
+0, 59, 59, 1, 126720, 0xac5c054a
+0, 60, 60, 1, 126720, 0x4affb780
+0, 61, 61, 1, 126720, 0x2b7349eb
+0, 62, 62, 1, 126720, 0x75592d02
+0, 63, 63, 1, 126720, 0xdb904a83
+0, 64, 64, 1, 126720, 0xf85e2f93
+0, 65, 65, 1, 126720, 0x632f8be8
+0, 66, 66, 1, 126720, 0x96108ce4
+0, 67, 67, 1, 126720, 0xb68e816b
+0, 68, 68, 1, 126720, 0x89ca112f
+0, 69, 69, 1, 126720, 0x4bed40d3
+0, 70, 70, 1, 126720, 0xe4cb9b12
+0, 71, 71, 1, 126720, 0xa4f164ec
+0, 72, 72, 1, 126720, 0xd1aa2554
+0, 73, 73, 1, 126720, 0x0277aa01
+0, 74, 74, 1, 126720, 0x8ea280fd
+0, 75, 75, 1, 126720, 0xbae64170
+0, 76, 76, 1, 126720, 0xaf9b543b
+0, 77, 77, 1, 126720, 0x1b31680a
+0, 78, 78, 1, 126720, 0x7da4671e
+0, 79, 79, 1, 126720, 0x82b791cb
+0, 80, 80, 1, 126720, 0xd2fff6bb
+0, 81, 81, 1, 126720, 0x2395a793
+0, 82, 82, 1, 126720, 0x66586185
+0, 83, 83, 1, 126720, 0x99c55c63
+0, 84, 84, 1, 126720, 0x7e3f403e
+0, 85, 85, 1, 126720, 0x9eda5b9a
+0, 86, 86, 1, 126720, 0x27469047
+0, 87, 87, 1, 126720, 0xaa5b870e
+0, 88, 88, 1, 126720, 0x70423b2a
+0, 89, 89, 1, 126720, 0x70d86c0a
+0, 90, 90, 1, 126720, 0x4bd065f3
+0, 91, 91, 1, 126720, 0xd71f66bb
+0, 92, 92, 1, 126720, 0x5333e081
+0, 93, 93, 1, 126720, 0xdf0b28d6
+0, 94, 94, 1, 126720, 0x6c48fa53
+0, 95, 95, 1, 126720, 0x9438712d
+0, 96, 96, 1, 126720, 0x9910e3ec
+0, 97, 97, 1, 126720, 0xb0ea80dd
+0, 98, 98, 1, 126720, 0x71983e67
+0, 99, 99, 1, 126720, 0x18924fe6
+0, 100, 100, 1, 126720, 0x9ca014b9
+0, 101, 101, 1, 126720, 0x45f013a0
+0, 102, 102, 1, 126720, 0xf697e8a9
+0, 103, 103, 1, 126720, 0x214a626a
+0, 104, 104, 1, 126720, 0xb2873fb5
+0, 105, 105, 1, 126720, 0xfb47bc52
+0, 106, 106, 1, 126720, 0x63b7a708
+0, 107, 107, 1, 126720, 0x1904ad40
+0, 108, 108, 1, 126720, 0x80015b91
More information about the ffmpeg-cvslog
mailing list