[haiku-commits] haiku: hrev49582 - src/kits/media

  • From: b.vitruvio@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 26 Aug 2015 19:48:43 +0200 (CEST)

hrev49582 adds 2 changesets to branch 'master'
old head: d9971ae7aace9f9a3fd44558ebb64c706ce3bf11
new head: ae9cbf9c4e167470b47964059e90c2b0881367eb
overview:
http://cgit.haiku-os.org/haiku/log/?qt=range&q=ae9cbf9c4e16+%5Ed9971ae7aace

----------------------------------------------------------------------------

dfe056fd6a52: BMediaEventLooper: Continue code improvements.

ae9cbf9c4e16: MediaNode: Wait for 0 time if the absolute timeout is in the past

[ Dario Casalinuovo <b.vitruvio@xxxxxxxxx> ]

----------------------------------------------------------------------------

2 files changed, 15 insertions(+), 18 deletions(-)
src/kits/media/MediaEventLooper.cpp | 29 +++++++++++------------------
src/kits/media/MediaNode.cpp | 4 ++++

############################################################################

Commit: dfe056fd6a5218b77449842bdb8c8b9099b836f7
URL: http://cgit.haiku-os.org/haiku/commit/?id=dfe056fd6a52
Author: Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date: Tue Aug 25 20:57:34 2015 UTC

BMediaEventLooper: Continue code improvements.

----------------------------------------------------------------------------

diff --git a/src/kits/media/MediaEventLooper.cpp
b/src/kits/media/MediaEventLooper.cpp
index bf3c8d0..c592845 100644
--- a/src/kits/media/MediaEventLooper.cpp
+++ b/src/kits/media/MediaEventLooper.cpp
@@ -215,7 +215,6 @@ BMediaEventLooper::ControlLoop()

status_t err;
bigtime_t waitUntil = B_INFINITE_TIMEOUT;
- bigtime_t tempLateness = 0;
bool hasRealtime = false;
bool hasEvent = false;

@@ -237,11 +236,11 @@ BMediaEventLooper::ControlLoop()
err = fRealTimeQueue.RemoveFirstEvent(&event);

if (err == B_OK) {
- tempLateness -= TimeSource()->RealTime();
- if (tempLateness < 0)
- tempLateness = 0;
+ bigtime_t lateness = waitUntil -
TimeSource()->RealTime();
+ if (lateness < 0)
+ lateness = 0;

- DispatchEvent(&event, tempLateness,
hasRealtime);
+ DispatchEvent(&event, lateness, hasRealtime);
}
} else if (err != B_OK)
return;
@@ -255,29 +254,23 @@ BMediaEventLooper::ControlLoop()

if (hasEvent) {
waitUntil = TimeSource()->RealTimeFor(
- fEventQueue.FirstEvent()->event_time,
+ fEventQueue.FirstEventTime(),
fEventLatency + fSchedulingLatency);
} else if (!hasRealtime) {
waitUntil = B_INFINITE_TIMEOUT;
continue;
}

- if (hasEvent && hasRealtime) {
- if (fRealTimeQueue.FirstEventTime()
- - fSchedulingLatency <= waitUntil) {
+ if (hasRealtime) {
+ bigtime_t realtimeWait = fRealTimeQueue.FirstEventTime()
+ - fSchedulingLatency;
+
+ if (!hasEvent || realtimeWait <= waitUntil) {
+ waitUntil = realtimeWait;
hasEvent = false;
} else
hasRealtime = false;
}
-
- if (hasRealtime) {
- waitUntil = fRealTimeQueue.FirstEventTime()
- - fSchedulingLatency;
- }
-
- tempLateness = waitUntil;
- if (waitUntil < TimeSource()->RealTime())
- waitUntil = 0;
}
}


############################################################################

Revision: hrev49582
Commit: ae9cbf9c4e167470b47964059e90c2b0881367eb
URL: http://cgit.haiku-os.org/haiku/commit/?id=ae9cbf9c4e16
Author: Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date: Tue Aug 25 20:58:18 2015 UTC

MediaNode: Wait for 0 time if the absolute timeout is in the past

----------------------------------------------------------------------------

diff --git a/src/kits/media/MediaNode.cpp b/src/kits/media/MediaNode.cpp
index bece94a..ab68d92 100644
--- a/src/kits/media/MediaNode.cpp
+++ b/src/kits/media/MediaNode.cpp
@@ -343,6 +343,10 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, uint32
flags,
char data[B_MEDIA_MESSAGE_SIZE];
int32 message;
ssize_t size;
+
+ if (waitUntil < TimeSource()->RealTime())
+ waitUntil = 0;
+
while (true) {
size = read_port_etc(ControlPort(), &message, data,
sizeof(data), B_ABSOLUTE_TIMEOUT, waitUntil);


Other related posts: