Skip to content

Commit 84b098d

Browse files
committed
add picamera2 mock
1 parent 464c509 commit 84b098d

File tree

5 files changed

+41
-41
lines changed

5 files changed

+41
-41
lines changed

coderbot/cv/camera.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from threading import Condition
2727
import numpy as np
2828
from picamera2 import Picamera2
29-
from picamera2.encoders import Encoder, MJPEGEncoder, H264Encoder
29+
from picamera2.encoders import MJPEGEncoder, H264Encoder
3030
from picamera2.outputs import FileOutput, FfmpegOutput
3131

3232
class Camera(object):

docker/stub/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,4 @@ ADD docker/stub/start.sh /coderbot/.
6464
ARG CODERBOT_VERSION
6565
ENV CODERBOT_VERSION=${CODERBOT_VERSION}
6666

67-
ENTRYPOINT /coderbot/start.sh
67+
ENTRYPOINT ["coderbot/start.sh"]

stub/picamera2/encoders.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,2 @@
1-
class Encoder():
2-
pass
3-
4-
class MJPEGEncoder(Encoder):
5-
def __init__(self, bitrate):
6-
pass
7-
8-
class H264Encoder(Encoder):
9-
def __init__(self, bitrate=100000):
10-
pass
1+
from picamera2_mock import Picamera2MJPEGEncoderMock as MJPEGEncoder
2+
from picamera2_mock import Picamera2H264EncoderMock as H264Encoder

stub/picamera2/outputs.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ class Output():
22
pass
33

44
class FileOutput(Output):
5-
def __init__(self, outout):
6-
pass
5+
def __init__(self, output):
6+
self.output = output
7+
8+
def outputframe(self, frame):
9+
self.output.write(frame)
710

811
class FfmpegOutput(Output):
912
def __init__(video_filename):

test/picamera2_mock.py

+32-27
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,33 @@
99

1010
logger = logging.getLogger()
1111

12+
class Picamera2EoncoderMock(threading.Thread):
13+
def __init__(self, output):
14+
self.output = output
15+
self.image_jpeg = open('test/test_image.jpeg', 'rb').read()
16+
self.exit = False
17+
super().__init__()
18+
19+
def close(self):
20+
self.output[0].close()
21+
22+
def stop(self):
23+
self.exit = True
24+
25+
def run(self):
26+
while(not self.exit):
27+
self.output[0].outputframe(self.image_jpeg)
28+
time.sleep(0.03)
29+
30+
class Picamera2MJPEGEncoderMock(Picamera2EoncoderMock):
31+
def __init__(self, output=None, quality=20):
32+
super().__init__(output)
33+
self.quality = quality
34+
35+
class Picamera2H264EncoderMock(Picamera2EoncoderMock):
36+
def __init__(self, output=None):
37+
super().__init__(output)
38+
1239
class Picamera2Mock(object):
1340
"""Implements PiCamera mock class
1441
PiCamera is the library used to access the integrated Camera, this mock class emulates the capture functions in order to test the streamer loop.
@@ -53,35 +80,13 @@ def __init__(self, buffer, video):
5380
def start(self):
5481
pass
5582

56-
def start_recording(self, buffer, format, splitter_port, quality=None, bitrate=None, resize=None):
57-
"""mock start_recording"""
58-
print(format)
59-
if format == "bgra" and resize:
60-
self.images[format] = cv2.resize(self.images[format], resize)
61-
if format == "h264":
62-
f = open("test/test.h264", "rb")
63-
video = f.read()
64-
f.close()
65-
self.splitter_recorders[splitter_port] = self.VideoRecorder(buffer, video)
66-
else:
67-
self.splitter_recorders[splitter_port] = self.ImageRecorder(buffer, self.images[format])
68-
self.splitter_recorders[splitter_port].start()
69-
70-
def stop_recording(self, splitter_port):
71-
if splitter_port < 2:
72-
self.splitter_recorders[splitter_port].go = False
73-
self.splitter_recorders[splitter_port].join()
74-
else:
75-
recorder = self.splitter_recorders[splitter_port]
76-
f = open(recorder.buffer, "wb")
77-
f.write(recorder.video)
78-
f.close()
79-
80-
def start_encoder(self, encoder):
81-
pass
83+
def start_encoder(self, encoder, output=None):
84+
encoder.start()
85+
output
8286

8387
def stop_encoder(self, encoders):
84-
pass
88+
for encoder in encoders:
89+
encoder.stop()
8590

8691
def capture_buffer(self):
8792
return self.images["bgra"]

0 commit comments

Comments
 (0)