[vlc-devel] [PATCH 2/2] nvdec: wait copies before releasing the CUDA frame
Steve Lhomme
robux4 at ycbcr.xyz
Tue Mar 24 09:18:16 CET 2020
LGTM
On 2020-03-23 18:11, quentin.chateau at deepskycorp.com wrote:
> From: Quentin Chateau <quentin.chateau at deepskycorp.com>
>
> ---
> modules/hw/nvdec/nvdec.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/modules/hw/nvdec/nvdec.c b/modules/hw/nvdec/nvdec.c
> index d2ec909fbc..a012a90eb9 100644
> --- a/modules/hw/nvdec/nvdec.c
> +++ b/modules/hw/nvdec/nvdec.c
> @@ -489,13 +489,19 @@ static int CUDAAPI HandlePictureDisplay(void *p_opaque, CUVIDPARSERDISPINFO *p_d
> .WidthInBytes = i_pitch,
> .Height = plane.i_visible_lines,
> };
> - result = CALL_CUDA_DEC(cuMemcpy2D, &cu_cpy);
> + result = CALL_CUDA_DEC(cuMemcpy2DAsync, &cu_cpy, 0);
> if (result != VLC_SUCCESS)
> goto error;
> srcY += p_sys->decoderHeight;
> }
> }
>
> + // Wait until copies are finished
> + result = CALL_CUDA_DEC(cuStreamSynchronize, 0);
> + if (unlikely(result != VLC_SUCCESS))
> + goto error;
> + }
> +
> // Release surface on GPU
> result = CALL_CUVID(cuvidUnmapVideoFrame, p_sys->cudecoder, frameDevicePtr);
> if (unlikely(result != VLC_SUCCESS))
> @@ -522,7 +528,13 @@ static int CUDAAPI HandlePictureDisplay(void *p_opaque, CUVIDPARSERDISPINFO *p_d
>
> error:
> if (frameDevicePtr)
> + {
> + // Synchronize stream to wait for potentitally pending copies
typo
> + // then unmap the frame.
> + // No need to check for errors, there is nothing we can do anyway
> + CALL_CUDA_DEC(cuStreamSynchronize, 0);
> CALL_CUVID(cuvidUnmapVideoFrame, p_sys->cudecoder, frameDevicePtr);
> + }
> CALL_CUDA_DEC(cuCtxPopCurrent, NULL);
> if (p_pic)
> picture_Release(p_pic);
> --
> 2.17.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
More information about the vlc-devel
mailing list