Skip to content

Commit

Permalink
cinemaslides: Entry into asset depot triggers content digests whereas…
Browse files Browse the repository at this point in the history
… existing assets trigger cheap filename (containing an md5 sum) digests for their subsequent processing. This again significantly speeds up asset checks. Thanks, Terrence, for discussion.
  • Loading branch information
wolfgangw committed Mar 30, 2011
1 parent 945be03 commit 36a768a
Showing 1 changed file with 25 additions and 7 deletions.
32 changes: 25 additions & 7 deletions cinemaslides
@@ -1,5 +1,5 @@
#!/usr/bin/env ruby
AppVersion = "v0.2011.03.13"
AppVersion = "v0.2011.03.30"
AppName = File.basename( $0 )
#
# Wolfgang Woehl v0.2010
Expand Down Expand Up @@ -660,7 +660,7 @@ def full_level( image, fps, duration )
File.symlink( image, file )
if ( 1 ..( duration * fps - 1 ) ).none? # only 1 image needed
@framecount += 1 # temporary fix for FIXME @framecount stumble (Errno::EEXIST) on first fade out frame with 0 or 1 frame full level settings, like with $ cinemaslides 01.jpg 02.jpg -x crossfade,1,0
@logger.debug( "Skip sequence links: Only 1 image needed here" )
@logger.cr( "Skip sequence links: Only 1 image needed here" )
else
@framecount += 1
sequence_links_to( file, duration, fps )
Expand Down Expand Up @@ -688,16 +688,33 @@ def sequencefile
end


# asset match is based on a /conform's/ IM signature + dimensions + (level unless jpeg 2000 codestream requested) + (encoder + fps if jpeg 2000 codestream is requested) + suffix
def digest_over_content( file )
Digest::MD5.hexdigest( File.read( file ) )
end
def digest_over_name( file )
Digest::MD5.hexdigest( File.basename( file ) )
end


# entry into the asset depot will trigger a relatively strong and good enough md5 digest over content
# members of the asset depot will trigger a cheaper and good enough digest over filename (which is in part an md5 digest)
# + dimensions + (level unless jpeg 2000 codestream requested) + (encoder + fps if jpeg 2000 codestream is requested) + suffix
def check_for_asset( filename_s, suffix, fps, level = nil )
# 2 images from crossfade?
if filename_s.size == 2
id = `identify -format '%#' #{ filename_s[0] }`.chomp + '_' + `identify -format '%#' #{ filename_s[1] }`.chomp
if File.dirname( filename_s.first ) != @assetsdir
id = digest_over_content( filename_s[0] ) + '_' + digest_over_content( filename_s[1] )
else
id = digest_over_name( filename_s[0] ) + '_' + digest_over_name( filename_s[1] )
end
origin = [ File.basename( filename_s[ 0 ] ), File.basename( filename_s[ 1 ] ) ].join( ' X ' )
else # not from crossfade
if File.exists?( filename_s )
id = Digest::MD5.hexdigest( File.read( filename_s ) )
#id = `identify -format '%#' #{ filename_s }`.chomp
if File.dirname( filename_s ) != @assetsdir
id = digest_over_content( filename_s )
else
id = digest_over_name( filename_s )
end
else
id = 'black'
end
Expand All @@ -710,6 +727,7 @@ def check_for_asset( filename_s, suffix, fps, level = nil )
else
todo = TRUE
end
#@logger.cr( " " * 60 )
return assetname, todo
end

Expand Down Expand Up @@ -2263,7 +2281,7 @@ if options.montage == TRUE
@logger.info( "Create thumbnails" )
thumbs = Array.new
( 0..( @source.length - 1 ) ).each do |i|
thumbfile = File.join( @thumbsdir, Digest::MD5.hexdigest( File.read( @source[ i ] ) ) + "_#{ @thumbs_dimensions }_" + ".jpg" )
thumbfile = File.join( @thumbsdir, digest_over_content( @source[ i ] ) + "_#{ @thumbs_dimensions }_" + ".jpg" )
if File.exists?( thumbfile )
@logger.debug( "Skip: #{ File.basename( thumbfile ) } exists" )
thumbs << thumbfile
Expand Down

1 comment on commit 36a768a

@wolfgangw
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This patch renders existing asset depots obsolete, again :) In return we get quite fast turnover on pickup runs or re-runs.

The former mechanism used ImageMagick's deep digest which ignores metadata of image files and returns a strong content-only based digest. Very expensive operation. Hence pickup runs or re-runs would take almost as long as re-encoding.

Please sign in to comment.