Annotation of multiplexer/global.c, revision 1.2
1.1 oskar 1: /*
2: * ISO 13818 stream multiplexer
3: * Copyright (C) 2001 Convergence Integrated Media GmbH Berlin
4: * Author: Oskar Schirmer (oskar@convergence.de)
5: */
6:
7: /*
8: * Module: Global
9: * Purpose: Service functions.
10: */
11:
12: #include "global.h"
13: #include "error.h"
14:
15: boolean timed_io;
16: boolean accept_weird_scr;
17: int global_delta;
18:
19: #ifdef DEBUG_TIMEPOLL
20: timepoll logtp [max_timepoll];
21: long logtpc;
22: timepoll *ltp;
23: #endif
24:
25: int msec_now (void)
26: {
27: static long last;
28: static int local_delta;
29: struct timeval tv;
30: register int now;
31: gettimeofday (&tv,NULL);
32: #ifdef DEBUG_TIMEPOLL
33: ltp->tv.tv_sec = tv.tv_sec;
34: ltp->tv.tv_usec = tv.tv_usec;
35: #endif
36: if ((tv.tv_sec & (~0x001FFFFFL)) != last) {
37: last = tv.tv_sec & (~0x001FFFFFL);
38: local_delta += 1000 * 0x00200000L;
39: }
40: now = (tv.tv_sec & 0x001FFFFFL) * 1000 + tv.tv_usec / 1000 + local_delta;
41: warn (LDEB,"msec_now",EGLO,3,0,now);
42: #ifdef DEBUG_TIMEPOLL
43: ltp->cnt_msecnow += 1;
44: ltp->msec_now = now + global_delta;
45: #endif
46: return (now + global_delta);
1.2 ! oskar 47: }
! 48:
! 49: void cref2msec (conversion_base *b,
! 50: clockref c,
! 51: int *m)
! 52: {
! 53: #define CREF2MSEC_LIMIT (90 * 1024 * 16) /* 16 sec */
! 54: unsigned long d;
! 55: d = c.base - b->base;
! 56: if (d >= (2 * CREF2MSEC_LIMIT)) {
! 57: if (d >= (3 * CREF2MSEC_LIMIT)) {
! 58: b->base = c.base - CREF2MSEC_LIMIT;
! 59: b->msec = b->base / 90;
! 60: } else {
! 61: b->base += CREF2MSEC_LIMIT;
! 62: b->msec += CREF2MSEC_LIMIT / 90;
! 63: }
! 64: d = c.base - b->base;
! 65: }
! 66: *m = (d / 90) + b->msec;
! 67: }
! 68:
! 69: void msec2cref (conversion_base *b,
! 70: int m,
! 71: clockref *c)
! 72: {
! 73: #define MSEC2CREF_LIMIT (1024 * 10) /* 10 sec */
! 74: unsigned int d;
! 75: d = m - b->msec;
! 76: if (d >= (2 * MSEC2CREF_LIMIT)) {
! 77: if (d >= (3 * MSEC2CREF_LIMIT)) {
! 78: b->msec = m - MSEC2CREF_LIMIT;
! 79: b->base = b->msec * 45;
! 80: } else {
! 81: b->msec += MSEC2CREF_LIMIT;
! 82: b->base += MSEC2CREF_LIMIT * 45;
! 83: }
! 84: d = m - b->msec;
! 85: }
! 86: d = (d * 45) + b->base;
! 87: c->base = d * 2;
! 88: c->ba33 = (d >> 31) & 0x01;
! 89: c->ext = 0;
! 90: c->valid = TRUE;
1.1 oskar 91: }
92:
93: void global_init (void)
94: {
95: #ifdef DEBUG_TIMEPOLL
96: {
97: struct timeval tv;
98: memset (&logtp[0],0,sizeof(logtp));
99: gettimeofday (&tv,NULL);
100: logtp[0].usec = tv.tv_usec;
101: logtpc = 0;
102: ltp = &logtp[0];
103: }
104: #endif
105: verbose_level = LWAR;
106: global_delta = 0;
107: global_delta = - msec_now ();
108: timed_io = FALSE;
109: accept_weird_scr = FALSE;
110: }
111:
LinuxTV legacy CVS <linuxtv.org/cvs>