vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Mon Jun 5 19:38:58 2017 +0300| [f85bd16fe865728fc2cc749d5217b1b59917564f] | committer: Rémi Denis-Courmont
vdpau: move field copy to a callback (refs #14456) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f85bd16fe865728fc2cc749d5217b1b59917564f --- modules/hw/vdpau/picture.c | 7 +++++-- modules/hw/vdpau/vlc_vdpau.h | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/modules/hw/vdpau/picture.c b/modules/hw/vdpau/picture.c index 18c6ce97fd..88801167a5 100644 --- a/modules/hw/vdpau/picture.c +++ b/modules/hw/vdpau/picture.c @@ -56,21 +56,23 @@ static void SurfaceDestroy(struct picture_context_t *ctx) free(frame); } -vlc_vdp_video_field_t *vlc_vdp_video_copy(vlc_vdp_video_field_t *fold) +static picture_context_t *SurfaceCopy(picture_context_t *ctx) { + vlc_vdp_video_field_t *fold = (vlc_vdp_video_field_t *)ctx; vlc_vdp_video_frame_t *frame = fold->frame; vlc_vdp_video_field_t *fnew = malloc(sizeof (*fnew)); if (unlikely(fnew == NULL)) return NULL; fnew->context.destroy = SurfaceDestroy; + fnew->copy = SurfaceCopy; fnew->frame = frame; fnew->structure = fold->structure; fnew->procamp = fold->procamp; fnew->sharpen = fold->sharpen; atomic_fetch_add(&frame->refs, 1); - return fnew; + return &fnew->context; } static const VdpProcamp procamp_default = @@ -96,6 +98,7 @@ vlc_vdp_video_field_t *vlc_vdp_video_create(vdp_t *vdp, } field->context.destroy = SurfaceDestroy; + field->copy = SurfaceCopy; field->frame = frame; field->structure = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME; field->procamp = procamp_default; diff --git a/modules/hw/vdpau/vlc_vdpau.h b/modules/hw/vdpau/vlc_vdpau.h index a5f95981a8..318425c79b 100644 --- a/modules/hw/vdpau/vlc_vdpau.h +++ b/modules/hw/vdpau/vlc_vdpau.h @@ -274,6 +274,7 @@ typedef struct vlc_vdp_video_frame typedef struct vlc_vdp_video_field { picture_context_t context; + struct picture_context_t *(*copy)(struct picture_context_t *); vlc_vdp_video_frame_t *frame; VdpVideoMixerPictureStructure structure; VdpProcamp procamp; @@ -299,5 +300,9 @@ static inline void vlc_vdp_video_destroy(vlc_vdp_video_field_t *f) * Performs a shallow copy of a VDPAU video surface context * (the underlying VDPAU video surface is shared). */ -vlc_vdp_video_field_t *vlc_vdp_video_copy(vlc_vdp_video_field_t *); +static inline vlc_vdp_video_field_t *vlc_vdp_video_copy( + vlc_vdp_video_field_t *fold) +{ + return (vlc_vdp_video_field_t *)fold->copy(&fold->context); +} #endif _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
