class MovieMasher::Layer

base for all layers all layers - LayerRaw, LayerModule

Public Class Methods

new(input, job_input) click to toggle source
Calls superclass method
# File lib/graph.rb, line 160
def initialize(input, job_input)
  super()
  @input = input
  @job_input = job_input # will be different than input if we're in a mash
  raise('no input') unless input

  @range = input[:range]
  @chains = []
  initialize_chains
end

Public Instance Methods

initialize_chains() click to toggle source
# File lib/graph.rb, line 171
def initialize_chains
  if @input[:merger]
    @input[:merger][:dimensions] ||= @input[:dimensions]
    @merger_chain =
      if @input[:merger][:id] == 'com.moviemasher.merger.blend'
        ChainBlend.new(@input[:merger], @job_input, @input)
      else
        ChainModule.new(@input[:merger], @job_input, @input)
      end
  else
    @merger_chain = ChainOverlay.new(@job_input)
  end
  if @input[:scaler]
    @input[:scaler][:dimensions] ||= @input[:dimensions]
    @scaler_chain = ChainModule.new(@input[:scaler], @job_input, @input)
  else
    @scaler_chain = ChainScaler.new(@input, @job_input)
  end
  @effects_chain = ChainEffects.new(@input, @job_input)
  @chains << @scaler_chain
  @chains << @effects_chain
end
inputs() click to toggle source
# File lib/graph.rb, line 194
def inputs
  []
end
layer_command(scope) click to toggle source
# File lib/graph.rb, line 198
def layer_command(scope)
  layer_scope(scope)
  __join_commands(@chains.map { |chain| chain.chain_command(scope) })
end
layer_scope(scope) click to toggle source
# File lib/graph.rb, line 203
def layer_scope(scope)
  __raise_unless(@input[:length], "no input length #{@input}")
  scope[:mm_duration] = @input[:length]
  scope[:mm_t] = "(t/#{scope[:mm_duration]})"
  return unless @input[:dimensions]

  scope[:overlay_w], scope[:overlay_h] = @input[:dimensions].split('x')
end
merger_command(scope, label, index) click to toggle source
# File lib/graph.rb, line 212
def merger_command(scope, label, index)
  merge_cmd = @merger_chain.chain_command(scope)
  __raise_if_empty(merge_cmd, "merger produced nothing #{self}")
  "#{@merger_chain.chain_labels(label, index)}#{merge_cmd}"
end
range() click to toggle source
# File lib/graph.rb, line 218
def range
  (@input ? @input[:range] : nil)
end
trim_command(render_range) click to toggle source
# File lib/graph.rb, line 222
def trim_command(render_range)
  input_range = range
  # puts "command_range_trim #{input_range}"
  cmd = ''
  if render_range && input_range && !input_range.equals?(render_range)
    range_start = render_range.start_seconds
    range_end = render_range.end_seconds
    input_start = input_range.start_seconds
    input_end = input_range.end_seconds
    if range_start > input_start || range_end < input_end
      dur = __coerce_if_numeric(render_range.length_seconds)
      cmd += ",trim=duration=#{dur}"
      if range_start > input_start
        start = FloatUtil.precision(range_start - input_start)
        start = __coerce_if_numeric(start)
        cmd += ":start=#{start}"
      end
      cmd += ',setpts=expr=PTS-STARTPTS'
    end
  end
  cmd
end