]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: Implement using nanosleep() for systems where clock_nanosleep() is not available
authorBernhard Froehlich <decke@bluelife.at>
Mon, 13 Jan 2014 15:09:54 +0000 (15:09 +0000)
committerBernhard Froehlich <decke@bluelife.at>
Wed, 15 Jan 2014 14:13:56 +0000 (14:13 +0000)
src/input/mpegts/tsfile/tsfile_input.c

index bd6a09a5658f0e1b9d775f9c08e74ecd2a60a83d..f8cb81de7dfa88ac459b08ee73f6ff13002a0d1a 100644 (file)
@@ -132,16 +132,27 @@ tsfile_input_thread ( void *aux )
       if (pcr != PTS_UNSET) {
         if (pcr_last != PTS_UNSET) {
           struct timespec slp;
-          int64_t d = pcr - pcr_last;
-          if (d < 0)
-            d = 0;
-          else if (d > 90000)
-            d = 90000;
-          d *= 11;
-          d += pcr_last_realtime;
-          slp.tv_sec  = (d / 1000000);
-          slp.tv_nsec = (d % 1000000) * 1000;
+          int64_t time, delta;
+
+          time = pcr_last_realtime;
+          delta = pcr - pcr_last;
+
+          if (delta < 0)
+            delta = 0;
+          else if (delta > 90000)
+            delta = 90000;
+          delta *= 11;
+
+#ifdef clock_nanosleep
+          time += delta;
+          slp.tv_sec  = (time / 1000000);
+          slp.tv_nsec = (time % 1000000) * 1000;
           clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &slp, NULL);
+#else
+          slp.tv_sec  = (delta / 1000000);
+          slp.tv_nsec = (delta % 1000000) * 1000;
+          nanosleep(&slp, NULL);
+#endif
         }
         pcr_last          = pcr;
         pcr_last_realtime = getmonoclock();