Browse Source

thumbnailer: report status from callback

Imitate the preparser callback.
pull/172/head
Thomas Guillem 2 years ago
committed by Steve Lhomme
parent
commit
d2a0c1de2e
  1. 5
      include/vlc_thumbnailer.h
  2. 6
      lib/media.c
  3. 2
      modules/misc/medialibrary/Thumbnailer.cpp
  4. 2
      modules/misc/medialibrary/medialibrary.h
  5. 2
      src/input/thumbnailer.c
  6. 16
      test/src/input/thumbnail.c

5
include/vlc_thumbnailer.h

@ -50,12 +50,15 @@ struct vlc_thumbnailer_cbs
* by using \link picture_Hold \endlink to use it pass the callback's
* scope.
*
* \param item item used for the thumbnailer
* \param status VLC_SUCCESS in case of success, VLC_ETIMEOUT in case of
* timeout, -EINTR if cancelled, an error otherwise
* \param thumbnail The generated thumbnail, or NULL in case of failure or
* timeout
* \param data Is the opaque pointer passed as vlc_thumbnailer_Request last
* parameter
*/
void (*on_ended)(picture_t* thumbnail, void *data);
void (*on_ended)(input_item_t *item, int status, picture_t* thumbnail, void *data);
};
/**

6
lib/media.c

@ -927,8 +927,12 @@ struct libvlc_media_thumbnail_request_t
vlc_thumbnailer_req_id id;
};
static void media_on_thumbnail_ready( picture_t* thumbnail, void* data )
static void media_on_thumbnail_ready( input_item_t *item, int status,
picture_t* thumbnail, void* data )
{
(void) item;
(void) status;
libvlc_media_thumbnail_request_t *req = data;
libvlc_media_t *p_media = req->md;
libvlc_event_t event;

2
modules/misc/medialibrary/Thumbnailer.cpp

@ -43,7 +43,7 @@ Thumbnailer::Thumbnailer( vlc_medialibrary_module_t* ml )
throw std::runtime_error( "Failed to instantiate a vlc_thumbnailer_t" );
}
void Thumbnailer::onThumbnailComplete( picture_t* thumbnail, void *data )
void Thumbnailer::onThumbnailComplete( input_item_t *, int, picture_t* thumbnail, void *data )
{
ThumbnailerCtx* ctx = static_cast<ThumbnailerCtx*>( data );

2
modules/misc/medialibrary/medialibrary.h

@ -137,7 +137,7 @@ public:
void stop() override;
private:
static void onThumbnailComplete( picture_t* thumbnail, void* data );
static void onThumbnailComplete( input_item_t *, int, picture_t* thumbnail, void *data );
private:
vlc_medialibrary_module_t* m_ml;

2
src/input/thumbnailer.c

@ -107,7 +107,7 @@ ThTaskDestroy(th_task_t *task)
static void NotifyThumbnail(th_task_t *task, picture_t *pic)
{
task->cbs->on_ended(pic, task->userdata);
task->cbs->on_ended(task->item, task->preparse_status, pic, task->userdata);
}
static void

16
test/src/input/thumbnail.c

@ -68,8 +68,10 @@ struct test_ctx
bool b_done;
};
static void thumbnailer_callback( picture_t* thumbnail, void *data )
static void thumbnailer_callback( input_item_t *item, int status,
picture_t* thumbnail, void *data )
{
(void) item;
struct test_ctx* p_ctx = data;
vlc_mutex_lock( &p_ctx->lock );
@ -78,6 +80,7 @@ static void thumbnailer_callback( picture_t* thumbnail, void *data )
assert( test_params[p_ctx->test_idx].b_expected_success &&
"Expected failure but got a thumbnail" );
assert( thumbnail->format.i_chroma == VLC_CODEC_ARGB );
assert( status == VLC_SUCCESS );
/* TODO: Enable this once the new clock is merged */
#if 0
@ -98,8 +101,14 @@ static void thumbnailer_callback( picture_t* thumbnail, void *data )
#endif
}
else
{
assert( !test_params[p_ctx->test_idx].b_expected_success &&
"Expected a thumbnail but got a failure" );
if (test_params[p_ctx->test_idx].i_timeout == VLC_TICK_INVALID)
assert( status == VLC_EGENERIC );
else
assert( status == VLC_ETIMEOUT );
}
p_ctx->b_done = true;
vlc_cond_signal( &p_ctx->cond );
@ -171,9 +180,12 @@ static void test_thumbnails( libvlc_instance_t* p_vlc )
}
}
static void thumbnailer_callback_cancel( picture_t* p_thumbnail, void *data )
static void thumbnailer_callback_cancel( input_item_t *item, int status,
picture_t* p_thumbnail, void *data )
{
(void) item;
assert( p_thumbnail == NULL );
assert( status == -EINTR );
vlc_sem_t *sem = data;
vlc_sem_post(sem);

Loading…
Cancel
Save