[vlc-devel] [PATCH 01/14] media_tree: allow preparse tasks to be canceled
Pierre Lamot
pierre at videolabs.io
Thu Feb 13 10:05:51 CET 2020
Ping
On 2020-02-07 13:57, Pierre Lamot wrote:
> On 2020-02-06 16:16, Alexandre Janniaux wrote:
>> Hi,
>>
>> LGTM for the whole set, except a few nits which are not
>> really important.
>
> Hi, I updated the patchset on gitlab with the differents nits.
>
> [1] https://code.videolan.org/chub/vlc/commits/qml/network-fixes
>
>> Regards,
>> --
>> Alexandre Janniaux
>> Videolabs
>>
>> On Thu, Feb 06, 2020 at 01:56:38PM +0100, Pierre Lamot wrote:
>>> If we need to release the media tree before the preparse ends
>>> the preparse callback will likely crash.
>>>
>>> This allows to pass an optional task id to vlc_media_tree_Preparse
>>> and to
>>> cancel it afterwards
>>> ---
>>> include/vlc_media_source.h | 13 ++++++++++++-
>>> .../gui/macosx/media-source/VLCMediaSource.m | 2 +-
>>> modules/gui/qt/network/networkmediamodel.cpp | 3 +--
>>> src/libvlccore.sym | 1 +
>>> src/media_source/media_tree.c | 17
>>> +++++++++++++++--
>>> 5 files changed, 30 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/include/vlc_media_source.h b/include/vlc_media_source.h
>>> index 36e1f9a0b8..9a26ddb39a 100644
>>> --- a/include/vlc_media_source.h
>>> +++ b/include/vlc_media_source.h
>>> @@ -191,10 +191,21 @@ vlc_media_tree_Find(vlc_media_tree_t *tree,
>>> const input_item_t *media,
>>> * \param tree the media tree (not necessarily locked)
>>> * \param libvlc the libvlc instance
>>> * \param media the media to preparse
>>> + * \param id a task identifier
>>> */
>>> VLC_API void
>>> vlc_media_tree_Preparse(vlc_media_tree_t *tree, libvlc_int_t
>>> *libvlc,
>>> - input_item_t *media);
>>> + input_item_t *media, void *id);
>>> +
>>> +
>>> +/**
>>> + * Cancel a media tree preparse request
>>> + *
>>> + * \param libvlc the libvlc instance
>>> + * \param id the preparse task id
>>> + */
>>> +VLC_API void
>>> +vlc_media_tree_PreparseCancel(libvlc_int_t *libvlc, void* id);
>>>
>>> /**
>>> * Media source.
>>> diff --git a/modules/gui/macosx/media-source/VLCMediaSource.m
>>> b/modules/gui/macosx/media-source/VLCMediaSource.m
>>> index eb187fd1ea..4c01af0749 100644
>>> --- a/modules/gui/macosx/media-source/VLCMediaSource.m
>>> +++ b/modules/gui/macosx/media-source/VLCMediaSource.m
>>> @@ -128,7 +128,7 @@ static const struct vlc_media_tree_callbacks
>>> treeCallbacks = {
>>> if (inputItem == nil) {
>>> return;
>>> }
>>> - vlc_media_tree_Preparse(_p_mediaSource->tree, _p_libvlcInstance,
>>> inputItem.vlcInputItem);
>>> + vlc_media_tree_Preparse(_p_mediaSource->tree, _p_libvlcInstance,
>>> inputItem.vlcInputItem, NULL);
>>> }
>>>
>>> - (NSString *)mediaSourceDescription
>>> diff --git a/modules/gui/qt/network/networkmediamodel.cpp
>>> b/modules/gui/qt/network/networkmediamodel.cpp
>>> index c2561e1620..1a24f3de91 100644
>>> --- a/modules/gui/qt/network/networkmediamodel.cpp
>>> +++ b/modules/gui/qt/network/networkmediamodel.cpp
>>> @@ -255,8 +255,7 @@ bool NetworkMediaModel::initializeMediaSources()
>>> emit isIndexedChanged();
>>> }
>>>
>>> -
>>> - vlc_media_tree_Preparse( tree, libvlc, m_treeItem.media.get() );
>>> + vlc_media_tree_Preparse( tree, libvlc, m_treeItem.media.get(),
>>> this );
>>> m_parsingPending = true;
>>> emit parsingPendingChanged(m_parsingPending);
>>>
>>> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
>>> index cf0f2230a1..befaab5151 100644
>>> --- a/src/libvlccore.sym
>>> +++ b/src/libvlccore.sym
>>> @@ -947,6 +947,7 @@ vlc_media_tree_Lock
>>> vlc_media_tree_Unlock
>>> vlc_media_tree_Find
>>> vlc_media_tree_Preparse
>>> +vlc_media_tree_PreparseCancel
>>> vlc_viewpoint_to_4x4
>>> vlc_video_context_Create
>>> vlc_video_context_Release
>>> diff --git a/src/media_source/media_tree.c
>>> b/src/media_source/media_tree.c
>>> index ed2df3be42..017325719f 100644
>>> --- a/src/media_source/media_tree.c
>>> +++ b/src/media_source/media_tree.c
>>> @@ -342,17 +342,30 @@ static const input_preparser_callbacks_t
>>> input_preparser_callbacks = {
>>>
>>> void
>>> vlc_media_tree_Preparse(vlc_media_tree_t *tree, libvlc_int_t
>>> *libvlc,
>>> - input_item_t *media)
>>> + input_item_t *media, void* id)
>>> {
>>> #ifdef TEST_MEDIA_SOURCE
>>> VLC_UNUSED(tree);
>>> VLC_UNUSED(libvlc);
>>> VLC_UNUSED(media);
>>> + VLC_UNUSED(id);
>>> VLC_UNUSED(input_preparser_callbacks);
>>> #else
>>> media->i_preparse_depth = 1;
>>> vlc_MetadataRequest(libvlc, media, META_REQUEST_OPTION_SCOPE_ANY
>>> |
>>> META_REQUEST_OPTION_DO_INTERACT,
>>> - &input_preparser_callbacks, tree, 0, NULL);
>>> + &input_preparser_callbacks, tree, 0, id);
>>> +#endif
>>> +}
>>> +
>>> +
>>> +void
>>> +vlc_media_tree_PreparseCancel(libvlc_int_t *libvlc, void* id)
>>> +{
>>> +#ifdef TEST_MEDIA_SOURCE
>>> + VLC_UNUSED(libvlc);
>>> + VLC_UNUSED(id);
>>> +#else
>>> + libvlc_MetadataCancel(libvlc, id);
>>> #endif
>>> }
>>> --
>>> 2.17.1
>>>
>>> _______________________________________________
>>> 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
> _______________________________________________
> 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