+ bool needed;
+
+ vlc_mutex_lock(&media->parsed_lock);
+ needed = !media->has_asked_preparse;
+ media->has_asked_preparse = true;
+ vlc_mutex_unlock(&media->parsed_lock);
+
+ if (needed)
+ {
+ libvlc_int_t *libvlc = media->p_libvlc_instance->p_libvlc_int;
+ input_item_t *item = media->p_input_item;
+ input_item_meta_request_option_t art_scope = META_REQUEST_OPTION_NONE;
+ input_item_meta_request_option_t parse_scope = META_REQUEST_OPTION_SCOPE_LOCAL;
+ int ret;
+
+ if (parse_flag & libvlc_media_fetch_local)
+ art_scope |= META_REQUEST_OPTION_SCOPE_LOCAL;
+ if (parse_flag & libvlc_media_fetch_network)
+ art_scope |= META_REQUEST_OPTION_SCOPE_NETWORK;
+ if (art_scope != META_REQUEST_OPTION_NONE) {
+ ret = libvlc_ArtRequest(libvlc, item, art_scope);
+ if (ret != VLC_SUCCESS)
+ return ret;
+ }
+
+ if (parse_flag & libvlc_media_parse_network)
+ parse_scope |= META_REQUEST_OPTION_SCOPE_NETWORK;
+ ret = libvlc_MetaRequest(libvlc, item, parse_scope);
+ if (ret != VLC_SUCCESS)
+ return ret;
+ }
+ else
+ return VLC_EGENERIC;