Browse Source

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>
tags/n2.0
Michael Niedermayer 12 years ago
parent
commit
bca59d7745
2 changed files with 34 additions and 35 deletions
  1. +6
    -7
      libavfilter/vf_fade.c
  2. +28
    -28
      tests/ref/fate/filter-fade

+ 6
- 7
libavfilter/vf_fade.c View File

@@ -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 = 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; 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,
{ {
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


+ 28
- 28
tests/ref/fate/filter-fade View File

@@ -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, 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, 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 @@
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, 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, 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


Loading…
Cancel
Save