aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-05-24 17:34:36 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-05-24 17:47:02 +0200
commitbca59d7745e4fa4ed5444da959d6b487cd14e994 (patch)
treece820659bb16417a8b39aee4df3fd947020290b6
parent1d08e4b584cc8a12fa4b63bc13829f1e6d4f2e55 (diff)
downloadffmpeg-bca59d7745e4fa4ed5444da959d6b487cd14e994.tar.gz
fade: fix slice sizes
This more evenly distributes the load between threads This also fixes the chroma filtering where the filter was applied twice Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavfilter/vf_fade.c13
-rw-r--r--tests/ref/fate/filter-fade56
2 files changed, 34 insertions, 35 deletions
diff --git a/libavfilter/vf_fade.c b/libavfilter/vf_fade.c
index 60a690b9e9..5bdec1132e 100644
--- a/libavfilter/vf_fade.c
+++ b/libavfilter/vf_fade.c
@@ -163,9 +163,8 @@ static int filter_slice_luma(AVFilterContext *ctx, void *arg, int jobnr,
{
FadeContext *s = ctx->priv;
AVFrame *frame = arg;
- int slice_h = frame->height / nb_jobs;
- int slice_start = jobnr * slice_h;
- int slice_end = (jobnr == nb_jobs - 1) ? frame->height : (jobnr + 1) * slice_h;
+ int slice_start = (frame->height * jobnr ) / nb_jobs;
+ int slice_end = (frame->height * (jobnr+1)) / nb_jobs;
int i, j;
for (i = slice_start; i < slice_end; i++) {
@@ -187,15 +186,15 @@ static int filter_slice_chroma(AVFilterContext *ctx, void *arg, int jobnr,
{
FadeContext *s = ctx->priv;
AVFrame *frame = arg;
- int slice_h = FFALIGN(frame->height / nb_jobs, 1 << s->vsub);
- int slice_start = jobnr * slice_h;
- int slice_end = (jobnr == nb_jobs - 1) ? frame->height : (jobnr + 1) * slice_h;
int i, j, plane;
const int width = FF_CEIL_RSHIFT(frame->width, s->hsub);
+ const int height= FF_CEIL_RSHIFT(frame->height, s->vsub);
+ int slice_start = (height * jobnr ) / nb_jobs;
+ int slice_end = (height * (jobnr+1)) / nb_jobs;
for (plane = 1; plane < 3; plane++) {
for (i = slice_start; i < slice_end; i++) {
- uint8_t *p = frame->data[plane] + (i >> s->vsub) * frame->linesize[plane];
+ uint8_t *p = frame->data[plane] + i * frame->linesize[plane];
for (j = 0; j < width; j++) {
/* 8421367 = ((128 << 1) + 1) << 15. It is an integer
* representation of 128.5. The .5 is for rounding
diff --git a/tests/ref/fate/filter-fade b/tests/ref/fate/filter-fade
index 446db77a52..9d691ce90d 100644
--- a/tests/ref/fate/filter-fade
+++ b/tests/ref/fate/filter-fade
@@ -5,20 +5,20 @@
0, 3, 3, 1, 152064, 0xb4e6c735
0, 4, 4, 1, 152064, 0xb4e6c735
0, 5, 5, 1, 152064, 0xb4e6c735
-0, 6, 6, 1, 152064, 0x54bae320
-0, 7, 7, 1, 152064, 0x53b60b7e
-0, 8, 8, 1, 152064, 0x8bed0304
-0, 9, 9, 1, 152064, 0x509c4b78
-0, 10, 10, 1, 152064, 0x4cf869a4
-0, 11, 11, 1, 152064, 0x958b7c66
-0, 12, 12, 1, 152064, 0x45841fbf
-0, 13, 13, 1, 152064, 0xcfee57ea
-0, 14, 14, 1, 152064, 0x979ff709
-0, 15, 15, 1, 152064, 0xf7ffd5e2
-0, 16, 16, 1, 152064, 0xc42f4370
-0, 17, 17, 1, 152064, 0x71ae098f
-0, 18, 18, 1, 152064, 0x64146a42
-0, 19, 19, 1, 152064, 0xdb3068fd
+0, 6, 6, 1, 152064, 0x1f3b0657
+0, 7, 7, 1, 152064, 0x6e7547e6
+0, 8, 8, 1, 152064, 0x1197524c
+0, 9, 9, 1, 152064, 0xb4cdb293
+0, 10, 10, 1, 152064, 0xdd7cf1b8
+0, 11, 11, 1, 152064, 0x360b1005
+0, 12, 12, 1, 152064, 0x11a49918
+0, 13, 13, 1, 152064, 0xa10dd4f9
+0, 14, 14, 1, 152064, 0x78da71d7
+0, 15, 15, 1, 152064, 0x105e4cc0
+0, 16, 16, 1, 152064, 0x54bfa1c5
+0, 17, 17, 1, 152064, 0xd666559e
+0, 18, 18, 1, 152064, 0xd93faa1c
+0, 19, 19, 1, 152064, 0xb1af85ed
0, 20, 20, 1, 152064, 0xfc7bf570
0, 21, 21, 1, 152064, 0x9dc72412
0, 22, 22, 1, 152064, 0x445d1d59
@@ -30,20 +30,20 @@
0, 28, 28, 1, 152064, 0x76d2a455
0, 29, 29, 1, 152064, 0x6dc3650e
0, 30, 30, 1, 152064, 0x0f9d6aca
-0, 31, 31, 1, 152064, 0x11446a9b
-0, 32, 32, 1, 152064, 0x00be684c
-0, 33, 33, 1, 152064, 0xe5f9ee52
-0, 34, 34, 1, 152064, 0x21ecafb8
-0, 35, 35, 1, 152064, 0xd42c962c
-0, 36, 36, 1, 152064, 0xe00a270d
-0, 37, 37, 1, 152064, 0xc1b53878
-0, 38, 38, 1, 152064, 0xfc4e28dd
-0, 39, 39, 1, 152064, 0x9c574e39
-0, 40, 40, 1, 152064, 0xdd25cf9d
-0, 41, 41, 1, 152064, 0x32959e70
-0, 42, 42, 1, 152064, 0xac6498d5
-0, 43, 43, 1, 152064, 0xcd595d21
-0, 44, 44, 1, 152064, 0x2953ff74
+0, 31, 31, 1, 152064, 0xddae8141
+0, 32, 32, 1, 152064, 0x67cb8f24
+0, 33, 33, 1, 152064, 0xc7a72348
+0, 34, 34, 1, 152064, 0x0d7a1144
+0, 35, 35, 1, 152064, 0x39adfb3d
+0, 36, 36, 1, 152064, 0x0ecc70d5
+0, 37, 37, 1, 152064, 0xf3a6805e
+0, 38, 38, 1, 152064, 0xc3bd71ad
+0, 39, 39, 1, 152064, 0xa9be9730
+0, 40, 40, 1, 152064, 0xab9af790
+0, 41, 41, 1, 152064, 0x4c3ccd25
+0, 42, 42, 1, 152064, 0xbc83c58a
+0, 43, 43, 1, 152064, 0x94877df4
+0, 44, 44, 1, 152064, 0xa2360ea6
0, 45, 45, 1, 152064, 0xb4e6c735
0, 46, 46, 1, 152064, 0xb4e6c735
0, 47, 47, 1, 152064, 0xb4e6c735