@@ -21,8 +21,7 @@ detect_avail_cams() {
21
21
local avail realpath
22
22
avail=" $( find /dev/v4l/by-id/ -iname " *index0" 2> /dev/null) "
23
23
count=" $( echo " ${avail} " | wc -l) "
24
- if [[ -d " /dev/v4l/by-id/" ]] &&
25
- [[ -n " ${avail} " ]]; then
24
+ if [[ -d " /dev/v4l/by-id/" ]] && [[ -n " ${avail} " ]]; then
26
25
log_msg " INFO: Found ${count} available v4l2 (UVC) camera(s)"
27
26
echo " ${avail} " | while read -r v4l; do
28
27
realpath=$( readlink -e " ${v4l} " )
@@ -63,8 +62,8 @@ detect_libcamera() {
63
62
local avail
64
63
if [[ " $( is_raspberry_pi) " = " 1" ]] &&
65
64
[[ -x " $( command -v libcamera-hello) " ]]; then
66
- avail=" $( libcamera-hello --list-cameras | sed ' /^\[.*\].*/d ' | awk ' NR==1 {print $1} ' ) "
67
- if [[ " ${avail} " = " Available " ]]; then
65
+ avail=" $( libcamera-hello --list-cameras | grep -c " Available " || echo " 0 " ) "
66
+ if [[ " ${avail} " = " 1 " ]]; then
68
67
get_libcamera_path | wc -l
69
68
else
70
69
echo " 0"
@@ -83,23 +82,61 @@ get_libcamera_path() {
83
82
fi
84
83
}
85
84
85
+ # print libcamera resolutions
86
+ list_picam_resolution () {
87
+ local prefix
88
+ prefix=" $( date +' [%D %T]' ) crowsnest:"
89
+ log_msg " 'libcamera' device(s) resolution(s) :"
90
+ while IFS= read -r i; do
91
+ printf " %s\t\t%s\n" " ${prefix} " " ${i} " >> " ${CROWSNEST_LOG_PATH} "
92
+ done < <( libcamera-hello --list-cameras | sed ' 1,2d;s/Modes:/Colorspace:/' )
93
+ }
94
+
95
+ get_libcamera_controls () {
96
+ local ust_bin flags
97
+ flags=( --camera-type=libcamera --camera-list_options )
98
+ ust_bin=" ${BASE_CN_PATH} /bin/camera-streamer/camera-streamer"
99
+ if [[ -x " ${ust_bin} " ]]; then
100
+ " ${ust_bin} " " ${flags[@]} " --camera-path=" $( get_libcamera_path) " 2> /dev/null | \
101
+ sed ' s/device//g;/^SNAPSHOT/q' | sed ' /^SNAPSHOT/d' | \
102
+ sed ' /^CAMERA/d;/- property/d' | sed ' /camera-streamer Version:/d' | \
103
+ sed ' s/- available option: //g' | sed ' /^$/d;' | \
104
+ sed ' s/([0-9]*[a-z,0-9]\, /(/g' | sed ' /type=7/d;/type=4/d;/type=Rectangle/d' | \
105
+ sed ' s/type=1/bool/g;s/type=3/int/g;s/type=5/float/g' | sed ' s/type=//g;' | \
106
+ sed ' s/\[/min=/g;s/\.\./ max=/g;s/\]$//g'
107
+ else
108
+ log_msg " WARN: 'libcamera' device option can not be displayed, because"
109
+ log_msg " WARN: camera-streamer is not installed"
110
+ fi
111
+ }
112
+
113
+ list_picam_controls () {
114
+ local prefix
115
+ prefix=" $( date +' [%D %T]' ) crowsnest:"
116
+ log_msg " 'libcamera' device controls :"
117
+ while IFS= read -r i; do
118
+ if [[ ! " ${i} " =~ " INFO" ]]; then
119
+ printf " %s\t\t%s\n" " ${prefix} " " ${i} " >> " ${CROWSNEST_LOG_PATH} "
120
+ fi
121
+ done < <( get_libcamera_controls)
122
+ # blank line workaround
123
+ log_msg " "
124
+ }
125
+
86
126
# Determine connected "legacy" device
87
127
function detect_legacy {
88
128
local avail
89
129
if [[ " $( is_raspberry_pi) " = " 1" ]] &&
90
130
command -v vcgencmd & > /dev/null; then
91
- if vcgencmd get_camera & > /dev/null ; then
92
- avail=" $( vcgencmd get_camera \
93
- | awk -F ' =' ' { print $3 }' \
94
- | cut -d' ,' -f1 \
95
- ) "
131
+ if vcgencmd get_camera & > /dev/null; then
132
+ avail=" $( vcgencmd get_camera | awk -F ' =' ' { print $3 }' | cut -d' ,' -f1) "
96
133
fi
97
134
fi
98
135
echo " ${avail:- 0} "
99
136
}
100
137
101
138
function dev_is_legacy {
102
- v4l2-ctl --list-devices | grep -A1 -e ' mmal' | \
139
+ v4l2-ctl --list-devices | grep -A1 -e ' mmal' | \
103
140
awk ' NR==2 {print $1}'
104
141
}
105
142
@@ -148,3 +185,11 @@ is_ubuntu_arm() {
148
185
echo " 0"
149
186
fi
150
187
}
188
+
189
+ is_armbian () {
190
+ if grep -q " Armbian" /etc/os-release; then
191
+ echo " 1"
192
+ else
193
+ echo " 0"
194
+ fi
195
+ }
0 commit comments