From 4629a7669ffba21068576ca8aac2c2051d360536 Mon Sep 17 00:00:00 2001
From: Michael Hanson <hansonorders@verison.net>
Date: Tue, 4 May 2010 00:25:19 +0000
Subject: fuzemux & linhes-scripts: initial fuzemux include / Added user job
 script myth2fuze

---
 abs/core-testing/linhes-scripts/PKGBUILD           |   6 +-
 abs/core-testing/linhes-scripts/myth2fuze          | 334 +++++++++++++++++++++
 abs/extra-testing/community/fuzemux/PKGBUILD       |  42 +++
 .../community/fuzemux/fuzemux-svn.install          |   5 +
 4 files changed, 385 insertions(+), 2 deletions(-)
 create mode 100755 abs/core-testing/linhes-scripts/myth2fuze
 create mode 100644 abs/extra-testing/community/fuzemux/PKGBUILD
 create mode 100644 abs/extra-testing/community/fuzemux/fuzemux-svn.install

diff --git a/abs/core-testing/linhes-scripts/PKGBUILD b/abs/core-testing/linhes-scripts/PKGBUILD
index 6ecf501..b5d9d7e 100644
--- a/abs/core-testing/linhes-scripts/PKGBUILD
+++ b/abs/core-testing/linhes-scripts/PKGBUILD
@@ -3,7 +3,7 @@
 
 pkgname=linhes-scripts
 pkgver=1
-pkgrel=66
+pkgrel=67
 pkgdesc="Various scripts that help to make LinHES, LinHES."
 arch=('i686' 'x86_64')
 license=('GPL2')
@@ -40,6 +40,7 @@ upgrade_to_0.22.sh
 remove_php_mythvideo.sh
 removecommercials.sh
 system-cleanup.sh
+myth2fuze
 )
 
 build() {
@@ -81,4 +82,5 @@ md5sums=('f56985b2d602e11dc1e10d3e7848b2a5'
          'ea5492d4dab8271db20cb84416c001dc'
          '87b0dc855181f98516acb18a7d551601'
          '25c1baeb97a49656456ae33f7e7a9f06'
-         '2fb25aef03ffd1282414d8cca3df7056')
+         '2fb25aef03ffd1282414d8cca3df7056'
+         '945fa126b426eafe7e75df07426b9611')
diff --git a/abs/core-testing/linhes-scripts/myth2fuze b/abs/core-testing/linhes-scripts/myth2fuze
new file mode 100755
index 0000000..f4d1ce2
--- /dev/null
+++ b/abs/core-testing/linhes-scripts/myth2fuze
@@ -0,0 +1,334 @@
+#!/bin/bash
+# convert recording to avi compatable with San Disk Sansa Fuze
+# Based on and/or inspired by myth2xvid, the video4fuze project:
+# http://code.google.com/p/video4fuze
+# and the fuzemux project:
+# http://code.google.com/p/fuzemux
+#
+# version 0.1
+#
+# usage:
+# first parameter must be %DIR%/%FILE% of the recording
+# second parameter must be the desired base name of the output
+# third parameter must be %CHANID% if you set USECUTLIST=Y
+# fourth parameter must be %STARTTIME% if you set USECUTLIST=Y
+# fifth parameter must be %JOBID% for the User Job status to be updated in MythTV
+# in the mythtv setup screen invoke this script like this:
+# MYTHTV User Job Command:
+# /usr/bin/myth2fuze "%DIR%/%FILE%" "%TITLE% - %SUBTITLE%" "%CHANID%" "%STARTTIME%" "%JOBID%"
+
+# options:
+USECUTLIST=Y		# Y or N
+
+# check prerequesites
+for APP in {fuzemux,mencoder,ffmpeg,mythcommflag,mythtranscode,mysql}; do
+   /usr/bin/which $APP &>/dev/null
+   ERROR=$?
+   if [ $ERROR -ne 0 ]; then
+      echo "$APP not found in your PATH! Aborting! ERROR: $ERROR" >> $LOGFILE
+      update_status 304
+      update_comment "$APP not found in your PATH! Aborting! Exit status: $ERROR"
+      exit 1
+   fi
+done
+
+# where the converted video is stored
+OUT_DIR=/myth/md0/video/fuze
+
+# Ensure output directory exists
+if [ ! -d $OUT_DIR ] ; then
+  mkdir -p -m777 $OUT_DIR
+fi
+
+# database settings
+BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"}
+DBUSERNAME=${DBUSERNAME:-"mythtv"}
+DBPASSWORD=${DBPASSWORD:-"mythtv"}
+SQLCMD="mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e"
+
+#------FUNCTIONS---------------
+update_comment()
+# Arg_1 = COMMENT
+{
+if [ $NO_JOBID = 0 ]; then
+    `$SQLCMD "update jobqueue set comment=\"$1\" where id=\"$JOBID\";"`
+fi
+}
+
+update_status()
+# Arg_1 = status code
+{
+if [ $NO_JOBID = 0 ]; then
+    `$SQLCMD "update jobqueue set status=\"$1\" where id=\"$JOBID\";"`
+fi
+}
+
+check_background_progress()
+# check mencoder progress in background
+# Arg_1 = PROGRESS CALCULATION
+{
+while [ `tail -1 $STATUSFILE | grep -cE "^Audio stream:|^Video stream:"` = 0 ]
+do
+    sleep 10
+    check_myth_jobcmds
+    current_status=`tail -1 $STATUSFILE | grep "([ 0-9]\{1,\}%)"`
+    prog_percent=`echo "$current_status" | sed 's_.*(\([ 0-9][ 0-9]\)%).*_\1_'`
+    current_FPS=`echo "$current_status" | sed 's_.*\([ 0-9][ 0-9].[ 0-9][ 0-9]\)fps.*_\1_'`
+    if [ -n "$prog_percent" ]; then
+        prog_percent=`expr $prog_percent / $1`
+        echo "$prog_percent% Completed @ $current_FPS fps"
+        update_comment "$prog_percent% Completed @ $current_FPS fps"
+    fi
+    sleep 10
+done
+}
+
+check_myth_jobcmds()
+# check the myth database for stop pause or resume commands
+{
+if [ $NO_JOBID = 0 ]; then
+    CURRENT_CMD=`$SQLCMD "select cmds from jobqueue where id=\"$JOBID\";" | sed '/[0-9]/!d'`
+    case "$CURRENT_CMD" in
+	# JOB_RUN
+	0) ;;
+	# JOB_PAUSE
+	1) update_status 6
+	   kill -s STOP $mencoder_pid ;;
+	# JOB_RESUME
+	2) update_status 4
+       `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"`
+       kill -s CONT $mencoder_pid ;;
+	# JOB_STOP
+	4) update_status 5
+	   `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"`
+       kill -9 $mencoder_pid $command_pid
+       clean_up_files
+       echo "Encode Cancelled" >> $LOGFILE
+       update_status 320
+ 	   exit ;;
+    esac
+fi
+}
+
+get_mencoder_pid()
+{
+process_name=""
+i1=1
+while [ "$process_name" != "found" ]; do
+   if [ "`ps $mencoder_pid | grep mencoder | sed 's_.*\(mencoder\).*_\1_'`" = "mencoder" ]; then
+      process_name="found"
+   else
+      mencoder_pid=`expr $mencoder_pid + 1`
+   fi
+   i1=`expr $i1 + 1`
+   if [ $i1 -gt 20 ]; then
+      break
+   fi
+done
+}
+
+run_fuzemux()
+# Remux avi to fuze compatable avi
+{
+/usr/bin/fuzemux ${TMPFILE} ${OUTPUTFILE} >> $LOGFILE || return 1
+}
+
+create_thumbnail()
+# Create a thumbnail image for the fuze
+{
+/usr/bin/ffmpeg -y -v -1 -i ${OUTPUTFILE} -t 1 -ss 3 -s 224x176 -f image2 ${OUTPUTFILE%.*}.thm >> $LOGFILE
+}
+
+clean_up_files()
+# clean up left over files
+{
+unlink $TMPFILE 2> /dev/null
+unlink $TMPCUTFILE 2> /dev/null
+unlink $TMPCUTFILE.map 2> /dev/null
+unlink $TWOPASSFILE 2> /dev/null
+unlink $TWOPASSFILE.tmp 2> /dev/null
+unlink $STATUSFILE 2> /dev/null
+unlink $MENCODER_RETURN_CODE 2> /dev/null
+unlink $MENCODER_RETURN_CODE_2 2> /dev/null
+}
+
+#-------MAIN SCRIPT------------
+
+# check if %JOBID% is passed from command line
+JOBID=$5
+if [ -z "$JOBID" ]; then
+    NO_JOBID=1
+else
+    NO_JOBID=0
+fi
+
+# create temp filename so multiple instances won't conflict
+TMPNAME=toFUZE-$$
+TMPFILE=/myth/md0/tmp/$TMPNAME.avi
+TMPCUTFILE=/myth/md0/tmp/$TMPNAME.mpg
+MENINPUTFILE=$1
+TWOPASSFILE=/tmp/$TMPNAME-2pass.log
+STATUSFILE=/tmp/$TMPNAME-status.log
+MENCODER_RETURN_CODE=/tmp/$TMPNAME-mencoder_return_code
+MENCODER_RETURN_CODE_2=/tmp/$TMPNAME-mencoder_return_code_2
+
+# log file location
+LOGFILE=/var/log/mythtv/myth2fuze.log
+CDate="`date`"
+echo "" >> $LOGFILE
+echo $CDate >> $LOGFILE
+echo "File to encode: $MENINPUTFILE     Name: $2" >> $LOGFILE
+
+# start timer
+beforetime="$(date +%s)"
+
+check_myth_jobcmds
+
+# check if using cutlist
+if [ $USECUTLIST = Y ]; then
+    MYTHCOMMFRAMES=`mythcommflag --getcutlist -f $MENINPUTFILE | grep 'Cutlist:' | cut -d \  -f 2`
+    if [ -n "$MYTHCOMMFRAMES" ]; then
+        echo "Extracting Cutlist..." >> $LOGFILE
+        update_comment "Extracting Cutlist"
+        /usr/bin/nice -n19 /usr/bin/mythtranscode --chanid "$3" --starttime "$4" --outfile "$TMPCUTFILE" --mpeg2 --honorcutlist
+        MENINPUTFILE=$TMPCUTFILE
+    fi
+fi
+
+# run mencoder in background to do 1st pass conversion
+echo "Encoding 1st Pass for the Fuze..." >> $LOGFILE
+( /usr/bin/nice -n19 /usr/bin/mencoder $MENINPUTFILE -passlogfile $TWOPASSFILE \
+-ffourcc DX50 -ofps 20 -vf pp=li,expand=:::::224/176,scale=224:176,harddup \
+-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=683:vmax_b_frames=0:keyint=15:turbo:vpass=1 \
+-nosound -o /dev/null > $STATUSFILE 2>&1 ; echo $? > $MENCODER_RETURN_CODE ) &
+mencoder_pid=$!
+command_pid=$mencoder_pid
+get_mencoder_pid
+
+check_background_progress "2"
+
+if [ `cat $MENCODER_RETURN_CODE` -ne 0 ]; then
+   echo "Mencoder pass #1 exited with error $MENCODER_RETURN_CODE.  Encoding fa$
+   update_status 304
+   update_comment "ERROR: Mencoder pass #1 exited with error $MENCODER_RETURN_C$
+   clean_up_files
+   exit 1
+fi
+
+# run mencoder in background to do 2nd pass conversion
+echo "Encoding 2nd Pass for the Fuze..." >> $LOGFILE
+( /usr/bin/nice -n19 /usr/bin/mencoder $MENINPUTFILE -passlogfile $TWOPASSFILE \
+-ffourcc DX50 -ofps 20 -vf pp=li,expand=:::::224/176,scale=224:176,harddup \
+-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=683:vmax_b_frames=0:keyint=15:vpass=2 \
+-srate 44100 -af resample=44100:0:1,format=s16le -oac mp3lame \
+-lameopts cbr:br=128 -o "$TMPFILE" > $STATUSFILE 2>&1 ; echo $? \
+> $MENCODER_RETURN_CODE_2 ) &
+mencoder_pid=$!
+command_pid=$mencoder_pid
+get_mencoder_pid
+
+check_background_progress "2"
+
+if [ `cat $MENCODER_RETURN_CODE_2` -ne 0 ]; then
+   echo "Mencoder pass #1 exited with error $MENCODER_RETURN_CODE.  Encoding fa$
+   update_status 304
+   update_comment "ERROR: Mencoder pass #1 exited with error $MENCODER_RETURN_C$
+   clean_up_files
+   exit 1
+fi
+
+# make output filename unique, remove punctuation and "special" characters,
+# replace spaces with underscores and force lowercase names
+FILENAME=$( echo ${2} | tr -d '[:punct:]' | tr -d "\"" | tr -d "\!" \
+          | tr -d "\`" | tr -s '[:blank:]' '[_]' \
+          | tr '[:upper:]' '[:lower:]' )_fuze.avi | tr -s '[_]'
+ERROR=$?
+
+if [ $ERROR -ne 0 ]; then
+   echo "Creating unique file name exited with error $ERROR" >> $LOGFILE
+   update_status 304
+   update_comment "ERROR: Creating unique file name exited with error $ERROR  Job Failed!"
+   clean_up_files
+   exit 1
+fi
+
+OUTPUTFILE=${OUT_DIR}/${FILENAME}
+ERROR=$?
+
+if [ $ERROR -ne 0 ]; then
+   echo "Setting output file name exited with error $ERROR" >> $LOGFILE
+   update_status 304
+   update_comment "ERROR: Setting output file name exited with error $ERROR  Job failed!"
+   clean_up_files
+   exit 1
+fi
+
+i=1
+while [ -e "$OUTPUTFILE" ]
+do
+    FILENAME=$( echo ${2} | tr -d '[:punct:]' | tr -d "\"" | tr -d "\!" \
+              | tr -d "\`" | tr -s '[:blank:]' '[_]' \
+              | tr '[:upper:]' '[:lower:]' )_fuze-$i.avi
+    OUTPUTFILE=${OUT_DIR}/${FILENAME}
+    i=`expr $i + 1`
+done
+ERROR=$?
+
+if [ $ERROR -ne 0 ]; then
+   echo "Setting output file name exited with error $ERROR" >> $LOGFILE
+   update_status 304
+   update_comment "ERROR: Setting output file name exited with error $ERROR  Job failed!"
+   clean_up_files
+   exit 1
+fi
+
+run_fuzemux
+ERROR=$?
+
+if [ $ERROR -ne 0 ]; then
+   echo "Fuzemux exited with error $ERROR" >> $LOGFILE
+   update_status 304
+   update_comment "ERROR: Fuzemux exited with error $ERROR  Job Failed!"
+   clean_up_files
+   exit 1
+fi
+
+# ensure mythtv owns the final avi
+chown mythtv ${OUTPUTFILE}
+ERROR=$?
+
+if [ $ERROR -ne 0 ]; then
+   echo "Changing ownership of avi to mythtv exited with error $ERROR"
+   update_status 304
+   update_comment "ERROR: Changing ownership of avi to mythtv exited with error $ERROR  Job failed!"
+   clean_up_files
+   exit 1
+fi
+
+create_thumbnail
+
+# ensure mythtv owns the thumbnail
+chown mythtv ${OUTPUTFILE%.*}.thm
+ERROR=$?
+
+if [ $ERROR -ne 0 ]; then
+   echo "Changing ownership of thumbnail to mythtv exited with error $ERROR"
+   update_status 304
+   update_comment "ERROR: Changing ownership of thumbnail to mythtv exited with error $ERROR  Job failed!"
+   clean_up_files
+   exit 1
+fi
+
+# stop timer
+aftertime="$(date +%s)"
+seconds="$(expr $aftertime - $beforetime)"
+    echo "File Encoded Successfully: $OUTPUTFILE" >> $LOGFILE
+    hours=$((seconds / 3600))
+    seconds=$((seconds % 3600))
+    minutes=$((seconds / 60))
+    seconds=$((seconds % 60))
+    echo "Encoding took $hours hour(s) $minutes minute(s) $seconds second(s) @ $current_FPS fps." >> $LOGFILE
+    update_status 272
+    update_comment "Encode Successful. Encoding Time: $hours hour(s) $minutes minute(s) $seconds second(s)"
+
+clean_up_files
diff --git a/abs/extra-testing/community/fuzemux/PKGBUILD b/abs/extra-testing/community/fuzemux/PKGBUILD
new file mode 100644
index 0000000..5cce2d0
--- /dev/null
+++ b/abs/extra-testing/community/fuzemux/PKGBUILD
@@ -0,0 +1,42 @@
+# Contributor: Michael Hanson <hansonorders@verizon.net>
+# Maintainer: Michael Hanson <hansonorders@verizon.net>
+pkgname=fuzemux-svn
+pkgver=11
+pkgrel=1
+pkgdesc="A tool to remux AVI video files for the San Disk Sansa Fuze portable media player"
+arch=('i686' 'x86_64')
+url="http://code.google.com/p/fuzemux"
+license=('GPL3')
+#depends=()
+makedepends=('subversion' 'autoconf')
+provides=('fuzemux')
+install=('fuzemux-svn.install')
+
+_svntrunk=http://fuzemux.googlecode.com/svn/trunk/
+_svnmod=fuzemux
+
+build() {
+  cd "$srcdir"
+
+  if [ -d $_svnmod/.svn ]; then
+    (cd $_svnmod && svn up -r $pkgver)
+  else
+    svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod
+  fi
+
+  msg "SVN checkout done or server timeout"
+  msg "Starting make..."
+
+  rm -rf "$srcdir/$_svnmod-build"
+  cp -r "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
+  cd "$srcdir/$_svnmod-build"
+
+  #
+  # BUILD
+  #
+  /usr/bin/autoreconf --install
+  ./configure --prefix=/usr
+  make || return 1
+  make DESTDIR="$pkgdir/" install
+}
+md5sums=()
diff --git a/abs/extra-testing/community/fuzemux/fuzemux-svn.install b/abs/extra-testing/community/fuzemux/fuzemux-svn.install
new file mode 100644
index 0000000..877ec1b
--- /dev/null
+++ b/abs/extra-testing/community/fuzemux/fuzemux-svn.install
@@ -0,0 +1,5 @@
+post_install() {
+	echo ">>>"
+	echo ">>> A user job script is supplied at /usr/LH/bin/myth2fuze"
+	echo ">>>"
+}
-- 
cgit v0.12

