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
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
407 results
Show changes
Commits on Source (12)
......@@ -40,21 +40,6 @@ void vout_control_Init(vout_control_t *ctrl)
ctrl->yielding = false;
ctrl->forced_awake = false;
ctrl->pending_count = 0;
ARRAY_INIT(ctrl->cmd);
}
void vout_control_Clean(vout_control_t *ctrl)
{
/* */
ARRAY_RESET(ctrl->cmd);
}
void vout_control_PushMouse(vout_control_t *ctrl, const vlc_mouse_t *video_mouse)
{
vlc_mutex_lock(&ctrl->lock);
ARRAY_APPEND(ctrl->cmd, *video_mouse);
vlc_cond_signal(&ctrl->wait_request);
vlc_mutex_unlock(&ctrl->lock);
}
void vout_control_Wake(vout_control_t *ctrl)
......@@ -88,54 +73,38 @@ void vout_control_Release(vout_control_t *ctrl)
vlc_mutex_unlock(&ctrl->lock);
}
int vout_control_Pop(vout_control_t *ctrl, vlc_mouse_t *mouse, vlc_tick_t deadline)
void vout_control_Wait(vout_control_t *ctrl, vlc_tick_t deadline)
{
bool has_cmd = false;
vlc_mutex_lock(&ctrl->lock);
bool timed_out = false;
for (;;)
ctrl->yielding = true;
while (ctrl->pending_count != 0)
{
if (ctrl->forced_awake)
break;
/* Let vout_control_Hold() callers pass */
vlc_cond_signal(&ctrl->wait_available);
vlc_cond_wait(&ctrl->wait_request, &ctrl->lock);
}
if (ctrl->pending_count != 0)
{
/* Let vout_control_Hold() callers pass */
ctrl->yielding = true;
vlc_cond_signal(&ctrl->wait_available);
vlc_cond_wait(&ctrl->wait_request, &ctrl->lock);
ctrl->yielding = false;
}
else if (timed_out)
break;
else if (ctrl->cmd.i_size <= 0 && deadline != VLC_TICK_INVALID)
if (deadline != VLC_TICK_INVALID)
{
do
{
ctrl->yielding = true;
if (ctrl->forced_awake)
break;
vlc_cond_signal(&ctrl->wait_available);
timed_out =
vlc_cond_timedwait(&ctrl->wait_request, &ctrl->lock, deadline);
ctrl->yielding = false;
}
else
break;
while (vlc_cond_timedwait(&ctrl->wait_request, &ctrl->lock,
deadline) == 0);
}
ctrl->yielding = false;
while (ctrl->is_held)
vlc_cond_wait(&ctrl->wait_available, &ctrl->lock);
if (ctrl->cmd.i_size > 0) {
has_cmd = true;
*mouse = ARRAY_VAL(ctrl->cmd, 0);
ARRAY_REMOVE(ctrl->cmd, 0);
// keep forced_awake set, if it is, so we report all mouse states we have
// after we were awaken when a new picture has been pushed by the decoder
// see vout_control_Wake
} else {
ctrl->forced_awake = false;
}
ctrl->forced_awake = false;
vlc_mutex_unlock(&ctrl->lock);
return has_cmd ? VLC_SUCCESS : VLC_EGENERIC;
}
......@@ -36,20 +36,17 @@ typedef struct {
bool yielding;
bool is_held;
unsigned pending_count;
DECL_ARRAY(vlc_mouse_t) cmd;
} vout_control_t;
/* */
void vout_control_Init(vout_control_t *);
void vout_control_Clean(vout_control_t *);
/* controls outside of the vout thread */
void vout_control_PushMouse(vout_control_t *, const vlc_mouse_t *);
void vout_control_Wake(vout_control_t *);
void vout_control_Hold(vout_control_t *);
void vout_control_Release(vout_control_t *);
/* control inside of the vout thread */
int vout_control_Pop(vout_control_t *, vlc_mouse_t *, vlc_tick_t deadline);
void vout_control_Wait(vout_control_t *, vlc_tick_t deadline);
#endif
......@@ -264,19 +264,53 @@ void vout_DisplayTitle(vout_thread_t *vout, const char *title)
void vout_MouseState(vout_thread_t *vout, const vlc_mouse_t *mouse)
{
vout_thread_sys_t *sys = VOUT_THREAD_TO_SYS(vout);
vlc_mouse_t video_mouse, tmp[2];
const vlc_mouse_t *m = &video_mouse;
bool has_display;
assert(!sys->dummy);
assert(mouse);
/* Translate window coordinates to video coordinates */
vlc_mutex_lock(&sys->display_lock);
vlc_mouse_t video_mouse;
if (sys->display)
has_display = sys->display != NULL;
if (has_display)
vout_display_TranslateMouseState(sys->display, &video_mouse, mouse);
else
video_mouse = *mouse;
vlc_mutex_unlock(&sys->display_lock);
vout_control_PushMouse(&sys->control, &video_mouse);
if (!has_display)
return;
/* Pass mouse events through the filter chains. */
vlc_mutex_lock(&sys->filter.lock);
if (sys->filter.chain_static != NULL
&& sys->filter.chain_interactive != NULL) {
if (!filter_chain_MouseFilter(sys->filter.chain_interactive,
&tmp[0], m))
m = &tmp[0];
if (!filter_chain_MouseFilter(sys->filter.chain_static,
&tmp[1], m))
m = &tmp[1];
}
vlc_mutex_unlock(&sys->filter.lock);
/* Check if the mouse state actually changed and emit events. */
/* NOTE: sys->mouse is only used here, so no need to lock. */
if (vlc_mouse_HasMoved(&sys->mouse, m))
var_SetCoords(vout, "mouse-moved", m->i_x, m->i_y);
if (vlc_mouse_HasButton(&sys->mouse, m))
var_SetInteger(vout, "mouse-button-down", m->i_pressed);
if (m->b_double_click)
var_ToggleBool(vout, "fullscreen");
sys->mouse = *m;
vlc_mutex_lock(&sys->display_lock);
/* Mouse events are only initialised if the display exists. */
if (sys->display != NULL && sys->mouse_event != NULL)
sys->mouse_event(m, sys->mouse_opaque);
vlc_mutex_unlock(&sys->display_lock);
}
void vout_PutSubpicture( vout_thread_t *vout, subpicture_t *subpic )
......@@ -1558,41 +1592,6 @@ void vout_ChangeSpuRate(vout_thread_t *vout, size_t channel_id, float rate)
spu_SetClockRate(sys->spu, channel_id, rate);
}
static void ProcessMouseState(vout_thread_sys_t *p_vout,
const vlc_mouse_t *win_mouse)
{
vlc_mouse_t tmp1, tmp2;
const vlc_mouse_t *m;
vout_thread_t *vout = &p_vout->obj;
vout_thread_sys_t *sys = p_vout;
/* pass mouse coordinates in the filter chains. */
m = win_mouse;
vlc_mutex_lock(&sys->filter.lock);
if (sys->filter.chain_static && sys->filter.chain_interactive) {
if (!filter_chain_MouseFilter(sys->filter.chain_interactive,
&tmp1, m))
m = &tmp1;
if (!filter_chain_MouseFilter(sys->filter.chain_static,
&tmp2, m))
m = &tmp2;
}
vlc_mutex_unlock(&sys->filter.lock);
if (vlc_mouse_HasMoved(&sys->mouse, m))
var_SetCoords(vout, "mouse-moved", m->i_x, m->i_y);
if (vlc_mouse_HasButton(&sys->mouse, m))
var_SetInteger(vout, "mouse-button-down", m->i_pressed);
if (m->b_double_click)
var_ToggleBool(vout, "fullscreen");
sys->mouse = *m;
if (sys->mouse_event)
sys->mouse_event(m, sys->mouse_opaque);
}
static int vout_Start(vout_thread_sys_t *vout, vlc_video_context *vctx, const vout_configuration_t *cfg)
{
vout_thread_sys_t *sys = vout;
......@@ -1600,7 +1599,6 @@ static int vout_Start(vout_thread_sys_t *vout, vlc_video_context *vctx, const vo
sys->mouse_event = cfg->mouse_event;
sys->mouse_opaque = cfg->mouse_opaque;
vlc_mouse_Init(&sys->mouse);
sys->decoder_fifo = picture_fifo_New();
sys->private.display_pool = NULL;
......@@ -1722,12 +1720,7 @@ static void *Thread(void *object)
vlc_tick_t deadline = VLC_TICK_INVALID;
for (;;) {
vlc_mouse_t video_mouse;
while (vout_control_Pop(&sys->control, &video_mouse, deadline) == VLC_SUCCESS) {
if (atomic_load(&sys->control_is_terminated))
break;
ProcessMouseState(vout, &video_mouse);
}
vout_control_Wait(&sys->control, deadline);
if (atomic_load(&sys->control_is_terminated))
break;
......@@ -1869,8 +1862,6 @@ void vout_Release(vout_thread_t *vout)
assert(!sys->window_enabled);
vout_display_window_Delete(sys->display_cfg.window);
vout_control_Clean(&sys->control);
/* */
vout_statistic_Clean(&sys->statistic);
......@@ -1893,7 +1884,7 @@ static vout_thread_sys_t *vout_CreateCommon(vlc_object_t *object)
vout_thread_sys_t *sys = vout;
vlc_atomic_rc_init(&sys->rc);
vlc_mouse_Init(&sys->mouse);
return vout;
}
......