#!/bin/sh
#201019 sfs
#https://wiki.archlinux.org/index.php/MPlayer_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_vdpau_(%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B4%D0%BB%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82_nVidia)
# -vc ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,ffh264vdpau,ffodivxvdpau

#https://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/nvidia-linux/10943-mplayer-vdpau-auto-codec-selection-script
# Script to automatically find out which codec a file is using and determine whether or not to use VDPAU.
# Rev.0 - bal_zac original - posted on phoronix
# Rev.2 - largely stylistic changes - removed need for tmp files and changed if statements to a single case statement

IAM=$0
FILE="$1"

#if no input display usage
if [[ -z "$FILE" ]]; then
	echo usage: $0 /path/to/file
	exit
fi

MPLAYER=/usr/bin/mplayer
#MPLAYEROPTS="-fs -zoom -af volnorm=2 -ao pulse"
#VCODEC=$($MPLAYER -identify -vo vdpau -frames 0 "$FILE" | grep ID_VIDEO_CODEC | cut -c 16-25)
$MPLAYER -identify -vo vdpau "$1" > /tmp/VIDEOCODEC &
sleep 0.5
killall mplayer
VCODEC="`cat /tmp/VIDEOCODEC | grep ID_VIDEO_CODEC | cut -c 16-25`"
rm /tmp/VIDEOCODEC

sleep 0.5
killall mplayer

echo "VIDEO CODEC: $VCODEC"

case $VCODEC in
 ffh264) 
  echo -e "Playing h.264 file $FILE:\n"
  MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffh264vdpau"
;;
 ffmpeg2)
  echo -e "Playing MPEG2 file $FILE:\n"
  MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffmpeg12vdpau"
;;
 ffwmv3)
  echo -e "Playing WMV3 file $FILE:\n"
  MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffwmv3vdpau"
;;
 # VC-1 is largely unsupported by nvidia - uncomment this section if you're sure your card supports it.
 #ffvc1)
 # echo -e "Playing VC-1 file $FILE:\n"
 # MPLAYEROPTS="$MPLAYEROPTS -vo vdpau -vc ffvc1vdpau"
 #;;
 *)
  echo -e "Playing normal file $FILE:\n"
  MPLAYEROPTS="$MPLAYEROPTS -vo xv"
;;
esac

$MPLAYER $MPLAYEROPTS "$FILE"
