From 7fee2d9e0891259067481f6fc54ed10193b349c8 Mon Sep 17 00:00:00 2001
From: James Meyer <jams@linhes.org>
Date: Wed, 15 Dec 2010 17:12:15 +0000
Subject: mplayer-wrapper: fix overcropping refs#710 close#710

---
 abs/core/mplayer-wrapper/PKGBUILD           |  2 +-
 abs/core/mplayer-wrapper/mplayer-wrapper.pl | 58 ++++++++++++++++-------------
 2 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/abs/core/mplayer-wrapper/PKGBUILD b/abs/core/mplayer-wrapper/PKGBUILD
index 2dbf67d..6dad202 100644
--- a/abs/core/mplayer-wrapper/PKGBUILD
+++ b/abs/core/mplayer-wrapper/PKGBUILD
@@ -18,4 +18,4 @@ build() {
    # executables
    install -m0755 -D *.pl  $startdir/pkg/$LH_ROOT/bin/
 }
-md5sums=('c21a8b05d2134262c876396bde9da0a2')
+md5sums=('4ba1c0ed16d2331e9d86ab34f4c9eeb1')
diff --git a/abs/core/mplayer-wrapper/mplayer-wrapper.pl b/abs/core/mplayer-wrapper/mplayer-wrapper.pl
index 18f3caf..a4c9d64 100644
--- a/abs/core/mplayer-wrapper/mplayer-wrapper.pl
+++ b/abs/core/mplayer-wrapper/mplayer-wrapper.pl
@@ -99,6 +99,7 @@ sub dynamic_parameters () {
     my $codec="";
     my $xresolution=0;
     my $yresolution=0;
+    my $aspect_ratio=0.0;
     my %vdpau_supported_modes=();
     my $vf_parameters="";
 
@@ -133,8 +134,8 @@ sub dynamic_parameters () {
     }
     close(SHELL);
     
-    # Learn some things about the video: codec and resolution
-    my $command="mplayer -identify -frames 0 \"$mediafile\" |";
+    # Learn some things about the video: codec, aspect ratio, and resolution
+    my $command="mplayer -identify -frames 1 -vo null -ao null \"$mediafile\" |";
     open(SHELL, $command);
     while (<SHELL>) {
 	chop;
@@ -147,38 +148,43 @@ sub dynamic_parameters () {
 	} elsif (m/ID_VIDEO_HEIGHT=(.*)/g) {
 	    $yresolution = $1;
 	    #print "DEBUG: y resolution is $yresolution\n";
+	} elsif (m/ID_VIDEO_ASPECT=(.*)/g) {
+	    $aspect_ratio = $1;
 	}
     }
     close(SHELL);
 
-    # see if it's a malformed 4:3 video with top and side bars, in need of cropping
-    my $crop_candidate="";
-    my $biggestX=0;
-    my $biggestY=0;
-    # The algorithm here is trial and error.  Skip 6 minutes into a video, and look at 40 frames of
-    # video.  Videos shorter than 6 minutes will not end up being examined for letterboxing badness.
-    # In a longer video, use the least-recommended pruning that mplayer suggests, among the frames polled.
-    my $command="mplayer -ss 360 -ao null -vo null -vf cropdetect -frames 40 \"$mediafile\" | grep CROP | tail -1 |";
-    open(SHELL, $command);
-    while (<SHELL>) {
-	if (m/-vf (crop=.*)\)/g) {
-	    $crop_candidate = $1;
-	    print "DEBUG: $crop_candidate\n";
-	    if ($crop_candidate =~ m/(\d+):(\d+)/) {
-		if (($1 > $biggestX) && ($2 > $biggestY)) {
-		    $biggestX = $1;
-		    $biggestY = $2;
-		    print "newX: $biggestX\n";
-		    print "newY: $biggestY\n";
+    # see if it's a 4:3 video
+    if ($aspect_ratio =~ m/1\.3\d*/) {
+	# see if it's a malformed 4:3 video with top and side bars, in need of cropping
+	my $crop_candidate="";
+	my $biggestX=0;
+	my $biggestY=0;
+	# The algorithm here is trial and error.  Skip 6 minutes into a video, and look at 40 frames of
+	# video.  Videos shorter than 6 minutes will not end up being examined for letterboxing badness.
+	# In a longer video, use the least-recommended pruning that mplayer suggests, among the frames polled.
+	my $command="mplayer -ss 360 -ao null -vo null -vf cropdetect -frames 40 \"$mediafile\" | grep CROP | tail -1 |";
+	open(SHELL, $command);
+	while (<SHELL>) {
+	    if (m/-vf (crop=.*)\)/g) {
+		$crop_candidate = $1;
+		#print "DEBUG: $crop_candidate\n";
+		if ($crop_candidate =~ m/(\d+):(\d+)/) {
+		    if (($1 > $biggestX) && ($2 > $biggestY)) {
+			$biggestX = $1;
+			$biggestY = $2;
+			#print "DEBUG newX: $biggestX\n";
+			#print "DEBUG newY: $biggestY\n";
+		    }
 		}
 	    }
+	    if (($biggestX != $xresolution) || ($biggestY != $yresolution)) {
+		$vf_parameters = $crop_candidate;
+	    }
+	    #print "DEBUG: crop parameter is $vf_parameters\n";
 	}
-	if (($biggestX != $xresolution) || ($biggestY != $yresolution)) {
-	    $vf_parameters = $crop_candidate;
-	}
-	print "DEBUG: crop parameter is $vf_parameters\n";
+	close(SHELL);
     }
-    close(SHELL);
 
     # If there are no crop parameters, use vdpau if it's supported.  Don't use vdpau if there's cropping
     # because vdpau doesn't work with mplayer's cropping video filter.
-- 
cgit v0.12

