class MovieMasher::ChainScaler
a scaler filter chain
Public Class Methods
new(input = nil, job_input = nil)
click to toggle source
Calls superclass method
MovieMasher::Chain::new
# File lib/graphs/chains.rb, line 122 def initialize(input = nil, job_input = nil) super @input_dimensions = @input[:dimensions] @fill = @input[:fill] || Fill::STRETCH end
Public Instance Methods
__crop_filter(w_scaled, h_scaled, orig_w_f, orig_h_f)
click to toggle source
# File lib/graphs/chains.rb, line 128 def __crop_filter(w_scaled, h_scaled, orig_w_f, orig_h_f) FilterHash.new( 'crop', w: w_scaled.to_i, h: h_scaled.to_i, x: ((orig_w_f - w_scaled) / FloatUtil::TWO).ceil.to_i, y: ((orig_h_f - h_scaled) / FloatUtil::TWO).ceil.to_i ) end
__crop_or_pad(gtr, w_scaled, h_scaled, orig_w_f, orig_h_f)
click to toggle source
# File lib/graphs/chains.rb, line 138 def __crop_or_pad(gtr, w_scaled, h_scaled, orig_w_f, orig_h_f) if gtr __crop_filter(w_scaled, h_scaled, orig_w_f, orig_h_f) else __pad_filter(w_scaled, h_scaled, orig_w_f, orig_h_f) end end
__min_or_max(fill_is_scale, ratio_h, ratio_w)
click to toggle source
# File lib/graphs/chains.rb, line 146 def __min_or_max(fill_is_scale, ratio_h, ratio_w) if fill_is_scale FloatUtil.min(ratio_h, ratio_w) else FloatUtil.max(ratio_h, ratio_w) end end
__pad_filter(w_scaled, h_scaled, orig_w_f, orig_h_f)
click to toggle source
# File lib/graphs/chains.rb, line 154 def __pad_filter(w_scaled, h_scaled, orig_w_f, orig_h_f) backcolor = 'black' if @job_input[:mash] && @job_input[:mash][:backcolor] backcolor = Graph.color_value(@job_input[:mash][:backcolor]) end FilterHash.new( 'pad', color: backcolor, w: w_scaled.to_i, h: h_scaled.to_i, x: ((w_scaled - orig_w_f) / FloatUtil::TWO).floor.to_i, y: ((h_scaled - orig_h_f) / FloatUtil::TWO).floor.to_i ) end
chain_command(scope)
click to toggle source
Calls superclass method
MovieMasher::Chain#chain_command
# File lib/graphs/chains.rb, line 70 def chain_command(scope) @filters = [] target_dims = scope[:mm_dimensions] orig_dims = @input_dimensions || target_dims __raise_unless(orig_dims, 'input dimensions nil') __raise_unless(target_dims, 'output dimensions nil') chain_command_resize(orig_dims, target_dims) if orig_dims != target_dims if Fill::STRETCH == @fill @filters << FilterHash.new('setsar', sar: 1, max: 1) end super end
chain_command_resize(orig_dims, target_dims)
click to toggle source
# File lib/graphs/chains.rb, line 83 def chain_command_resize(orig_dims, target_dims) orig_dims = orig_dims.split('x') target_dims = target_dims.split('x') orig_w = orig_dims[0].to_i orig_h = orig_dims[1].to_i target_w = target_dims[0].to_i target_h = target_dims[1].to_i orig_w_f = orig_w.to_f orig_h_f = orig_h.to_f target_w_f = target_w.to_f target_h_f = target_h.to_f simple_scale = (Fill::STRETCH == @fill) unless simple_scale fill_is_scale = (Fill::SCALE == @fill) ratio_w = target_w_f / orig_w_f ratio_h = target_h_f / orig_h_f ratio = __min_or_max(fill_is_scale, ratio_h, ratio_w) simple_scale = (Fill::NONE == @fill) if simple_scale target_w = (orig_w_f * ratio).to_i target_h = (orig_h_f * ratio).to_i else w_scaled = target_w_f / ratio h_scaled = target_h_f / ratio simple_scale = FloatUtil.cmp(orig_w_f, w_scaled) simple_scale &&= FloatUtil.cmp(orig_h_f, h_scaled) end end unless simple_scale gtr = FloatUtil.gtr(orig_w_f, w_scaled) gtr ||= FloatUtil.gtr(orig_h_f, h_scaled) @filters << __crop_or_pad(gtr, w_scaled, h_scaled, orig_w_f, orig_h_f) simple_scale = !((orig_w == target_w) || (orig_h == target_h)) end return unless simple_scale @filters << FilterHash.new('scale', w: target_w, h: target_h) end