diff --git a/dist/hornverifier b/dist/hornverifier index 32893752..65a9a1ad 100755 Binary files a/dist/hornverifier and b/dist/hornverifier differ diff --git a/dist/roverd b/dist/roverd index 95b43ce8..c6681490 100755 Binary files a/dist/roverd and b/dist/roverd differ diff --git a/dist/servoverifier b/dist/servoverifier index 0c289348..5f8b2e5d 100755 Binary files a/dist/servoverifier and b/dist/servoverifier differ diff --git a/pi/bin/video-publisher.sh b/pi/bin/video-publisher.sh index 4175f75a..47889edd 100644 --- a/pi/bin/video-publisher.sh +++ b/pi/bin/video-publisher.sh @@ -71,10 +71,14 @@ VIDEO_WIDTH="640" VIDEO_HEIGHT="480" VIDEO_FPS="30" VIDEO_BITRATE="${VIDEO_BITRATE:-3000000}" +VIDEO_INVERT="${VIDEO_INVERT:-1}" VIDEO_SENSOR_MODE="${VIDEO_SENSOR_MODE:-1296:972}" -# Flip the camera 180deg (supported by rpicam-vid/libcamera-vid) -FLIP_ARGS=(--rotation 180) +# Flip the camera 180deg by default; allow upright camera mounts via VIDEO_INVERT=0. +FLIP_ARGS=() +if [[ "${VIDEO_INVERT}" -ne 0 ]]; then + FLIP_ARGS=(--rotation 180) +fi MODE_ARGS=() if [[ -n "${VIDEO_SENSOR_MODE}" ]]; then diff --git a/pi/roverd/config.go b/pi/roverd/config.go index 5eca5393..a98b0077 100644 --- a/pi/roverd/config.go +++ b/pi/roverd/config.go @@ -84,6 +84,7 @@ type MediaConfig struct { AudioPublishURL string `yaml:"audioPublishUrl" json:"audioPublishUrl,omitempty"` AudioForwardURL string `yaml:"audioForwardUrl" json:"audioForwardUrl,omitempty"` PublishPort int `yaml:"publishPort" json:"-"` + CameraInverted bool `yaml:"cameraInverted" json:"-"` Manage bool `yaml:"manage"` ManageAudio bool `yaml:"manageAudio"` Service string `yaml:"service"` @@ -178,6 +179,7 @@ func LoadConfig(path string) (*Config, error) { }, Media: MediaConfig{ PublishPort: 9000, + CameraInverted: true, HealthInterval: Duration{Duration: 30 * time.Second}, VideoBitrate: 2000000, }, diff --git a/pi/roverd/media_env.go b/pi/roverd/media_env.go index b2448baf..66fa636b 100644 --- a/pi/roverd/media_env.go +++ b/pi/roverd/media_env.go @@ -40,6 +40,7 @@ func UpdatePublisherEnv(media MediaConfig, audio AudioConfig) error { fmt.Fprintf(&buf, "VIDEO_FPS=%d\n", media.VideoFPS) } fmt.Fprintf(&buf, "VIDEO_BITRATE=%d\n", media.VideoBitrate) + fmt.Fprintf(&buf, "VIDEO_INVERT=%d\n", boolToInt(media.CameraInverted)) audioDevice := audio.CaptureDevice if audioDevice == "" || audioDevice == "rovermic" { audioDevice = "hw:0,0" diff --git a/pi/roverd/roverd.sample.yaml b/pi/roverd/roverd.sample.yaml index fe97674e..fdda7f05 100644 --- a/pi/roverd/roverd.sample.yaml +++ b/pi/roverd/roverd.sample.yaml @@ -19,6 +19,8 @@ media: publishUrl: srt://192.168.0.86:9000?streamid=#!::r=roomba-alpha,m=publish&latency=10&mode=caller&transtype=live&pkt_size=1316 audioForwardUrl: srt://192.168.0.86:9000?streamid=#!::r=roomba-alpha-fwd,m=request&latency=10&mode=caller&transtype=live&pkt_size=1316 publishPort: 9000 + # Default assumes camera is mounted upside down; set false for upright mounts. + cameraInverted: true videoBitrate: 2000000 manage: true service: video-publisher.service