Browse Source

preparse: use int for status

This will allow to use the same struct of callbacks for preparser and
parser.

The VLC_ETIMEOUT usage will be documented in next commits.
pull/170/head
Thomas Guillem 2 years ago
committed by Steve Lhomme
parent
commit
1b15986763
  1. 3
      include/vlc_media_source.h
  2. 10
      include/vlc_preparser.h
  3. 9
      lib/media.c
  4. 2
      modules/gui/macosx/library/media-source/VLCMediaSource.m
  5. 2
      modules/gui/qt/network/devicesourceprovider.cpp
  6. 3
      modules/gui/qt/network/mediatreelistener.cpp
  7. 2
      modules/gui/qt/network/mediatreelistener.hpp
  8. 4
      modules/gui/qt/network/networkmediamodel.cpp
  9. 3
      modules/gui/qt/player/player_controller.cpp
  10. 4
      src/media_source/media_tree.c
  11. 5
      src/playlist/preparse.c
  12. 14
      src/preparser/preparser.c
  13. 5
      test/libvlc/media.c

3
include/vlc_media_source.h

@ -123,8 +123,7 @@ struct vlc_media_tree_callbacks
*/
void
(*on_preparse_end)(vlc_media_tree_t *tree, input_item_node_t * node,
enum input_item_preparse_status status,
void *userdata);
int status, void *userdata);
};
/**

10
include/vlc_preparser.h

@ -55,16 +55,8 @@ typedef enum input_item_meta_request_option_t
META_REQUEST_OPTION_PARSE_SUBITEMS = 0x10,
} input_item_meta_request_option_t;
/* status of the on_preparse_ended() callback */
enum input_item_preparse_status
{
ITEM_PREPARSE_FAILED,
ITEM_PREPARSE_TIMEOUT,
ITEM_PREPARSE_DONE
};
struct vlc_metadata_cbs {
void (*on_preparse_ended)(input_item_t *, enum input_item_preparse_status status, void *userdata);
void (*on_preparse_ended)(input_item_t *, int status, void *userdata);
void (*on_subtree_added)(input_item_t *, input_item_node_t *subtree, void *userdata);
void (*on_attachments_added)(input_item_t *item,
input_attachment_t *const *array,

9
lib/media.c

@ -306,8 +306,7 @@ static void send_parsed_changed( libvlc_media_t *p_md,
* input_item_preparse_ended (Private) (vlc event Callback)
*/
static void input_item_preparse_ended(input_item_t *item,
enum input_item_preparse_status status,
void *user_data)
int status, void *user_data)
{
VLC_UNUSED(item);
libvlc_media_t * p_md = user_data;
@ -315,13 +314,13 @@ static void input_item_preparse_ended(input_item_t *item,
switch( status )
{
case ITEM_PREPARSE_FAILED:
case VLC_EGENERIC:
new_status = libvlc_media_parsed_status_failed;
break;
case ITEM_PREPARSE_TIMEOUT:
case VLC_ETIMEOUT:
new_status = libvlc_media_parsed_status_timeout;
break;
case ITEM_PREPARSE_DONE:
case VLC_SUCCESS:
new_status = libvlc_media_parsed_status_done;
break;
default:

2
modules/gui/macosx/library/media-source/VLCMediaSource.m

@ -79,7 +79,7 @@ static void cb_children_removed(vlc_media_tree_t *p_tree,
static void cb_preparse_ended(vlc_media_tree_t *p_tree,
input_item_node_t *p_node,
enum input_item_preparse_status status,
int status,
void *p_data)
{
dispatch_async(dispatch_get_main_queue(), ^{

2
modules/gui/qt/network/devicesourceprovider.cpp

@ -27,7 +27,7 @@ struct DeviceSourceProvider::ListenerCb : public MediaTreeListener::MediaTreeLis
, mediaSource(std::move(mediaSource))
{}
inline void onItemPreparseEnded( MediaTreePtr, input_item_node_t *, enum input_item_preparse_status ) override final {}
inline void onItemPreparseEnded( MediaTreePtr, input_item_node_t *, int ) override final {}
void onItemCleared( MediaTreePtr tree, input_item_node_t* node ) override
{

3
modules/gui/qt/network/mediatreelistener.cpp

@ -24,8 +24,7 @@ static void onItemRemoved(vlc_media_tree_t *, input_item_node_t *node,
}
static void onItemPreparseEnded(vlc_media_tree_t *, input_item_node_t * node,
enum input_item_preparse_status status,
void *userdata)
int status, void *userdata)
{
auto* self = static_cast<MediaTreeListener*>( userdata );
self->cb->onItemPreparseEnded( self->tree, node, status );

2
modules/gui/qt/network/mediatreelistener.hpp

@ -46,7 +46,7 @@ public:
virtual void onItemCleared( MediaTreePtr tree, input_item_node_t* node ) = 0;
virtual void onItemAdded( MediaTreePtr tree, input_item_node_t* parent, input_item_node_t *const children[], size_t count ) = 0;
virtual void onItemRemoved( MediaTreePtr tree, input_item_node_t* node, input_item_node_t *const children[], size_t count ) = 0;
virtual void onItemPreparseEnded( MediaTreePtr tree, input_item_node_t* node, enum input_item_preparse_status status ) = 0;
virtual void onItemPreparseEnded( MediaTreePtr tree, input_item_node_t* node, int status ) = 0;
};
public:

4
modules/gui/qt/network/networkmediamodel.cpp

@ -476,7 +476,7 @@ struct NetworkMediaModel::ListenerCb : public MediaTreeListener::MediaTreeListen
void onItemCleared( MediaTreePtr tree, input_item_node_t* node ) override;
void onItemAdded( MediaTreePtr tree, input_item_node_t* parent, input_item_node_t *const children[], size_t count ) override;
void onItemRemoved( MediaTreePtr tree, input_item_node_t * node, input_item_node_t *const children[], size_t count ) override;
void onItemPreparseEnded( MediaTreePtr tree, input_item_node_t* node, enum input_item_preparse_status status ) override;
void onItemPreparseEnded( MediaTreePtr tree, input_item_node_t* node, int status ) override;
NetworkMediaModel *model;
};
@ -920,7 +920,7 @@ void NetworkMediaModel::ListenerCb::onItemRemoved( MediaTreePtr, input_item_node
}, Qt::QueuedConnection);
}
void NetworkMediaModel::ListenerCb::onItemPreparseEnded(MediaTreePtr, input_item_node_t* node, enum input_item_preparse_status )
void NetworkMediaModel::ListenerCb::onItemPreparseEnded(MediaTreePtr, input_item_node_t* node, int )
{
model->d_func()->m_preparseSem.release();
SharedInputItem p_node { node->p_item };

3
modules/gui/qt/player/player_controller.cpp

@ -1022,8 +1022,7 @@ static void on_player_timer_smpte_update(const struct vlc_player_timer_smpte_tim
static void on_preparse_ended_callback(input_item_t *p_item,
enum input_item_preparse_status,
void *userdata)
int, void *userdata)
{
PlayerControllerPrivate *me = reinterpret_cast<PlayerControllerPrivate *>(userdata);
me->onArtFetchEnded(p_item, input_item_IsArtFetched(p_item));

4
src/media_source/media_tree.c

@ -170,9 +170,7 @@ media_subtree_changed(input_item_t *media, input_item_node_t *node,
}
static void
media_subtree_preparse_ended(input_item_t *media,
enum input_item_preparse_status status,
void *user_data)
media_subtree_preparse_ended(input_item_t *media, int status, void *user_data)
{
vlc_media_tree_t *tree = user_data;

5
src/playlist/preparse.c

@ -88,13 +88,12 @@ on_subtree_added(input_item_t *media, input_item_node_t *subtree,
}
static void
on_preparse_ended(input_item_t *media,
enum input_item_preparse_status status, void *userdata)
on_preparse_ended(input_item_t *media, int status, void *userdata)
{
VLC_UNUSED(media); /* retrieved by subtree->p_item */
vlc_playlist_t *playlist = userdata;
if (status != ITEM_PREPARSE_DONE)
if (status != VLC_SUCCESS)
return;
vlc_playlist_Lock(playlist);

14
src/preparser/preparser.c

@ -90,7 +90,7 @@ TaskNew(vlc_preparser_t *preparser, input_item_t *item,
task->parser = NULL;
vlc_sem_init(&task->preparse_ended, 0);
atomic_init(&task->preparse_status, ITEM_PREPARSE_FAILED);
atomic_init(&task->preparse_status, VLC_EGENERIC);
atomic_init(&task->interrupted, false);
task->runnable.run = RunnableRun;
@ -149,9 +149,7 @@ OnParserEnded(input_item_t *item, int status, void *task_)
*/
return;
atomic_store_explicit(&task->preparse_status,
status == VLC_SUCCESS ? ITEM_PREPARSE_DONE
: ITEM_PREPARSE_FAILED,
atomic_store_explicit(&task->preparse_status, status,
memory_order_relaxed);
vlc_sem_post(&task->preparse_ended);
}
@ -184,7 +182,7 @@ SetItemPreparsed(struct task *task)
{
int status = atomic_load_explicit(&task->preparse_status,
memory_order_relaxed);
if (status == ITEM_PREPARSE_DONE)
if (status == VLC_SUCCESS)
input_item_SetPreparsed(task->item);
}
@ -226,7 +224,7 @@ Parse(struct task *task, vlc_tick_t deadline)
task->parser = input_item_Parse(obj, task->item, &cfg);
if (!task->parser)
{
atomic_store_explicit(&task->preparse_status, ITEM_PREPARSE_FAILED,
atomic_store_explicit(&task->preparse_status, VLC_EGENERIC,
memory_order_relaxed);
return;
}
@ -238,7 +236,7 @@ Parse(struct task *task, vlc_tick_t deadline)
if (vlc_sem_timedwait(&task->preparse_ended, deadline))
{
atomic_store_explicit(&task->preparse_status,
ITEM_PREPARSE_TIMEOUT, memory_order_relaxed);
VLC_ETIMEOUT, memory_order_relaxed);
atomic_store(&task->interrupted, true);
}
@ -304,7 +302,7 @@ Interrupt(struct task *task)
atomic_store(&task->interrupted, true);
/* Wake up the preparser cond_wait */
atomic_store_explicit(&task->preparse_status, ITEM_PREPARSE_TIMEOUT,
atomic_store_explicit(&task->preparse_status, VLC_ETIMEOUT,
memory_order_relaxed);
vlc_sem_post(&task->preparse_ended);
}

5
test/libvlc/media.c

@ -209,13 +209,12 @@ static void test_media_tracks(libvlc_instance_t *vlc)
}
static void input_item_preparse_timeout( input_item_t *item,
enum input_item_preparse_status status,
void *user_data )
int status, void *user_data )
{
VLC_UNUSED(item);
vlc_sem_t *p_sem = user_data;
assert( status == ITEM_PREPARSE_TIMEOUT );
assert( status == VLC_ETIMEOUT );
vlc_sem_post(p_sem);
}

Loading…
Cancel
Save