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 (7)
......@@ -75,13 +75,10 @@ struct vlc_thumbnailer_cbs
* 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 opaque pointer passed by
* vlc_preparser_GenerateThumbnail()
*
......@@ -91,33 +88,40 @@ struct vlc_thumbnailer_cbs
};
/**
* Preparser seek argument
* Thumbnailer argument
*/
struct vlc_preparser_seek_arg
struct vlc_thumbnailer_arg
{
enum
{
/** Don't seek */
VLC_PREPARSER_SEEK_NONE,
/** Seek by time */
VLC_PREPARSER_SEEK_TIME,
/** Seek by position */
VLC_PREPARSER_SEEK_POS,
} type;
union
{
/** Seek time if type == VLC_PREPARSER_SEEK_TIME */
vlc_tick_t time;
/** Seek position if type == VLC_PREPARSER_SEEK_POS */
double pos;
};
enum
/** Seek argument */
struct seek
{
/** Precise, but potentially slow */
VLC_PREPARSER_SEEK_PRECISE,
/** Fast, but potentially imprecise */
VLC_PREPARSER_SEEK_FAST,
} speed;
enum
{
/** Don't seek */
VLC_THUMBNAILER_SEEK_NONE,
/** Seek by time */
VLC_THUMBNAILER_SEEK_TIME,
/** Seek by position */
VLC_THUMBNAILER_SEEK_POS,
} type;
union
{
/** Seek time if type == VLC_THUMBNAILER_SEEK_TIME */
vlc_tick_t time;
/** Seek position if type == VLC_THUMBNAILER_SEEK_POS */
double pos;
};
enum
{
/** Precise, but potentially slow */
VLC_THUMBNAILER_SEEK_PRECISE,
/** Fast, but potentially imprecise */
VLC_THUMBNAILER_SEEK_FAST,
} speed;
} seek;
/** True to enable hardware decoder */
bool hw_dec;
};
/**
......@@ -188,7 +192,7 @@ vlc_preparser_Push( vlc_preparser_t *preparser, input_item_t *item, int type_opt
*
* @param preparser the preparser object
* @param item a valid item to generate the thumbnail for
* @param seek_arg pointer to a seek struct, that tell at which time the
* @param arg pointer to a seek struct, that tell at which time the
* thumbnail should be taken, NULL to disable seek
* @param timeout A timeout value, or VLC_TICK_INVALID to disable timeout
* @param cbs callback to listen to events (can't be NULL)
......@@ -202,7 +206,7 @@ vlc_preparser_Push( vlc_preparser_t *preparser, input_item_t *item, int type_opt
*/
VLC_API vlc_preparser_req_id
vlc_preparser_GenerateThumbnail( vlc_preparser_t *preparser, input_item_t *item,
const struct vlc_preparser_seek_arg *seek_arg,
const struct vlc_thumbnailer_arg *arg,
const struct vlc_thumbnailer_cbs *cbs,
void *cbs_userdata );
......
......@@ -954,7 +954,7 @@ static void media_on_thumbnail_ready( input_item_t *item, int status,
static libvlc_media_thumbnail_request_t*
libvlc_media_thumbnail_request( libvlc_instance_t *inst,
libvlc_media_t *md,
const struct vlc_preparser_seek_arg *seek_arg,
const struct vlc_thumbnailer_arg *thumb_arg,
unsigned int width, unsigned int height,
bool crop, libvlc_picture_type_t picture_type,
libvlc_time_t timeout )
......@@ -981,7 +981,7 @@ libvlc_media_thumbnail_request( libvlc_instance_t *inst,
static const struct vlc_thumbnailer_cbs cbs = {
.on_ended = media_on_thumbnail_ready,
};
req->id = vlc_preparser_GenerateThumbnail( thumb, md->p_input_item, seek_arg,
req->id = vlc_preparser_GenerateThumbnail( thumb, md->p_input_item, thumb_arg,
&cbs, req );
if ( req->id == VLC_PREPARSER_REQ_ID_INVALID )
{
......@@ -1001,13 +1001,16 @@ libvlc_media_thumbnail_request_by_time( libvlc_instance_t *inst,
bool crop, libvlc_picture_type_t picture_type,
libvlc_time_t timeout )
{
const struct vlc_preparser_seek_arg seek_arg = {
.type = VLC_PREPARSER_SEEK_TIME,
.time = vlc_tick_from_libvlc_time( time ),
.speed = speed == libvlc_media_thumbnail_seek_fast ?
VLC_PREPARSER_SEEK_FAST : VLC_PREPARSER_SEEK_PRECISE,
const struct vlc_thumbnailer_arg thumb_arg = {
.seek = {
.type = VLC_THUMBNAILER_SEEK_TIME,
.time = vlc_tick_from_libvlc_time( time ),
.speed = speed == libvlc_media_thumbnail_seek_fast ?
VLC_THUMBNAILER_SEEK_FAST : VLC_THUMBNAILER_SEEK_PRECISE,
},
.hw_dec = false,
};
return libvlc_media_thumbnail_request( inst, md, &seek_arg, width, height,
return libvlc_media_thumbnail_request( inst, md, &thumb_arg, width, height,
crop, picture_type, timeout );
}
......@@ -1020,13 +1023,16 @@ libvlc_media_thumbnail_request_by_pos( libvlc_instance_t *inst,
bool crop, libvlc_picture_type_t picture_type,
libvlc_time_t timeout )
{
const struct vlc_preparser_seek_arg seek_arg = {
.type = VLC_PREPARSER_SEEK_POS,
.pos = pos,
.speed = speed == libvlc_media_thumbnail_seek_fast ?
VLC_PREPARSER_SEEK_FAST : VLC_PREPARSER_SEEK_PRECISE,
const struct vlc_thumbnailer_arg thumb_arg = {
.seek = {
.type = VLC_THUMBNAILER_SEEK_POS,
.pos = pos,
.speed = speed == libvlc_media_thumbnail_seek_fast ?
VLC_THUMBNAILER_SEEK_FAST : VLC_THUMBNAILER_SEEK_PRECISE,
},
.hw_dec = false,
};
return libvlc_media_thumbnail_request( inst, md, &seek_arg, width, height,
return libvlc_media_thumbnail_request( inst, md, &thumb_arg, width, height,
crop, picture_type, timeout );
}
......
......@@ -70,16 +70,18 @@ bool Thumbnailer::generate( const medialibrary::IMedia&, const std::string& mrl,
if ( unlikely( item == nullptr ) )
return false;
input_item_AddOption( item.get(), "no-hwdec", VLC_INPUT_OPTION_TRUSTED );
ctx.done = false;
ctx.thumbnailer = this;
{
vlc::threads::mutex_locker lock( m_mutex );
m_currentContext = &ctx;
struct vlc_preparser_seek_arg seek_arg = {
.type = vlc_preparser_seek_arg::VLC_PREPARSER_SEEK_POS,
.pos = position,
.speed = vlc_preparser_seek_arg::VLC_PREPARSER_SEEK_FAST,
struct vlc_thumbnailer_arg thumb_arg = {
.seek = {
.type = vlc_thumbnailer_arg::seek::VLC_THUMBNAILER_SEEK_POS,
.pos = position,
.speed = vlc_thumbnailer_arg::seek::VLC_THUMBNAILER_SEEK_FAST,
},
.hw_dec = false,
};
static const struct vlc_thumbnailer_cbs cbs = {
......@@ -87,7 +89,7 @@ bool Thumbnailer::generate( const medialibrary::IMedia&, const std::string& mrl,
};
vlc_preparser_req_id requestId =
vlc_preparser_GenerateThumbnail( m_thumbnailer.get(), item.get(),
&seek_arg, &cbs, &ctx );
&thumb_arg, &cbs, &ctx );
if (requestId == VLC_PREPARSER_REQ_ID_INVALID)
{
......
......@@ -121,6 +121,8 @@ struct vlc_input_decoder_t
vlc_clock_t *p_clock;
const char *psz_id;
bool hw_dec;
const struct vlc_input_decoder_callbacks *cbs;
void *cbs_userdata;
......@@ -816,7 +818,7 @@ static vlc_decoder_device * ModuleThread_GetDecoderDevice( decoder_t *p_dec )
vlc_input_decoder_t *p_owner = dec_get_owner( p_dec );
/* Requesting a decoder device will automatically enable hw decoding */
if( !var_InheritBool( p_dec, "hw-dec" ) )
if (!p_owner->hw_dec)
return NULL;
int created_vout = CreateVoutIfNeeded(p_owner);
......@@ -1951,6 +1953,7 @@ CreateDecoder( vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg )
p_owner->p_clock = cfg->clock;
p_owner->i_preroll_end = PREROLL_NONE;
p_owner->p_resource = cfg->resource;
p_owner->hw_dec = cfg->hw_dec;
p_owner->cbs = cfg->cbs;
p_owner->cbs_userdata = cfg->cbs_data;
p_owner->p_aout = NULL;
......@@ -2277,6 +2280,7 @@ vlc_input_decoder_Create( vlc_object_t *p_parent, const es_format_t *fmt, const
.resource = p_resource,
.sout = NULL,
.input_type = INPUT_TYPE_PLAYBACK,
.hw_dec = var_InheritBool( p_parent, "hw-dec" ),
.cbs = NULL, .cbs_data = NULL,
};
return decoder_New( p_parent, &cfg );
......
......@@ -60,6 +60,7 @@ struct vlc_input_decoder_cfg
input_resource_t *resource;
sout_stream_t *sout;
enum input_type input_type;
bool hw_dec;
unsigned cc_decoder;
const struct vlc_input_decoder_callbacks *cbs;
void *cbs_data;
......
......@@ -804,6 +804,7 @@ static int EsOutSetRecord(es_out_sys_t *p_sys, bool b_record, const char *dir_pa
.resource = input_priv(p_input)->p_resource,
.sout = p_sys->p_sout_record,
.input_type = INPUT_TYPE_PLAYBACK,
.hw_dec = input_priv(p_input)->hw_dec,
.cc_decoder = p_sys->cc_decoder,
.cbs = &decoder_cbs,
.cbs_data = p_es,
......@@ -2300,6 +2301,7 @@ static void EsOutCreateDecoder(es_out_sys_t *p_sys, es_out_id_t *p_es)
.resource = priv->p_resource,
.sout = priv->p_sout,
.input_type = p_sys->input_type,
.hw_dec = priv->hw_dec,
.cc_decoder = p_sys->cc_decoder,
.cbs = &decoder_cbs,
.cbs_data = p_es,
......@@ -2332,6 +2334,7 @@ static void EsOutCreateDecoder(es_out_sys_t *p_sys, es_out_id_t *p_es)
.resource = priv->p_resource,
.sout = p_sys->p_sout_record,
.input_type = INPUT_TYPE_PLAYBACK,
.hw_dec = priv->hw_dec,
.cc_decoder = p_sys->cc_decoder,
.cbs = &decoder_cbs,
.cbs_data = p_es,
......
......@@ -249,6 +249,21 @@ input_thread_t * input_Create( vlc_object_t *p_parent, input_item_t *p_item,
input_item_ApplyOptions( VLC_OBJECT(p_input), p_item );
/* Init Common fields */
switch (cfg->hw_dec)
{
case INPUT_CFG_HW_DEC_DEFAULT:
priv->hw_dec = var_InheritBool(p_input, "hw-dec");
break;
case INPUT_CFG_HW_DEC_DISABLED:
priv->hw_dec = false;
break;
case INPUT_CFG_HW_DEC_ENABLED:
priv->hw_dec = true;
break;
default: vlc_assert_unreachable();
}
priv->cbs = cfg->cbs;
priv->cbs_data = cfg->cbs_data;
priv->type = cfg->type;
......
......@@ -330,6 +330,12 @@ struct vlc_input_thread_callbacks
struct vlc_input_thread_cfg
{
enum input_type type;
enum
{
INPUT_CFG_HW_DEC_DEFAULT,
INPUT_CFG_HW_DEC_DISABLED,
INPUT_CFG_HW_DEC_ENABLED,
} hw_dec;
input_resource_t *resource;
vlc_renderer_item_t *renderer;
const struct vlc_input_thread_callbacks *cbs;
......@@ -446,6 +452,7 @@ typedef struct input_thread_private_t
void *cbs_data;
enum input_type type;
bool hw_dec;
bool preparse_subitems;
/* Current state */
......
......@@ -106,6 +106,7 @@ input_item_Parse(vlc_object_t *obj, input_item_t *item,
const struct vlc_input_thread_cfg input_cfg = {
.type = INPUT_TYPE_PREPARSING,
.hw_dec = INPUT_CFG_HW_DEC_DISABLED,
.cbs = &input_cbs,
.cbs_data = parser,
.preparsing.subitems = cfg->subitems,
......
......@@ -1142,6 +1142,7 @@ vlc_player_input_New(vlc_player_t *player, input_item_t *item)
const struct vlc_input_thread_cfg cfg = {
.type = INPUT_TYPE_PLAYBACK,
.hw_dec = INPUT_CFG_HW_DEC_DEFAULT,
.resource = player->resource,
.renderer = player->renderer,
.cbs = &cbs,
......
......@@ -55,7 +55,7 @@ struct task
vlc_preparser_t *preparser;
input_item_t *item;
int options;
struct vlc_preparser_seek_arg seek_arg;
struct vlc_thumbnailer_arg thumb_arg;
union vlc_preparser_cbs cbs;
void *userdata;
vlc_preparser_req_id id;
......@@ -73,7 +73,7 @@ struct task
static struct task *
TaskNew(vlc_preparser_t *preparser, void (*run)(void *), input_item_t *item,
int options, const struct vlc_preparser_seek_arg *seek_arg,
int options, const struct vlc_thumbnailer_arg *thumb_arg,
union vlc_preparser_cbs cbs, void *userdata)
{
struct task *task = malloc(sizeof(*task));
......@@ -87,12 +87,13 @@ TaskNew(vlc_preparser_t *preparser, void (*run)(void *), input_item_t *item,
task->userdata = userdata;
task->pic = NULL;
if (seek_arg == NULL)
task->seek_arg = (struct vlc_preparser_seek_arg) {
.type = VLC_PREPARSER_SEEK_NONE,
if (thumb_arg == NULL)
task->thumb_arg = (struct vlc_thumbnailer_arg) {
.seek.type = VLC_THUMBNAILER_SEEK_NONE,
.hw_dec = false,
};
else
task->seek_arg = *seek_arg;
task->thumb_arg = *thumb_arg;
input_item_Hold(item);
......@@ -331,6 +332,8 @@ ThumbnailerRun(void *userdata)
const struct vlc_input_thread_cfg cfg = {
.type = INPUT_TYPE_THUMBNAILING,
.hw_dec = task->thumb_arg.hw_dec ? INPUT_CFG_HW_DEC_ENABLED
: INPUT_CFG_HW_DEC_DISABLED,
.cbs = &cbs,
.cbs_data = task,
};
......@@ -344,19 +347,19 @@ ThumbnailerRun(void *userdata)
if (!input)
goto error;
assert(task->seek_arg.speed == VLC_PREPARSER_SEEK_PRECISE
|| task->seek_arg.speed == VLC_PREPARSER_SEEK_FAST);
bool fast_seek = task->seek_arg.speed == VLC_PREPARSER_SEEK_FAST;
assert(task->thumb_arg.seek.speed == VLC_THUMBNAILER_SEEK_PRECISE
|| task->thumb_arg.seek.speed == VLC_THUMBNAILER_SEEK_FAST);
bool fast_seek = task->thumb_arg.seek.speed == VLC_THUMBNAILER_SEEK_FAST;
switch (task->seek_arg.type)
switch (task->thumb_arg.seek.type)
{
case VLC_PREPARSER_SEEK_NONE:
case VLC_THUMBNAILER_SEEK_NONE:
break;
case VLC_PREPARSER_SEEK_TIME:
input_SetTime(input, task->seek_arg.time, fast_seek);
case VLC_THUMBNAILER_SEEK_TIME:
input_SetTime(input, task->thumb_arg.seek.time, fast_seek);
break;
case VLC_PREPARSER_SEEK_POS:
input_SetPosition(input, task->seek_arg.pos, fast_seek);
case VLC_THUMBNAILER_SEEK_POS:
input_SetPosition(input, task->thumb_arg.seek.pos, fast_seek);
break;
default:
vlc_assert_unreachable();
......@@ -524,7 +527,7 @@ vlc_preparser_req_id vlc_preparser_Push( vlc_preparser_t *preparser, input_item_
vlc_preparser_req_id
vlc_preparser_GenerateThumbnail( vlc_preparser_t *preparser, input_item_t *item,
const struct vlc_preparser_seek_arg *seek_arg,
const struct vlc_thumbnailer_arg *thumb_arg,
const struct vlc_thumbnailer_cbs *cbs,
void *cbs_userdata )
{
......@@ -537,7 +540,7 @@ vlc_preparser_GenerateThumbnail( vlc_preparser_t *preparser, input_item_t *item,
struct task *task =
TaskNew(preparser, ThumbnailerRun, item, VLC_PREPARSER_TYPE_THUMBNAIL,
seek_arg, task_cbs, cbs_userdata);
thumb_arg, task_cbs, cbs_userdata);
if (task == NULL)
return VLC_PREPARSER_REQ_ID_INVALID;
......
......@@ -151,25 +151,26 @@ static void test_thumbnails( libvlc_instance_t* p_vlc )
vlc_mutex_lock( &ctx.lock );
vlc_preparser_req_id id;
struct vlc_preparser_seek_arg seek_arg;
struct vlc_thumbnailer_arg thumb_arg;
if ( test_params[i].b_use_pos )
{
seek_arg.type = VLC_PREPARSER_SEEK_POS;
seek_arg.pos = test_params[i].f_pos;
seek_arg.speed = test_params[i].b_fast_seek ?
VLC_PREPARSER_SEEK_FAST : VLC_PREPARSER_SEEK_PRECISE;
thumb_arg.seek.type = VLC_THUMBNAILER_SEEK_POS;
thumb_arg.seek.pos = test_params[i].f_pos;
thumb_arg.seek.speed = test_params[i].b_fast_seek ?
VLC_THUMBNAILER_SEEK_FAST : VLC_THUMBNAILER_SEEK_PRECISE;
}
else
{
seek_arg.type = VLC_PREPARSER_SEEK_TIME;
seek_arg.time = test_params[i].i_time;
seek_arg.speed = test_params[i].b_fast_seek ?
VLC_PREPARSER_SEEK_FAST : VLC_PREPARSER_SEEK_PRECISE;
thumb_arg.seek.type = VLC_THUMBNAILER_SEEK_TIME;
thumb_arg.seek.time = test_params[i].i_time;
thumb_arg.seek.speed = test_params[i].b_fast_seek ?
VLC_THUMBNAILER_SEEK_FAST : VLC_THUMBNAILER_SEEK_PRECISE;
}
thumb_arg.hw_dec = false;
static const struct vlc_thumbnailer_cbs cbs = {
.on_ended = thumbnailer_callback,
};
id = vlc_preparser_GenerateThumbnail( p_thumbnailer, p_item, &seek_arg,
id = vlc_preparser_GenerateThumbnail( p_thumbnailer, p_item, &thumb_arg,
&cbs, &ctx );
assert( id != VLC_PREPARSER_REQ_ID_INVALID );
......