diff options
Diffstat (limited to 'modules/gallery/helpers/graphics.php')
-rw-r--r-- | modules/gallery/helpers/graphics.php | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/modules/gallery/helpers/graphics.php b/modules/gallery/helpers/graphics.php index c19fbe6d..e7c5da68 100644 --- a/modules/gallery/helpers/graphics.php +++ b/modules/gallery/helpers/graphics.php @@ -155,13 +155,27 @@ class graphics_Core { try { foreach ($ops as $target => $output_file) { if ($input_item->is_movie()) { - // Convert the movie to a JPG first + // Convert the movie filename to a JPG first, delete anything that might already be there $output_file = legal_file::change_extension($output_file, "jpg"); - try { - movie::extract_frame($input_file, $output_file); - } catch (Exception $e) { - // Assuming this is MISSING_FFMPEG for now - copy(MODPATH . "gallery/images/missing_movie.jpg", $output_file); + unlink($output_file); + // Run movie_extract_frame events, which can either: + // - generate an output file, bypassing the ffmpeg-based movie::extract_frame + // - add to the options sent to movie::extract_frame (e.g. change frame extract time, + // add de-interlacing arguments to ffmpeg... see movie helper for more info) + // Note that the args are similar to those of the events in gallery_graphics + $movie_options_wrapper = new stdClass(); + $movie_options_wrapper->movie_options = array(); + module::event("movie_extract_frame", $input_file, $output_file, + $movie_options_wrapper, $input_item); + // If no output_file generated by events, run movie::extract_frame with movie_options + clearstatcache(); + if (@filesize($output_file) == 0) { + try { + movie::extract_frame($input_file, $output_file, $movie_options_wrapper->movie_options); + } catch (Exception $e) { + // Didn't work, likely because of MISSING_FFMPEG - copy missing_movie instead + copy(MODPATH . "gallery/images/missing_movie.jpg", $output_file); + } } $working_file = $output_file; } else { @@ -201,7 +215,7 @@ class graphics_Core { // Something went wrong rebuilding the image. Leave it dirty and move on. // @todo we should handle this better. Kohana_Log::add("error", "Caught exception rebuilding image: {$item->title}\n" . - $e->getMessage() . "\n" . $e->getTraceAsString()); + $e->getMessage() . "\n" . $e->getTraceAsString()); throw $e; } } @@ -260,13 +274,13 @@ class graphics_Core { $count = graphics::find_dirty_images_query()->count_records(); if ($count) { site_status::warning( - t2("One of your photos is out of date. <a %attrs>Click here to fix it</a>", - "%count of your photos are out of date. <a %attrs>Click here to fix them</a>", - $count, - array("attrs" => html::mark_clean(sprintf( - 'href="%s" class="g-dialog-link"', - url::site("admin/maintenance/start/gallery_task::rebuild_dirty_images?csrf=__CSRF__"))))), - "graphics_dirty"); + t2("One of your photos is out of date. <a %attrs>Click here to fix it</a>", + "%count of your photos are out of date. <a %attrs>Click here to fix them</a>", + $count, + array("attrs" => html::mark_clean(sprintf( + 'href="%s" class="g-dialog-link"', + url::site("admin/maintenance/start/gallery_task::rebuild_dirty_images?csrf=__CSRF__"))))), + "graphics_dirty"); } } @@ -320,12 +334,12 @@ class graphics_Core { } else { // ImageMagick & GraphicsMagick $magick_kits = array( - "imagemagick" => array( - "name" => "ImageMagick", "binary" => "convert", "version_arg" => "-v", - "version_regex" => "/Version: \S+ (\S+)/"), - "graphicsmagick" => array( - "name" => "GraphicsMagick", "binary" => "gm", "version_arg" => "version", - "version_regex" => "/\S+ (\S+)/")); + "imagemagick" => array( + "name" => "ImageMagick", "binary" => "convert", "version_arg" => "-version", + "version_regex" => "/Version: \S+ (\S+)/"), + "graphicsmagick" => array( + "name" => "GraphicsMagick", "binary" => "gm", "version_arg" => "version", + "version_regex" => "/\S+ (\S+)/")); // Loop through the kits foreach ($magick_kits as $index => $settings) { $path = system::find_binary( |