[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