]> git.sesse.net Git - vlc/commitdiff
input: poll signal level through demux (refs #8456)
authorRémi Denis-Courmont <remi@remlab.net>
Mon, 26 Aug 2013 17:21:14 +0000 (20:21 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 26 Aug 2013 17:28:53 +0000 (20:28 +0300)
include/vlc_demux.h
include/vlc_input.h
modules/access/dtv/access.c
modules/demux/ts.c
src/input/input.c

index 249291427c0439edbaeb5f5fafd70d6d44340390..1d56db007cdc6cfe8373f07e8e293578b208bca1 100644 (file)
@@ -138,6 +138,8 @@ enum demux_query_e
     DEMUX_CAN_RECORD,           /* arg1=bool*   res=can fail(assume false) */
     DEMUX_SET_RECORD_STATE,     /* arg1=bool    res=can fail */
 
+    DEMUX_GET_SIGNAL, /* arg1=double *pf_quality, arg2=double *pf_strength
+                         res=can fail */
 
     /* II. Specific access_demux queries */
     /* PAUSE you are ensured that it is never called twice with the same state */
index b48a256ca4d7be090540a638f0c3040d17410b55..491c329b020e67c34aa6aa24db23c5f132c80e87 100644 (file)
@@ -206,7 +206,6 @@ static inline void vlc_input_attachment_Delete( input_attachment_t *a )
 #define INPUT_UPDATE_TITLE      0x0010
 #define INPUT_UPDATE_SEEKPOINT  0x0020
 #define INPUT_UPDATE_META       0x0040
-#define INPUT_UPDATE_SIGNAL     0x0080
 #define INPUT_UPDATE_TITLE_LIST 0x0100
 
 /**
index d4f00c2c070206af960ed5a824b9f24e1b2906ab..77b2f403da1d35ee6c73da090654bbd06611d2c7 100644 (file)
@@ -521,11 +521,6 @@ static block_t *Read (access_t *access)
 
     block->i_buffer = val;
 
-    /* Fetch the signal levels every so often. Some devices do not like this
-     * to be requested too frequently, e.g. due to low bandwidth I²C bus. */
-    if ((sys->signal_poll++) == 0)
-        access->info.i_update |= INPUT_UPDATE_SIGNAL;
-
     return block;
 }
 
@@ -555,6 +550,11 @@ static int Control (access_t *access, int query, va_list args)
             break;
 
         case ACCESS_GET_SIGNAL:
+            /* Fetch the signal levels only every so often to avoid stressing
+             * the device bus. */
+            if ((sys->signal_poll++))
+                return VLC_EGENERIC;
+
             *va_arg (args, double *) = dvb_get_snr (dev);
             *va_arg (args, double *) = dvb_get_signal_strength (dev);
             return VLC_SUCCESS;
index 4c279f720a5a6b47bb616d61e6985530398641db..c9a6dd9e5ae60872c32794700098cfeaa41be050 100644 (file)
@@ -1202,8 +1202,9 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
         p_sys->b_start_record = b_bool;
         return VLC_SUCCESS;
 
-    case DEMUX_GET_FPS:
-    case DEMUX_SET_TIME:
+    case DEMUX_GET_SIGNAL:
+        return stream_Control( p_demux->s, STREAM_GET_SIGNAL, args );
+
     default:
         return VLC_EGENERIC;
     }
index 1ab327fbc302824f03f1ea54898b78ecfd049a6b..5153b6897dadafd9ea6044afd443e8ea8413734e 100644 (file)
@@ -2212,6 +2212,13 @@ static void UpdateGenericFromDemux( input_thread_t *p_input )
         }
         p_demux->info.i_update &= ~INPUT_UPDATE_META;
     }
+    {
+        double quality;
+        double strength;
+
+        if( !demux_Control( p_demux, DEMUX_GET_SIGNAL, &quality, &strength ) )
+            input_SendEventSignal( p_input, quality, strength );
+    }
 }
 
 static void UpdateTitleListfromDemux( input_thread_t *p_input )
@@ -2284,18 +2291,6 @@ static void UpdateGenericFromAccess( input_thread_t *p_input )
         }
         p_access->info.i_update &= ~INPUT_UPDATE_META;
     }
-    if( p_access->info.i_update & INPUT_UPDATE_SIGNAL )
-    {
-        double f_quality;
-        double f_strength;
-
-        if( stream_Control( p_stream, STREAM_GET_SIGNAL, &f_quality, &f_strength ) )
-            f_quality = f_strength = -1;
-
-        input_SendEventSignal( p_input, f_quality, f_strength );
-
-        p_access->info.i_update &= ~INPUT_UPDATE_SIGNAL;
-    }
 }
 
 /*****************************************************************************