[vlc-devel] [PATCH 17/36] vdpau: set the video context in the picture context
Rémi Denis-Courmont
remi at remlab.net
Sat Nov 23 14:47:47 CET 2019
Le torstaina 21. marraskuuta 2019, 16.14.08 EET Steve Lhomme a écrit :
> ---
> modules/hw/vdpau/avcodec.c | 2 +-
> modules/hw/vdpau/chroma.c | 2 +-
> modules/hw/vdpau/picture.c | 10 ++++++----
> modules/hw/vdpau/vlc_vdpau.h | 4 ++--
> 4 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/modules/hw/vdpau/avcodec.c b/modules/hw/vdpau/avcodec.c
> index 74aa135f70c..6ff3a519563 100644
> --- a/modules/hw/vdpau/avcodec.c
> +++ b/modules/hw/vdpau/avcodec.c
> @@ -78,7 +78,7 @@ static vlc_vdp_video_field_t *CreateSurface(vlc_va_t *va)
> return NULL;
> }
>
> - vlc_vdp_video_field_t *field = vlc_vdp_video_create(vctx_priv->vdp,
> surface); + vlc_vdp_video_field_t *field =
> vlc_vdp_video_create(vctx_priv->vdp, surface, sys->vctx); if
> (unlikely(field == NULL))
> vdp_video_surface_destroy(vctx_priv->vdp, surface);
> return field;
> diff --git a/modules/hw/vdpau/chroma.c b/modules/hw/vdpau/chroma.c
> index 51a958ccc2d..ff816870d3f 100644
> --- a/modules/hw/vdpau/chroma.c
> +++ b/modules/hw/vdpau/chroma.c
> @@ -420,7 +420,7 @@ static picture_t *VideoImport(filter_t *filter,
> picture_t *src) picture_CopyProperties(dst, src);
> picture_Release(src);
>
> - err = vlc_vdp_video_attach(sys->vdp, surface, dst);
> + err = vlc_vdp_video_attach(sys->vdp, surface, filter->vctx_out, dst);
> if (unlikely(err != VDP_STATUS_OK))
> {
> picture_Release(dst);
> diff --git a/modules/hw/vdpau/picture.c b/modules/hw/vdpau/picture.c
> index 7bb72d56ec1..d876c1de9fd 100644
> --- a/modules/hw/vdpau/picture.c
> +++ b/modules/hw/vdpau/picture.c
> @@ -67,6 +67,7 @@ static picture_context_t
> *VideoSurfaceCopy(picture_context_t *ctx) return NULL;
>
> *fnew = *fold;
> + vlc_video_context_Hold(fnew->context.vctx);
>
> atomic_fetch_add(&fold->frame->refs, 1);
> return &fnew->context;
> @@ -82,7 +83,8 @@ static const VdpProcamp procamp_default =
> };
>
> vlc_vdp_video_field_t *vlc_vdp_video_create(vdp_t *vdp,
> - VdpVideoSurface surface)
> + VdpVideoSurface surface,
> + vlc_video_context *vctx)
> {
> vlc_vdp_video_field_t *field = malloc(sizeof (*field));
> vlc_vdp_video_frame_t *frame = malloc(sizeof (*frame));
> @@ -96,7 +98,7 @@ vlc_vdp_video_field_t *vlc_vdp_video_create(vdp_t *vdp,
>
> field->context = (picture_context_t) {
> VideoSurfaceDestroy, VideoSurfaceCopy,
> - NULL /*TODO*/
> + vlc_video_context_Hold(vctx)
> };
> field->frame = frame;
> field->structure = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME;
> @@ -110,9 +112,9 @@ vlc_vdp_video_field_t *vlc_vdp_video_create(vdp_t *vdp,
> }
>
> VdpStatus vlc_vdp_video_attach(vdp_t *vdp, VdpVideoSurface surface,
> - picture_t *pic)
> + vlc_video_context *vctx, picture_t *pic)
> {
> - vlc_vdp_video_field_t *field = vlc_vdp_video_create(vdp, surface);
> + vlc_vdp_video_field_t *field = vlc_vdp_video_create(vdp, surface,
> vctx); if (unlikely(field == NULL))
> return VDP_STATUS_RESOURCES;
>
> diff --git a/modules/hw/vdpau/vlc_vdpau.h b/modules/hw/vdpau/vlc_vdpau.h
> index ba5d1443bf0..338817611d4 100644
> --- a/modules/hw/vdpau/vlc_vdpau.h
> +++ b/modules/hw/vdpau/vlc_vdpau.h
> @@ -285,12 +285,12 @@ static inline vdp_t
> *GetVDPAUOpaqueDevice(vlc_decoder_device *device) /**
> * Attaches a VDPAU video surface as context of a VLC picture.
> */
> -VdpStatus vlc_vdp_video_attach(vdp_t *, VdpVideoSurface, picture_t *);
> +VdpStatus vlc_vdp_video_attach(vdp_t *, VdpVideoSurface, vlc_video_context
> *, picture_t *);
That does not make much sense, or rather, it's redundant. The vdp_t is already
binding the picture handle to the VDPAU driver instance.
>
> /**
> * Wraps a VDPAU video surface into a VLC picture context.
> */
> -vlc_vdp_video_field_t *vlc_vdp_video_create(vdp_t *, VdpVideoSurface);
> +vlc_vdp_video_field_t *vlc_vdp_video_create(vdp_t *, VdpVideoSurface,
> vlc_video_context *);
>
> static inline void vlc_vdp_video_destroy(vlc_vdp_video_field_t *f)
> {
--
雷米‧德尼-库尔蒙
http://www.remlab.net/
More information about the vlc-devel
mailing list