[vlmc-devel] [PATCH 2/5] VLCSource, VmemRenderer: Use const uint8_t* snapshot

yikei lu luyikei.qmltu at gmail.com
Tue Apr 12 15:49:02 CEST 2016


I got it :)

2016-04-12 22:43 GMT+09:00 Hugo Beauzée-Luyssen <hugo at beauzee.fr>:
> On 04/12/2016 03:24 PM, yikei lu wrote:
>>
>> So you meant copying the value of the pointer to VLCSource and use an
>> unique_ptr in VmemRenderer?
>>
>> 2016-04-12 22:21 GMT+09:00 yikei lu <luyikei.qmltu at gmail.com>:
>>>
>>> Oh sorry I might have misread this...
>>>
>>> 2016-04-12 22:20 GMT+09:00 yikei lu <luyikei.qmltu at gmail.com>:
>>>>
>>>> well it is used in VLCSource so there will be a problem if we use
>>>> unique_ptr
>>>>
>>>> 2016-04-12 22:17 GMT+09:00 Hugo Beauzée-Luyssen <hugo at beauzee.fr>:
>>>>>
>>>>> On 04/12/2016 03:09 PM, Yikai Lu wrote:
>>>>>>
>>>>>>
>>>>>> ---
>>>>>>    src/Backend/VLC/VLCSource.h         | 2 +-
>>>>>>    src/Backend/VLC/VLCVmemRenderer.cpp | 2 +-
>>>>>>    src/Backend/VLC/VLCVmemRenderer.h   | 2 +-
>>>>>>    3 files changed, 3 insertions(+), 3 deletions(-)
>>>>>>
>>>>>> diff --git a/src/Backend/VLC/VLCSource.h b/src/Backend/VLC/VLCSource.h
>>>>>> index 10a7d08..b2262df 100644
>>>>>> --- a/src/Backend/VLC/VLCSource.h
>>>>>> +++ b/src/Backend/VLC/VLCSource.h
>>>>>> @@ -69,7 +69,7 @@ private:
>>>>>>        unsigned int                m_nbVideoTracks;
>>>>>>        unsigned int                m_nbAudioTracks;
>>>>>>        int64_t                     m_length; //in milliseconds.
>>>>>> -    uint8_t*                    m_snapshot;
>>>>>> +    const uint8_t*              m_snapshot;
>>>>>>        bool                        m_isParsed;
>>>>>>        int64_t                     m_nbFrames;
>>>>>>    };
>>>>>> diff --git a/src/Backend/VLC/VLCVmemRenderer.cpp
>>>>>> b/src/Backend/VLC/VLCVmemRenderer.cpp
>>>>>> index d062bbe..8312ecd 100644
>>>>>> --- a/src/Backend/VLC/VLCVmemRenderer.cpp
>>>>>> +++ b/src/Backend/VLC/VLCVmemRenderer.cpp
>>>>>> @@ -68,7 +68,7 @@ VmemRenderer::mediaPlayer()
>>>>>>        return m_mediaPlayer;
>>>>>>    }
>>>>>>
>>>>>> -uint8_t*
>>>>>> +const uint8_t*
>>>>>>    VmemRenderer::waitSnapshot()
>>>>>>    {
>>>>>>        QMutexLocker lock( &m_mutex );
>>>>>> diff --git a/src/Backend/VLC/VLCVmemRenderer.h
>>>>>> b/src/Backend/VLC/VLCVmemRenderer.h
>>>>>> index 89b105d..b7a765e 100644
>>>>>> --- a/src/Backend/VLC/VLCVmemRenderer.h
>>>>>> +++ b/src/Backend/VLC/VLCVmemRenderer.h
>>>>>> @@ -47,7 +47,7 @@ public:
>>>>>>         *  the caller.
>>>>>>         * @return
>>>>>>         */
>>>>>> -    uint8_t *waitSnapshot();
>>>>>> +    const uint8_t *waitSnapshot();
>>>>>>
>>>>>>    private:
>>>>>>        void*    vmemLock( void **planes );
>>>>>>
>>>>> Oh, I meant use uint8_t* as the exposed return value (which means that
>>>>> the
>>>>> called doesn't own this value, and that it's bound to the lifetime of
>>>>> the
>>>>> VmemRenderer, or shorter), and use a unique_ptr internally, so it gets
>>>>> automatically released when the VmemRenderer gets deleted.
>>>>> _______________________________________________
>>>>> Vlmc-devel mailing list
>>>>> Vlmc-devel at videolan.org
>>>>> https://mailman.videolan.org/listinfo/vlmc-devel
>>
>> _______________________________________________
>> Vlmc-devel mailing list
>> Vlmc-devel at videolan.org
>> https://mailman.videolan.org/listinfo/vlmc-devel
>>
>
> Well, it depends how waitSnapshot() return value is used.
> If we expect only one snapshot to be present at all time, use unique_ptr, do
> not even store it in VmemRenderer. Just return a unique_ptr, so it now
> belongs to the caller.
> If we expect the VmemRenderer and the caller to use the snapshot
> simultaneously (this sounds like a bad idea, but let's assume that's the
> case, for the sake of the example), then use a shared_ptr
> If the caller only needs to read from the snapshot but the snapshot is
> solely owned by the VmemRenderer, then store the snapshot as a member
> unique_ptr, and return a const uint8_t* from waitSnapshot()
>
> I hope this explanation was a bit clearer :)
>
> _______________________________________________
> Vlmc-devel mailing list
> Vlmc-devel at videolan.org
> https://mailman.videolan.org/listinfo/vlmc-devel


More information about the Vlmc-devel mailing list