Skip to content

Commit ccb588e

Browse files
Replace thread lock with a status boolean.
1 parent 48938d1 commit ccb588e

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

BabbleApp/mjpeg_streamer.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def __init__(self, url):
1212
self.byte_buffer = b""
1313
self.frame = None
1414
self.running = False
15-
self.lock = threading.Lock()
15+
self.frame_ready = False
1616
self.thread = None
1717

1818
def open(self):
@@ -24,7 +24,7 @@ def open(self):
2424
def _update(self):
2525
while self.running:
2626
try:
27-
self.stream = self.session.get(self.url, stream=True, timeout=0.5)
27+
self.stream = self.session.get(self.url, stream=True, timeout=1)
2828
for chunk in self.stream.iter_content(chunk_size=1024):
2929
if not self.running:
3030
break
@@ -41,8 +41,8 @@ def _update(self):
4141
if image.size != 0:
4242
frame = cv2.imdecode(image, cv2.IMREAD_COLOR)
4343
if frame is not None:
44-
with self.lock:
45-
self.frame = frame # Always update to the latest frame
44+
self.frame = frame # Always update to the latest frame
45+
self.frame_ready = True
4646
else:
4747
break
4848
except requests.RequestException:
@@ -51,14 +51,21 @@ def _update(self):
5151
continue
5252

5353
def read(self):
54-
#with self.lock:
55-
# Return whether a frame exists and its copy
56-
if self.frame is not None:
57-
#time.sleep(self.sleep_time)
58-
return True, self.frame.copy()
59-
else:
60-
#time.sleep(self.sleep_time)
61-
return False, None
54+
# Return whether a frame exists and its copy
55+
start = time.time()
56+
while True:
57+
if self.frame is not None and self.frame_ready:
58+
#time.sleep(self.sleep_time)
59+
self.frame_old = self.frame
60+
self.frame_ready = False
61+
return True, self.frame.copy()
62+
else:
63+
end = time.time()
64+
time.sleep(1/120)
65+
if end-start>1:
66+
return False, None
67+
68+
#return False, None
6269

6370
def isOpened(self):
6471
return self.running

0 commit comments

Comments
 (0)