Gstd interpipes Demo

From RidgeRun Developer Wiki

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