Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (3)
......@@ -704,8 +704,9 @@ typedef enum libvlc_thumbnailer_seek_speed_t
/**
* \brief libvlc_media_request_thumbnail_by_time Start an asynchronous thumbnail generation
*
* If the request is successfully queued, the libvlc_MediaThumbnailGenerated
* is guaranteed to be emitted.
* If the request is successfully queued, the libvlc_MediaThumbnailGenerated is
* guaranteed to be emitted (except if the request is destroyed early by the
* user).
* The resulting thumbnail size can either be:
* - Hardcoded by providing both width & height. In which case, the image will
* be stretched to match the provided aspect ratio, or cropped if crop is true.
......@@ -723,8 +724,8 @@ typedef enum libvlc_thumbnailer_seek_speed_t
* \param timeout A timeout value in ms, or 0 to disable timeout
*
* \return A valid opaque request object, or NULL in case of failure.
* It may be cancelled by libvlc_media_thumbnail_request_cancel().
* It must be released by libvlc_media_thumbnail_request_destroy().
* It must be released by libvlc_media_thumbnail_request_destroy() and
* can be cancelled by calling it early.
*
* \version libvlc 4.0 or later
*
......@@ -742,8 +743,9 @@ libvlc_media_thumbnail_request_by_time( libvlc_instance_t *inst,
/**
* \brief libvlc_media_request_thumbnail_by_pos Start an asynchronous thumbnail generation
*
* If the request is successfully queued, the libvlc_MediaThumbnailGenerated
* is guaranteed to be emitted.
* If the request is successfully queued, the libvlc_MediaThumbnailGenerated is
* guaranteed to be emitted (except if the request is destroyed early by the
* user).
* The resulting thumbnail size can either be:
* - Hardcoded by providing both width & height. In which case, the image will
* be stretched to match the provided aspect ratio, or cropped if crop is true.
......@@ -761,7 +763,6 @@ libvlc_media_thumbnail_request_by_time( libvlc_instance_t *inst,
* \param timeout A timeout value in ms, or 0 to disable timeout
*
* \return A valid opaque request object, or NULL in case of failure.
* It may be cancelled by libvlc_media_thumbnail_request_cancel().
* It must be released by libvlc_media_thumbnail_request_destroy().
*
* \version libvlc 4.0 or later
......@@ -777,23 +778,12 @@ libvlc_media_thumbnail_request_by_pos( libvlc_instance_t *inst,
bool crop, libvlc_picture_type_t picture_type,
libvlc_time_t timeout );
/**
* @brief libvlc_media_thumbnail_cancel cancels a thumbnailing request
* @param p_req An opaque thumbnail request object.
*
* Cancelling the request will still cause libvlc_MediaThumbnailGenerated event
* to be emitted, with a NULL libvlc_picture_t
* If the request is cancelled after its completion, the behavior is undefined.
*/
LIBVLC_API void
libvlc_media_thumbnail_request_cancel( libvlc_media_thumbnail_request_t *p_req );
/**
* @brief libvlc_media_thumbnail_destroy destroys a thumbnail request
* @param p_req An opaque thumbnail request object.
*
* If the request has not completed or hasn't been cancelled yet, the behavior
* is undefined
* This will also cancel the thumbnail request, no events will be emitted after
* this call.
*/
LIBVLC_API void
libvlc_media_thumbnail_request_destroy( libvlc_media_thumbnail_request_t *p_req );
......
......@@ -73,10 +73,10 @@ enum vlc_thumbnailer_seek_speed
* \return An opaque request object, or NULL in case of failure
*
* If this function returns a valid request object, the callback is guaranteed
* to be called, even in case of later failure.
* The returned request object must not be used after the callback has been
* invoked. That request object is owned by the thumbnailer, and must not be
* released.
* to be called, even in case of later failure (except if destroyed early by
* the user).
* The returned request object must be freed with
* vlc_thumbnailer_DestroyRequest().
* The provided input_item will be held by the thumbnailer and can safely be
* released safely after calling this function.
*/
......@@ -98,10 +98,10 @@ vlc_thumbnailer_RequestByTime( vlc_thumbnailer_t *thumbnailer,
* \return An opaque request object, or NULL in case of failure
*
* If this function returns a valid request object, the callback is guaranteed
* to be called, even in case of later failure.
* The returned request object must not be used after the callback has been
* invoked. That request object is owned by the thumbnailer, and must not be
* released.
* to be called, even in case of later failure (except if destroyed early by
* the user).
* The returned request object must be freed with
* vlc_thumbnailer_DestroyRequest().
* The provided input_item will be held by the thumbnailer and can safely be
* released after calling this function.
*/
......@@ -113,16 +113,16 @@ vlc_thumbnailer_RequestByPos( vlc_thumbnailer_t *thumbnailer,
vlc_thumbnailer_cb cb, void* user_data );
/**
* \brief vlc_thumbnailer_Cancel Cancel a thumbnail request
* \brief vlc_thumbnailer_DestroyRequest Destroy a thumbnail request
* \param thumbnailer A thumbnailer object
* \param request An opaque thumbnail request object
*
* Cancelling a request will invoke the completion callback with a NULL picture
* The behavior is undefined if the request is cancelled after its completion.
* The request can be destroyed before receiving a callback (in that case, the
* callback won't be called) or after (to release resources).
*/
VLC_API void
vlc_thumbnailer_Cancel( vlc_thumbnailer_t* thumbnailer,
vlc_thumbnailer_request_t* request );
vlc_thumbnailer_DestroyRequest( vlc_thumbnailer_t* thumbnailer,
vlc_thumbnailer_request_t* request );
/**
* \brief vlc_thumbnailer_Release releases a thumbnailer and cancel all pending requests
......
......@@ -83,7 +83,6 @@ libvlc_media_get_user_data
libvlc_media_get_parsed_status
libvlc_media_thumbnail_request_by_time
libvlc_media_thumbnail_request_by_pos
libvlc_media_thumbnail_request_cancel
libvlc_media_thumbnail_request_destroy
libvlc_media_track_hold
libvlc_media_track_release
......
......@@ -1073,18 +1073,12 @@ libvlc_media_thumbnail_request_by_pos( libvlc_instance_t *inst,
return req;
}
// Cancel a thumbnail request
void libvlc_media_thumbnail_request_cancel( libvlc_media_thumbnail_request_t *req )
{
libvlc_priv_t *p_priv = libvlc_priv(req->instance->p_libvlc_int);
assert( p_priv->p_thumbnailer != NULL );
vlc_thumbnailer_Cancel( p_priv->p_thumbnailer, req->req );
}
// Destroy a thumbnail request
void libvlc_media_thumbnail_request_destroy( libvlc_media_thumbnail_request_t *req )
{
libvlc_media_thumbnail_request_cancel( req );
libvlc_priv_t *p_priv = libvlc_priv(req->instance->p_libvlc_int);
assert( p_priv->p_thumbnailer != NULL );
vlc_thumbnailer_DestroyRequest( p_priv->p_thumbnailer, req->req );
libvlc_media_release( req->md );
libvlc_release(req->instance);
free( req );
......
......@@ -107,7 +107,8 @@ void Thumbnailer::stop()
vlc::threads::mutex_locker lock{ m_mutex };
if ( m_currentContext != nullptr )
{
vlc_thumbnailer_Cancel( m_thumbnailer.get(), m_currentContext->request );
vlc_thumbnailer_DestroyRequest( m_thumbnailer.get(),
m_currentContext->request );
m_currentContext->done = true;
m_cond.signal();
}
......
......@@ -32,9 +32,6 @@ struct vlc_thumbnailer_t
{
vlc_object_t* parent;
vlc_executor_t *executor;
vlc_mutex_t lock;
struct vlc_list submitted_tasks; /**< list of struct thumbnailer_task */
};
struct seek_target
......@@ -57,6 +54,7 @@ typedef struct vlc_thumbnailer_request_t task_t;
struct vlc_thumbnailer_request_t
{
vlc_atomic_rc_t rc;
vlc_thumbnailer_t *thumbnailer;
struct seek_target seek_target;
......@@ -81,8 +79,6 @@ struct vlc_thumbnailer_request_t
picture_t *pic;
struct vlc_runnable runnable; /**< to be passed to the executor */
struct vlc_list node; /**< node of vlc_thumbnailer_t.submitted_tasks */
};
static void RunnableRun(void *);
......@@ -96,6 +92,7 @@ TaskNew(vlc_thumbnailer_t *thumbnailer, input_item_t *item,
if (!task)
return NULL;
vlc_atomic_rc_init(&task->rc);
task->thumbnailer = thumbnailer;
task->item = item;
task->seek_target = seek_target;
......@@ -118,28 +115,14 @@ TaskNew(vlc_thumbnailer_t *thumbnailer, input_item_t *item,
}
static void
TaskDelete(task_t *task)
TaskRelease(task_t *task)
{
if (!vlc_atomic_rc_dec(&task->rc))
return;
input_item_Release(task->item);
free(task);
}
static void
ThumbnailerAddTask(vlc_thumbnailer_t *thumbnailer, task_t *task)
{
vlc_mutex_lock(&thumbnailer->lock);
vlc_list_append(&task->node, &thumbnailer->submitted_tasks);
vlc_mutex_unlock(&thumbnailer->lock);
}
static void
ThumbnailerRemoveTask(vlc_thumbnailer_t *thumbnailer, task_t *task)
{
vlc_mutex_lock(&thumbnailer->lock);
vlc_list_remove(&task->node);
vlc_mutex_unlock(&thumbnailer->lock);
}
static void NotifyThumbnail(task_t *task, picture_t *pic)
{
assert(task->cb);
......@@ -228,8 +211,6 @@ RunnableRun(void *userdata)
bool notify = task->status != INTERRUPTED;
vlc_mutex_unlock(&task->lock);
ThumbnailerRemoveTask(thumbnailer, task);
if (notify)
NotifyThumbnail(task, pic);
......@@ -239,12 +220,8 @@ RunnableRun(void *userdata)
input_Stop(input);
input_Close(input);
TaskDelete(task);
return;
error:
ThumbnailerRemoveTask(thumbnailer, task);
TaskDelete(task);
TaskRelease(task);
}
static void
......@@ -268,14 +245,10 @@ RequestCommon(vlc_thumbnailer_t *thumbnailer, struct seek_target seek_target,
if (!task)
return NULL;
ThumbnailerAddTask(thumbnailer, task);
/* One ref for the executor */
vlc_atomic_rc_inc(&task->rc);
vlc_executor_Submit(thumbnailer->executor, &task->runnable);
/* XXX In theory, "task" might already be invalid here (if it is already
* executed and deleted). This is consistent with the API documentation and
* the previous implementation, but it is not very convenient for the user.
*/
return task;
}
......@@ -308,11 +281,20 @@ vlc_thumbnailer_RequestByPos( vlc_thumbnailer_t *thumbnailer,
userdata);
}
void vlc_thumbnailer_Cancel( vlc_thumbnailer_t* thumbnailer, task_t* task )
void vlc_thumbnailer_DestroyRequest( vlc_thumbnailer_t* thumbnailer, task_t* task )
{
(void) thumbnailer;
/* The API documentation requires that task is valid */
Interrupt(task);
bool canceled = vlc_executor_Cancel(thumbnailer->executor, &task->runnable);
if (canceled)
{
/* Release the executor reference (since it won't run) */
bool ret = vlc_atomic_rc_dec(&task->rc);
/* Assert that only the caller got the reference */
assert(!ret); (void) ret;
}
else
Interrupt(task);
TaskRelease(task);
}
vlc_thumbnailer_t *vlc_thumbnailer_Create( vlc_object_t* parent)
......@@ -329,38 +311,12 @@ vlc_thumbnailer_t *vlc_thumbnailer_Create( vlc_object_t* parent)
}
thumbnailer->parent = parent;
vlc_mutex_init(&thumbnailer->lock);
vlc_list_init(&thumbnailer->submitted_tasks);
return thumbnailer;
}
static void
CancelAllTasks(vlc_thumbnailer_t *thumbnailer)
{
vlc_mutex_lock(&thumbnailer->lock);
task_t *task;
vlc_list_foreach(task, &thumbnailer->submitted_tasks, node)
{
bool canceled = vlc_executor_Cancel(thumbnailer->executor,
&task->runnable);
if (canceled)
{
NotifyThumbnail(task, NULL);
vlc_list_remove(&task->node);
TaskDelete(task);
}
/* Otherwise, the task will be finished and destroyed after run() */
}
vlc_mutex_unlock(&thumbnailer->lock);
}
void vlc_thumbnailer_Release( vlc_thumbnailer_t *thumbnailer )
{
CancelAllTasks(thumbnailer);
vlc_executor_Delete(thumbnailer->executor);
free( thumbnailer );
}
......@@ -814,7 +814,7 @@ vlc_encoder_Destroy
vlc_thumbnailer_Create
vlc_thumbnailer_RequestByTime
vlc_thumbnailer_RequestByPos
vlc_thumbnailer_Cancel
vlc_thumbnailer_DestroyRequest
vlc_thumbnailer_Release
vlc_player_AddAssociatedMedia
vlc_player_AddListener
......
......@@ -135,23 +135,27 @@ static void test_thumbnails( libvlc_instance_t* p_vlc )
vlc_mutex_lock( &ctx.lock );
vlc_thumbnailer_request_t* p_req;
if ( test_params[i].b_use_pos )
{
vlc_thumbnailer_RequestByPos( p_thumbnailer, test_params[i].f_pos,
p_req = vlc_thumbnailer_RequestByPos( p_thumbnailer, test_params[i].f_pos,
test_params[i].b_fast_seek ?
VLC_THUMBNAILER_SEEK_FAST : VLC_THUMBNAILER_SEEK_PRECISE,
p_item, test_params[i].i_timeout, thumbnailer_callback, &ctx );
}
else
{
vlc_thumbnailer_RequestByTime( p_thumbnailer, test_params[i].i_time,
p_req = vlc_thumbnailer_RequestByTime( p_thumbnailer, test_params[i].i_time,
test_params[i].b_fast_seek ?
VLC_THUMBNAILER_SEEK_FAST : VLC_THUMBNAILER_SEEK_PRECISE,
p_item, test_params[i].i_timeout, thumbnailer_callback, &ctx );
}
assert( p_req != NULL );
while ( ctx.b_done == false )
vlc_cond_wait( &ctx.cond, &ctx.lock );
vlc_thumbnailer_DestroyRequest( p_thumbnailer, p_req );
vlc_mutex_unlock( &ctx.lock );
input_item_Release( p_item );
......@@ -184,7 +188,7 @@ static void test_cancel_thumbnail( libvlc_instance_t* p_vlc )
VLC_TICK_INVALID, VLC_THUMBNAILER_SEEK_PRECISE, p_item,
VLC_TICK_INVALID, thumbnailer_callback_cancel, NULL );
vlc_thumbnailer_Cancel( p_thumbnailer, p_req );
vlc_thumbnailer_DestroyRequest( p_thumbnailer, p_req );
/* Check that thumbnailer_callback_cancel is not called, even after the
* normal termination of the parsing. */
......