Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] Re: blocking FE_SET_FRONTEND ioctl in non-blocking mode
On Wednesday 12 May 2004 17:05, Andrew de Quincey wrote:
> > I have now tried again with current CVS from the linux_2_4
> > branch. I have also realised that I was in error yesterday
> > and actually timing two consecutive tuning on the TDA
> > (5s from cold, 700 ms from warm). I've actually timed
> > the grundig this time and it takes 3-4 seconds from
> > cold, 500 ms from warm. I've also noted the very first
> > tuning attempt after booting is fast like a warm one.
> >
> > > Is 39ms an acceptable figure,
> >
> > It should be good enough, much better than 5 seconds :-).
>
> I can maybe speed it up even more - I've got some ideas for an alternative
> way to fix the stray data problem. Will post a patch later if they turn out
> to work.
Hi, the attached patch implements my removal of the FE_CAN_MUTE_TS fix - seems
to work for me. Tuning seems even zippier now, and I've had no data problems
yet (testing with channel changes in kaxtv).
Index: linux/drivers/media/dvb/dvb-core/dvb_frontend.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.c,v
retrieving revision 1.79
diff -a -u -b -r1.79 dvb_frontend.c
--- linux/drivers/media/dvb/dvb-core/dvb_frontend.c 3 May 2004 16:29:27 -0000 1.79
+++ linux/drivers/media/dvb/dvb-core/dvb_frontend.c 12 May 2004 22:49:45 -0000
@@ -237,9 +237,6 @@
fe->status = s;
- if (!(s & FE_HAS_LOCK) && (fe->info->caps & FE_CAN_MUTE_TS))
- return;
-
/**
* now tell the Demux about the TS status changes...
*/
@@ -772,6 +769,7 @@
fe->min_delay = (dvb_override_tune_delay * HZ) / 1000;
}
+ dvb_frontend_wakeup(fe);
dvb_frontend_add_event (fe, 0);
break;
@@ -797,14 +795,6 @@
tmp->caps |= FE_CAN_INVERSION_AUTO;
}
- // if the frontend has just been set, wait until the first tune has finished.
- // This ensures the app doesn't start reading data too quickly, perhaps from the
- // previous lock, which is REALLY CONFUSING TO DEBUG!
- if ((cmd == FE_SET_FRONTEND) && (err == 0)) {
- dvb_frontend_wakeup(fe);
- err = wait_event_interruptible(fe->wait_queue, fe->state & ~FESTATE_RETUNE);
- }
-
return err;
}
Home |
Main Index |
Thread Index