fix: ensure that video buffers are empty before closing channels
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
server.crt
|
||||
server.key
|
||||
.vscode
|
||||
dbuild*
|
||||
!*/dbuild/DEBIAN/*
|
||||
BIN
Binary file not shown.
@@ -1,14 +0,0 @@
|
||||
# Install to /etc/systemd/system/watcher.service
|
||||
[Unit]
|
||||
Description=Run watcher
|
||||
After=network-online.target
|
||||
Wants=network-online.target systemd-networkd-wait-online.service
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
ExecStart=/usr/local/bin/watcher --watcher_config /etc/watcher_config.yaml --watcher_name /etc/watcher_name.txt
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,14 +0,0 @@
|
||||
# Install to /etc/systemd/system/watcher.service
|
||||
[Unit]
|
||||
Description=Run watcher
|
||||
After=network-online.target
|
||||
Wants=network-online.target systemd-networkd-wait-online.service
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
ExecStart=/usr/local/bin --watcher_config /etc/watcher.yaml
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,20 +0,0 @@
|
||||
home: Sunnyvale
|
||||
name: Office
|
||||
h264:
|
||||
binary: "/usr/bin/libcamera-vid"
|
||||
arguments:
|
||||
- "-n"
|
||||
- "-t"
|
||||
- "0"
|
||||
- "--codec"
|
||||
- "h264"
|
||||
- "--mode"
|
||||
- "1640:1232"
|
||||
- "--inline"
|
||||
- "-o"
|
||||
- "-"
|
||||
sensor:
|
||||
binary: "/usr/bin/python3"
|
||||
arguments:
|
||||
- "/usr/local/bin/temperature.py"
|
||||
sensor_rate_ms: 10000
|
||||
@@ -1,17 +0,0 @@
|
||||
import bme280
|
||||
import smbus2
|
||||
from time import sleep
|
||||
|
||||
port = 1
|
||||
address = 0x77 # Adafruit BME280 address. Other BME280s may be different
|
||||
bus = smbus2.SMBus(port)
|
||||
|
||||
bme280.load_calibration_params(bus,address)
|
||||
|
||||
while True:
|
||||
bme280_data = bme280.sample(bus,address)
|
||||
humidity = bme280_data.humidity
|
||||
pressure = bme280_data.pressure
|
||||
ambient_temperature = bme280_data.temperature
|
||||
print(humidity, pressure, ambient_temperature)
|
||||
sleep(1)
|
||||
Binary file not shown.
@@ -36,6 +36,10 @@ func New(video *h264video.Video, cfg *config.Config) (*FileWrite, error) {
|
||||
|
||||
// Run launches the commands and begins creating data. It will block until Done is called.
|
||||
func (v *FileWrite) Run() {
|
||||
if v.cfg.LocalCopy == "" {
|
||||
// Feature is disabled; close right away
|
||||
return
|
||||
}
|
||||
// Confirm that the target directory is a directory
|
||||
stat, err := os.Stat(v.cfg.LocalCopy)
|
||||
log := log.With().Str("directory", v.cfg.LocalCopy).Logger()
|
||||
|
||||
@@ -139,6 +139,13 @@ func (v *Video) Join() (<-chan []byte, string, func()) {
|
||||
v.mu.Lock()
|
||||
defer v.mu.Unlock()
|
||||
|
||||
// Close the channel
|
||||
close(v.ivfListeners[myID])
|
||||
// Consume any pending frames
|
||||
for _ := range v.ivfListeners[myID] {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
delete(v.ivfListeners, myID)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user