Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/next/external/packages/bsp/rk3399/scripts/test_camera-gst.sh
Views: 3960
#!/bin/bash12export DISPLAY=:0.03#su orangepi -c "gst-launch-1.0 -vvv rkisp device=${DEV} io-mode=1 analyzer=1 enable-3a=1 path-iqf=/etc/cam_iq.xml \4# ! video/x-raw,format=NV12,width=1280,height=720, framerate=30/1 ! videoconvert ! autovideosink"56icam=07vsnk=8action="preview"9output=10verbose="yes"1112#----------------------------------------------------------13usage()14{15echo "Usage: $0 [ARGS]"16echo17echo "Options:"18echo -e " -h, --help\n\tshow this help message and exit"19echo -e " -i, --index <0|1>\n\tcamera index, 0 or 1"20echo -e " -a, --action <preview|photo|video>\n\tpreview, take photo or record video"21echo -e " -o, --output <filename>\n\toutput file name"22echo -e " -v, --verbose\n\tshow full command"23exit 124}2526parse_args()27{28TEMP=`getopt -o "i:a:o:v:h" --long "index:,action:,output:,verbose:,help" -n "$SELF" -- "$@"`29if [ $? != 0 ] ; then exit 1; fi30eval set -- "$TEMP"3132while true; do33case "$1" in34-i|--index ) icam=$2; shift 2;;35-a|--action) action=$2; shift 2;;36-o|--output) output=$2; shift 2;;37-v|--verbose) verbose=$2; shift 2;;38-h|--help ) usage; exit 1 ;;39-- ) shift; break ;;40* ) echo "invalid option $1"; usage; return 1 ;;41esac42done4344if [ -z "$output" ]; then45if [ $action = "photo" ]; then46output="Image_MIPI.jpg"47elif [ $action = "video" ]; then48output="Video_MIPI.ts"49fi50fi51}5253isp_default_vsnk="autovideosink"54usbcamera_default_vsnk="autovideosink"5556#----------------------------------------------------------57SELF=$058parse_args $@5960# selfpath61declare -a PreviewDevs=()62# mainpath63declare -a PictureDevs=()64# camera type65declare -a CameraTypes=()66# sink67declare -a Sinks=()6869# preivew format70declare -a PreviewModes=()71# photo format72declare -a PictureModes=()73# video recoard format74declare -a VideoModes=()7576# isp177if [ -d /sys/class/video4linux/v4l-subdev2/device/video4linux/video1 -o \78-d /sys/class/video4linux/v4l-subdev5/device/video4linux/video1 ]; then79PreviewDevs+=("/dev/video1")80PictureDevs+=("/dev/video0")81CameraTypes+=("mipi")82# use did not specify sink83if [ -z "${vsnk}" ]; then84Sinks+=(${isp_default_vsnk})85else86Sinks+=(${vsnk})87fi88PreviewModes+=("width=1280,height=720,framerate=30/1")89PictureModes+=("width=1920,height=1080,framerate=10/1")90VideoModes+=("width=1280,height=720,framerate=30/1")91fi9293# isp294if [ -d /sys/class/video4linux/v4l-subdev2/device/video4linux/video6 -o \95-d /sys/class/video4linux/v4l-subdev5/device/video4linux/video6 ]; then96PreviewDevs+=("/dev/video6")97PictureDevs+=("/dev/video5")98CameraTypes+=("mipi")99# use did not specify sink100if [ -z "${vsnk}" ]; then101Sinks+=(${isp_default_vsnk})102else103Sinks+=(${vsnk})104fi105PreviewModes+=("width=1280,height=720,framerate=30/1")106PictureModes+=("width=1920,height=1080,framerate=10/1")107VideoModes+=("width=1280,height=720,framerate=30/1")108fi109110# usb camera111if [ -f /sys/class/video4linux/video10/name ]; then112if [ "$( grep -i "UVC" /sys/class/video4linux/video10/name )" ]; then113PreviewDevs+=("/dev/video10")114PictureDevs+=("/dev/video10")115CameraTypes+=("usb")116fi117# use did not specify sink118if [ -z "${vsnk}" ]; then119Sinks+=(${usbcamera_default_vsnk})120else121Sinks+=(${vsnk})122fi123PreviewModes+=("width=640,height=480,framerate=30/1")124PictureModes+=("width=640,height=480,framerate=30/1")125VideoModes+=("width=640,height=480,framerate=30/1")126fi127128rkargs="device=${PreviewDevs[$icam]}"129rkargs_mainpath="device=${PictureDevs[$icam]}"130131#----------------------------------------------------------132killall gst-launch-1.0 2>&1 > /dev/null133sleep 1134135function start_preview() {136local CMD=137if [ ${CameraTypes[$icam]} = "mipi" ]; then138CMD="gst-launch-1.0 rkisp ${rkargs} io-mode=1 \139! video/x-raw,format=NV12,${PreviewModes[$icam]} \140! videoconvert ! ${Sinks[$icam]}"141else142CMD="gst-launch-1.0 v4l2src ${rkargs} io-mode=4 \143! videoconvert ! video/x-raw,format=NV12,${PreviewModes[$icam]} \144! ${Sinks[$icam]}"145fi146147if [ "x${verbose}" == "xyes" ]; then148echo "===================================================="149echo "=== GStreamer 1.1 command:"150echo "=== $(echo $CMD | sed -e 's/\r//g')"151echo "===================================================="152fi153if [ ${Sinks[$icam]} = "kmssink" -o "$(id -un)" = "orangepi" ]; then154eval "${CMD}"&155else156su orangepi -c "${CMD}"&157fi158sleep 2159}160161function take_photo() {162local CMD=163if [ ${CameraTypes[$icam]} = "mipi" ]; then164CMD="gst-launch-1.0 rkisp num-buffers=20 ${rkargs_mainpath} io-mode=1 \165! video/x-raw,format=NV12,${PictureModes[$icam]} \166! jpegenc ! multifilesink location=\"/tmp/isp-frame%d.jpg\""167else168# usb camera only support io-mode=4169CMD="gst-launch-1.0 v4l2src num-buffers=1 ${rkargs_mainpath} io-mode=4 \170! videoconvert ! video/x-raw,format=NV12,${PictureModes[$icam]} \171! jpegenc ! filesink location=\"/tmp/usb-frame.jpg\""172fi173174if [ "x${verbose}" == "xyes" ]; then175echo "===================================================="176echo "=== GStreamer 1.1 command:"177echo "=== $(echo $CMD | sed -e 's/\r//g')"178echo "===================================================="179fi180echo "{{{{{{ start take photo"181if [ ${Sinks[$icam]} = "kmssink" -o "$(id -un)" = "orangepi" ]; then182eval "${CMD}"183else184su orangepi -c "${CMD}"185fi186echo "}}}}}} end take photo"187if [ ${CameraTypes[$icam]} = "mipi" ]; then188if [ -f /tmp/isp-frame19.jpg ]; then189cp /tmp/isp-frame19.jpg ${output}190fi191else192if [ -f /tmp/usb-frame.jpg ]; then193cp /tmp/usb-frame.jpg ${output}194fi195fi196}197198function start_video_recording() {199local CMD=200201if [ ${CameraTypes[$icam]} = "mipi" ]; then202CMD="gst-launch-1.0 rkisp num-buffers=512 ${rkargs_mainpath} io-mode=1 \203! video/x-raw,format=NV12,${VideoModes[$icam]} \204! mpph264enc ! queue ! h264parse ! mpegtsmux \205! filesink location=/tmp/camera-record.ts"206else207# usb camera only support io-mode=4208CMD="gst-launch-1.0 v4l2src num-buffers=512 ${rkargs_mainpath} io-mode=4 \209! videoconvert ! video/x-raw,format=NV12,${VideoModes[$icam]} \210! mpph264enc ! queue ! h264parse ! mpegtsmux \211! filesink location=/tmp/camera-record.ts"212fi213214if [ "x${verbose}" == "xyes" ]; then215echo "===================================================="216echo "=== GStreamer 1.1 command:"217echo "=== $(echo $CMD | sed -e 's/\r//g')"218echo "===================================================="219fi220echo "{{{{{{ start video recording"221if [ ${Sinks[$icam]} = "kmssink" -o "$(id -un)" = "orangepi" ]; then222eval "${CMD}"223else224su orangepi -c "${CMD}"225fi226if [ -f /tmp/camera-record.ts ]; then227cp /tmp/camera-record.ts ${output}228fi229echo "}}}}}} end video recording"230}231232233if [ "x$action" == "xphoto" ]; then234take_photo235elif [ "x$action" == "xvideo" ]; then236start_video_recording237else238start_preview239fi240241242