[vlc-devel] [vlc-commits] aout: add reference count

Steve Lhomme robux4 at ycbcr.xyz
Mon Mar 18 09:36:40 CET 2019


On 3/18/2019 9:07 AM, Steve Lhomme wrote:
> "internals" would work as well (especially since it's in aout_internal).
>
> "private" may be left for each aout module specific code (although it 
> could be the opposite and be called internals).

In C++ private is part of the class that is not seen by child classes 
(in our case the actual implementation of the virtual objects we 
create). So it would make more sense to use "private" for what is called 
"owner" right now.

Technically the same could be said of each module. But it's left to each 
implementation to pick its name.

>
> On 3/18/2019 8:35 AM, Steve Lhomme wrote:
>> 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
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>
> _______________________________________________
> 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