tracksperanto 2.8.6 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/DEVELOPER_DOCS.rdoc +17 -5
- data/History.txt +8 -0
- data/README.rdoc +2 -0
- data/lib/export/base.rb +1 -0
- data/lib/export/boujou.rb +2 -1
- data/lib/export/equalizer3.rb +1 -0
- data/lib/export/equalizer4.rb +1 -0
- data/lib/export/flame_stabilizer.rb +1 -0
- data/lib/export/flame_stabilizer_cornerpin.rb +1 -0
- data/lib/export/match_mover.rb +2 -1
- data/lib/export/maya_live.rb +2 -1
- data/lib/export/mux.rb +1 -0
- data/lib/export/nuke_script.rb +2 -1
- data/lib/export/pfmatchit.rb +2 -1
- data/lib/export/pftrack.rb +2 -1
- data/lib/export/pftrack_5.rb +2 -1
- data/lib/export/ruby.rb +38 -0
- data/lib/export/shake_text.rb +2 -1
- data/lib/export/syntheyes.rb +1 -0
- data/lib/import/base.rb +2 -1
- data/lib/import/boujou.rb +2 -1
- data/lib/import/equalizer3.rb +2 -1
- data/lib/import/equalizer4.rb +2 -1
- data/lib/import/flame_stabilizer.rb +2 -1
- data/lib/import/match_mover.rb +3 -2
- data/lib/import/maya_live.rb +2 -1
- data/lib/import/nuke_grammar/utils.rb +2 -1
- data/lib/import/nuke_script.rb +2 -1
- data/lib/import/pftrack.rb +2 -1
- data/lib/import/shake_grammar/catcher.rb +2 -1
- data/lib/import/shake_grammar/lexer.rb +2 -1
- data/lib/import/shake_script.rb +2 -1
- data/lib/import/shake_text.rb +1 -0
- data/lib/import/syntheyes.rb +2 -1
- data/lib/middleware/base.rb +1 -0
- data/lib/middleware/crop.rb +2 -1
- data/lib/middleware/flip.rb +2 -1
- data/lib/middleware/flop.rb +2 -1
- data/lib/middleware/golden.rb +2 -1
- data/lib/middleware/length_cutoff.rb +2 -1
- data/lib/middleware/lerp.rb +2 -1
- data/lib/middleware/lint.rb +2 -1
- data/lib/middleware/pad.rb +2 -1
- data/lib/middleware/prefix.rb +2 -1
- data/lib/middleware/reformat.rb +2 -1
- data/lib/middleware/scaler.rb +2 -1
- data/lib/middleware/shift.rb +2 -1
- data/lib/middleware/slipper.rb +2 -1
- data/lib/middleware/start_trim.rb +2 -1
- data/lib/pipeline/base.rb +2 -1
- data/lib/tracksperanto/block_init.rb +1 -0
- data/lib/tracksperanto/buffer_io.rb +2 -1
- data/lib/tracksperanto/buffering_reader.rb +2 -1
- data/lib/tracksperanto/casts.rb +2 -1
- data/lib/tracksperanto/const_name.rb +2 -1
- data/lib/tracksperanto/ext_io.rb +2 -1
- data/lib/tracksperanto/format_detector.rb +2 -1
- data/lib/tracksperanto/keyframe.rb +4 -4
- data/lib/tracksperanto/returning.rb +2 -1
- data/lib/tracksperanto/safety.rb +2 -1
- data/lib/tracksperanto/simple_export.rb +1 -0
- data/lib/tracksperanto/tracker.rb +99 -15
- data/lib/tracksperanto/uv_coordinates.rb +2 -1
- data/lib/tracksperanto/zip_tuples.rb +2 -1
- data/lib/tracksperanto.rb +2 -1
- data/test/export/samples/ref_Mayalive.txt +36 -36
- data/test/export/samples/ref_Mayalive_CustomAspect.txt +36 -36
- data/test/export/samples/ref_Ruby.rb +54 -0
- data/test/export/samples/ref_boujou.txt +1 -0
- data/test/export/samples/ref_equalizer.txt +20 -20
- data/test/export/samples/ref_matchmover.rz2 +36 -36
- data/test/export/test_boujou_export.rb +2 -1
- data/test/export/test_equalizer3_export.rb +2 -1
- data/test/export/test_equalizer_export.rb +2 -3
- data/test/export/test_flame_stabilizer_cornerpin_export.rb +2 -1
- data/test/export/test_flame_stabilizer_export.rb +2 -1
- data/test/export/test_match_mover_export.rb +2 -1
- data/test/export/test_maya_live_export.rb +2 -1
- data/test/export/test_mux.rb +1 -0
- data/test/export/test_nuke_export.rb +2 -1
- data/test/export/test_pfmatchit_export.rb +2 -1
- data/test/export/test_pftrack5_export.rb +2 -1
- data/test/export/test_pftrack_export.rb +2 -1
- data/test/export/test_ruby_export.rb +17 -0
- data/test/export/test_shake_export.rb +2 -1
- data/test/export/test_syntheyes_export.rb +1 -0
- data/test/helper.rb +48 -54
- data/test/import/test_3de_import.rb +2 -1
- data/test/import/test_3de_import3.rb +2 -1
- data/test/import/test_boujou_import.rb +2 -1
- data/test/import/test_flame_import.rb +2 -1
- data/test/import/test_match_mover_import.rb +3 -1
- data/test/import/test_maya_live_import.rb +2 -1
- data/test/import/test_nuke_import.rb +2 -1
- data/test/import/test_pftrack_import.rb +2 -1
- data/test/import/test_shake_catcher.rb +2 -1
- data/test/import/test_shake_lexer.rb +2 -1
- data/test/import/test_shake_script_import.rb +2 -1
- data/test/import/test_shake_text_import.rb +2 -1
- data/test/import/test_syntheyes_import.rb +2 -1
- data/test/middleware/test_crop_middleware.rb +2 -1
- data/test/middleware/test_flip_middleware.rb +2 -1
- data/test/middleware/test_flop_middleware.rb +1 -0
- data/test/middleware/test_golden_middleware.rb +2 -1
- data/test/middleware/test_length_cutoff_middleware.rb +2 -1
- data/test/middleware/test_lerp_middleware.rb +2 -1
- data/test/middleware/test_lint_middleware.rb +2 -1
- data/test/middleware/test_pad_middleware.rb +2 -1
- data/test/middleware/test_prefix.rb +2 -1
- data/test/middleware/test_reformat_middleware.rb +2 -1
- data/test/middleware/test_scaler_middleware.rb +2 -1
- data/test/middleware/test_shift_middleware.rb +2 -1
- data/test/middleware/test_slip_middleware.rb +2 -1
- data/test/middleware/test_start_trim_middleware.rb +2 -1
- data/test/test_buffer_io.rb +2 -1
- data/test/test_bufferingreader.rb +2 -1
- data/test/test_cli.rb +4 -2
- data/test/test_const_name.rb +2 -1
- data/test/test_extio.rb +2 -1
- data/test/test_format_detector.rb +2 -1
- data/test/test_keyframe.rb +15 -1
- data/test/test_pipeline.rb +2 -1
- data/test/test_simple_export.rb +2 -1
- data/test/test_tracker.rb +86 -12
- data/test/test_tracksperanto.rb +2 -1
- data/tracksperanto.gemspec +5 -2
- metadata +23 -20
data/DEVELOPER_DOCS.rdoc
CHANGED
@@ -8,6 +8,16 @@ here but we are sharing an essential pipeline tool that has to be robust day in
|
|
8
8
|
|
9
9
|
So please do not underestimate tests.
|
10
10
|
|
11
|
+
=== Development environment
|
12
|
+
|
13
|
+
Tracksperanto is currently being developed on Ruby 1.9.3 but it should also work fine on 1.8.7. What you will need is everything mentioned
|
14
|
+
in the Gemfile plus Bundler. Please develop against the git repo checkout since we no longer package the test fixtures with the gem.
|
15
|
+
|
16
|
+
* Checkout the repo at http://github.com/guerilla-di/tracksperanto
|
17
|
+
* Run `bundle install' and 'rake' to run the tests
|
18
|
+
* Carry your development, in your own branch or feature branch
|
19
|
+
* File a pull request or send a patch to info at guerilla-di.org
|
20
|
+
|
11
21
|
=== Importing your own formats
|
12
22
|
|
13
23
|
You can easily write a Tracksperanto import module - refer to Tracksperanto::Import::Base
|
@@ -72,18 +82,20 @@ Play responsibly.
|
|
72
82
|
|
73
83
|
# Now add some middlewares, for example a Scale
|
74
84
|
scaler = Middleware::Scaler.new(some_exporter, :x_factor => 2)
|
75
|
-
# ... and a slip
|
76
|
-
slipper = Middleware::Slipper.new(scaler, :offset => 2)
|
77
|
-
# Middlewares wrap exporters and other middlewares, so you can chain them
|
85
|
+
# ... and a slip. Middlewares wrap exporters and other middlewares, so you can chain them
|
78
86
|
# ad nauseam
|
87
|
+
slipper = Middleware::Slipper.new(scaler, :offset => 2)
|
79
88
|
|
80
89
|
# Now when we send export commands to the Slipper it will play them through
|
81
90
|
# to the Scaler and the Scaler in turn will send commands to the exporter.
|
82
91
|
slipper.start_export(1024, 576)
|
83
92
|
trackers.each do | t |
|
84
93
|
slipper.start_tracker_segment(t.name)
|
85
|
-
t.each
|
94
|
+
t.each do | keyframe |
|
95
|
+
slipper.export_point(keyframe.frame, keyframe.abs_x, keyframe.abs_y, keyframe.residual)
|
96
|
+
end
|
86
97
|
slipper.end_tracker_segment
|
87
98
|
end
|
88
|
-
|
99
|
+
slipper.end_export
|
100
|
+
|
89
101
|
# And we are done!
|
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 2.9
|
2
|
+
|
3
|
+
* Tracker objects now use a Hash as internal storage model instead of being an Array delegate.
|
4
|
+
Note that due to that some stuff might have become broken since behavior differs in subtle ways.
|
5
|
+
* Adds a Ruby export format which exports a file you can play with in Ruby, with literal values
|
6
|
+
* Make test runs architecture-resilient by hardcoding floats
|
7
|
+
* Adds Tracker#to_ruby for people who like that sort of thing
|
8
|
+
|
1
9
|
=== 2.8.6
|
2
10
|
|
3
11
|
* Ensure the Flame cornerpin export module always exports points in the proper Z-order
|
data/README.rdoc
CHANGED
data/lib/export/base.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Base exporter. Inherit from this class to automatically register another export format.
|
2
3
|
# The exporters in Tracksperanto are event-driven and follow the same conventions - your
|
3
4
|
# exporter will be notified when a tracker will be exported and when a tracker has been passed
|
data/lib/export/boujou.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Export for 2d3d boujou
|
2
3
|
class Tracksperanto::Export::Boujou < Tracksperanto::Export::Base
|
3
4
|
|
@@ -30,4 +31,4 @@ class Tracksperanto::Export::Boujou < Tracksperanto::Export::Base
|
|
30
31
|
height_inv = @height - abs_float_y
|
31
32
|
@io.puts(POINT_T % [@tracker_name, frame + 1, abs_float_x, height_inv])
|
32
33
|
end
|
33
|
-
end
|
34
|
+
end
|
data/lib/export/equalizer3.rb
CHANGED
data/lib/export/equalizer4.rb
CHANGED
data/lib/export/match_mover.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Export for Autodesk MatchMover/Image Modeler
|
2
3
|
class Tracksperanto::Export::MatchMover < Tracksperanto::Export::Base
|
3
4
|
|
@@ -37,4 +38,4 @@ class Tracksperanto::Export::MatchMover < Tracksperanto::Export::Base
|
|
37
38
|
@at_first_point = false
|
38
39
|
end
|
39
40
|
|
40
|
-
end
|
41
|
+
end
|
data/lib/export/maya_live.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
class Tracksperanto::Export::MayaLive < Tracksperanto::Export::Base
|
2
3
|
|
3
4
|
# Maya Live exports and imports tracks in "aspect units", so a point at 0,0
|
@@ -57,4 +58,4 @@ class Tracksperanto::Export::MayaLive < Tracksperanto::Export::Base
|
|
57
58
|
def residual_with_reset(r)
|
58
59
|
"%.10f" % (r/10)
|
59
60
|
end
|
60
|
-
end
|
61
|
+
end
|
data/lib/export/mux.rb
CHANGED
data/lib/export/nuke_script.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Export each tracker as a single Tracker3 node
|
2
3
|
class Tracksperanto::Export::NukeScript < Tracksperanto::Export::Base
|
3
4
|
|
@@ -104,4 +105,4 @@ Constant {
|
|
104
105
|
end
|
105
106
|
st = [x_values.join(" "), y_values.join(" ")].map{|e| "{curve i %s}" % e }.join(" ")
|
106
107
|
end
|
107
|
-
end
|
108
|
+
end
|
data/lib/export/pfmatchit.rb
CHANGED
data/lib/export/pftrack.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Export for PFTrack .2dt files
|
2
3
|
class Tracksperanto::Export::PFTrack4 < Tracksperanto::Export::Base
|
3
4
|
|
@@ -39,4 +40,4 @@ class Tracksperanto::Export::PFTrack4 < Tracksperanto::Export::Base
|
|
39
40
|
@tracker_io.write(line)
|
40
41
|
@tracker_io.write(LINEBREAK)
|
41
42
|
end
|
42
|
-
end
|
43
|
+
end
|
data/lib/export/pftrack_5.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Export for PFTrack .2dt files for version 5
|
2
3
|
class Tracksperanto::Export::PFTrack5 < Tracksperanto::Export::PFMatchit
|
3
4
|
|
@@ -24,4 +25,4 @@ class Tracksperanto::Export::PFTrack5 < Tracksperanto::Export::PFMatchit
|
|
24
25
|
def linebreak
|
25
26
|
"\r\n"
|
26
27
|
end
|
27
|
-
end
|
28
|
+
end
|
data/lib/export/ruby.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
# Exports the trackers to a script that is fit for massaging with Tracksperanto as is
|
3
|
+
class Tracksperanto::Export::Ruby < Tracksperanto::Export::Base
|
4
|
+
|
5
|
+
def self.desc_and_extension
|
6
|
+
"tracksperanto_ruby.rb"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.human_name
|
10
|
+
"Bare Ruby code"
|
11
|
+
end
|
12
|
+
|
13
|
+
def start_export(w,h)
|
14
|
+
@io.puts "require 'rubygems'"
|
15
|
+
@io.puts "require 'tracksperanto'"
|
16
|
+
@io.puts("width = %d" % w)
|
17
|
+
@io.puts("height = %d" % h)
|
18
|
+
@io.puts("trackers = []")
|
19
|
+
end
|
20
|
+
|
21
|
+
def start_tracker_segment(name)
|
22
|
+
@io.puts(" ")
|
23
|
+
@io.write("trackers << ")
|
24
|
+
@tracker = Tracksperanto::Tracker.new(:name => name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def export_point(f, x, y, r)
|
28
|
+
@tracker.keyframe! :frame => f, :abs_x => x, :abs_y => y, :residual => r
|
29
|
+
end
|
30
|
+
|
31
|
+
def end_tracker_segment
|
32
|
+
@io.puts(@tracker.to_ruby)# Just leave that
|
33
|
+
end
|
34
|
+
|
35
|
+
def end_export
|
36
|
+
@io.puts(" ")
|
37
|
+
end
|
38
|
+
end
|
data/lib/export/shake_text.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Export for Shake .txt tracker blobs
|
2
3
|
class Tracksperanto::Export::ShakeText < Tracksperanto::Export::Base
|
3
4
|
PREAMBLE = "TrackName %s\n Frame X Y Correlation\n"
|
@@ -25,4 +26,4 @@ class Tracksperanto::Export::ShakeText < Tracksperanto::Export::Base
|
|
25
26
|
line = TEMPLATE % [frame + 1, abs_float_x, abs_float_y, 1 - float_residual]
|
26
27
|
@io.puts line
|
27
28
|
end
|
28
|
-
end
|
29
|
+
end
|
data/lib/export/syntheyes.rb
CHANGED
data/lib/import/base.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# The base class for all the import modules. By default, when you inherit from
|
2
3
|
# this class the inherited class will be included in the list of supported
|
3
4
|
# Tracksperanto importers. The API that an importer should present is very
|
@@ -77,4 +78,4 @@ class Tracksperanto::Import::Base
|
|
77
78
|
STDERR.puts "Import::Base#send_tracker has been deprecated, please rewrite your importer to use yield(t) inside each instead"
|
78
79
|
@receiver.push(tracker_obj)
|
79
80
|
end
|
80
|
-
end
|
81
|
+
end
|
data/lib/import/boujou.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
class Tracksperanto::Import::Boujou < Tracksperanto::Import::Base
|
2
3
|
|
3
4
|
def self.human_name
|
@@ -63,4 +64,4 @@ class Tracksperanto::Import::Boujou < Tracksperanto::Import::Base
|
|
63
64
|
def comment?(line)
|
64
65
|
line =~ COMMENT
|
65
66
|
end
|
66
|
-
end
|
67
|
+
end
|
data/lib/import/equalizer3.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Imports 3D Equalizer's text files, version 3
|
2
3
|
class Tracksperanto::Import::Equalizer3 < Tracksperanto::Import::Base
|
3
4
|
|
@@ -41,4 +42,4 @@ class Tracksperanto::Import::Equalizer3 < Tracksperanto::Import::Base
|
|
41
42
|
report_progress("Capturing keyframe #{frame}")
|
42
43
|
{:frame => (frame.to_i - 1), :abs_x => x, :abs_y => y}
|
43
44
|
end
|
44
|
-
end
|
45
|
+
end
|
data/lib/import/equalizer4.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
class Tracksperanto::Import::FlameStabilizer < Tracksperanto::Import::Base
|
2
3
|
|
3
4
|
# Flame setups contain clear size indications
|
@@ -134,4 +135,4 @@ class Tracksperanto::Import::FlameStabilizer < Tracksperanto::Import::Base
|
|
134
135
|
end || track_tuples[0]
|
135
136
|
base_track_tuple[1..2]
|
136
137
|
end
|
137
|
-
end
|
138
|
+
end
|
data/lib/import/match_mover.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
class Tracksperanto::Import::MatchMover < Tracksperanto::Import::Base
|
2
3
|
|
3
4
|
def self.autodetects_size?
|
@@ -42,7 +43,7 @@ class Tracksperanto::Import::MatchMover < Tracksperanto::Import::Base
|
|
42
43
|
t = Tracksperanto::Tracker.new(:name => tracker_name)
|
43
44
|
while(line = io.gets) do
|
44
45
|
return t if line =~ /\}/
|
45
|
-
t.
|
46
|
+
t.push(extract_key(line.strip)) if line =~ /^(\s+?)(\d)/
|
46
47
|
report_progress("Extracting keyframe")
|
47
48
|
end
|
48
49
|
raise "Track didn't close"
|
@@ -65,4 +66,4 @@ class Tracksperanto::Import::MatchMover < Tracksperanto::Import::Base
|
|
65
66
|
float_pat = /([\-\d\.]+)/
|
66
67
|
1 - residual_segment.scan(float_pat).flatten.shift.to_f
|
67
68
|
end
|
68
|
-
end
|
69
|
+
end
|
data/lib/import/maya_live.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
class Tracksperanto::Import::MayaLive < Tracksperanto::Import::Base
|
2
3
|
|
3
4
|
# Maya Live exports and imports tracks in "aspect units", so a point at 0,0
|
@@ -54,4 +55,4 @@ class Tracksperanto::Import::MayaLive < Tracksperanto::Import::Base
|
|
54
55
|
def set_residual(residual)
|
55
56
|
(residual == "-1" ? 0 : residual)
|
56
57
|
end
|
57
|
-
end
|
58
|
+
end
|
data/lib/import/nuke_script.rb
CHANGED
data/lib/import/pftrack.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# TODO: this should be rewritten as a proper state-machine parser
|
2
3
|
class Tracksperanto::Import::PFTrack < Tracksperanto::Import::Base
|
3
4
|
def self.human_name
|
@@ -74,4 +75,4 @@ class Tracksperanto::Import::PFTrack < Tracksperanto::Import::Base
|
|
74
75
|
def unquote(s)
|
75
76
|
s.gsub(/"/, '')
|
76
77
|
end
|
77
|
-
end
|
78
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
module Tracksperanto::ShakeGrammar
|
2
3
|
# Will replay funcalls through to methods if such methods exist in the public insntance
|
3
4
|
class Catcher < Lexer
|
@@ -66,4 +67,4 @@ module Tracksperanto::ShakeGrammar
|
|
66
67
|
end
|
67
68
|
|
68
69
|
end
|
69
|
-
end
|
70
|
+
end
|
data/lib/import/shake_script.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
require File.expand_path(File.dirname(__FILE__)) + "/shake_grammar/lexer"
|
2
3
|
require File.expand_path(File.dirname(__FILE__)) + "/shake_grammar/catcher"
|
3
4
|
|
@@ -297,4 +298,4 @@ class Tracksperanto::Import::ShakeScript < Tracksperanto::Import::Base
|
|
297
298
|
end
|
298
299
|
|
299
300
|
end
|
300
|
-
end
|
301
|
+
end
|
data/lib/import/shake_text.rb
CHANGED
data/lib/import/syntheyes.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
class Tracksperanto::Import::Syntheyes < Tracksperanto::Import::Base
|
2
3
|
include Tracksperanto::UVCoordinates
|
3
4
|
|
@@ -30,4 +31,4 @@ class Tracksperanto::Import::Syntheyes < Tracksperanto::Import::Base
|
|
30
31
|
yield(@last_tracker) if @last_tracker && @last_tracker.any?
|
31
32
|
|
32
33
|
end
|
33
|
-
end
|
34
|
+
end
|
data/lib/middleware/base.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# The base middleware class works just like a Tracksperanto::Export::Base, but it only wraps another exporting object and does not get registered on it's own
|
2
3
|
# as an export format. Middleware can be used to massage the tracks being exported in various interesting ways - like moving the coordinates, clipping the keyframes,
|
3
4
|
# scaling the whole export or even reversing the trackers to go backwards
|
data/lib/middleware/crop.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Does the same as the Pad middleware but with absolute pixel values instead of fractionals
|
2
3
|
class Tracksperanto::Middleware::Crop < Tracksperanto::Middleware::Base
|
3
4
|
attr_accessor :top, :left, :right, :bottom
|
@@ -13,4 +14,4 @@ class Tracksperanto::Middleware::Crop < Tracksperanto::Middleware::Base
|
|
13
14
|
%w( start_tracker_segment end_tracker_segment export_point end_export).each do | m |
|
14
15
|
define_method(m){|*a| @pad.send(m, *a)}
|
15
16
|
end
|
16
|
-
end
|
17
|
+
end
|
data/lib/middleware/flip.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Flips the comp being exported horizontally
|
2
3
|
class Tracksperanto::Middleware::Flip < Tracksperanto::Middleware::Base
|
3
4
|
|
@@ -8,4 +9,4 @@ class Tracksperanto::Middleware::Flip < Tracksperanto::Middleware::Base
|
|
8
9
|
@exporter = Tracksperanto::Middleware::Scaler.new(@exporter, :x_factor => factor)
|
9
10
|
super
|
10
11
|
end
|
11
|
-
end
|
12
|
+
end
|
data/lib/middleware/flop.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Flips the comp being exported vertically
|
2
3
|
class Tracksperanto::Middleware::Flop < Tracksperanto::Middleware::Base
|
3
4
|
|
@@ -8,4 +9,4 @@ class Tracksperanto::Middleware::Flop < Tracksperanto::Middleware::Base
|
|
8
9
|
@exporter = Tracksperanto::Middleware::Scaler.new(@exporter, :y_factor => factor)
|
9
10
|
super
|
10
11
|
end
|
11
|
-
end
|
12
|
+
end
|
data/lib/middleware/golden.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# This middleware marks all trackers as being 100% accurate
|
2
3
|
class Tracksperanto::Middleware::Golden < Tracksperanto::Middleware::Base
|
3
4
|
attr_accessor :enabled
|
@@ -6,4 +7,4 @@ class Tracksperanto::Middleware::Golden < Tracksperanto::Middleware::Base
|
|
6
7
|
super(frame, float_x, float_y, (enabled ? 0.0 : float_residual))
|
7
8
|
end
|
8
9
|
|
9
|
-
end
|
10
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# This middleware removes trackers that contain less than min_length keyframes
|
2
3
|
# from the exported batch
|
3
4
|
class Tracksperanto::Middleware::LengthCutoff < Tracksperanto::Middleware::Base
|
@@ -21,4 +22,4 @@ class Tracksperanto::Middleware::LengthCutoff < Tracksperanto::Middleware::Base
|
|
21
22
|
end
|
22
23
|
|
23
24
|
|
24
|
-
end
|
25
|
+
end
|
data/lib/middleware/lerp.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# This middleware adds linearly interpolated keyframes BETWEEN the keyframes passing through the exporter
|
2
3
|
class Tracksperanto::Middleware::Lerp < Tracksperanto::Middleware::Base
|
3
4
|
attr_accessor :enabled
|
@@ -55,4 +56,4 @@ class Tracksperanto::Middleware::Lerp < Tracksperanto::Middleware::Base
|
|
55
56
|
|
56
57
|
return [x, y]
|
57
58
|
end
|
58
|
-
end
|
59
|
+
end
|
data/lib/middleware/lint.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Prevents you from exporting invalid trackers
|
2
3
|
class Tracksperanto::Middleware::Lint < Tracksperanto::Middleware::Base
|
3
4
|
class NoTrackersExportedError < RuntimeError
|
@@ -74,4 +75,4 @@ class Tracksperanto::Middleware::Lint < Tracksperanto::Middleware::Base
|
|
74
75
|
raise NoTrackersExportedError if @trackers.zero?
|
75
76
|
super
|
76
77
|
end
|
77
|
-
end
|
78
|
+
end
|
data/lib/middleware/pad.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# This middleware pads the comp or crops it if given negative values. Use it to say unpad
|
2
3
|
# some fucked-up telecine transfers. The padding is in fractional units of the total width
|
3
4
|
# and height
|
@@ -17,4 +18,4 @@ class Tracksperanto::Middleware::Pad < Tracksperanto::Middleware::Base
|
|
17
18
|
super(frame, float_x - @shift_left, float_y - @shift_bottom, float_residual)
|
18
19
|
end
|
19
20
|
|
20
|
-
end
|
21
|
+
end
|
data/lib/middleware/prefix.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# This middleware prepends the names of the trackers passing through it with a prefix
|
2
3
|
# and an underscore
|
3
4
|
class Tracksperanto::Middleware::Prefix < Tracksperanto::Middleware::Base
|
@@ -10,4 +11,4 @@ class Tracksperanto::Middleware::Prefix < Tracksperanto::Middleware::Base
|
|
10
11
|
super(prefixed_name.join('_'))
|
11
12
|
end
|
12
13
|
|
13
|
-
end
|
14
|
+
end
|
data/lib/middleware/reformat.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
require File.dirname(__FILE__) + '/scaler'
|
2
3
|
|
3
4
|
# This middleware reformats (scales) the track setup to a specific pixel resolution. Very useful for
|
@@ -19,4 +20,4 @@ class Tracksperanto::Middleware::Reformat < Tracksperanto::Middleware::Base
|
|
19
20
|
@exporter = Tracksperanto::Middleware::Scaler.new(@exporter, :x_factor => x_factor, :y_factor => y_factor)
|
20
21
|
super
|
21
22
|
end
|
22
|
-
end
|
23
|
+
end
|
data/lib/middleware/scaler.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Scales the comp being exported by a specific factor, together with the tracker keyframes
|
2
3
|
class Tracksperanto::Middleware::Scaler < Tracksperanto::Middleware::Base
|
3
4
|
DEFAULT_FACTOR = 1
|
@@ -34,4 +35,4 @@ class Tracksperanto::Middleware::Scaler < Tracksperanto::Middleware::Base
|
|
34
35
|
def set_residual_factor
|
35
36
|
@residual_factor = Math.sqrt((x_factor ** 2) + (y_factor ** 2))
|
36
37
|
end
|
37
|
-
end
|
38
|
+
end
|
data/lib/middleware/shift.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# This middleware moves the keyframs by a preset number of pixels
|
2
3
|
class Tracksperanto::Middleware::Shift < Tracksperanto::Middleware::Base
|
3
4
|
attr_accessor :x_shift, :y_shift
|
@@ -7,4 +8,4 @@ class Tracksperanto::Middleware::Shift < Tracksperanto::Middleware::Base
|
|
7
8
|
super(frame, float_x + @x_shift.to_f, float_y + @y_shift.to_f, float_residual)
|
8
9
|
end
|
9
10
|
|
10
|
-
end
|
11
|
+
end
|
data/lib/middleware/slipper.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Slips the keyframe positions by a specific integer amount of frames, positive values slip forward (later in time). Useful if you just edited some stuff onto
|
2
3
|
# the beginning if your sequence and need to extend your tracks.
|
3
4
|
class Tracksperanto::Middleware::Slipper < Tracksperanto::Middleware::Base
|
@@ -7,4 +8,4 @@ class Tracksperanto::Middleware::Slipper < Tracksperanto::Middleware::Base
|
|
7
8
|
def export_point(frame, float_x, float_y, float_residual)
|
8
9
|
super(frame + @slip.to_i, float_x, float_y, float_residual)
|
9
10
|
end
|
10
|
-
end
|
11
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# This middleware removes all keyframes before frame 0, and skips trackers entirely if they are all before frame 0
|
2
3
|
class Tracksperanto::Middleware::StartTrim < Tracksperanto::Middleware::Base
|
3
4
|
attr_accessor :enabled
|
@@ -13,4 +14,4 @@ class Tracksperanto::Middleware::StartTrim < Tracksperanto::Middleware::Base
|
|
13
14
|
def export_point(frame, float_x, float_y, float_residual)
|
14
15
|
return super unless (@enabled && frame < 0)
|
15
16
|
end
|
16
|
-
end
|
17
|
+
end
|
data/lib/pipeline/base.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
require "tempfile"
|
2
3
|
|
3
4
|
# BufferIO is used for writing big segments of text. It works like a StringIO, but when the size
|
@@ -62,4 +63,4 @@ class Tracksperanto::BufferIO < DelegateClass(IO)
|
|
62
63
|
def replace_with_tempfile_if_needed
|
63
64
|
replace_with_tempfile if !@tempfile_in && pos > MAX_IN_MEM_BYTES
|
64
65
|
end
|
65
|
-
end
|
66
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Shake uses this reader to parse byte by byte without having to read byte by byte.
|
2
3
|
# Reading byte by byte is very inefficient, but we want to parse byte by byte since
|
3
4
|
# this makes parser construction much easier. So what we do is cache some chunk of the
|
@@ -36,4 +37,4 @@ class Tracksperanto::BufferingReader
|
|
36
37
|
data = @io.read(@bufsize)
|
37
38
|
@buf = StringIO.new(data.to_s) # Make nil become ""
|
38
39
|
end
|
39
|
-
end
|
40
|
+
end
|
data/lib/tracksperanto/casts.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Helps to define things that will forcibly become floats, integers or strings
|
2
3
|
module Tracksperanto::Casts
|
3
4
|
def self.included(into)
|
@@ -28,4 +29,4 @@ module Tracksperanto::Casts
|
|
28
29
|
define_method("#{an_attr}=") { |to| instance_variable_set("@#{an_attr}", to.to_s) }
|
29
30
|
end
|
30
31
|
end
|
31
|
-
end
|
32
|
+
end
|