[vlc-devel] [PATCH 17/36] vdpau: set the video context in the picture context
Steve Lhomme
robux4 at ycbcr.xyz
Mon Nov 25 11:06:20 CET 2019
On 2019-11-23 14:47, Rémi Denis-Courmont wrote:
> 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.
It's a patch to add the proper video context handling in pictures
containing VDPAU opaque chromas. If there's any redundancy to clean,
that would be in another patch, later. I think the whole instance system
can go away in the end but we'll see.
There are also plenty of redundancy between picture_context_t and
picture_sys_t. That will be cleaned when things are working as they
should in push.
>>
>> /**
>> * 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/
>
>
>
> _______________________________________________
> 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