[vlc-devel] [vlc-commits] aout: add reference count
Steve Lhomme
robux4 at ycbcr.xyz
Mon Mar 18 08:35:27 CET 2019
Can we rename the aout owner to aout private ? The naming is confusing,
it seem to imply it's at a higher level than the object when in fact
it's part of it.
(same thing for input and vout).
On 3/17/2019 2:39 AM, Rémi Denis-Courmont wrote:
> vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Mar 16 10:56:09 2019 +0200| [829437ddb2dfcec12b3d0cd87235a9b094c51b07] | committer: Rémi Denis-Courmont
>
> aout: add reference count
>
>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=829437ddb2dfcec12b3d0cd87235a9b094c51b07
> ---
>
> src/audio_output/aout_internal.h | 2 ++
> src/audio_output/output.c | 15 ++++++++++++---
> 2 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/src/audio_output/aout_internal.h b/src/audio_output/aout_internal.h
> index 1dd92e96aa..9073988ae6 100644
> --- a/src/audio_output/aout_internal.h
> +++ b/src/audio_output/aout_internal.h
> @@ -84,6 +84,8 @@ typedef struct
> atomic_uint buffers_lost;
> atomic_uint buffers_played;
> atomic_uchar restart;
> +
> + atomic_uintptr_t refs;
> } aout_owner_t;
>
> typedef struct
> diff --git a/src/audio_output/output.c b/src/audio_output/output.c
> index 3eaa415976..33a73bb3d1 100644
> --- a/src/audio_output/output.c
> +++ b/src/audio_output/output.c
> @@ -244,6 +244,7 @@ audio_output_t *aout_New (vlc_object_t *parent)
> vlc_mutex_init (&owner->vp.lock);
> vlc_viewpoint_init (&owner->vp.value);
> atomic_init (&owner->vp.update, false);
> + atomic_init(&owner->refs, 0);
>
> vlc_object_set_destructor (aout, aout_Destructor);
>
> @@ -365,7 +366,9 @@ audio_output_t *aout_New (vlc_object_t *parent)
>
> audio_output_t *aout_Hold(audio_output_t *aout)
> {
> - (vlc_object_hold)(VLC_OBJECT(aout));
> + aout_owner_t *owner = aout_owner(aout);
> +
> + atomic_fetch_add_explicit(&owner->refs, 1, memory_order_relaxed);
> return aout;
> }
>
> @@ -391,12 +394,18 @@ void aout_Destroy (audio_output_t *aout)
> var_SetFloat (aout, "volume", -1.f);
> var_DelCallback(aout, "volume", var_Copy, vlc_object_parent(aout));
> var_DelCallback (aout, "stereo-mode", StereoModeCallback, NULL);
> - vlc_object_delete(aout);
> + aout_Release(aout);
> }
>
> void aout_Release(audio_output_t *aout)
> {
> - (vlc_object_release)(VLC_OBJECT(aout));
> + aout_owner_t *owner = aout_owner(aout);
> +
> + if (atomic_fetch_sub_explicit(&owner->refs, 1, memory_order_release))
> + return;
> +
> + atomic_thread_fence(memory_order_acquire);
> + vlc_object_delete(VLC_OBJECT(aout));
> }
>
> /**
>
> _______________________________________________
> vlc-commits mailing list
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits
More information about the vlc-devel
mailing list