]> source.dussan.org Git - nextcloud-server.git/commitdiff
videos which are shorter then 5 seconds will now get a proper thumbnail at 1 second
authorThomas Müller <thomas.mueller@tmit.eu>
Wed, 16 Apr 2014 15:16:03 +0000 (17:16 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Wed, 16 Apr 2014 15:16:03 +0000 (17:16 +0200)
lib/private/preview/movies.php

index 7e0ff51ad2e8aab10a5ddcaba43db88b637bc7b3..ed28a03afab583c9937602424e62089ffc8be6a8 100644 (file)
@@ -42,7 +42,6 @@ if (!\OC_Util::runningOnWindows()) {
                        public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
                                // TODO: use proc_open() and stream the source file ?
                                $absPath = \OC_Helper::tmpFile();
-                               $tmpPath = \OC_Helper::tmpFile();
 
                                $handle = $fileview->fopen($path, 'rb');
 
@@ -51,14 +50,39 @@ if (!\OC_Util::runningOnWindows()) {
                                $firstmb = stream_get_contents($handle, 5242880);
                                file_put_contents($absPath, $firstmb);
 
+                               $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
+                               if ($result === false) {
+                                       $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
+                                       if ($result === false) {
+                                               $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
+                                       }
+                               }
+
+                               unlink($absPath);
+
+
+                               return $result;
+                       }
+
+                       /**
+                        * @param $maxX
+                        * @param $maxY
+                        * @param $absPath
+                        * @param $tmpPath
+                        * @param $second
+                        * @return bool|\OC_Image
+                        */
+                       private function generateThumbNail($maxX, $maxY, $absPath, $second)
+                       {
+                               $tmpPath = \OC_Helper::tmpFile();
+
                                if (self::$avconvBinary) {
-                                       $cmd = self::$avconvBinary . ' -an -y -ss 5'.
+                                       $cmd = self::$avconvBinary . ' -an -y -ss ' . $second .
                                                ' -i ' . escapeshellarg($absPath) .
                                                ' -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
                                                ' > /dev/null 2>&1';
-                               }
-                               else {
-                                       $cmd = self::$ffmpegBinary . ' -y -ss 5' .
+                               } else {
+                                       $cmd = self::$ffmpegBinary . ' -y -ss ' .$second .
                                                ' -i ' . escapeshellarg($absPath) .
                                                ' -f mjpeg -vframes 1' .
                                                ' -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) .
@@ -68,14 +92,13 @@ if (!\OC_Util::runningOnWindows()) {
 
                                exec($cmd, $output, $returnCode);
 
-                               unlink($absPath);
-
                                if ($returnCode === 0) {
                                        $image = new \OC_Image();
                                        $image->loadFromFile($tmpPath);
                                        unlink($tmpPath);
                                        return $image->valid() ? $image : false;
                                }
+                               unlink($tmpPath);
                                return false;
                        }
                }