From: Limin Wang <[email protected]>
Signed-off-by: Limin Wang <[email protected]>
---
libavfilter/vf_guided.c | 77 ++++++++++++++++++++++++-------------------------
1 file changed, 38 insertions(+), 39 deletions(-)
diff --git a/libavfilter/vf_guided.c b/libavfilter/vf_guided.c
index f808ba1..066a00d 100644
--- a/libavfilter/vf_guided.c
+++ b/libavfilter/vf_guided.c
@@ -110,19 +110,19 @@ static int box_slice(AVFilterContext *ctx, void *arg, int
jobnr, int nb_jobs)
w = (radius << 1) + 1;
numPix = w * w;
for (int i = slice_start;i < slice_end;i++) {
- for (int j = 0;j < width;j++) {
- float temp = 0.0;
- for (int row = -radius;row <= radius;row++) {
- for (int col = -radius;col <= radius;col++) {
- int x = i + row;
- int y = j + col;
- x = (x < 0) ? 0 : (x >= height ? height - 1 : x);
- y = (y < 0) ? 0 : (y >= width ? width - 1 : y);
- temp += src[x * src_stride + y];
- }
+ for (int j = 0;j < width;j++) {
+ float temp = 0.0;
+ for (int row = -radius;row <= radius;row++) {
+ for (int col = -radius;col <= radius;col++) {
+ int x = i + row;
+ int y = j + col;
+ x = (x < 0) ? 0 : (x >= height ? height - 1 : x);
+ y = (y < 0) ? 0 : (y >= width ? width - 1 : y);
+ temp += src[x * src_stride + y];
+ }
+ }
+ dst[i * dst_stride + j] = temp / numPix;
}
- dst[i * dst_stride + j] = temp / numPix;
- }
}
return 0;
}
@@ -161,8 +161,7 @@ static int config_input(AVFilterLink *inlink)
if (s->mode == BASIC) {
s->sub = 1;
- }
- else if (s->mode == FAST) {
+ } else if (s->mode == FAST) {
if (s->radius >= s->sub)
s->radius = s->radius / s->sub;
else {
@@ -235,13 +234,13 @@ static int guided_##name(AVFilterContext *ctx,
GuidedContext *s,
goto end;
\
}
\
for (int i = 0;i < h;i++) {
\
- for (int j = 0;j < w;j++) {
\
- int x = i * w + j;
\
- I[x] = src[(i * src_stride + j) * sub] / maxval;
\
- II[x] = I[x] * I[x];
\
- P[x] = srcRef[(i * src_ref_stride + j) * sub] / maxval;
\
- IP[x] = I[x] * P[x];
\
- }
\
+ for (int j = 0;j < w;j++) {
\
+ int x = i * w + j;
\
+ I[x] = src[(i * src_stride + j) * sub] / maxval;
\
+ II[x] = I[x] * I[x];
\
+ P[x] = srcRef[(i * src_ref_stride + j) * sub] / maxval;
\
+ IP[x] = I[x] * P[x];
\
+ }
\
}
\
\
t.width = w;
\
@@ -262,13 +261,13 @@ static int guided_##name(AVFilterContext *ctx,
GuidedContext *s,
ff_filter_execute(ctx, s->box_slice, &t, NULL, FFMIN(h, nb_threads));
\
\
for (int i = 0;i < h;i++) {
\
- for (int j = 0;j < w;j++) {
\
- int x = i * w + j;
\
- float varI = meanII[x] - (meanI[x] * meanI[x]);
\
- float covIP = meanIP[x] - (meanI[x] * meanP[x]);
\
- A[x] = covIP / (varI + eps);
\
- B[x] = meanP[x] - A[x] * meanI[x];
\
- }
\
+ for (int j = 0;j < w;j++) {
\
+ int x = i * w + j;
\
+ float varI = meanII[x] - (meanI[x] * meanI[x]);
\
+ float covIP = meanIP[x] - (meanI[x] * meanP[x]);
\
+ A[x] = covIP / (varI + eps);
\
+ B[x] = meanP[x] - A[x] * meanI[x];
\
+ }
\
}
\
\
t.src = A;
\
@@ -279,11 +278,11 @@ static int guided_##name(AVFilterContext *ctx,
GuidedContext *s,
ff_filter_execute(ctx, s->box_slice, &t, NULL, FFMIN(h, nb_threads));
\
\
for (int i = 0;i < height;i++) {
\
- for (int j = 0;j < width;j++) {
\
- int x = i / sub * w + j / sub;
\
- dst[i * dst_stride + j] = meanA[x] * src[i * src_stride + j] +
\
- meanB[x] * maxval;
\
- }
\
+ for (int j = 0;j < width;j++) {
\
+ int x = i / sub * w + j / sub;
\
+ dst[i * dst_stride + j] = meanA[x] * src[i * src_stride + j] +
\
+ meanB[x] * maxval;
\
+ }
\
}
\
end:
\
av_freep(&I);
\
@@ -321,13 +320,13 @@ static int filter_frame(AVFilterContext *ctx, AVFrame
**out, AVFrame *in, AVFram
continue;
}
if (s->depth <= 8)
- guided_byte(ctx, s, in->data[plane], ref->data[plane],
(*out)->data[plane], s->radius, s->eps,
- s->planewidth[plane], s->planeheight[plane],
- in->linesize[plane], ref->linesize[plane],
(*out)->linesize[plane], (1 << s->depth) - 1.f);
+ guided_byte(ctx, s, in->data[plane], ref->data[plane],
(*out)->data[plane], s->radius, s->eps,
+ s->planewidth[plane], s->planeheight[plane],
+ in->linesize[plane], ref->linesize[plane],
(*out)->linesize[plane], (1 << s->depth) - 1.f);
else
- guided_word(ctx, s, in->data[plane], ref->data[plane],
(*out)->data[plane], s->radius, s->eps,
- s->planewidth[plane], s->planeheight[plane],
- in->linesize[plane] / 2, ref->linesize[plane] / 2,
(*out)->linesize[plane] / 2, (1 << s->depth) - 1.f);
+ guided_word(ctx, s, in->data[plane], ref->data[plane],
(*out)->data[plane], s->radius, s->eps,
+ s->planewidth[plane], s->planeheight[plane],
+ in->linesize[plane] / 2, ref->linesize[plane] / 2,
(*out)->linesize[plane] / 2, (1 << s->depth) - 1.f);
}
return 0;
--
1.8.3.1
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".