avfilter/overlay_cuda: add hsub and vsub compute x and y positions

fix problem when set x to odd number in nv12 by cuda

test step:
1. ffmpeg -f lavfi testsrc2=s=176x144 -pix_fmt nv12 -t 1 output_overlay.yuv
2. ffmpeg -f lavfi testsrc2=s=352x288 -pix_fmt nv12 -t 1 output_main.yuv
before this patch:
overlay_cuda=x=0:y=0 will right,
overlay_cuda=x=3:y=0 will wrong,

both will right after patch.

Signed-off-by: Steven Liu <liuqi05@kuaishou.com>
Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
This commit is contained in:
Steven Liu 2021-05-31 15:16:43 +08:00 committed by Timo Rothenpieler
parent 8bcce5673a
commit 282b9f4cba

View File

@ -145,11 +145,16 @@ static int overlay_cuda_blend(FFFrameSync *fs)
AVFilterContext *avctx = fs->parent;
OverlayCUDAContext *ctx = avctx->priv;
AVFilterLink *outlink = avctx->outputs[0];
AVFilterLink *inlink = avctx->inputs[0];
CudaFunctions *cu = ctx->hwctx->internal->cuda_dl;
CUcontext dummy, cuda_ctx = ctx->hwctx->cuda_ctx;
AVFrame *input_main, *input_overlay;
const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(inlink->format);
int hsub = pix_desc->log2_chroma_w;
int vsub = pix_desc->log2_chroma_h;
ctx->cu_ctx = cuda_ctx;
@ -178,6 +183,9 @@ static int overlay_cuda_blend(FFFrameSync *fs)
return ret;
}
ctx->x_position &= (1 << hsub) - 1;
ctx->y_position &= (1 << vsub) - 1;
// overlay first plane
overlay_cuda_call_kernel(ctx,