#!/bin/sh
help(){
	echo "Usage: $0 <filename.[mov|avi]>"
	exit 0
}
checkerr(){
	echo monitoring streamer...
	while read buffer <$mypipe 
    do
		echo $buffer
		case $buffer in
ioctl*) echo streamer error detected...
		echo ...kill -2 $streamer_pid
		kill -2 $streamer_pid ;;
		esac
	done
}
monitor(){
	echo monitoring cpu...
	nerr=0
	old=`head -1 /proc/stat`
	while sleep 1
	do
	new=`head -1 /proc/stat`
	isrun=`{
	    echo $old
	    echo $new
	} | awk '
	BEGIN { cpu=0 } 
	{
	    if(cpu==0) {
	        cpu=$2
	    } else {
	        if($2-cpu<20) print "1"
            else print "0"
	    }
	}'`
	case $isrun in
0)  let nerr=0 ;;
1)  let nerr=nerr+1 ;;
	esac
	case $nerr in
1)  echo streamer timeout detected...
	return ;;
	esac
	old=$new
	done
}
rmpipes(){
	echo "removing pipes in 10 seconds..."
	( sleep 10;
	  rm -f st-pipe??.* ) &
}
if test "$#" = "1"
then
	case $1 in
*.mov)
		base=`echo $1 | sed "s/.mov$//"`
		extn="mov" ;;
*.avi)
		base=`echo $1 | sed "s/.avi$//"`
        extn="avi" ;;
*)
		help ;;
	esac
	for i in 0 1 2 3 4 5 6 7 8 9
	do
		for j in 0 1 2 3 4 5 6 7 8 9
		do
			echo Capturing $base$i$j.$extn...
		mypipe=st-pipe$i$j.$$
		mknod $mypipe p
	    streamer -q -p3 -b64 -nntsc -r29.97 -s352x240 -fjpeg -j80 \
            -Fstereo -t2:10:00 -o $base$i$j.$extn >$mypipe 2>&1 &
        streamer_pid=$!
		trap "kill -1 $streamer_pid; rmpipes; exit" 1
		trap "kill -2 $streamer_pid; rmpipes; exit" 2
		trap "kill -3 $streamer_pid; rmpipes; exit" 3
		trap "kill -15 $streamer_pid; rmpipes; exit" 15
		checkerr &
		checkerr_pid=$!
		sleep 1
		monitor
		if test -d /proc/$streamer_pid
		then
			echo ...kill -2 $streamer_pid
			kill -2 $streamer_pid
		fi
		wait
		done
	done
	rmpipes
else
	help
fi
