tracksperanto 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/.DS_Store +0 -0
  2. data/History.txt +11 -0
  3. data/Manifest.txt +64 -20
  4. data/README.txt +82 -30
  5. data/Rakefile +1 -0
  6. data/bin/tracksperanto +21 -14
  7. data/lib/export/base.rb +16 -6
  8. data/lib/export/match_mover.rb +40 -0
  9. data/lib/export/nuke_script.rb +78 -0
  10. data/lib/export/pftrack.rb +14 -14
  11. data/lib/export/shake_text.rb +7 -8
  12. data/lib/export/syntheyes.rb +9 -5
  13. data/lib/import/base.rb +45 -12
  14. data/lib/import/flame_stabilizer.rb +17 -32
  15. data/lib/import/match_mover.rb +65 -0
  16. data/lib/import/nuke_script.rb +96 -0
  17. data/lib/import/pftrack.rb +9 -2
  18. data/lib/import/shake_grammar/catcher.rb +56 -0
  19. data/lib/import/shake_grammar/lexer.rb +95 -0
  20. data/lib/import/shake_script.rb +189 -103
  21. data/lib/import/shake_text.rb +5 -3
  22. data/lib/import/syntheyes.rb +9 -2
  23. data/lib/middleware/base.rb +6 -1
  24. data/lib/middleware/golden.rb +7 -0
  25. data/lib/middleware/reformat.rb +10 -3
  26. data/lib/middleware/scaler.rb +14 -4
  27. data/lib/middleware/shift.rb +10 -0
  28. data/lib/middleware/slipper.rb +3 -0
  29. data/lib/pipeline/base.rb +111 -37
  30. data/lib/tracksperanto/block_init.rb +7 -0
  31. data/lib/tracksperanto/casts.rb +31 -0
  32. data/lib/tracksperanto/format_detector.rb +35 -0
  33. data/lib/tracksperanto/keyframe.rb +31 -0
  34. data/lib/tracksperanto/safety.rb +20 -0
  35. data/lib/tracksperanto/tracker.rb +38 -0
  36. data/lib/tracksperanto/zip_tuples.rb +20 -0
  37. data/lib/tracksperanto.rb +13 -100
  38. data/test/.DS_Store +0 -0
  39. data/test/export/.DS_Store +0 -0
  40. data/test/export/README_EXPORT_TESTS.txt +15 -0
  41. data/test/export/samples/ref_NukeScript.nk +25 -0
  42. data/test/export/samples/ref_NukeScript.nk.autosave +77 -0
  43. data/test/export/samples/ref_PFTrack.2dt +50 -0
  44. data/test/export/samples/ref_ShakeText.txt +48 -0
  45. data/test/export/samples/ref_Syntheyes.txt +42 -0
  46. data/test/export/samples/ref_matchmover.rz2 +52 -0
  47. data/test/export/test_match_mover_export.rb +16 -0
  48. data/test/export/test_mux.rb +23 -0
  49. data/test/export/test_nuke_export.rb +22 -0
  50. data/test/export/test_pftrack_export.rb +19 -0
  51. data/test/export/test_shake_export.rb +15 -0
  52. data/test/export/test_syntheyes_export.rb +15 -0
  53. data/test/helper.rb +85 -2
  54. data/test/import/.DS_Store +0 -0
  55. data/test/{samples → import/samples}/.DS_Store +0 -0
  56. data/test/{samples → import/samples}/flyover2DP_syntheyes.txt +0 -0
  57. data/test/import/samples/four_tracks_in_one_matchmove.shk +323 -0
  58. data/test/import/samples/four_tracks_in_one_stabilizer.shk +321 -0
  59. data/test/{samples → import/samples}/fromCombustion_fromMidClip_wSnap.stabilizer +0 -0
  60. data/test/{samples → import/samples}/hugeFlameSetup.stabilizer +0 -0
  61. data/test/import/samples/kipPointsMatchmover.rz2 +523 -0
  62. data/test/{samples → import/samples}/megaTrack.action.3dtrack.stabilizer +0 -0
  63. data/test/{samples → import/samples}/one_shake_tracker.txt +0 -0
  64. data/test/{samples → import/samples}/one_shake_tracker_from_first.txt +0 -0
  65. data/test/import/samples/one_tracker_with_break.nk +71 -0
  66. data/test/import/samples/one_tracker_with_break_in_grp.nk +91 -0
  67. data/test/{samples → import/samples}/shake_tracker_nodes.shk +0 -0
  68. data/test/{samples → import/samples}/shake_tracker_nodes_to_syntheyes.txt +0 -0
  69. data/test/{samples → import/samples}/sourcefile_pftrack.2dt +0 -0
  70. data/test/{samples → import/samples}/three_tracks_in_one_stabilizer.shk +0 -0
  71. data/test/{samples → import/samples}/two_shake_trackers.txt +0 -0
  72. data/test/{samples → import/samples}/two_tracks_in_one_tracker.shk +0 -0
  73. data/test/{test_flame_import.rb → import/test_flame_import.rb} +15 -9
  74. data/test/import/test_match_mover_import.rb +44 -0
  75. data/test/import/test_nuke_import.rb +63 -0
  76. data/test/{test_pftrack_import.rb → import/test_pftrack_import.rb} +10 -4
  77. data/test/import/test_shake_catcher.rb +72 -0
  78. data/test/import/test_shake_lexer.rb +95 -0
  79. data/test/import/test_shake_script_import.rb +75 -0
  80. data/test/{test_shake_text_import.rb → import/test_shake_text_import.rb} +10 -3
  81. data/test/{test_syntheyes_import.rb → import/test_syntheyes_import.rb} +8 -3
  82. data/test/middleware/test_golden_middleware.rb +32 -0
  83. data/test/middleware/test_reformat_middleware.rb +35 -0
  84. data/test/middleware/test_scaler_middleware.rb +51 -0
  85. data/test/middleware/test_shift_middleware.rb +26 -0
  86. data/test/middleware/test_slip_middleware.rb +31 -0
  87. data/test/pipeline/test_pipeline_base.rb +14 -0
  88. data/test/test_format_detector.rb +39 -0
  89. data/test/test_tracker.rb +48 -0
  90. data/tracksperanto.gemspec +9 -7
  91. metadata +101 -30
  92. data/lib/middleware/close.rb +0 -6
  93. data/test/test_shake_export.rb +0 -58
  94. data/test/test_shake_script_import.rb +0 -50
@@ -0,0 +1,51 @@
1
+ require File.dirname(__FILE__) + '/../helper'
2
+
3
+ class ScalerMiddlewareTest < Test::Unit::TestCase
4
+ def test_default_factor_set_to_one
5
+ receiver = flexmock
6
+ m = Tracksperanto::Middleware::Scaler.new(receiver)
7
+ assert_equal 1.0, m.x_factor
8
+ assert_equal 1.0, m.y_factor
9
+ end
10
+
11
+ def test_scaler_supports_hash_init
12
+ receiver = flexmock
13
+ m = Tracksperanto::Middleware::Scaler.new(receiver, :x_factor => 1.2)
14
+ assert_equal 1.2, m.x_factor
15
+ end
16
+
17
+ def test_scaler_bypasses_methods
18
+ receiver = flexmock
19
+ receiver.should_receive(:start_export).once.with(100,180)
20
+ receiver.should_receive(:start_tracker_segment).once.with("Tracker")
21
+ receiver.should_receive(:export_point).once.with(1, 120, 90, 0)
22
+ receiver.should_receive(:end_tracker_segment).once
23
+ receiver.should_receive(:end_export).once
24
+
25
+ m = Tracksperanto::Middleware::Scaler.new(receiver, :x_factor => 2, :y_factor => 3)
26
+ m.start_export(50, 60)
27
+ m.start_tracker_segment("Tracker")
28
+ m.export_point(1, 60, 30, 0)
29
+ m.end_tracker_segment
30
+ m.end_export
31
+ end
32
+
33
+ def test_scaler_properly_affects_residual
34
+ factor = Math.sqrt( (1.5 ** 2) + (1.4 ** 2))
35
+
36
+ receiver = flexmock
37
+ receiver.should_receive(:start_export).once.with((50 * 1.5).to_i, (60 * 1.4).to_i)
38
+
39
+ receiver.should_receive(:start_tracker_segment).once.with("Tracker")
40
+ receiver.should_receive(:export_point).once.with(1, 90, 42.0, 0.2 * factor)
41
+ receiver.should_receive(:end_tracker_segment).once
42
+ receiver.should_receive(:end_export).once
43
+
44
+ m = Tracksperanto::Middleware::Scaler.new(receiver, :x_factor => 1.5, :y_factor => 1.4)
45
+ m.start_export(50, 60)
46
+ m.start_tracker_segment("Tracker")
47
+ m.export_point(1, 60, 30, 0.2)
48
+ m.end_tracker_segment
49
+ m.end_export
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../helper'
2
+
3
+ class ShiftMiddlewareTest < Test::Unit::TestCase
4
+ def test_shift_supports_hash_init
5
+ receiver = flexmock
6
+ m = Tracksperanto::Middleware::Shift.new(receiver, :x_shift => 1.2)
7
+ assert_equal 1.2, m.x_shift
8
+ end
9
+
10
+ def test_shift_bypasses_methods
11
+ receiver = flexmock
12
+ receiver.should_receive(:start_export).once.with(50, 60)
13
+ receiver.should_receive(:start_tracker_segment).once.with("Tracker")
14
+ receiver.should_receive(:export_point).once.with(1, 123, 95, 0)
15
+ receiver.should_receive(:end_tracker_segment).once
16
+ receiver.should_receive(:end_export).once
17
+
18
+ m = Tracksperanto::Middleware::Shift.new(receiver, :x_shift => 63, :y_shift => 65)
19
+ m.start_export(50, 60)
20
+ m.start_tracker_segment("Tracker")
21
+ m.export_point(1, 60, 30, 0)
22
+ m.end_tracker_segment
23
+ m.end_export
24
+ end
25
+
26
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/../helper'
2
+
3
+ class SlipMiddlewareTest < Test::Unit::TestCase
4
+ def test_default_slip_set_to_zero
5
+ receiver = flexmock
6
+ m = Tracksperanto::Middleware::Slipper.new(receiver)
7
+ assert_equal 0, m.slip
8
+ end
9
+
10
+ def test_slip_supports_hash_init
11
+ receiver = flexmock
12
+ m = Tracksperanto::Middleware::Slipper.new(receiver, :slip => -1)
13
+ assert_equal -1, m.slip
14
+ end
15
+
16
+ def test_slipper_bypasses_methods
17
+ receiver = flexmock
18
+ receiver.should_receive(:start_export).once.with(120,120)
19
+ receiver.should_receive(:start_tracker_segment).once.with("Tracker")
20
+ receiver.should_receive(:export_point).once.with(32, 100, 100, 0)
21
+ receiver.should_receive(:end_tracker_segment).once
22
+ receiver.should_receive(:end_export).once
23
+
24
+ m = Tracksperanto::Middleware::Slipper.new(receiver, :slip => 32)
25
+ m.start_export(120, 120)
26
+ m.start_tracker_segment("Tracker")
27
+ m.export_point(0, 100, 100, 0)
28
+ m.end_tracker_segment
29
+ m.end_export
30
+ end
31
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../helper'
2
+
3
+ class PipelineTest < Test::Unit::TestCase
4
+
5
+ def test_pipeline_responds_to_everything_needed
6
+ p = Tracksperanto::Pipeline::Base.new
7
+ assert_respond_to p, :exporters
8
+ assert_respond_to p, :exporters=
9
+ assert_respond_to p, :progress_block
10
+ assert_respond_to p, :progress_block=
11
+ end
12
+
13
+ # TODO - write these oh boy
14
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class FormatDetectorTest < Test::Unit::TestCase
4
+
5
+ def test_match_unknown
6
+ file = "/tmp/unknown.someext"
7
+ d = Tracksperanto::FormatDetector.new(file)
8
+
9
+ assert d.frozen?
10
+ assert !d.match?
11
+ assert !d.auto_size?
12
+ assert_nil d.importer_klass
13
+ assert_equal "Unknown format", d.human_importer_name
14
+ end
15
+
16
+
17
+ def test_match_nuke
18
+ file = "C:\\WINDOZE_SHIT\\SUPERDUPER.NK"
19
+ d = Tracksperanto::FormatDetector.new(file)
20
+ assert d.frozen?
21
+
22
+ assert d.match?
23
+ assert !d.auto_size?
24
+ assert_equal Tracksperanto::Import::NukeScript, d.importer_klass
25
+ assert_equal "Nuke .nk script file", d.human_importer_name
26
+ end
27
+
28
+ def test_match_flame
29
+ file = "/usr/discreet/project/StupidCommercial/stabilizer/uno.stabilizer"
30
+ d = Tracksperanto::FormatDetector.new(file)
31
+ assert d.frozen?
32
+
33
+ assert d.match?
34
+ assert d.auto_size?
35
+ assert_equal Tracksperanto::Import::FlameStabilizer, d.importer_klass
36
+ assert_equal "Flame .stabilizer file", d.human_importer_name
37
+ end
38
+
39
+ end
@@ -0,0 +1,48 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TrackerTest < Test::Unit::TestCase
4
+
5
+ def test_supports_block_init
6
+ t = Tracksperanto::Tracker.new do |t|
7
+ t.name = 'Foo'
8
+ end
9
+ assert_equal "Foo", t.name
10
+ end
11
+
12
+ def test_responds_to_needed_methods
13
+ t = Tracksperanto::Tracker.new
14
+ assert_respond_to t, :name
15
+ assert_respond_to t, :each
16
+ assert_respond_to t, :keyframes
17
+ end
18
+
19
+ def test_supports_hash_init
20
+ assert_equal "Foo", Tracksperanto::Tracker.new(:name => "Foo").name
21
+ end
22
+
23
+ def test_supports_hash_init_with_keyframes
24
+ assert_equal [1,2], Tracksperanto::Tracker.new(:keyframes => [1,2]).keyframes
25
+ end
26
+
27
+ def test_supports_array_methods
28
+ t = Tracksperanto::Tracker.new(:keyframes => [1,2])
29
+ assert_equal [1,2], t.to_a
30
+ assert_equal 2, t.length
31
+ t.push(3)
32
+ assert_equal 3, t.length
33
+ assert_equal [1,2,3], t.to_a
34
+ end
35
+
36
+ def test_inspect
37
+ t = Tracksperanto::Tracker.new(:name => "FooTracker")
38
+ assert_equal '<T "FooTracker" with 0 keyframes>', t.inspect
39
+ end
40
+
41
+ def test_enumerates_keyframe_values_and_returns_length
42
+ t = Tracksperanto::Tracker.new(:keyframes => [:a, :b])
43
+ assert_equal [:a, :b], t.map{|e| e}
44
+ assert_equal 2, t.length
45
+ assert_equal :a, t[0]
46
+ end
47
+
48
+ end
@@ -1,38 +1,40 @@
1
- (in /Code/apps/tracksperanto)
2
1
  # -*- encoding: utf-8 -*-
3
2
 
4
3
  Gem::Specification.new do |s|
5
4
  s.name = %q{tracksperanto}
6
- s.version = "1.1.1"
5
+ s.version = "1.2.0"
7
6
 
8
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
8
  s.authors = ["Julik Tarkhanov"]
10
- s.date = %q{2009-09-08}
9
+ s.date = %q{2009-09-21}
11
10
  s.default_executable = %q{tracksperanto}
12
- s.description = %q{Tracksperanto is a universal 2D-track translator between many apps. Import support: * Shake script (one tracker node per tracker) * Shake tracker node export (textfile with many tracks per file), also exported by Boujou and others * PFTrack 2dt files * Syntheyes 2D tracking data exports (UV coordinates) Export support: * Shake text file (many trackers per file), also accepted by Boujou * PFTrack 2dt file (with residuals) * Syntheyes 2D tracking data import (UV coordinates) The main way to use Tracksperanto is to use the supplied "tracksperanto" binary, like so: tracksperanto -f ShakeScript -w 1920 -h 1080 /Films/Blockbuster/Shots/001/script.shk ShakeScript is the name of the translator that will be used to read the file (many apps export tracks as .txt files so there is no way for us to autodetect them all). -w and -h stand for Width and Height and define the size of your comp (different tracking apps use different coordinate systems and we need to know the size of the comp to properly convert these). You also have additional options like -xs, -ys and --slip - consult the usage info for the tracksperanto binary. The converted files will be saved in the same directory as the source, if resulting converted files already exist ++they will be overwritten without warning++.}
11
+ s.description = %q{Tracksperanto is a universal 2D-track translator between many apps.}
13
12
  s.email = ["me@julik.nl"]
14
13
  s.executables = ["tracksperanto"]
15
14
  s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
16
- s.files = [".DS_Store", "History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/tracksperanto", "lib/.DS_Store", "lib/export/base.rb", "lib/export/mux.rb", "lib/export/pftrack.rb", "lib/export/shake_text.rb", "lib/export/syntheyes.rb", "lib/import/base.rb", "lib/import/flame_stabilizer.rb", "lib/import/pftrack.rb", "lib/import/shake_script.rb", "lib/import/shake_text.rb", "lib/import/syntheyes.rb", "lib/middleware/base.rb", "lib/middleware/close.rb", "lib/middleware/golden.rb", "lib/middleware/reformat.rb", "lib/middleware/scaler.rb", "lib/middleware/slipper.rb", "lib/pipeline/base.rb", "lib/tracksperanto.rb", "test/.DS_Store", "test/helper.rb", "test/samples/.DS_Store", "test/samples/flyover2DP_syntheyes.txt", "test/samples/fromCombustion_fromMidClip_wSnap.stabilizer", "test/samples/hugeFlameSetup.stabilizer", "test/samples/megaTrack.action.3dtrack.stabilizer", "test/samples/one_shake_tracker.txt", "test/samples/one_shake_tracker_from_first.txt", "test/samples/shake_tracker_nodes.shk", "test/samples/shake_tracker_nodes_to_syntheyes.txt", "test/samples/sourcefile_pftrack.2dt", "test/samples/three_tracks_in_one_stabilizer.shk", "test/samples/two_shake_trackers.txt", "test/samples/two_tracks_in_one_tracker.shk", "test/test_flame_import.rb", "test/test_keyframe.rb", "test/test_pftrack_import.rb", "test/test_shake_export.rb", "test/test_shake_script_import.rb", "test/test_shake_text_import.rb", "test/test_syntheyes_import.rb", "tracksperanto.gemspec"]
15
+ s.files = [".DS_Store", "History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/tracksperanto", "lib/.DS_Store", "lib/export/base.rb", "lib/export/match_mover.rb", "lib/export/mux.rb", "lib/export/nuke_script.rb", "lib/export/pftrack.rb", "lib/export/shake_text.rb", "lib/export/syntheyes.rb", "lib/import/base.rb", "lib/import/flame_stabilizer.rb", "lib/import/match_mover.rb", "lib/import/nuke_script.rb", "lib/import/pftrack.rb", "lib/import/shake_grammar/catcher.rb", "lib/import/shake_grammar/lexer.rb", "lib/import/shake_script.rb", "lib/import/shake_text.rb", "lib/import/syntheyes.rb", "lib/middleware/base.rb", "lib/middleware/golden.rb", "lib/middleware/reformat.rb", "lib/middleware/scaler.rb", "lib/middleware/shift.rb", "lib/middleware/slipper.rb", "lib/pipeline/base.rb", "lib/tracksperanto.rb", "lib/tracksperanto/block_init.rb", "lib/tracksperanto/casts.rb", "lib/tracksperanto/format_detector.rb", "lib/tracksperanto/keyframe.rb", "lib/tracksperanto/safety.rb", "lib/tracksperanto/tracker.rb", "lib/tracksperanto/zip_tuples.rb", "test/.DS_Store", "test/export/.DS_Store", "test/export/README_EXPORT_TESTS.txt", "test/export/samples/ref_NukeScript.nk", "test/export/samples/ref_NukeScript.nk.autosave", "test/export/samples/ref_PFTrack.2dt", "test/export/samples/ref_ShakeText.txt", "test/export/samples/ref_Syntheyes.txt", "test/export/samples/ref_matchmover.rz2", "test/export/test_match_mover_export.rb", "test/export/test_mux.rb", "test/export/test_nuke_export.rb", "test/export/test_pftrack_export.rb", "test/export/test_shake_export.rb", "test/export/test_syntheyes_export.rb", "test/helper.rb", "test/import/.DS_Store", "test/import/samples/.DS_Store", "test/import/samples/flyover2DP_syntheyes.txt", "test/import/samples/four_tracks_in_one_matchmove.shk", "test/import/samples/four_tracks_in_one_stabilizer.shk", "test/import/samples/fromCombustion_fromMidClip_wSnap.stabilizer", "test/import/samples/hugeFlameSetup.stabilizer", "test/import/samples/kipPointsMatchmover.rz2", "test/import/samples/megaTrack.action.3dtrack.stabilizer", "test/import/samples/one_shake_tracker.txt", "test/import/samples/one_shake_tracker_from_first.txt", "test/import/samples/one_tracker_with_break.nk", "test/import/samples/one_tracker_with_break_in_grp.nk", "test/import/samples/shake_tracker_nodes.shk", "test/import/samples/shake_tracker_nodes_to_syntheyes.txt", "test/import/samples/sourcefile_pftrack.2dt", "test/import/samples/three_tracks_in_one_stabilizer.shk", "test/import/samples/two_shake_trackers.txt", "test/import/samples/two_tracks_in_one_tracker.shk", "test/import/test_flame_import.rb", "test/import/test_match_mover_import.rb", "test/import/test_nuke_import.rb", "test/import/test_pftrack_import.rb", "test/import/test_shake_catcher.rb", "test/import/test_shake_lexer.rb", "test/import/test_shake_script_import.rb", "test/import/test_shake_text_import.rb", "test/import/test_syntheyes_import.rb", "test/middleware/test_golden_middleware.rb", "test/middleware/test_reformat_middleware.rb", "test/middleware/test_scaler_middleware.rb", "test/middleware/test_shift_middleware.rb", "test/middleware/test_slip_middleware.rb", "test/pipeline/test_pipeline_base.rb", "test/test_format_detector.rb", "test/test_keyframe.rb", "test/test_tracker.rb", "tracksperanto.gemspec"]
17
16
  s.has_rdoc = true
18
17
  s.homepage = %q{http://guerilla-di.org/tracksperanto}
19
18
  s.rdoc_options = ["--main", "README.txt"]
20
19
  s.require_paths = ["lib"]
21
20
  s.rubyforge_project = %q{guerilla-di}
22
21
  s.rubygems_version = %q{1.3.1}
23
- s.summary = %q{Tracksperanto is a universal 2D-track translator between many apps}
24
- s.test_files = ["test/test_flame_import.rb", "test/test_keyframe.rb", "test/test_pftrack_import.rb", "test/test_shake_export.rb", "test/test_shake_script_import.rb", "test/test_shake_text_import.rb", "test/test_syntheyes_import.rb"]
22
+ s.summary = %q{Tracksperanto is a universal 2D-track translator between many apps.}
23
+ s.test_files = ["test/export/test_match_mover_export.rb", "test/export/test_mux.rb", "test/export/test_nuke_export.rb", "test/export/test_pftrack_export.rb", "test/export/test_shake_export.rb", "test/export/test_syntheyes_export.rb", "test/import/test_flame_import.rb", "test/import/test_match_mover_import.rb", "test/import/test_nuke_import.rb", "test/import/test_pftrack_import.rb", "test/import/test_shake_catcher.rb", "test/import/test_shake_lexer.rb", "test/import/test_shake_script_import.rb", "test/import/test_shake_text_import.rb", "test/import/test_syntheyes_import.rb", "test/middleware/test_golden_middleware.rb", "test/middleware/test_reformat_middleware.rb", "test/middleware/test_scaler_middleware.rb", "test/middleware/test_shift_middleware.rb", "test/middleware/test_slip_middleware.rb", "test/pipeline/test_pipeline_base.rb", "test/test_format_detector.rb", "test/test_keyframe.rb", "test/test_tracker.rb"]
25
24
 
26
25
  if s.respond_to? :specification_version then
27
26
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
28
27
  s.specification_version = 2
29
28
 
30
29
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
30
+ s.add_runtime_dependency(%q<flexmock>, [">= 0"])
31
31
  s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
32
32
  else
33
+ s.add_dependency(%q<flexmock>, [">= 0"])
33
34
  s.add_dependency(%q<hoe>, [">= 2.3.3"])
34
35
  end
35
36
  else
37
+ s.add_dependency(%q<flexmock>, [">= 0"])
36
38
  s.add_dependency(%q<hoe>, [">= 2.3.3"])
37
39
  end
38
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tracksperanto
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
@@ -9,9 +9,19 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-08 00:00:00 +02:00
12
+ date: 2009-09-21 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: flexmock
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
15
25
  - !ruby/object:Gem::Dependency
16
26
  name: hoe
17
27
  type: :development
@@ -22,7 +32,7 @@ dependencies:
22
32
  - !ruby/object:Gem::Version
23
33
  version: 2.3.3
24
34
  version:
25
- description: "Tracksperanto is a universal 2D-track translator between many apps. Import support: * Shake script (one tracker node per tracker) * Shake tracker node export (textfile with many tracks per file), also exported by Boujou and others * PFTrack 2dt files * Syntheyes 2D tracking data exports (UV coordinates) Export support: * Shake text file (many trackers per file), also accepted by Boujou * PFTrack 2dt file (with residuals) * Syntheyes 2D tracking data import (UV coordinates) The main way to use Tracksperanto is to use the supplied \"tracksperanto\" binary, like so: tracksperanto -f ShakeScript -w 1920 -h 1080 /Films/Blockbuster/Shots/001/script.shk ShakeScript is the name of the translator that will be used to read the file (many apps export tracks as .txt files so there is no way for us to autodetect them all). -w and -h stand for Width and Height and define the size of your comp (different tracking apps use different coordinate systems and we need to know the size of the comp to properly convert these). You also have additional options like -xs, -ys and --slip - consult the usage info for the tracksperanto binary. The converted files will be saved in the same directory as the source, if resulting converted files already exist ++they will be overwritten without warning++."
35
+ description: Tracksperanto is a universal 2D-track translator between many apps.
26
36
  email:
27
37
  - me@julik.nl
28
38
  executables:
@@ -42,46 +52,90 @@ files:
42
52
  - bin/tracksperanto
43
53
  - lib/.DS_Store
44
54
  - lib/export/base.rb
55
+ - lib/export/match_mover.rb
45
56
  - lib/export/mux.rb
57
+ - lib/export/nuke_script.rb
46
58
  - lib/export/pftrack.rb
47
59
  - lib/export/shake_text.rb
48
60
  - lib/export/syntheyes.rb
49
61
  - lib/import/base.rb
50
62
  - lib/import/flame_stabilizer.rb
63
+ - lib/import/match_mover.rb
64
+ - lib/import/nuke_script.rb
51
65
  - lib/import/pftrack.rb
66
+ - lib/import/shake_grammar/catcher.rb
67
+ - lib/import/shake_grammar/lexer.rb
52
68
  - lib/import/shake_script.rb
53
69
  - lib/import/shake_text.rb
54
70
  - lib/import/syntheyes.rb
55
71
  - lib/middleware/base.rb
56
- - lib/middleware/close.rb
57
72
  - lib/middleware/golden.rb
58
73
  - lib/middleware/reformat.rb
59
74
  - lib/middleware/scaler.rb
75
+ - lib/middleware/shift.rb
60
76
  - lib/middleware/slipper.rb
61
77
  - lib/pipeline/base.rb
62
78
  - lib/tracksperanto.rb
79
+ - lib/tracksperanto/block_init.rb
80
+ - lib/tracksperanto/casts.rb
81
+ - lib/tracksperanto/format_detector.rb
82
+ - lib/tracksperanto/keyframe.rb
83
+ - lib/tracksperanto/safety.rb
84
+ - lib/tracksperanto/tracker.rb
85
+ - lib/tracksperanto/zip_tuples.rb
63
86
  - test/.DS_Store
87
+ - test/export/.DS_Store
88
+ - test/export/README_EXPORT_TESTS.txt
89
+ - test/export/samples/ref_NukeScript.nk
90
+ - test/export/samples/ref_NukeScript.nk.autosave
91
+ - test/export/samples/ref_PFTrack.2dt
92
+ - test/export/samples/ref_ShakeText.txt
93
+ - test/export/samples/ref_Syntheyes.txt
94
+ - test/export/samples/ref_matchmover.rz2
95
+ - test/export/test_match_mover_export.rb
96
+ - test/export/test_mux.rb
97
+ - test/export/test_nuke_export.rb
98
+ - test/export/test_pftrack_export.rb
99
+ - test/export/test_shake_export.rb
100
+ - test/export/test_syntheyes_export.rb
64
101
  - test/helper.rb
65
- - test/samples/.DS_Store
66
- - test/samples/flyover2DP_syntheyes.txt
67
- - test/samples/fromCombustion_fromMidClip_wSnap.stabilizer
68
- - test/samples/hugeFlameSetup.stabilizer
69
- - test/samples/megaTrack.action.3dtrack.stabilizer
70
- - test/samples/one_shake_tracker.txt
71
- - test/samples/one_shake_tracker_from_first.txt
72
- - test/samples/shake_tracker_nodes.shk
73
- - test/samples/shake_tracker_nodes_to_syntheyes.txt
74
- - test/samples/sourcefile_pftrack.2dt
75
- - test/samples/three_tracks_in_one_stabilizer.shk
76
- - test/samples/two_shake_trackers.txt
77
- - test/samples/two_tracks_in_one_tracker.shk
78
- - test/test_flame_import.rb
102
+ - test/import/.DS_Store
103
+ - test/import/samples/.DS_Store
104
+ - test/import/samples/flyover2DP_syntheyes.txt
105
+ - test/import/samples/four_tracks_in_one_matchmove.shk
106
+ - test/import/samples/four_tracks_in_one_stabilizer.shk
107
+ - test/import/samples/fromCombustion_fromMidClip_wSnap.stabilizer
108
+ - test/import/samples/hugeFlameSetup.stabilizer
109
+ - test/import/samples/kipPointsMatchmover.rz2
110
+ - test/import/samples/megaTrack.action.3dtrack.stabilizer
111
+ - test/import/samples/one_shake_tracker.txt
112
+ - test/import/samples/one_shake_tracker_from_first.txt
113
+ - test/import/samples/one_tracker_with_break.nk
114
+ - test/import/samples/one_tracker_with_break_in_grp.nk
115
+ - test/import/samples/shake_tracker_nodes.shk
116
+ - test/import/samples/shake_tracker_nodes_to_syntheyes.txt
117
+ - test/import/samples/sourcefile_pftrack.2dt
118
+ - test/import/samples/three_tracks_in_one_stabilizer.shk
119
+ - test/import/samples/two_shake_trackers.txt
120
+ - test/import/samples/two_tracks_in_one_tracker.shk
121
+ - test/import/test_flame_import.rb
122
+ - test/import/test_match_mover_import.rb
123
+ - test/import/test_nuke_import.rb
124
+ - test/import/test_pftrack_import.rb
125
+ - test/import/test_shake_catcher.rb
126
+ - test/import/test_shake_lexer.rb
127
+ - test/import/test_shake_script_import.rb
128
+ - test/import/test_shake_text_import.rb
129
+ - test/import/test_syntheyes_import.rb
130
+ - test/middleware/test_golden_middleware.rb
131
+ - test/middleware/test_reformat_middleware.rb
132
+ - test/middleware/test_scaler_middleware.rb
133
+ - test/middleware/test_shift_middleware.rb
134
+ - test/middleware/test_slip_middleware.rb
135
+ - test/pipeline/test_pipeline_base.rb
136
+ - test/test_format_detector.rb
79
137
  - test/test_keyframe.rb
80
- - test/test_pftrack_import.rb
81
- - test/test_shake_export.rb
82
- - test/test_shake_script_import.rb
83
- - test/test_shake_text_import.rb
84
- - test/test_syntheyes_import.rb
138
+ - test/test_tracker.rb
85
139
  - tracksperanto.gemspec
86
140
  has_rdoc: true
87
141
  homepage: http://guerilla-di.org/tracksperanto
@@ -109,12 +163,29 @@ rubyforge_project: guerilla-di
109
163
  rubygems_version: 1.3.1
110
164
  signing_key:
111
165
  specification_version: 2
112
- summary: Tracksperanto is a universal 2D-track translator between many apps
166
+ summary: Tracksperanto is a universal 2D-track translator between many apps.
113
167
  test_files:
114
- - test/test_flame_import.rb
168
+ - test/export/test_match_mover_export.rb
169
+ - test/export/test_mux.rb
170
+ - test/export/test_nuke_export.rb
171
+ - test/export/test_pftrack_export.rb
172
+ - test/export/test_shake_export.rb
173
+ - test/export/test_syntheyes_export.rb
174
+ - test/import/test_flame_import.rb
175
+ - test/import/test_match_mover_import.rb
176
+ - test/import/test_nuke_import.rb
177
+ - test/import/test_pftrack_import.rb
178
+ - test/import/test_shake_catcher.rb
179
+ - test/import/test_shake_lexer.rb
180
+ - test/import/test_shake_script_import.rb
181
+ - test/import/test_shake_text_import.rb
182
+ - test/import/test_syntheyes_import.rb
183
+ - test/middleware/test_golden_middleware.rb
184
+ - test/middleware/test_reformat_middleware.rb
185
+ - test/middleware/test_scaler_middleware.rb
186
+ - test/middleware/test_shift_middleware.rb
187
+ - test/middleware/test_slip_middleware.rb
188
+ - test/pipeline/test_pipeline_base.rb
189
+ - test/test_format_detector.rb
115
190
  - test/test_keyframe.rb
116
- - test/test_pftrack_import.rb
117
- - test/test_shake_export.rb
118
- - test/test_shake_script_import.rb
119
- - test/test_shake_text_import.rb
120
- - test/test_syntheyes_import.rb
191
+ - test/test_tracker.rb
@@ -1,6 +0,0 @@
1
- class Tracksperanto::Middleware::Close < Tracksperanto::Middleware::Base
2
- def end_export
3
- super
4
- @exporter.io.close if @exporter.respond_to?(:io)
5
- end
6
- end
@@ -1,58 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
- require 'stringio'
3
-
4
- class ShakeTextExportTest < Test::Unit::TestCase
5
- def setup
6
- t1 = Tracksperanto::Tracker.new {|t| t.name = "Tracker_One" }
7
-
8
- t1.keyframes << Tracksperanto::Keyframe.new do |f|
9
- f.frame = 12
10
- f.abs_x = 123
11
- f.abs_y = 456
12
- f.residual = 0
13
- end
14
-
15
- t1.keyframes << Tracksperanto::Keyframe.new do |f|
16
- f.frame = 14
17
- f.abs_x = 125
18
- f.abs_y = 465
19
- f.residual = 0.4
20
- end
21
-
22
- t2 = Tracksperanto::Tracker.new {|t| t.name = "Tracker_Two" }
23
-
24
- t2.keyframes << Tracksperanto::Keyframe.new do |f|
25
- f.frame = 0
26
- f.abs_x = 406
27
- f.abs_y = 268
28
- f.residual = 0
29
- end
30
-
31
- t2.keyframes << Tracksperanto::Keyframe.new do |f|
32
- f.frame = 1
33
- f.abs_x = 402.45689987
34
- f.abs_y = 245.89682
35
- f.residual = 0.4
36
- end
37
-
38
- @trackers = [t1, t2]
39
- end
40
-
41
- def test_export
42
- out_to = "/tmp/shakeTr_txt.txt"
43
- puts "Outputting #{out_to} Shake sample text file, please verify"
44
- io = File.open(out_to, "w")
45
-
46
- x = Tracksperanto::Export::ShakeText.new(io)
47
-
48
- x.start_export(720, 576)
49
- @trackers.each do | t |
50
- x.start_tracker_segment(t.name)
51
- t.keyframes.each do | kf |
52
- x.export_point(kf.frame, kf.abs_x, kf.abs_y, kf.residual)
53
- end
54
- end
55
- x.end_export
56
- io.close
57
- end
58
- end
@@ -1,50 +0,0 @@
1
- require File.dirname(__FILE__) + '/helper'
2
-
3
- class ShakeScriptImportTest < Test::Unit::TestCase
4
- DELTA = 0.001
5
-
6
- def test_parsing_many_tracker_noes_with_one_track_each
7
- fixture = File.read(File.dirname(__FILE__) + '/samples/shake_tracker_nodes.shk')
8
-
9
- trackers = Tracksperanto::Import::ShakeScript.new.parse(fixture)
10
- assert_equal 50, trackers.length
11
-
12
- t = trackers[0]
13
- assert_equal "Tracker1", t.name
14
-
15
- first_kf = t.keyframes[0]
16
- assert_equal 0, first_kf.frame
17
- assert_in_delta 886.212, first_kf.abs_y, DELTA
18
- assert_in_delta 715.839, first_kf.abs_x, DELTA
19
- assert_in_delta 0.0, first_kf.residual, DELTA
20
-
21
- second_kf = t.keyframes[1]
22
- assert_in_delta 0.00129, second_kf.residual, DELTA
23
- end
24
-
25
- def test_parsing_many_tracks_in_one_tracker_node
26
- fixture = File.read(File.dirname(__FILE__) + '/samples/two_tracks_in_one_tracker.shk')
27
-
28
- trackers = Tracksperanto::Import::ShakeScript.new.parse(fixture)
29
- assert_equal 2, trackers.length
30
-
31
- t = trackers[0]
32
- assert_equal "Tracker1", t.name
33
-
34
- first_kf = t.keyframes[0]
35
- assert_equal 0, first_kf.frame
36
- assert_in_delta 886.212, first_kf.abs_y, DELTA
37
- assert_in_delta 715.839, first_kf.abs_x, DELTA
38
- assert_in_delta 0.0, first_kf.residual, DELTA
39
-
40
- second_kf = t.keyframes[1]
41
- assert_in_delta 0.00129, second_kf.residual, DELTA
42
- end
43
-
44
- def test_parsing_many_tracks_in_one_stabilizer_node
45
- fixture = File.read(File.dirname(__FILE__) + '/samples/three_tracks_in_one_stabilizer.shk')
46
-
47
- trackers = Tracksperanto::Import::ShakeScript.new.parse(fixture)
48
- assert_equal 3, trackers.length
49
- end
50
- end