提交 bca59d77 编写于 作者: M Michael Niedermayer

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: NMichael Niedermayer <michaelni@gmx.at>
上级 1d08e4b5
...@@ -163,9 +163,8 @@ static int filter_slice_luma(AVFilterContext *ctx, void *arg, int jobnr, ...@@ -163,9 +163,8 @@ static int filter_slice_luma(AVFilterContext *ctx, void *arg, int jobnr,
{ {
FadeContext *s = ctx->priv; FadeContext *s = ctx->priv;
AVFrame *frame = arg; AVFrame *frame = arg;
int slice_h = frame->height / nb_jobs; int slice_start = (frame->height * jobnr ) / nb_jobs;
int slice_start = jobnr * slice_h; int slice_end = (frame->height * (jobnr+1)) / nb_jobs;
int slice_end = (jobnr == nb_jobs - 1) ? frame->height : (jobnr + 1) * slice_h;
int i, j; int i, j;
for (i = slice_start; i < slice_end; i++) { for (i = slice_start; i < slice_end; i++) {
...@@ -187,15 +186,15 @@ static int filter_slice_chroma(AVFilterContext *ctx, void *arg, int jobnr, ...@@ -187,15 +186,15 @@ static int filter_slice_chroma(AVFilterContext *ctx, void *arg, int jobnr,
{ {
FadeContext *s = ctx->priv; FadeContext *s = ctx->priv;
AVFrame *frame = arg; 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; int i, j, plane;
const int width = FF_CEIL_RSHIFT(frame->width, s->hsub); 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 (plane = 1; plane < 3; plane++) {
for (i = slice_start; i < slice_end; i++) { 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++) { for (j = 0; j < width; j++) {
/* 8421367 = ((128 << 1) + 1) << 15. It is an integer /* 8421367 = ((128 << 1) + 1) << 15. It is an integer
* representation of 128.5. The .5 is for rounding * representation of 128.5. The .5 is for rounding
......
...@@ -5,20 +5,20 @@ ...@@ -5,20 +5,20 @@
0, 3, 3, 1, 152064, 0xb4e6c735 0, 3, 3, 1, 152064, 0xb4e6c735
0, 4, 4, 1, 152064, 0xb4e6c735 0, 4, 4, 1, 152064, 0xb4e6c735
0, 5, 5, 1, 152064, 0xb4e6c735 0, 5, 5, 1, 152064, 0xb4e6c735
0, 6, 6, 1, 152064, 0x54bae320 0, 6, 6, 1, 152064, 0x1f3b0657
0, 7, 7, 1, 152064, 0x53b60b7e 0, 7, 7, 1, 152064, 0x6e7547e6
0, 8, 8, 1, 152064, 0x8bed0304 0, 8, 8, 1, 152064, 0x1197524c
0, 9, 9, 1, 152064, 0x509c4b78 0, 9, 9, 1, 152064, 0xb4cdb293
0, 10, 10, 1, 152064, 0x4cf869a4 0, 10, 10, 1, 152064, 0xdd7cf1b8
0, 11, 11, 1, 152064, 0x958b7c66 0, 11, 11, 1, 152064, 0x360b1005
0, 12, 12, 1, 152064, 0x45841fbf 0, 12, 12, 1, 152064, 0x11a49918
0, 13, 13, 1, 152064, 0xcfee57ea 0, 13, 13, 1, 152064, 0xa10dd4f9
0, 14, 14, 1, 152064, 0x979ff709 0, 14, 14, 1, 152064, 0x78da71d7
0, 15, 15, 1, 152064, 0xf7ffd5e2 0, 15, 15, 1, 152064, 0x105e4cc0
0, 16, 16, 1, 152064, 0xc42f4370 0, 16, 16, 1, 152064, 0x54bfa1c5
0, 17, 17, 1, 152064, 0x71ae098f 0, 17, 17, 1, 152064, 0xd666559e
0, 18, 18, 1, 152064, 0x64146a42 0, 18, 18, 1, 152064, 0xd93faa1c
0, 19, 19, 1, 152064, 0xdb3068fd 0, 19, 19, 1, 152064, 0xb1af85ed
0, 20, 20, 1, 152064, 0xfc7bf570 0, 20, 20, 1, 152064, 0xfc7bf570
0, 21, 21, 1, 152064, 0x9dc72412 0, 21, 21, 1, 152064, 0x9dc72412
0, 22, 22, 1, 152064, 0x445d1d59 0, 22, 22, 1, 152064, 0x445d1d59
...@@ -30,20 +30,20 @@ ...@@ -30,20 +30,20 @@
0, 28, 28, 1, 152064, 0x76d2a455 0, 28, 28, 1, 152064, 0x76d2a455
0, 29, 29, 1, 152064, 0x6dc3650e 0, 29, 29, 1, 152064, 0x6dc3650e
0, 30, 30, 1, 152064, 0x0f9d6aca 0, 30, 30, 1, 152064, 0x0f9d6aca
0, 31, 31, 1, 152064, 0x11446a9b 0, 31, 31, 1, 152064, 0xddae8141
0, 32, 32, 1, 152064, 0x00be684c 0, 32, 32, 1, 152064, 0x67cb8f24
0, 33, 33, 1, 152064, 0xe5f9ee52 0, 33, 33, 1, 152064, 0xc7a72348
0, 34, 34, 1, 152064, 0x21ecafb8 0, 34, 34, 1, 152064, 0x0d7a1144
0, 35, 35, 1, 152064, 0xd42c962c 0, 35, 35, 1, 152064, 0x39adfb3d
0, 36, 36, 1, 152064, 0xe00a270d 0, 36, 36, 1, 152064, 0x0ecc70d5
0, 37, 37, 1, 152064, 0xc1b53878 0, 37, 37, 1, 152064, 0xf3a6805e
0, 38, 38, 1, 152064, 0xfc4e28dd 0, 38, 38, 1, 152064, 0xc3bd71ad
0, 39, 39, 1, 152064, 0x9c574e39 0, 39, 39, 1, 152064, 0xa9be9730
0, 40, 40, 1, 152064, 0xdd25cf9d 0, 40, 40, 1, 152064, 0xab9af790
0, 41, 41, 1, 152064, 0x32959e70 0, 41, 41, 1, 152064, 0x4c3ccd25
0, 42, 42, 1, 152064, 0xac6498d5 0, 42, 42, 1, 152064, 0xbc83c58a
0, 43, 43, 1, 152064, 0xcd595d21 0, 43, 43, 1, 152064, 0x94877df4
0, 44, 44, 1, 152064, 0x2953ff74 0, 44, 44, 1, 152064, 0xa2360ea6
0, 45, 45, 1, 152064, 0xb4e6c735 0, 45, 45, 1, 152064, 0xb4e6c735
0, 46, 46, 1, 152064, 0xb4e6c735 0, 46, 46, 1, 152064, 0xb4e6c735
0, 47, 47, 1, 152064, 0xb4e6c735 0, 47, 47, 1, 152064, 0xb4e6c735
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册