Some Camera Benchmarks

I did some very rough (output formatting, no average) benchmarking of the camera today.

The results:


camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 116
send image process: 117
send image unaccounted time: 1
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 36
mjpeg stream unaccounted time: 36
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 26
mjpeg stream unaccounted time: 26
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_send
acquisition of image: 0
sending of image: 292
send image process: 292
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 121
send image process: 122
send image unaccounted time: 1
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 31
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 219
send image process: 219
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 432
send image process: 432
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 33
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 36
mjpeg stream unaccounted time: 36
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 26
mjpeg stream unaccounted time: 26
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 443
send image process: 443
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 29
mjpeg stream unaccounted time: 29
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 105
send image process: 105
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 38
mjpeg stream unaccounted time: 38
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 24
mjpeg stream unaccounted time: 24
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 447
send image process: 447
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 33
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 29
mjpeg stream unaccounted time: 29
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 1
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_send
acquisition of image: 0
sending of image: 120
send image process: 120
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 36
mjpeg stream store image: 0
mjpeg stream process: 68
mjpeg stream unaccounted time: 104
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 2
mjpeg stream unaccounted time: 2
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 23
mjpeg stream unaccounted time: 23
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 34
mjpeg stream unaccounted time: 34
camera_benchmark_send
acquisition of image: 0
sending of image: 9
send image process: 9
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 28
mjpeg stream unaccounted time: 28
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 33
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 1
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 223
send image process: 223
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 198
send image process: 198
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 38
mjpeg stream unaccounted time: 38
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 25
mjpeg stream unaccounted time: 25
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 1
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 416
send image process: 416
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 33
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 33
mjpeg stream unaccounted time: 34
camera_benchmark_recv
mjpeg stream recv image: 1
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 213
send image process: 213
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 1
sending of image: 0
send image process: 1
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 1
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 340
send image process: 340
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_send
acquisition of image: 0
sending of image: 2
send image process: 2
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 33
mjpeg stream unaccounted time: 34
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 33
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 28
mjpeg stream unaccounted time: 28
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 31
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 1
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 539
send image process: 539
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 37
mjpeg stream unaccounted time: 37
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 25
mjpeg stream unaccounted time: 25
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
cv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 121
send image process: 121
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 57
send image process: 57
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 1
mjpeg stream process: 32
mjpeg stream unaccounted time: 33
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 359
send image process: 359
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 30
mjpeg stream unaccounted time: 30
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 225
send image process: 226
send image unaccounted time: 1
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 38
mjpeg stream unaccounted time: 38
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 25
mjpeg stream unaccounted time: 25
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 32
mjpeg stream unaccounted time: 32
camera_benchmark_send
acquisition of image: 0
sending of image: 198
send image process: 198
send image unaccounted time: 0
camera_benchmark_send
acquisition of image: 0
sending of image: 0
send image process: 0
send image unaccounted time: 0
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31
camera_benchmark_recv
mjpeg stream recv image: 0
mjpeg stream store image: 0
mjpeg stream process: 31
mjpeg stream unaccounted time: 31

What it means:

camera_benchmark_recv refers to “reading” the mjpeg stream and copying the image to a buffer.

mjpeg stream recv image:

AxisCamera2010.cpp line 105


while(bytesRead < readLength){
    int bytesThisRecv= recv(cameraSocket, &imgBuffer[bytesRead], remaining, 0);
    bytesRead += bytesThisRecv;
    remaining -= bytesThisRecv;
}

mjpeg stream store image:


getInstance().updateImage(imgBuffer, readLength);

// call to (directly below AxisCamera::mjpegStream)
void AxisCamera::updateImage(char * imgBuffer, int bufLength) {
	semTake(m_protectedImageSem, -1);
	{
		if (NULL != m_protectedImageBuffer) {
			delete] m_protectedImageBuffer;
		}
		m_protectedImageBufferLength = bufLength;
		m_protectedImageBuffer = new char[bufLength];
		memcpy(m_protectedImageBuffer, imgBuffer, bufLength);
		m_freshImage = true;
		m_freshBlockingImage = true;
	}
	semGive(m_protectedImageSem);
}

mjpeg stream process is the entire receiving of the image and mjpeg stream unaccounted time is (obviously) the time spent not doing one of the select operations.

camera_benchmark_send is the sending of the image to the PC via TCP

PCVideoServer.cpp line 190

acquisition of image:


success = AxisCameraGetJpegImageBlocking(&imageData, &numBytes);

// call to AxisCamera2010.cpp line 56 (ultimately)

int AxisCamera::GetJpegImageBlocking(char** imageData, int* numBytes) {
	int success = 1;
	while (1) {
		semTake(m_protectedImageSem, -1);
		{
			if (!m_protectedImageBuffer)
				success = 0;
			char* newImageData = new char[m_protectedImageBufferLength];
			if (newImageData == NULL)
				success = 0;
	
			if (success) {
				memcpy(newImageData, m_protectedImageBuffer, m_protectedImageBufferLength);
				*imageData = newImageData;
				*numBytes = m_protectedImageBufferLength;
				if (m_freshBlockingImage) {
					semGive(m_protectedImageSem);
					return 1;
				}
				m_freshBlockingImage = false;
			}
			delete newImageData;
		}
		semGive(m_protectedImageSem);
		if (!success)
			return 0;
	}
}

sending of image:


int sent = write (newPCSock, imageData, numBytes);

send image process and send image unaccounted time are the same as receiving.

Just looking through the output the majority of the time is spent on sending the image. Last year our team had real-time video using a python dashboard using the user data provided in the dashboard packets. We roughly sent 1 image every 3 packets. That’s ~16 FPS (50 packets per second guaranteed with the driver station last year). Compared to this year where we get about 5 FPS using the stock software.

Are other teams also having trouble with the FPS?

Tested using our own modified (for benchmarking) WPI lib where we just linked our existing code to the modified WPI lib.

I used the following function to get time:


#include <sysLib.h>
#include <tickLib.h>
return ((static_cast<double>(tickGet()) / static_cast<double>(sysClkRateGet()) * 1000.0)

The profiling numbers you show look suspect. I’m not saying they are wrong, but I’m saying that it would be good to verify them before making code changes.

Not having access to the code, I can’t really do this independently, but I can hopefully ask some useful questions.

Are all of the timings you show above measured sequentially in the same task/thread? If they are in multiple tasks, it is easy for the OS to swap and double count an operation. In more detail, the OS commonly swaps for I/O tasks where a buffer or service may be busy. So if you measure time A, start I/O A, then the OS swaps and you measure initial time B, start I/O B, and at some point measure final time B, then the OS swaps back to measure final time A. This overlap of I/O and overlap of the A and B time intervals is very misleading as the A time includes the B time. Especially when measuring times via deltas, this can lead you to draw incorrect conclusions.

From your description, last year your images were less than 3K in size. That sounds like a pretty compressed 160x120. The sample code this year defaults to a medium sized image with low compression. This was to avoid heavy JPEG artifacts that blur the edges of the circles, and small images with big pixels also blur. You may want to look at the buffer size being written, or at the buffer size being received at the dashboard. You can also set the camera differently if you aren’t intending to do cRIO processing for the target and see how the timings are affected by the image size.

Finally, you may want to look at overall cRIO processor usage. For a standard unix system, ps or tops or a similar tool will give an indication of overall CPU usage that is pretty trustworthy. For vxWorks, I believe that typing i at the terminal will give you a report with some CPU usage. I don’t have one in front of me, so that may not be the command, or there may be a better one. Anyway, this can serve as a second indicator.

Finally, you may want to instrument the dashboard to see how many images you are receiving – something like an fps number. This will give feedback not on cRIO load, but on frames being transmitted. Another parameter which may be different in the sample code than in what you used last year is the actual camera FPS setting. The LV sample code set it to 15 assuming that was fast enough for tracking. If you are processing on the cRIO, you may want to turn it up, especially if you use the small image size.

Greg McKaskle

I too am unsure about the accuracy mainly because some operations are 0ms.

I care very little for your second paragraph. Don’t all the things you described fit into the operations of receiving and sending of images? I think that an average would have been more accurate on sending, but I think for a rough benchmark it accurately shows the cost of sending an image.

The images last year were compressed to about ~1.6K +/-.4K (depending on complexity of the image) at 160x120. Then resized to a larger image. We’ve navigated rooms and such just using the video code last year.

I care very little for your second paragraph. Don’t all the things you described fit into the operations of receiving and sending of images? I think that an average would have been more accurate on sending, but I think for a rough benchmark it accurately shows the cost of sending an image.

The images last year were compressed to about ~1.6K +/-.4K (depending on complexity of the image) at 160x120. Then resized to a larger image. We’ve navigated rooms and such just using the video code last year.

My questions were intended to help debug why the numbers are so different. Independently, I’ve asked another engineer at NI to make some speed measurements to determine the impact of image size and image compression. I don’t have the results yet, but I’ll post them once I do.

Greg McKaskle

I appreciate the response, but I failed to see how

Are all of the timings you show above measured sequentially in the same task/thread? If they are in multiple tasks, it is easy for the OS to swap and double count an operation. In more detail, the OS commonly swaps for I/O tasks where a buffer or service may be busy. So if you measure time A, start I/O A, then the OS swaps and you measure initial time B, start I/O B, and at some point measure final time B, then the OS swaps back to measure final time A. This overlap of I/O and overlap of the A and B time intervals is very misleading as the A time includes the B time. Especially when measuring times via deltas, this can lead you to draw incorrect conclusions.

any of these things would matter. Such as task swapping due the fact that the image receiver and sender are on separate threads by default. Also I wasn’t doing anything but camera tasks. My infinite loop consisted of a one second wait.

Wouldn’t all of these things be bottlenecks for the camera operation anyway?

Just to give some comparison benchmarks, I did some testing In LabVIEW. With compression set to 5, here are the loop rates I got:
640x480 image: loop rate = 8 per second avg
320x240 image: loop rate = 10 per second avg
160x120 image: loop rate = 13 per second avg
This might at least give you an idea of what you should be able to shoot for. A couple of other observations. With compression set to 0, loop rates suffered (expected). Increasing the compression above 5, didn’t seem to improve loop rates, but it did affect the ability to find the target.

Does LabView use TCP like C++? This could be one of the issues in C++ as the entire image buffer is written in one write and fragmented into chunks regulated by the MTU. Any missing packets would cause at least some lag.

LabVIEW does use TCP, and writes the image as header followed by size by data.

Greg McKaskle

Interesting. Most people still cannot get the FPS described in Doug’s post.

So we tried basically everything that has been said and none of it worked, until we tried click on the developer window (basically we put the driver in the background) and found that there was virtually no lag… so we think that there is a band width cap on the driver so that in the competition 6 robots can be run at the same time… therefore there is basically no solution to problem, however the camera can still be use locally

Really? You get more than 10 FPS?