[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