]> git.sesse.net Git - vlc/commitdiff
Tuning to DVB-C works. Added code to listen to FE_REINIT from the frontend.
authorJean-Paul Saman <jpsaman@videolan.org>
Fri, 7 May 2004 11:17:40 +0000 (11:17 +0000)
committerJean-Paul Saman <jpsaman@videolan.org>
Fri, 7 May 2004 11:17:40 +0000 (11:17 +0000)
modules/access/dvb/access.c
modules/access/dvb/dvb.c

index 08db41a2e7e72a5dd395125a08b3b7430e9d336b..f1cb2137b8827f049514d66ed9837e40ea2664c9 100644 (file)
@@ -83,6 +83,7 @@ int E_(Open) ( vlc_object_t *p_this )
     int                 i_len = 0;
     vlc_value_t         val;
     int                 i_test;
+    int                i_ret;
 
     /* parse the options passed in command line : */
     psz_parser = strdup( p_input->psz_name );
@@ -469,13 +470,15 @@ int E_(Open) ( vlc_object_t *p_this )
             fep.u.qpsk.symbol_rate = p_dvb->u_srate;
             fep.u.qpsk.fec_inner = dvb_DecodeFEC( p_input, p_dvb->i_fec ); 
             msg_Dbg( p_input, "DVB-S: satellite (QPSK) frontend %s found", frontend_info.name );
-
-            if( ioctl_SetQPSKFrontend( p_input, fep ) < 0 )
+           while( (i_ret = ioctl_SetQPSKFrontend( p_input, fep )) < 0 )
             {
-                msg_Err( p_input, "DVB-S: tuning failed" );
-                close( p_dvb->i_frontend );
-                free( p_dvb );
-                return -1;
+               if( (i_ret != -3) && (i_ret < 0))
+               {
+                    msg_Err( p_input, "DVB-S: tuning failed" );
+                    close( p_dvb->i_frontend );
+                    free( p_dvb );
+                    return -1;
+               }
             }
             break;
             
@@ -487,12 +490,15 @@ int E_(Open) ( vlc_object_t *p_this )
             fep.u.qam.fec_inner = dvb_DecodeFEC( p_input, p_dvb->i_fec ); 
             fep.u.qam.modulation = dvb_DecodeModulation( p_input, p_dvb->i_modulation ); 
             msg_Dbg( p_input, "DVB-C: cable (QAM) frontend %s found", frontend_info.name );
-            if( ioctl_SetQAMFrontend( p_input, fep ) < 0 )
-            {
-                msg_Err( p_input, "DVB-C: tuning failed" );
-                close( p_dvb->i_frontend );
-                free( p_dvb );
-                return -1;
+            while( ( i_ret = ioctl_SetQAMFrontend( p_input, fep ) ) < 0  )
+            {          
+               if( (i_ret != -3) && (i_ret < 0))
+                {
+                    msg_Err( p_input, "DVB-C: tuning failed" );
+                    close( p_dvb->i_frontend );
+                    free( p_dvb );
+                    return -1;
+                }
             }
             break;
 
@@ -508,12 +514,15 @@ int E_(Open) ( vlc_object_t *p_this )
             fep.u.ofdm.guard_interval = dvb_DecodeGuardInterval( p_input, p_dvb->i_guard );
             fep.u.ofdm.hierarchy_information = dvb_DecodeHierarchy( p_input, p_dvb->i_hierarchy );
             msg_Dbg( p_input, "DVB-T: terrestrial (OFDM) frontend %s found", frontend_info.name );
-            if( ioctl_SetOFDMFrontend( p_input, fep ) < 0 )
+            while( (i_ret=ioctl_SetOFDMFrontend( p_input, fep )) < 0 )
             {
-                msg_Err( p_input, "DVB-T: tuning failed" );
-                close( p_dvb->i_frontend );
-                free( p_dvb );
-                return -1;
+               if( (i_ret != -3) && (i_ret < 0))
+                {
+                    msg_Err( p_input, "DVB-T: tuning failed" );
+                    close( p_dvb->i_frontend );
+                    free( p_dvb );
+                    return -1;
+               }
             }
             break;
         default:
index defac0fd566787c7412303c208f8d7a85a8885be..80848a03c833d782bcc90352f5a20d3759b4d545 100644 (file)
@@ -374,7 +374,6 @@ int ioctl_SetQAMFrontend( input_thread_t * p_input, struct dvb_frontend_paramete
 
     /* Check Status of frontend */
     i_ret = ioctl_CheckFrontend( p_input, FE_QAM );
-
     return i_ret;
 }
 
@@ -387,7 +386,7 @@ static int ioctl_CheckFrontend( input_thread_t * p_input, fe_type_t type )
     int          fd_front = p_dvb->i_frontend;
     int          i_ret;
 
-    while( !p_input->b_die )
+    while( !p_input->b_die || !p_input->b_error )
     {
         int32_t value;
         fe_status_t status;
@@ -449,7 +448,7 @@ static int ioctl_CheckFrontend( input_thread_t * p_input, fe_type_t type )
             }
             msg_Err( p_input, "check frontend ... resend frontend parameters" );
             msg_Err( p_input, "check frontend ... tuning failed" );
-            return -1;
+            return -3;
         }
 
         /* Read some statistics */