From f301d235fc7955336a38ae4181edcf6961446cd1 Mon Sep 17 00:00:00 2001 From: Bob Igo Date: Tue, 14 Jul 2009 15:14:20 -0400 Subject: incorporated vdpau into mplayer wrapper but unable to test; tested with other codecs, and it seems to work; remove smplayer functionality for now --- abs/core-testing/mplayer-wrapper/PKGBUILD | 2 +- .../mplayer-wrapper/bin/mplayer-resumer.pl | 188 --------------------- .../mplayer-wrapper/mplayer-wrapper.pl | 48 +++++- abs/core-testing/tweaker/bin/twk_general.pl | 2 +- 4 files changed, 46 insertions(+), 194 deletions(-) delete mode 100755 abs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl diff --git a/abs/core-testing/mplayer-wrapper/PKGBUILD b/abs/core-testing/mplayer-wrapper/PKGBUILD index 3fb4124..b9e3aef 100644 --- a/abs/core-testing/mplayer-wrapper/PKGBUILD +++ b/abs/core-testing/mplayer-wrapper/PKGBUILD @@ -1,6 +1,6 @@ pkgname=mplayer-wrapper pkgver=1 -pkgrel=1 +pkgrel=2 pkgdesc="wrapper for mplayer and mplayer derivatives" arch=('i686' 'x86_64') diff --git a/abs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl b/abs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl deleted file mode 100755 index c785a25..0000000 --- a/abs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/perl - -use Shell; -use strict; -use POSIX qw(floor); - -# Written by Bob Igo from the MythTV Store at http://MythiC.TV -# Email: bob@stormlogic.com -# -# If you run into problems with this script, please send me email - -# PURPOSE: -# -------------------------- -# This is a wrapper script to prove the concept of having MythTV -# resume playback of previously-stopped video where you left off. -# It's likely that a good solution will look different than this -# initial code. - -# RATIONALE: -# -------------------------- -# Watching 90% of a video and stopping causes you to return to the -# beginning again the next time you watch it. Remembering where -# you were in the video and resuming at that position is a much nicer -# behavior for the user. -# -# By default, mplayer spits out timecode information that tells you -# where you are in the video, to the tenth of a second. Mplayer also -# supports a seek feature on the command-line. We can make use of these -# features to write an mplayer wrapper that will remember the last -# position in a video file and resume to it on playback. - -# PARAMETERS: -# -------------------------- -# see print_usage() below - -# FILES: -# -------------------------- -# $infile, the video to play -# $resumefile, the video's resume file (see get_resume_filename() below) - -# KNOWN ISSUES: -# -------------------------- -# Mplayer misreports the timecodes on .nuv MPEG-2 files. Currently, anything -# captured via an HDTV tuner card and put into your /myth/video directory -# will fail with this resumer. -# -# Current theories include the timecode having to do with the show's broadcast -# time, recording time, or perhaps its upload time to the station that -# broadcast it. - -# DESIGN LIMITATION: -# ------------------------- -# If the video file to be played is on a read-only filesystem, or otherwise -# lives in a location that cannot be written to, resume will fail. This is -# because the current implementation uses a file parallel to the video file -# to store the timecode. -# - -# CHANGE LOG: -# 5/3/2006 -# Added last time started checking. -# If this script is restarted within $tdiff (default 5 seconds) -# then it will delete the file used to keep track of the videos -# resume position. - - -my $infile; -my $resumefile; -my $mplayer_parameters; -my $fudge_factor=2; # number of additional seconds to skip back before playback -my $tnow; # Time now. -my $tprev; # Time the prog was last started. - # Returned from the modification time of the xx.resume file. -my $tdiff=5; # How many seconds before we should start from - # the beginning of the movie -#DEBUG -#open(DEBUG,">/tmp/debug") || die "unable to open debug file"; - -sub init () { - $tnow = time(); - $infile = @ARGV[$#ARGV]; - - $resumefile = &get_resume_filename($infile); - # This returns the 9th element of the 13 element array - # created by the stat function. - $tprev = (stat ($resumefile))[9]; - # if this file is restarted in less than 5 seconds then - # remove the .resume file - if ( ($tnow - $tprev) < $tdiff ) { - unlink($resumefile); - } - - $mplayer_parameters = join(' ',@ARGV[0..$#ARGV-1]); -} - -&init(); -&save_time_offset(&mplayer($mplayer_parameters,$infile), $resumefile); - -#close(DEBUG); - -# For $pathname, return $path.$filename.resume -sub get_resume_filename () { - my($pathname)=@_; - - my $idx = rindex($pathname,"/"); - - if ($idx == -1) { # There was no "/" in $pathname - return ".".$pathname.".resume"; - } else { - # Now we need to split out the path from the filename. - my $path = substr($pathname,0,$idx+1); - my $filename = substr($pathname,$idx+1); - return "$path.$filename.resume"; - } -} - -# Calls mplayer and returns the last known video position -sub mplayer () { - my($parameters,$infile)=@_; - my $seconds=0; - my $timecode=&get_time_offset($infile); - my $command = "mplayer $parameters -ss $timecode \"$infile\" 2>&1 2>/dev/null |"; - - open(SHELL, $command); - # The kind of line we care about looks like this example: - # A:1215.2 V:1215.2 A-V: 0.006 ct: 0.210 207/201 13% 0% 1.9% 0 0 68% - # But all we care to look at is the first number. - - while () { - #print DEBUG $_; - if (m/A: *[0-9]+\.[0-9]/) { # See if this line has timecodes on it - my $last_timecode_line = &extract_last_timecode_line($_); - if ($last_timecode_line =~ m/ *([0-9]+\.[0-9]) V/) { - $seconds=$1; - } - } - } - close(SHELL); - - return $seconds; - - sub extract_last_timecode_line () { - my ($line)=@_; - my @lines=split('A:',$line); - return @lines[$#lines-1]; - } -} - -# Save the last known video position -sub save_time_offset () { - my($seconds, $resumefile)=@_; - - open(RESUMEFILE, ">$resumefile") || die "Unable to open $resumefile for writing"; - print RESUMEFILE "$seconds"; - close(RESUMEFILE); -} - -# returns the number of seconds corresponding to the last known video position, -# in hh:mm:ss format, compatible with the "-ss" parameter to mplayer -sub get_time_offset () { - my($videofile)=@_; - my($resumefile) = &get_resume_filename($videofile); - my $seconds=0; - my $timecode; - - open(RESUMEFILE, "<$resumefile") || return "00:00:00"; - while() { - $seconds=$_; - } - close(RESUMEFILE); - - my $hours = floor($seconds/3600); - $seconds = $seconds - $hours*3600; - - my $minutes = floor($seconds/60); - $seconds = int($seconds - $minutes*60) - $fudge_factor; - - $timecode = sprintf "%02d:%02d:%02d",$hours,$minutes,$seconds; -# print "TIMECODE: $timecode\n"; - return $timecode; -} - -sub print_usage () { - print "USAGE:\n"; - print "\t",$ARGV[0], "[mplayer parameters] video_file\n"; - print "\t","e.g. ",$ARGV[0], "-fs -zoom my.mpg\n"; - print "\t","Version 5/3/2006\n"; -} diff --git a/abs/core-testing/mplayer-wrapper/mplayer-wrapper.pl b/abs/core-testing/mplayer-wrapper/mplayer-wrapper.pl index 9977741..2d823d9 100755 --- a/abs/core-testing/mplayer-wrapper/mplayer-wrapper.pl +++ b/abs/core-testing/mplayer-wrapper/mplayer-wrapper.pl @@ -76,7 +76,46 @@ sub translate_parameters() { # general capability of the CPU. sub dynamic_parameters () { my($mediafile)=@_; - return(); # ??? empty for now; further development required + my @parameters = (); + my $codec=""; + + # figure out what codec the video uses + my $command="mplayer -identify -vo null -frames 0 \"$mediafile\" | grep ID_VIDEO_CODEC | cut -c 16- |"; + open(SHELL, $command); + while () { + chop; + $codec = $_; + #print "DEBUG: codec is $codec\n"; + } + close(SHELL); + + # We should use vdpau if it's available and helps with the codec we need to decode. + # ??? NOTE: At the moment, vdpau capability is assumed, not verified. + if ($codec eq "ffh264") { # h.264 + push(@parameters, "-vo vdpau"); + push(@parameters, "-vc ffh264vdpau"); + } elsif ($codec eq "ffmpeg2") { # MPEG2 + push(@parameters, "-vo vdpau"); + push(@parameters, "-vc ffmpeg12vdpau"); + + # problems reported with WMV3 support + +# } elsif ($codec eq "ffwmv3") { # WMV3 +# push(@parameters, "-vo vdpau"); +# push(@parameters, "-vc ffwmv3vdpau"); + + # problems reported with WVC1 support + +# } elsif ($codec eq "ffvc1") { # WVC1 +# push(@parameters, "-vo vdpau"); +# push(@parameters, "-vc ffvc1vdpau"); + + } else { + push(@parameters, "-vo xv,x11,"); + push(@parameters, "-vc ,"); + } + push(@parameters, "-vf pp=lb,"); + return(@parameters); } # Find the best player for use on this system. The script prefers smplayer, @@ -84,7 +123,8 @@ sub dynamic_parameters () { # implements bookmarking as an mplayer wrapper, if smplayer cannot be found. # Finally, if no bookmarking players can be found, a barebones mplayer is used. sub pick_player () { - my @possible_players = ("smplayer", "mplayer-resumer.pl", "mplayer"); + #my @possible_players = ("smplayer", "mplayer-resumer.pl", "mplayer"); + my @possible_players = ("mplayer-resumer.pl", "mplayer"); my $command; my $candidate_player; foreach (@possible_players) { @@ -102,9 +142,9 @@ sub pick_player () { # Calls player sub player () { my($player,$parameters,$mediafile)=@_; - my $command = "$player $parameters \"$mediafile\" 2>&1 2>/dev/null |"; + my $command = "$player $parameters \"$mediafile\" 2>&1 |"; - #print "DEBUG: command is:\n$command\n"; + print "DEBUG: command is:\n$command\n"; open(SHELL, $command); while () { print $_; diff --git a/abs/core-testing/tweaker/bin/twk_general.pl b/abs/core-testing/tweaker/bin/twk_general.pl index 3d16f2c..a5a154a 100755 --- a/abs/core-testing/tweaker/bin/twk_general.pl +++ b/abs/core-testing/tweaker/bin/twk_general.pl @@ -410,7 +410,7 @@ sub implement_option { change_or_make_setting('UserJobDesc2', 'User Job #2'); change_or_make_setting('UserJobDesc3', 'User Job #3'); change_or_make_setting('UserJobDesc4', 'Extract audio'); - change_or_make_setting('VCDPlayerCommand', 'mplayer vcd:\/\/ -cdrom-device %d -fs -zoom -vo xv -vf pp=lb'); + change_or_make_setting('VCDPlayerCommand', 'mplayer-wrapper.pl vcd:\/\/ -cdrom-device %d -fs -zoom'); change_or_make_setting('VideoArtworkDir', "$SQL_DirVideo/.covers"); change_or_make_setting('VideoBrowserNoDB', '1'); change_or_make_setting('VideoDefaultPlayer', 'mplayer-wrapper.pl -fs -zoom %s'); -- cgit v0.12