Gstd interpipes Demo
The content of the gstd_interpipe.sh script is the following:
#!/bin/bash echo -e "\n ====== Orion T-7 Cameras Example (Switch the src_pipe to listen in runtime) ====== \n" #---------------------------------------------------------------------------------------------# # Checking for the user input arguments #---------------------------------------------------------------------------------------------# if [ "$#" -ne 0 ] && [ "$#" -ne 1 ]; then echo "ERROR: Illegal number of parameters or parameters order" echo "Type ./$filename --help or ./$filename -h for usage information" exit elif [ "$#" -eq 1 ] && ( [[ $1 == "--help" ]] || [[ $1 == "-h" ]] ); then # Script name filename=`basename "$0"` # Help message echo -e "\nOrion T-7: Gstd-Interpipes Demo" echo echo "Usage:" echo " ./$filename" echo echo "Arguments:" echo " --help (-h) This help message" echo echo "Usage example:" echo echo " => When the script is executed, only one-sensor video is displayed:" echo " ./$filename" echo " => You are able to set the number of camera streaming to be displayed by typing a number between 1 and 6." echo " => Hit ESC if you want to finish the script execution." echo exit else echo "Waking up the gstd-daemon" gstd END_MSJ="!!! Orion T-7 Camera Example Finished !!!" # Make sure there is no pipeline with this name already gstd-client pipeline_delete cam_src_pipe_1 gstd-client pipeline_delete cam_src_pipe_2 gstd-client pipeline_delete cam_src_pipe_3 gstd-client pipeline_delete cam_src_pipe_4 gstd-client pipeline_delete cam_src_pipe_5 gstd-client pipeline_delete cam_src_pipe_6 gstd-client pipeline_delete display_pipe # Graceful cleanup upon CTRL-C trap "gstd-client pipeline_delete cam_src_pipe_1; gstd-client pipeline_delete cam_src_pipe_2; "\ "gstd-client pipeline_delete cam_src_pipe_3; gstd-client pipeline_delete cam_src_pipe_4; "\ " gstd-client pipeline_delete cam_src_pipe_5; gstd-client pipeline_delete cam_src_pipe_6; "\ "echo -e $END_MSJ; killall gstd; exit;" SIGINT #---------------------------------------------------------------------------------------------# # Create pipelines #---------------------------------------------------------------------------------------------# # 1-Sensor echo -e "\n ====> Create the 1-sensor cam_src_pipe_1 \n" gstd-client pipeline_create cam_src_pipe_1 v4l2src device=/dev/video0 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! interpipesink name=sink1 sync=false async=false # 2-Sensor echo -e "\n ====> Create the 2-sensor cam_src_pipe_2 \n" gstd-client pipeline_create cam_src_pipe_2 videomixer name=mix \ sink_0::xpos=0 \ sink_1::ypos=720 \ ! interpipesink name=sink2 sync=false async=false \ v4l2src device=/dev/video0 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_0 \ v4l2src device=/dev/video1 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_1 # 3-Sensor echo -e "\n ====> Create the 3-sensor cam_src_pipe_3 \n" gstd-client pipeline_create cam_src_pipe_3 videomixer name=mix \ sink_0::xpos=0 \ sink_1::xpos=1280 \ sink_2::xpos=640 sink_2::ypos=720 \ ! interpipesink name=sink3 \ v4l2src device=/dev/video0 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_0 \ v4l2src device=/dev/video1 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_1 \ v4l2src device=/dev/video2 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_2 # 4-Sensor echo -e "\n ====> Create the 4-sensor cam_src_pipe_4 \n" gstd-client pipeline_create cam_src_pipe_4 videomixer name=mix \ sink_0::xpos=0 \ sink_1::xpos=1280 \ sink_2::ypos=720 \ sink_3::xpos=1280 sink_3::ypos=720 \ ! interpipesink name=sink4 \ v4l2src device=/dev/video0 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_0 \ v4l2src device=/dev/video1 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_1 \ v4l2src device=/dev/video2 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_2 \ v4l2src device=/dev/video3 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_3 # 5-Sensor echo -e "\n ====> Create the 5-sensor cam_src_pipe_5 \n" gstd-client pipeline_create cam_src_pipe_5 videomixer name=mix \ sink_0::xpos=0 \ sink_1::xpos=1280 sink_2::ypos=720 \ sink_3::xpos=1280 sink_3::ypos=720 \ sink_4::xpos=640 sink_4::ypos=1440 \ ! interpipesink name=sink5 \ v4l2src device=/dev/video0 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_0 \ v4l2src device=/dev/video1 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_1 \ v4l2src device=/dev/video2 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_2 \ v4l2src device=/dev/video3 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_3 \ v4l2src device=/dev/video4 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_4 # 6-Sensor echo -e "\n ====> Create the 6-sensor cam_src_pipe_6 \n" gstd-client pipeline_create cam_src_pipe_6 videomixer name=mix \ sink_0::xpos=0 \ sink_1::xpos=1280 sink_2::ypos=720 \ sink_3::xpos=1280 sink_3::ypos=720 \ sink_4::xpos=0 sink_4::ypos=1440 \ sink_5::xpos=1280 sink_5::ypos=1440 \ ! interpipesink name=sink6 \ v4l2src device=/dev/video0 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_0 \ v4l2src device=/dev/video1 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_1 \ v4l2src device=/dev/video2 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_2 \ v4l2src device=/dev/video3 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_3 \ v4l2src device=/dev/video4 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_4 \ v4l2src device=/dev/video5 \ ! 'video/x-raw,format=(string)UYVY,width=(int)1280,height=(int)720,framerate=(fraction)30/1' \ ! mix.sink_5 #Display Pipeline echo -e "\n ====> Create the main display_pipe \n" gstd-client pipeline_create display_pipe interpipesrc name=disp_intpsrc listen-to=sink1 \ max-bytes=1 is-live=true enable-sync=true allow-renegotiation=true block=true \ ! xvimagesink sync=false async=false echo -e "\n Playing the initial pipelines \n" gstd-client pipeline_play cam_src_pipe_1 gstd-client pipeline_play display_pipe bool=true echo -e "\n Starting Loop \n" while [ "$bool" = true ]; do read -s -n 1 key # read from the keyboard case $key in '1') echo "1-sensor selected" gstd-client pipeline_stop cam_src_pipe_2 gstd-client pipeline_stop cam_src_pipe_3 gstd-client pipeline_stop cam_src_pipe_4 gstd-client pipeline_stop cam_src_pipe_5 gstd-client pipeline_stop cam_src_pipe_6 gstd-client pipeline_stop display_pipe gstd-client pipeline_delete display_pipe #Display Pipeline echo -e "\n ====> Create the main display_pipe \n" gstd-client pipeline_create display_pipe interpipesrc name=disp_intpsrc listen-to=sink1 \ max-bytes=1 is-live=true enable-sync=true allow-renegotiation=true block=true \ ! xvimagesink enable-last-sample=false sync=false async=false gstd-client pipeline_play cam_src_pipe_1 gstd-client pipeline_play display_pipe ;; '2') echo "2-sensor selected" gstd-client pipeline_stop cam_src_pipe_1 gstd-client pipeline_stop cam_src_pipe_3 gstd-client pipeline_stop cam_src_pipe_4 gstd-client pipeline_stop cam_src_pipe_5 gstd-client pipeline_stop cam_src_pipe_6 echo "Pipelines stopped" gstd-client pipeline_stop display_pipe gstd-client pipeline_delete display_pipe #Display Pipeline echo -e "\n ====> Create the main display_pipe \n" gstd-client pipeline_create display_pipe interpipesrc name=disp_intpsrc listen-to=sink2 \ max-bytes=1 is-live=true enable-sync=true allow-renegotiation=true block=true \ ! xvimagesink enable-last-sample=false sync=false async=false gstd-client pipeline_play cam_src_pipe_2 gstd-client pipeline_play display_pipe ;; '3') echo "3-sensor selected" gstd-client pipeline_stop cam_src_pipe_1 gstd-client pipeline_stop cam_src_pipe_2 gstd-client pipeline_stop cam_src_pipe_4 gstd-client pipeline_stop cam_src_pipe_5 gstd-client pipeline_stop cam_src_pipe_6 gstd-client pipeline_stop display_pipe gstd-client pipeline_delete display_pipe #Display Pipeline echo -e "\n ====> Create the main display_pipe \n" gstd-client pipeline_create display_pipe interpipesrc name=disp_intpsrc listen-to=sink3 \ max-bytes=1 is-live=true enable-sync=true allow-renegotiation=true block=true \ ! xvimagesink enable-last-sample=false sync=false async=false gstd-client pipeline_play cam_src_pipe_3 gstd-client pipeline_play display_pipe ;; '4') echo "4-sensor selected" gstd-client pipeline_stop cam_src_pipe_1 gstd-client pipeline_stop cam_src_pipe_2 gstd-client pipeline_stop cam_src_pipe_3 gstd-client pipeline_stop cam_src_pipe_5 gstd-client pipeline_stop cam_src_pipe_6 gstd-client pipeline_stop display_pipe gstd-client pipeline_delete display_pipe #Display Pipeline echo -e "\n ====> Create the main display_pipe \n" gstd-client pipeline_create display_pipe interpipesrc name=disp_intpsrc listen-to=sink4 \ max-bytes=1 is-live=true enable-sync=true allow-renegotiation=true block=true \ ! xvimagesink enable-last-sample=false sync=false async=false gstd-client pipeline_play cam_src_pipe_4 gstd-client pipeline_play display_pipe ;; '5') echo "5-sensor selected" gstd-client pipeline_stop cam_src_pipe_1 gstd-client pipeline_stop cam_src_pipe_2 gstd-client pipeline_stop cam_src_pipe_3 gstd-client pipeline_stop cam_src_pipe_4 gstd-client pipeline_stop cam_src_pipe_6 gstd-client pipeline_stop display_pipe gstd-client pipeline_delete display_pipe #Display Pipeline echo -e "\n ====> Create the main display_pipe \n" gstd-client pipeline_create display_pipe interpipesrc name=disp_intpsrc listen-to=sink5 \ max-bytes=1 is-live=true enable-sync=true allow-renegotiation=true block=true \ ! xvimagesink enable-last-sample=false sync=false async=false gstd-client pipeline_play cam_src_pipe_5 gstd-client pipeline_play display_pipe ;; '6') echo "6-sensor selected" gstd-client pipeline_stop cam_src_pipe_1 gstd-client pipeline_stop cam_src_pipe_2 gstd-client pipeline_stop cam_src_pipe_3 gstd-client pipeline_stop cam_src_pipe_4 gstd-client pipeline_stop cam_src_pipe_5 gstd-client pipeline_stop display_pipe gstd-client pipeline_delete display_pipe #Display Pipeline echo -e "\n ====> Create the main display_pipe \n" gstd-client pipeline_create display_pipe interpipesrc name=disp_intpsrc listen-to=sink6 \ max-bytes=1 is-live=true enable-sync=true allow-renegotiation=true block=true \ ! xvimagesink enable-last-sample=false sync=false async=false gstd-client pipeline_play cam_src_pipe_6 gstd-client pipeline_play display_pipe ;; $'\e') echo "Escape" # Use "ESC" key to exit to the application gstd-client pipeline_stop cam_src_pipe_1 gstd-client pipeline_stop cam_src_pipe_2 gstd-client pipeline_stop cam_src_pipe_3 gstd-client pipeline_stop cam_src_pipe_4 gstd-client pipeline_stop cam_src_pipe_5 gstd-client pipeline_stop cam_src_pipe_6 gstd-client pipeline_stop display_pipe gstd-client pipeline_delete cam_src_pipe_1 gstd-client pipeline_delete cam_src_pipe_2 gstd-client pipeline_delete cam_src_pipe_3 gstd-client pipeline_delete cam_src_pipe_4 gstd-client pipeline_delete cam_src_pipe_5 gstd-client pipeline_delete cam_src_pipe_6 gstd-client pipeline_delete display_pipe killall gstd break ;; esac done fi