[PATCH] lavfi/kerndeint: use aligned linesizes for the temporary buffer.
This improves the performances just enough to match mp=kerndeint. --- libavfilter/vf_kerndeint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c index 382b8a7..a929714 100644 --- a/libavfilter/vf_kerndeint.c +++ b/libavfilter/vf_kerndeint.c @@ -102,7 +102,7 @@ static int config_props(AVFilterLink *inlink) kerndeint->vsub = desc->log2_chroma_h; ret = av_image_alloc(kerndeint->tmp_data, kerndeint->tmp_bwidth, - inlink->w, inlink->h, inlink->format, 1); + inlink->w, inlink->h, inlink->format, 16); if (ret < 0) return ret; memset(kerndeint->tmp_data[0], 0, ret); @@ -157,7 +157,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic) for (plane = 0; inpic->data[plane] && plane < 4; plane++) { h = plane == 0 ? inlink->h : inlink->h >> kerndeint->vsub; - bwidth = kerndeint->tmp_bwidth[plane]; + bwidth = av_image_get_linesize(inlink->format, inlink->w, plane); srcp = srcp_saved = inpic->data[plane]; src_linesize = inpic->linesize[plane]; -- 1.8.1
On date Sunday 2013-01-06 19:34:16 +0100, Clément Bœsch encoded:
This improves the performances just enough to match mp=kerndeint. --- libavfilter/vf_kerndeint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c index 382b8a7..a929714 100644 --- a/libavfilter/vf_kerndeint.c +++ b/libavfilter/vf_kerndeint.c @@ -102,7 +102,7 @@ static int config_props(AVFilterLink *inlink) kerndeint->vsub = desc->log2_chroma_h;
ret = av_image_alloc(kerndeint->tmp_data, kerndeint->tmp_bwidth, - inlink->w, inlink->h, inlink->format, 1); + inlink->w, inlink->h, inlink->format, 16);
so now you should rename tmp_bwidth to tmp_linesize.
if (ret < 0) return ret; memset(kerndeint->tmp_data[0], 0, ret); @@ -157,7 +157,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic)
for (plane = 0; inpic->data[plane] && plane < 4; plane++) { h = plane == 0 ? inlink->h : inlink->h >> kerndeint->vsub; - bwidth = kerndeint->tmp_bwidth[plane]; + bwidth = av_image_get_linesize(inlink->format, inlink->w, plane);
Alternatively, compute bwidth in config_props and store it in the kerndeint context, so you don't have to do it at each iteration. [...] -- FFmpeg = Fiendish & Faithless Minimal Portable Elitarian God
On date Sunday 2013-01-06 19:39:20 +0100, Stefano Sabatini encoded:
On date Sunday 2013-01-06 19:34:16 +0100, Clément Bœsch encoded:
This improves the performances just enough to match mp=kerndeint. --- libavfilter/vf_kerndeint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c index 382b8a7..a929714 100644 --- a/libavfilter/vf_kerndeint.c +++ b/libavfilter/vf_kerndeint.c @@ -102,7 +102,7 @@ static int config_props(AVFilterLink *inlink) kerndeint->vsub = desc->log2_chroma_h;
ret = av_image_alloc(kerndeint->tmp_data, kerndeint->tmp_bwidth, - inlink->w, inlink->h, inlink->format, 1); + inlink->w, inlink->h, inlink->format, 16);
so now you should rename tmp_bwidth to tmp_linesize.
if (ret < 0) return ret; memset(kerndeint->tmp_data[0], 0, ret); @@ -157,7 +157,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic)
for (plane = 0; inpic->data[plane] && plane < 4; plane++) { h = plane == 0 ? inlink->h : inlink->h >> kerndeint->vsub; - bwidth = kerndeint->tmp_bwidth[plane]; + bwidth = av_image_get_linesize(inlink->format, inlink->w, plane);
Alternatively, compute bwidth in config_props and store it in the kerndeint context, so you don't have to do it at each iteration.
Updated, with some times obtained with the command: ffmpeg -f lavfi -i testsrc=d=1000,format=yuv420p -vf kerndeint -f null - -nostats 25718880 decicycles in mp=kerndeint, 1 runs, 0 skips 21470880 decicycles in mp=kerndeint, 2 runs, 0 skips 19555522 decicycles in mp=kerndeint, 4 runs, 0 skips 18633052 decicycles in mp=kerndeint, 8 runs, 0 skips 18255161 decicycles in mp=kerndeint, 16 runs, 0 skips 17916630 decicycles in mp=kerndeint, 32 runs, 0 skips 17702259 decicycles in mp=kerndeint, 64 runs, 0 skips 17529867 decicycles in mp=kerndeint, 128 runs, 0 skips 17474829 decicycles in mp=kerndeint, 256 runs, 0 skips 17408026 decicycles in mp=kerndeint, 512 runs, 0 skips 17368836 decicycles in mp=kerndeint, 1024 runs, 0 skips 17427387 decicycles in mp=kerndeint, 2048 runs, 0 skips 17379097 decicycles in mp=kerndeint, 4096 runs, 0 skips 17351296 decicycles in mp=kerndeint, 8192 runs, 0 skips 17335514 decicycles in mp=kerndeint, 16384 runs, 0 skips 22046340 decicycles in kerndeint, 1 runs, 0 skips 19678950 decicycles in kerndeint, 2 runs, 0 skips 18574402 decicycles in kerndeint, 4 runs, 0 skips 17944616 decicycles in kerndeint, 8 runs, 0 skips 17824359 decicycles in kerndeint, 16 runs, 0 skips 17973234 decicycles in kerndeint, 32 runs, 0 skips 17672557 decicycles in kerndeint, 64 runs, 0 skips 17516272 decicycles in kerndeint, 128 runs, 0 skips 17364357 decicycles in kerndeint, 256 runs, 0 skips 17343821 decicycles in kerndeint, 512 runs, 0 skips 17297656 decicycles in kerndeint, 1024 runs, 0 skips 17269867 decicycles in kerndeint, 2048 runs, 0 skips 17303302 decicycles in kerndeint, 4096 runs, 0 skips 17280306 decicycles in kerndeint, 8192 runs, 0 skips 17242940 decicycles in kerndeint, 16384 runs, 0 skips I can't see any significant difference. -- FFmpeg = Fancy & Furious Meaningful Portable Extravagant Genius
On 2/15/13, Stefano Sabatini <stefasab@gmail.com> wrote:
On date Sunday 2013-01-06 19:39:20 +0100, Stefano Sabatini encoded:
On date Sunday 2013-01-06 19:34:16 +0100, Clement Boesch encoded:
This improves the performances just enough to match mp=kerndeint. --- libavfilter/vf_kerndeint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c index 382b8a7..a929714 100644 --- a/libavfilter/vf_kerndeint.c +++ b/libavfilter/vf_kerndeint.c @@ -102,7 +102,7 @@ static int config_props(AVFilterLink *inlink) kerndeint->vsub = desc->log2_chroma_h;
ret = av_image_alloc(kerndeint->tmp_data, kerndeint->tmp_bwidth, - inlink->w, inlink->h, inlink->format, 1); + inlink->w, inlink->h, inlink->format, 16);
so now you should rename tmp_bwidth to tmp_linesize.
if (ret < 0) return ret; memset(kerndeint->tmp_data[0], 0, ret); @@ -157,7 +157,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic)
for (plane = 0; inpic->data[plane] && plane < 4; plane++) { h = plane == 0 ? inlink->h : inlink->h >> kerndeint->vsub; - bwidth = kerndeint->tmp_bwidth[plane]; + bwidth = av_image_get_linesize(inlink->format, inlink->w, plane);
Alternatively, compute bwidth in config_props and store it in the kerndeint context, so you don't have to do it at each iteration.
Updated, with some times obtained with the command: ffmpeg -f lavfi -i testsrc=d=1000,format=yuv420p -vf kerndeint -f null - -nostats
25718880 decicycles in mp=kerndeint, 1 runs, 0 skips 21470880 decicycles in mp=kerndeint, 2 runs, 0 skips 19555522 decicycles in mp=kerndeint, 4 runs, 0 skips 18633052 decicycles in mp=kerndeint, 8 runs, 0 skips 18255161 decicycles in mp=kerndeint, 16 runs, 0 skips 17916630 decicycles in mp=kerndeint, 32 runs, 0 skips 17702259 decicycles in mp=kerndeint, 64 runs, 0 skips 17529867 decicycles in mp=kerndeint, 128 runs, 0 skips 17474829 decicycles in mp=kerndeint, 256 runs, 0 skips 17408026 decicycles in mp=kerndeint, 512 runs, 0 skips 17368836 decicycles in mp=kerndeint, 1024 runs, 0 skips 17427387 decicycles in mp=kerndeint, 2048 runs, 0 skips 17379097 decicycles in mp=kerndeint, 4096 runs, 0 skips 17351296 decicycles in mp=kerndeint, 8192 runs, 0 skips 17335514 decicycles in mp=kerndeint, 16384 runs, 0 skips
22046340 decicycles in kerndeint, 1 runs, 0 skips 19678950 decicycles in kerndeint, 2 runs, 0 skips 18574402 decicycles in kerndeint, 4 runs, 0 skips 17944616 decicycles in kerndeint, 8 runs, 0 skips 17824359 decicycles in kerndeint, 16 runs, 0 skips 17973234 decicycles in kerndeint, 32 runs, 0 skips 17672557 decicycles in kerndeint, 64 runs, 0 skips 17516272 decicycles in kerndeint, 128 runs, 0 skips 17364357 decicycles in kerndeint, 256 runs, 0 skips 17343821 decicycles in kerndeint, 512 runs, 0 skips 17297656 decicycles in kerndeint, 1024 runs, 0 skips 17269867 decicycles in kerndeint, 2048 runs, 0 skips 17303302 decicycles in kerndeint, 4096 runs, 0 skips 17280306 decicycles in kerndeint, 8192 runs, 0 skips 17242940 decicycles in kerndeint, 16384 runs, 0 skips
I can't see any significant difference. -- FFmpeg = Fancy & Furious Meaningful Portable Extravagant Genius
Fine for me.
On date Friday 2013-02-15 19:10:48 +0000, Paul B Mahol encoded:
On 2/15/13, Stefano Sabatini <stefasab@gmail.com> wrote:
On date Sunday 2013-01-06 19:39:20 +0100, Stefano Sabatini encoded:
On date Sunday 2013-01-06 19:34:16 +0100, Clement Boesch encoded:
This improves the performances just enough to match mp=kerndeint. --- libavfilter/vf_kerndeint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c index 382b8a7..a929714 100644 --- a/libavfilter/vf_kerndeint.c +++ b/libavfilter/vf_kerndeint.c @@ -102,7 +102,7 @@ static int config_props(AVFilterLink *inlink) kerndeint->vsub = desc->log2_chroma_h;
ret = av_image_alloc(kerndeint->tmp_data, kerndeint->tmp_bwidth, - inlink->w, inlink->h, inlink->format, 1); + inlink->w, inlink->h, inlink->format, 16);
so now you should rename tmp_bwidth to tmp_linesize.
if (ret < 0) return ret; memset(kerndeint->tmp_data[0], 0, ret); @@ -157,7 +157,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic)
for (plane = 0; inpic->data[plane] && plane < 4; plane++) { h = plane == 0 ? inlink->h : inlink->h >> kerndeint->vsub; - bwidth = kerndeint->tmp_bwidth[plane]; + bwidth = av_image_get_linesize(inlink->format, inlink->w, plane);
Alternatively, compute bwidth in config_props and store it in the kerndeint context, so you don't have to do it at each iteration.
Updated, with some times obtained with the command: ffmpeg -f lavfi -i testsrc=d=1000,format=yuv420p -vf kerndeint -f null - -nostats
Pushed, waiting for more benchmarks. -- FFmpeg = Fierce Fierce Mythic Pure Enlightened Geisha
participants (3)
-
Clément Bœsch -
Paul B Mahol -
Stefano Sabatini