[vlc-commits] input: merge two level of loop for control requests
Rémi Denis-Courmont
git at videolan.org
Sat Feb 21 19:42:15 CET 2015
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Feb 21 20:18:30 2015 +0200| [a40a621db9cc2dd729bf91d99fd85ddd02956679] | committer: Rémi Denis-Courmont
input: merge two level of loop for control requests
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a40a621db9cc2dd729bf91d99fd85ddd02956679
---
src/input/input.c | 70 ++++++++++++++++++++++++-----------------------------
1 file changed, 32 insertions(+), 38 deletions(-)
diff --git a/src/input/input.c b/src/input/input.c
index da4c253..5913e9d 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -738,61 +738,55 @@ static void MainLoop( input_thread_t *p_input, bool b_interactive )
}
}
- /* */
- mtime_t now;
-
- do {
+ /* Handle control */
+ for( ;; )
+ {
mtime_t i_deadline = i_wakeup;
+
if( b_paused || !b_demux_polled )
/* FIXME: remove this polling */
i_deadline = mdate() + INT64_C(250000);
- /* Handle control */
- for( ;; )
+ /* Postpone seeking until ES buffering is complete or at most
+ * 125 ms. */
+ bool b_postpone = es_out_GetBuffering( p_input->p->p_es_out )
+ && !p_input->p->input.b_eof;
+ if( b_postpone )
{
- mtime_t i_limit = i_deadline;
+ mtime_t now = mdate();
- /* Postpone seeking until ES buffering is complete or at most
- * 125 ms. */
- bool b_buffering = es_out_GetBuffering( p_input->p->p_es_out )
- && !p_input->p->input.b_eof;
- if( b_buffering )
- {
- mtime_t now = mdate();
-
- /* Recheck ES buffer level every 20 ms when seeking */
- if( now < i_last_seek_mdate + INT64_C(125000)
- && i_deadline > now + INT64_C(20000) )
- i_limit = now + INT64_C(20000);
- }
+ /* Recheck ES buffer level every 20 ms when seeking */
+ if( now < i_last_seek_mdate + INT64_C(125000)
+ && i_deadline > now + INT64_C(20000) )
+ i_deadline = now + INT64_C(20000);
+ else
+ b_postpone = false;
+ }
- int i_type;
- vlc_value_t val;
+ int i_type;
+ vlc_value_t val;
- if( ControlPop( p_input, &i_type, &val, i_limit, b_buffering ) )
- {
- if( b_buffering && i_limit < i_deadline )
- continue;
- break;
- }
+ if( ControlPop( p_input, &i_type, &val, i_deadline, b_postpone ) )
+ {
+ if( b_postpone )
+ continue;
+ break; /* Wake-up time reached */
+ }
#ifndef NDEBUG
- msg_Dbg( p_input, "control type=%d", i_type );
+ msg_Dbg( p_input, "control type=%d", i_type );
#endif
-
- if( Control( p_input, i_type, val ) )
- {
- if( ControlIsSeekRequest( i_type ) )
- i_last_seek_mdate = mdate();
- i_intf_update = 0;
- }
+ if( Control( p_input, i_type, val ) )
+ {
+ if( ControlIsSeekRequest( i_type ) )
+ i_last_seek_mdate = mdate();
+ i_intf_update = 0;
}
/* Update the wakeup time */
- now = mdate();
if( i_wakeup != 0 )
i_wakeup = es_out_GetWakeup( p_input->p->p_es_out );
- } while( now < i_wakeup );
+ }
}
if( !p_input->b_error )
More information about the vlc-commits
mailing list