#! /bin/sh

### mri2mpg: use AFNI to generate mpg1's, convert to mp4 w/ffmpeg if there
# 8 Nov 2022 - 0.1a: marty: convert csh->sh, chk for ffmpeg, always clear zzMPG

# parms
mpgdir=../zzMPG
tmpafni=TmpAfniCommand.$$

# pre-check ffmpeg on path for help
useffmpeg=1
if [ "`which ffmpeg 2> /dev/null`" = "" ]; then useffmpeg=0; fi

### checks
# on arg
if [ $# -ne 1 ]; then
  echo ""
  echo \
 "use: mri2mpg <stem>+orig.BRIK       [make cor/axi/sag mpg's/mp4's in $mpgdir]"
  echo ""
  echo " 1) first convert source scan to AFNI BRIK(s) with ima2brik"
  echo " 2) cd into zzAFNI directory"
  echo " 3) run mri2mpg"
  echo ""
  echo "   example: mri2mpg scan03+orig.BRIK"
  echo "   find output mpg's/mp4's in zzMPG directory, parallel to zzAFNI"
  if [ $useffmpeg -eq 0 ]; then
    echo "   N.B.: ffmpeg not on user \$path: convert mpg->mp4 will be skipped"
  else
    echo "   AFNI mpg's will be converted to mp4's with ffmpeg"
  fi
  echo ""
  echo "                                                             vers=0.1a"
  exit
fi

echo ""
# AFNI on path
foundafni=1
if [ "`which afni 2> /dev/null`" = "" ]; then foundafni=0; fi
if [ $foundafni -eq 0 ]; then
  echo "mri2mpg: ### afni not found on \$path  ...quitting"
  exit
fi
# inbrik there
inbrik=$1
if [ ! -e $inbrik ]; then
  echo "mri2mpg: ### infile $inbrik not found"
  exit
fi
# inbrik suffix OK
found=0
case "$inbrik" in *+orig.BRIK) found=1; esac
if [ $found -eq 0 ]; then
  echo "mri2mpg: ### input file must end in +orig.BRIK"
  exit
fi
# in zzAFNI dir
if [ `basename $PWD` != "zzAFNI" ]; then
  echo "mri2mpg: ### N.B.: not inside zzAFNI directory  ...continue anyway"
  exit
fi
# scan looks like a struct
foundspgr=`3dinfo $inbrik 2> /dev/null | grep -i -c spgr`
if [ $foundspgr -eq 0 ]; then
  echo "mri2mpg: ### $inbrik doesn't look like a struct scan  ...quitting"
  exit
fi
# always allow blow away existing $mpgdir
if [ -e "$mpgdir" ]; then
  echo "mri2mpg: ### rm -rf $mpgdir"
  rm -rf $mpgdir
fi
# cleanup funct
mri2mpgcleanup() {
  if [ ! -e $mpgdir/cor.mpg ] && \
     [ ! -e $mpgdir/cor.mpg ] && \
     [ ! -e $mpgdir/cor.mpg ]; then
    rmdir $mpgdir
  fi
  rm -f $tmpafni
}
trap 'mri2mpgcleanup' INT   # catch ctrl-C

### go (-no_detach else rest of script executes before mpg's get there)
echo "###################################################################"
echo "mri2mpg: use AFNI to generate mpg's"
echo "###################################################################"
stem=`basename $inbrik +orig.BRIK`
cat << EOF > $tmpafni
afni -no_detach \
  -com 'SET_ANATOMY $stem'           \
  -com 'OPEN_WINDOW coronalimage'    \
  -com 'SAVE_MPEG coronalimage cor'  \
  -com 'OPEN_WINDOW axialimage'      \
  -com 'SAVE_MPEG axialimage axi'    \
  -com 'OPEN_WINDOW sagittalimage'   \
  -com 'SAVE_MPEG sagittalimage sag' \
  -com 'QUIT'
EOF
sh $tmpafni

### convert mpg's to mp4's if ffmpeg there
if [ $useffmpeg -eq 1 ]; then
  echo ""
  echo "###################################################################"
  echo "mri2mpg: convert mpg's to mp4's"
  echo "###################################################################"
  list="cor axi sag"
  for view in $list; do
    if [ -e $view.mpg ]; then ffmpeg -i $view.mpg $view.mp4; fi
  done
else
  echo \
    "mri2mpg: ### N.B.: AFNI mpg1's not converted to mp4's (ffmpeg not on path)"
fi

### move mpg's/mp4's into mpgdir
echo "###################################################################"
echo "mri2mpg: move mpg's $mpgdir"
echo "###################################################################"
mkdir $mpgdir
list="cor axi sag"
for view in $list; do
  if [ -e $view.mpg ]; then mv $view.mpg $mpgdir; fi
  if [ -e $view.mp4 ]; then mv $view.mp4 $mpgdir; fi
done
mri2mpgcleanup
echo "done"
echo ""

