[vlc-devel] [PATCH 01/19] vout: kms: don't use a custom picture destroy
Alexandre Janniaux
ajanni at videolabs.io
Thu Jul 30 14:26:01 CEST 2020
Hi,
Missing initialization for picture_resource_t.
Regards,
--
Alexandre Janniaux
Videolabs
On Thu, Jul 30, 2020 at 02:16:42PM +0200, Steve Lhomme wrote:
> The picture is not used outside of this file. We don't need to use the picture
> release refcount to release the resources used in the picture.
>
> That's how other display modules handle their dummy local picture. The picture
> is allocated locally and the resources are released locally at the end.
> ---
> modules/video_output/kms.c | 25 +++----------------------
> 1 file changed, 3 insertions(+), 22 deletions(-)
>
> diff --git a/modules/video_output/kms.c b/modules/video_output/kms.c
> index be4a6669788..8d2e3382c22 100644
> --- a/modules/video_output/kms.c
> +++ b/modules/video_output/kms.c
> @@ -101,11 +101,6 @@ struct vout_display_sys_t {
> int drm_fd;
> };
>
> -typedef struct {
> - vout_display_sys_t *p_voutsys;
> -} picture_sys_t;
> -
> -
> static void DestroyFB(vout_display_sys_t const *sys, uint32_t const buf)
> {
> struct drm_mode_destroy_dumb destroy_req = { .handle = sys->handle[buf] };
> @@ -491,10 +486,8 @@ static bool ChromaNegotiation(vout_display_t *vd)
> return false;
> }
>
> -static void CustomDestroyPicture(picture_t *p_picture)
> +static void CustomDestroyPicture(vout_display_sys_t *sys)
> {
> - picture_sys_t *psys = (picture_sys_t*)p_picture->p_sys;
> - vout_display_sys_t *sys = (vout_display_sys_t *)psys->p_voutsys;
> int c;
>
> for (c = 0; c < MAXHWBUF; c++)
> @@ -504,7 +497,6 @@ static void CustomDestroyPicture(picture_t *p_picture)
> drmDropMaster(sys->drm_fd);
> vlc_close(sys->drm_fd);
> sys->drm_fd = 0;
> - free(p_picture->p_sys);
> }
>
> static int OpenDisplay(vout_display_t *vd)
> @@ -584,14 +576,7 @@ static int OpenDisplay(vout_display_t *vd)
> if (!found_connector)
> goto err_out;
>
> - picture_sys_t *psys = calloc(1, sizeof(*psys));
> - if (psys == NULL)
> - goto err_out;
> -
> - picture_resource_t rsc = {
> - .p_sys = psys,
> - .pf_destroy = CustomDestroyPicture,
> - };
> + picture_resource_t rsc = {};
>
> for (size_t i = 0; i < PICTURE_PLANE_MAX; i++) {
> rsc.p[i].p_pixels = sys->map[0] + sys->offsets[i];
> @@ -599,15 +584,10 @@ static int OpenDisplay(vout_display_t *vd)
> rsc.p[i].i_pitch = sys->stride;
> }
>
> - psys->p_voutsys = sys;
> -
> sys->picture = picture_NewFromResource(&vd->fmt, &rsc);
>
> if (!sys->picture)
> - {
> - free(psys);
> goto err_out;
> - }
>
> return VLC_SUCCESS;
> err_out:
> @@ -676,6 +656,7 @@ static void Close(vout_display_t *vd)
>
> if (sys->picture)
> picture_Release(sys->picture);
> + CustomDestroyPicture(sys);
>
> if (sys->drm_fd)
> drmDropMaster(sys->drm_fd);
> --
> 2.26.2
>
> _______________________________________________
> 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