summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend_svr.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/frontend_svr.c b/frontend_svr.c
index 1c935426..509117d5 100644
--- a/frontend_svr.c
+++ b/frontend_svr.c
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: frontend_svr.c,v 1.22 2006-09-20 05:46:33 phintuka Exp $
+ * $Id: frontend_svr.c,v 1.23 2006-10-07 19:54:05 phintuka Exp $
*
*/
@@ -400,15 +400,36 @@ bool cXinelibServer::Poll(cPoller &Poller, int TimeoutMs)
do {
Lock();
m_Master = true;
- int Free = 0xffff, Clients = 0;
+ int Free = 0xffff, Clients = 0, Udp = 0;
for(int i=0; i<MAXCLIENTS; i++) {
- if(fd_control[i]>=0 && m_bConfigOk[i])
+ if(fd_control[i]>=0 && m_bConfigOk[i]) {
if(fd_data[i]>=0 || m_bMulticast[i]) {
if(m_Writer[i])
Free = min(Free, m_Writer[i]->Free());
+ else if(m_bUdp[i])
+ Udp++;
Clients++;
}
+ }
}
+
+ /* select master timing source for replay mode */
+ static int sMaster = -1;
+ int master = -1;
+ if(Clients && !m_iMulticastMask && !Udp) {
+ for(int i=0; i<MAXCLIENTS; i++)
+ if(fd_control[i]>=0 && m_bConfigOk[i] && m_Writer[i]) {
+ master = i;
+ break;
+ }
+ }
+ if(master != sMaster) {
+ Xine_Control("MASTER 0");
+ if(master >= 0)
+ write_cmd(fd_control[master], "MASTER 1\r\n");
+ sMaster = master;
+ }
+
Unlock();
// replay is paused when no clients