diff --git a/camera_i2c b/camera_i2c index a977e5d..aa358cb 100755 --- a/camera_i2c +++ b/camera_i2c @@ -6,6 +6,7 @@ # http://elinux.org/RPi_HardwareHistory#Board_Revision_History rev=`cat /proc/cpuinfo | grep Revision | awk '{print substr($NF,length($NF)-5,6)}'` +r=`uname -r | head --bytes 1` echo "setting GPIO for board revsion: $rev" case $rev in @@ -93,6 +94,9 @@ raspi-gpio set 2 dh 'a02082'|'a22082'|'a020d3'|'9020e0'|'a03111'|'b03111'|'c03111'|'a03112'|'b03112'|'c03112') echo "Raspberry Pi3B / Pi3B+ / 3A / 4B(1G/2G/4G)" +if [ "$r" = "4" ] +then +i2c=0 # https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=120702&start=100 # Pins 44&45 Alt1=i2c0, alt2=i2c1 # i2c0 can be on pins 0 and 1, so make sure they are not set to alt0 @@ -106,15 +110,23 @@ raspi-gpio set 44 a1 raspi-gpio set 45 ip raspi-gpio set 45 a1 #shutdown +else +i2c=10 +fi # you need this one: https://github.com/6by9/rpi3-gpiovirtbuf #raspi-gpio set 41 1 -./rpi3-gpiovirtbuf s 133 1 +`dirname $0`/rpi3-gpiovirtbuf s 133 1 #LED #raspi-gpio set 32 1 -i2cdetect -y 0 +i2cdetect -y $i2c ;; *) echo "Failed: don't know how to set GPIO for this board!" ;; esac + +if [ "$r" = "5" ] +then +echo "Use 'raspiraw -y 10' to communicate with the sensor" +fi diff --git a/imx477_modes.h b/imx477_modes.h index a198632..46997f9 100644 --- a/imx477_modes.h +++ b/imx477_modes.h @@ -830,6 +830,22 @@ struct mode_def imx477_modes[] = { .term = {0, 0}, .black_level = 256, }, + { + .regs = imx477_2028x1080_regs, + .num_regs = NUM_ELEMENTS(imx477_2028x1080_regs), + .width = 2028, + .height = 1080, + .encoding = 0, + .order = BAYER_ORDER_RGGB, + .native_bit_depth = 12, + .image_id = 0x2C, + .data_lanes = 2, + .min_vts = 1134, + .line_time_ns = 0x31c4, + .timing = {0, 0, 0, 0, 0}, + .term = {0, 0}, + .black_level = 256, + }, { .regs = imx477_2028x1520_regs, .num_regs = NUM_ELEMENTS(imx477_2028x1520_regs), @@ -847,17 +863,17 @@ struct mode_def imx477_modes[] = { .black_level = 256, }, { - .regs = imx477_2028x1080_regs, - .num_regs = NUM_ELEMENTS(imx477_2028x1080_regs), - .width = 2028, - .height = 1080, + .regs = imx477_4056x3040_regs, + .num_regs = NUM_ELEMENTS(imx477_4056x3040_regs), + .width = 4056, + .height = 3040, .encoding = 0, .order = BAYER_ORDER_RGGB, .native_bit_depth = 12, .image_id = 0x2C, .data_lanes = 2, - .min_vts = 1134, - .line_time_ns = 0x31c4, + .min_vts = 3072, + .line_time_ns = 0x5dc0, .timing = {0, 0, 0, 0, 0}, .term = {0, 0}, .black_level = 256, diff --git a/tools/1012x760 b/tools/1012x760 new file mode 100755 index 0000000..33cd6e4 --- /dev/null +++ b/tools/1012x760 @@ -0,0 +1,39 @@ +#!/bin/bash + +if [ "$1" = "" ]; then echo "format: `basename $0` ms"; exit; fi + +r=`uname -r | head --bytes 1` +if [ "$r" = "4" ]; then i2c=0; else i2c=10; fi + +echo "removing /dev/shm/out.*.raw" +rm -f /dev/shm/out.*.raw + +if [ "$2" = "" ]; then fps=195; else fps=$2; fi +echo "capturing frames for ${1}ms with ${fps}fps requested" +raspiraw -md 4 -y $i2c -vf -hf -t $1 -ts tstamps.dirty -hd0 hd0.32k -sr 1 -o /dev/shm/out.%04d.raw 2>/dev/null >/dev/null + +grep -v ",0$" tstamps.dirty | grep -v ",-[0-9]*$" > tstamps.csv + +us=`cut -f1 -d, tstamps.csv | sort -n | uniq -c | sort -n | tail -1 | cut -b9-` +l=`wc --lines tstamps.csv | cut -f1 -d\ ` +echo -e "$l frames were captured\nmajority framerate $((1000000 / $us))fps" + +echo "frame delta time[us] distribution" +cut -f1 -d, tstamps.csv | sort -n | uniq -c + +D=`echo "0123456789" | sed "s/\`echo $((1000000/$fps)) | cut -b1\`//"` + +echo "after skip frame indices (middle column)" +grep "^[$D]" tstamps.csv | sed "s/^/> /" + +skips=`grep "^[$D]" tstamps.csv | wc --lines | cut -f1 -d\ ` +stamps=`wc --lines tstamps.csv | cut -f1 -d\ ` +per=`expr \( 100 \* $skips \) / \( $skips + $stamps \)` +echo "$per% frame skips" + +fst=`head -1 tstamps.csv | cut -f3 -d,` +lst=`tail -1 tstamps.csv | cut -f3 -d,` +dif=`expr $lst - $fst` +dif2=`expr $dif / 2` +avg=`expr \( 1000000 \* \( $l - 1 \) + $dif2 \) / $dif` +echo "average framerate ${avg}fps" diff --git a/tools/2028x1080 b/tools/2028x1080 new file mode 100755 index 0000000..2d5d8ca --- /dev/null +++ b/tools/2028x1080 @@ -0,0 +1,39 @@ +#!/bin/bash + +if [ "$1" = "" ]; then echo "format: `basename $0` ms"; exit; fi + +r=`uname -r | head --bytes 1` +if [ "$r" = "4" ]; then i2c=0; else i2c=10; fi + +echo "removing /dev/shm/out.*.raw" +rm -f /dev/shm/out.*.raw + +if [ "$2" = "" ]; then fps=57; else fps=$2; fi +echo "capturing frames for ${1}ms with ${fps}fps requested" +raspiraw -md 1 -y $i2c -vf -hf -t $1 -ts tstamps.dirty -hd0 hd0.32k -sr 1 -o /dev/shm/out.%04d.raw 2>/dev/null >/dev/null + +grep -v ",0$" tstamps.dirty | grep -v ",-[0-9]*$" > tstamps.csv + +us=`cut -f1 -d, tstamps.csv | sort -n | uniq -c | sort -n | tail -1 | cut -b9-` +l=`wc --lines tstamps.csv | cut -f1 -d\ ` +echo -e "$l frames were captured\nmajority framerate $((1000000 / $us))fps" + +echo "frame delta time[us] distribution" +cut -f1 -d, tstamps.csv | sort -n | uniq -c + +D=`echo "0123456789" | sed "s/\`echo $((1000000/$fps)) | cut -b1\`//"` + +echo "after skip frame indices (middle column)" +grep "^[$D]" tstamps.csv | sed "s/^/> /" + +skips=`grep "^[$D]" tstamps.csv | wc --lines | cut -f1 -d\ ` +stamps=`wc --lines tstamps.csv | cut -f1 -d\ ` +per=`expr \( 100 \* $skips \) / \( $skips + $stamps \)` +echo "$per% frame skips" + +fst=`head -1 tstamps.csv | cut -f3 -d,` +lst=`tail -1 tstamps.csv | cut -f3 -d,` +dif=`expr $lst - $fst` +dif2=`expr $dif / 2` +avg=`expr \( 1000000 \* \( $l - 1 \) + $dif2 \) / $dif` +echo "average framerate ${avg}fps" diff --git a/tools/2028x1520 b/tools/2028x1520 new file mode 100755 index 0000000..a48b006 --- /dev/null +++ b/tools/2028x1520 @@ -0,0 +1,39 @@ +#!/bin/bash + +if [ "$1" = "" ]; then echo "format: `basename $0` ms"; exit; fi + +r=`uname -r | head --bytes 1` +if [ "$r" = "4" ]; then i2c=0; else i2c=10; fi + +echo "removing /dev/shm/out.*.raw" +rm -f /dev/shm/out.*.raw + +if [ "$2" = "" ]; then fps=41; else fps=$2; fi +echo "capturing frames for ${1}ms with ${fps}fps requested" +raspiraw -md 2 -y $i2c -vf -hf -t $1 -ts tstamps.dirty -hd0 hd0.32k -sr 1 -o /dev/shm/out.%04d.raw 2>/dev/null >/dev/null + +grep -v ",0$" tstamps.dirty | grep -v ",-[0-9]*$" > tstamps.csv + +us=`cut -f1 -d, tstamps.csv | sort -n | uniq -c | sort -n | tail -1 | cut -b9-` +l=`wc --lines tstamps.csv | cut -f1 -d\ ` +echo -e "$l frames were captured\nmajority framerate $((1000000 / $us))fps" + +echo "frame delta time[us] distribution" +cut -f1 -d, tstamps.csv | sort -n | uniq -c + +D=`echo "0123456789" | sed "s/\`echo $((1000000/$fps)) | cut -b1\`//"` + +echo "after skip frame indices (middle column)" +grep "^[$D]" tstamps.csv | sed "s/^/> /" + +skips=`grep "^[$D]" tstamps.csv | wc --lines | cut -f1 -d\ ` +stamps=`wc --lines tstamps.csv | cut -f1 -d\ ` +per=`expr \( 100 \* $skips \) / \( $skips + $stamps \)` +echo "$per% frame skips" + +fst=`head -1 tstamps.csv | cut -f3 -d,` +lst=`tail -1 tstamps.csv | cut -f3 -d,` +dif=`expr $lst - $fst` +dif2=`expr $dif / 2` +avg=`expr \( 1000000 \* \( $l - 1 \) + $dif2 \) / $dif` +echo "average framerate ${avg}fps" diff --git a/tools/4056x3040 b/tools/4056x3040 new file mode 100755 index 0000000..6d98a2a --- /dev/null +++ b/tools/4056x3040 @@ -0,0 +1,39 @@ +#!/bin/bash + +if [ "$1" = "" ]; then echo "format: `basename $0` ms"; exit; fi + +r=`uname -r | head --bytes 1` +if [ "$r" = "4" ]; then i2c=0; else i2c=10; fi + +echo "removing /dev/shm/out.*.raw" +rm -f /dev/shm/out.*.raw + +if [ "$2" = "" ]; then fps=11; else fps=$2; fi +echo "capturing frames for ${1}ms with ${fps}fps requested" +raspiraw -md 3 -y $i2c -vf -hf -t $1 -ts tstamps.dirty -hd0 hd0.32k -sr 1 -o /dev/shm/out.%04d.raw 2>/dev/null >/dev/null + +grep -v ",0$" tstamps.dirty | grep -v ",-[0-9]*$" > tstamps.csv + +us=`cut -f1 -d, tstamps.csv | sort -n | uniq -c | sort -n | tail -1 | cut -b9-` +l=`wc --lines tstamps.csv | cut -f1 -d\ ` +echo -e "$l frames were captured\nmajority framerate $((1000000 / $us))fps" + +echo "frame delta time[us] distribution" +cut -f1 -d, tstamps.csv | sort -n | uniq -c + +D=`echo "0123456789" | sed "s/\`echo $((1000000/$fps)) | cut -b1\`//"` + +echo "after skip frame indices (middle column)" +grep "^[$D]" tstamps.csv | sed "s/^/> /" + +skips=`grep "^[$D]" tstamps.csv | wc --lines | cut -f1 -d\ ` +stamps=`wc --lines tstamps.csv | cut -f1 -d\ ` +per=`expr \( 100 \* $skips \) / \( $skips + $stamps \)` +echo "$per% frame skips" + +fst=`head -1 tstamps.csv | cut -f3 -d,` +lst=`tail -1 tstamps.csv | cut -f3 -d,` +dif=`expr $lst - $fst` +dif2=`expr $dif / 2` +avg=`expr \( 1000000 \* \( $l - 1 \) + $dif2 \) / $dif` +echo "average framerate ${avg}fps" diff --git a/tools/gifenc.sh b/tools/gifenc.sh index 662bb49..3a013f9 100755 --- a/tools/gifenc.sh +++ b/tools/gifenc.sh @@ -6,7 +6,8 @@ palette="/tmp/palette.png" #filters="fps=15,scale=320:-1:flags=lanczos" -filters="fps=25,scale=640:-1:flags=lanczos" +#filters="fps=25,scale=640:-1:flags=lanczos" +filters="fps=25,scale=1012:-1:flags=lanczos" ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2