From 0a9de3deb544e2e5f29e9db539298a8681087847 Mon Sep 17 00:00:00 2001 From: Ian Bradley Date: Mon, 15 Sep 2014 16:34:36 -0700 Subject: FFmpeg support for WebMs. Fixes threads with large amounts of WebM's causing crashes for some users. --- inc/lib/webm/posthandler.php | 72 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 12 deletions(-) (limited to 'inc/lib/webm/posthandler.php') diff --git a/inc/lib/webm/posthandler.php b/inc/lib/webm/posthandler.php index 1f831f5a..308c7507 100644 --- a/inc/lib/webm/posthandler.php +++ b/inc/lib/webm/posthandler.php @@ -6,6 +6,34 @@ function postHandler($post) { global $board, $config; if ($post->has_file) foreach ($post->files as &$file) if ($file->extension == 'webm') { + if ($config['webm']['use_ffmpeg']) { + require_once dirname(__FILE__) . '/ffmpeg.php'; + $webminfo = get_webm_info($file->file_path); + + if (empty($webminfo['error'])) { + $file->width = $webminfo['width']; + $file->height = $webminfo['height']; + + if ($config['spoiler_images'] && isset($_POST['spoiler'])) { + $file = webm_set_spoiler($file); + } + else { + $file = set_thumbnail_dimensions($post, $file); + $tn_path = $board['dir'] . $config['dir']['thumb'] . $file->file_id . '.jpg'; + + if(empty(make_webm_thumbnail($file->file_path, $tn_path, $file->thumbwidth, $file->thumbheight))) { + $file->thumb = $file->file_id . '.jpg'; + } + else { + $file->thumb = 'file'; + } + } + } + else { + return $webminfo['error']['msg']; + } + } + else { require_once dirname(__FILE__) . '/videodata.php'; $videoDetails = videoData($file->file_path); if (!isset($videoDetails['container']) || $videoDetails['container'] != 'webm') return "not a WebM file"; @@ -14,10 +42,7 @@ function postHandler($post) { $thumbName = $board['dir'] . $config['dir']['thumb'] . $file->file_id . '.webm'; if ($config['spoiler_images'] && isset($_POST['spoiler'])) { // Use spoiler thumbnail - $file->thumb = 'spoiler'; - $size = @getimagesize($config['spoiler_image']); - $file->thumbwidth = $size[0]; - $file->thumbheight = $size[1]; + $file = webm_set_spoiler($file); } elseif (isset($videoDetails['frame']) && $thumbFile = fopen($thumbName, 'wb')) { // Use single frame from video as pseudo-thumbnail fwrite($thumbFile, $videoDetails['frame']); @@ -33,17 +58,40 @@ function postHandler($post) { if (isset($videoDetails['width']) && isset($videoDetails['height'])) { $file->width = $videoDetails['width']; $file->height = $videoDetails['height']; + if ($file->thumb != 'file' && $file->thumb != 'spoiler') { - $thumbMaxWidth = $post->op ? $config['thumb_op_width'] : $config['thumb_width']; - $thumbMaxHeight = $post->op ? $config['thumb_op_height'] : $config['thumb_height']; - if ($videoDetails['width'] > $thumbMaxWidth || $videoDetails['height'] > $thumbMaxHeight) { - $file->thumbwidth = min($thumbMaxWidth, intval(round($videoDetails['width'] * $thumbMaxHeight / $videoDetails['height']))); - $file->thumbheight = min($thumbMaxHeight, intval(round($videoDetails['height'] * $thumbMaxWidth / $videoDetails['width']))); - } else { - $file->thumbwidth = $videoDetails['width']; - $file->thumbheight = $videoDetails['height']; + $file = set_thumbnail_dimensions($post, $file); } } } } } + +function set_thumbnail_dimensions($post,$file) { + global $board, $config; + + $tn_dimensions = array(); + $tn_maxw = $post->op ? $config['thumb_op_width'] : $config['thumb_width']; + $tn_maxh = $post->op ? $config['thumb_op_height'] : $config['thumb_height']; + + if ($file->width > $tn_maxw || $file->height > $tn_maxh) { + $file->thumbwidth = min($tn_maxw, intval(round($file->width * $tn_maxh / $file->height))); + $file->thumbheight = min($tn_maxh, intval(round($file->height * $tn_maxw / $file->width))); + } else { + $file->thumbwidth = $file->width; + $file->thumbheight = $file->height; + } + + return $file; +} + +function webm_set_spoiler($file) { + global $board, $config; + + $file->thumb = 'spoiler'; + $size = @getimagesize($config['spoiler_image']); + $file->thumbwidth = $size[0]; + $file->thumbheight = $size[1]; + + return $file; +} -- cgit v1.3