tracksperanto 1.5.7 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ === 1.6.0 / 2009-11-15
2
+
3
+ * MatchMover has top-left coordinates - fixed for both import and export
4
+ * Prevent Tracker from being Array#flatten'ed
5
+
1
6
  === 1.5.7 / 2009-11-08
2
7
 
3
8
  * Add a Prefix middleware that prefixes tracker names
@@ -16,10 +16,10 @@ class Tracksperanto::Export::MatchMover < Tracksperanto::Export::Base
16
16
  KEYFRAME_TEMPLATE = "\t%d\t %.3f %.3f p+( %.6f )\t"
17
17
 
18
18
  def start_export( img_width, img_height)
19
+ @height = img_height
19
20
  @io.puts(PREAMBLE.gsub(/2560/, img_width.to_s).gsub(/1080/, img_height.to_s))
20
21
  end
21
22
 
22
-
23
23
  def start_tracker_segment(tracker_name)
24
24
  @tracker_name = tracker_name
25
25
  @at_first_point = true
@@ -32,7 +32,7 @@ class Tracksperanto::Export::MatchMover < Tracksperanto::Export::Base
32
32
 
33
33
  def export_point(frame, abs_float_x, abs_float_y, float_residual)
34
34
  template = @at_first_point ? FIRST_KEYFRAME_TEMPLATE : KEYFRAME_TEMPLATE
35
- values = [frame + 1, abs_float_x, abs_float_y, (1 - float_residual)]
35
+ values = [frame + 1, abs_float_x, @height - abs_float_y, (1 - float_residual)]
36
36
  @io.puts(template % values)
37
37
  @at_first_point = false
38
38
  end
@@ -52,7 +52,7 @@ class Tracksperanto::Import::MatchMover < Tracksperanto::Import::Base
52
52
  Tracksperanto::Keyframe.new(
53
53
  :frame => (frame.to_i() - 1),
54
54
  :abs_x => x,
55
- :abs_y => y,
55
+ :abs_y => @height - y.to_f, # Top-left in MM
56
56
  :residual => extract_residual(residual)
57
57
  )
58
58
  end
data/lib/tracksperanto.rb CHANGED
@@ -4,7 +4,7 @@ require 'tempfile'
4
4
 
5
5
  module Tracksperanto
6
6
  PATH = File.expand_path(File.dirname(__FILE__))
7
- VERSION = '1.5.7'
7
+ VERSION = '1.6.0'
8
8
 
9
9
  module Import; end
10
10
  module Export; end
@@ -1,10 +1,9 @@
1
- # Internal representation of a keyframe, that carries info on the frame location in the clip, x y and residual
2
- # Frame numbers start from zero (frame 0 is first frame of the clip).
3
- # Tracksperanto uses Shake coordinates as base. Image is Y-positive, X-positive, absolute
4
- # pixel values up and right (zero is in the lower left corner). Some apps use a different
5
- # coordinate system so translation will take place on import or on export, respectively.
6
- # We also use residual and not correlation (residual is how far the tracker strolls away,
7
- # correlation is how sure the tracker is about what it's doing). Residual is the inverse of
1
+ # Internal representation of a keyframe, that carries info on the frame location in the clip, x y and residual.
2
+ #
3
+ # Franme numbers are zero-based (frame 0 is first frame of the clip).
4
+ # X-coordinate (abs_x) is absolute pixels from lower left corner of the comp to the right
5
+ # Y-coordinate (abs_y) is absolute pixels from lower left corner of the comp up
6
+ # Residual is how far in pixels the tracker strolls away, and is the inverse of
8
7
  # correlation (with total correlation of one the residual excursion becomes zero).
9
8
  class Tracksperanto::Keyframe
10
9
  include Tracksperanto::Casts
@@ -41,4 +41,9 @@ class Tracksperanto::Tracker < DelegateClass(Array)
41
41
  def inspect
42
42
  "<T #{name.inspect} with #{length} keyframes>"
43
43
  end
44
+
45
+ # Hack - prevents the Tracker to be flattened into keyframes
46
+ # when an Array of Trackers gets Array#flatten'ed
47
+ def to_ary; end
48
+ private :to_ary
44
49
  end
@@ -4,49 +4,49 @@ imageSequence "Sequence 01"
4
4
  }
5
5
  pointTrack "Parabolic_1_from_top_left" rgb( 255 0 0 )
6
6
  {
7
- 1 0.000 1080.000 ki( 0.8 ) s( 66 66 64 64 ) p( 24 24 25 25 )
8
- 2 96.000 874.800 p+( 0.952381 )
9
- 3 192.000 691.200 p+( 0.904762 )
10
- 4 288.000 529.200 p+( 0.857143 )
11
- 5 384.000 388.800 p+( 0.809524 )
12
- 6 480.000 270.000 p+( 0.761905 )
13
- 7 576.000 172.800 p+( 0.714286 )
14
- 8 672.000 97.200 p+( 0.666667 )
15
- 9 768.000 43.200 p+( 0.619048 )
16
- 10 864.000 10.800 p+( 0.571429 )
17
- 11 960.000 0.000 p+( 0.523810 )
18
- 12 1056.000 10.800 p+( 0.476190 )
19
- 13 1152.000 43.200 p+( 0.428571 )
20
- 14 1248.000 97.200 p+( 0.380952 )
21
- 15 1344.000 172.800 p+( 0.333333 )
22
- 16 1440.000 270.000 p+( 0.285714 )
23
- 17 1536.000 388.800 p+( 0.238095 )
24
- 18 1632.000 529.200 p+( 0.190476 )
25
- 19 1728.000 691.200 p+( 0.142857 )
26
- 20 1824.000 874.800 p+( 0.095238 )
27
- 21 1920.000 1080.000 p+( 0.047619 )
7
+ 1 0.000 0.000 ki( 0.8 ) s( 66 66 64 64 ) p( 24 24 25 25 )
8
+ 2 96.000 205.200 p+( 0.952381 )
9
+ 3 192.000 388.800 p+( 0.904762 )
10
+ 4 288.000 550.800 p+( 0.857143 )
11
+ 5 384.000 691.200 p+( 0.809524 )
12
+ 6 480.000 810.000 p+( 0.761905 )
13
+ 7 576.000 907.200 p+( 0.714286 )
14
+ 8 672.000 982.800 p+( 0.666667 )
15
+ 9 768.000 1036.800 p+( 0.619048 )
16
+ 10 864.000 1069.200 p+( 0.571429 )
17
+ 11 960.000 1080.000 p+( 0.523810 )
18
+ 12 1056.000 1069.200 p+( 0.476190 )
19
+ 13 1152.000 1036.800 p+( 0.428571 )
20
+ 14 1248.000 982.800 p+( 0.380952 )
21
+ 15 1344.000 907.200 p+( 0.333333 )
22
+ 16 1440.000 810.000 p+( 0.285714 )
23
+ 17 1536.000 691.200 p+( 0.238095 )
24
+ 18 1632.000 550.800 p+( 0.190476 )
25
+ 19 1728.000 388.800 p+( 0.142857 )
26
+ 20 1824.000 205.200 p+( 0.095238 )
27
+ 21 1920.000 0.000 p+( 0.047619 )
28
28
  }
29
29
  pointTrack "Parabolic_2_from_bottom_right" rgb( 255 0 0 )
30
30
  {
31
- 1 1920.000 0.000 ki( 0.8 ) s( 66 66 64 64 ) p( 24 24 25 25 )
32
- 2 1824.000 205.200 p+( 0.952381 )
33
- 3 1728.000 388.800 p+( 0.904762 )
34
- 4 1632.000 550.800 p+( 0.857143 )
35
- 5 1536.000 691.200 p+( 0.809524 )
36
- 6 1440.000 810.000 p+( 0.761905 )
37
- 7 1344.000 907.200 p+( 0.714286 )
38
- 8 1248.000 982.800 p+( 0.666667 )
39
- 9 1152.000 1036.800 p+( 0.619048 )
40
- 10 1056.000 1069.200 p+( 0.571429 )
41
- 11 960.000 1080.000 p+( 0.523810 )
42
- 12 864.000 1069.200 p+( 0.476190 )
43
- 13 768.000 1036.800 p+( 0.428571 )
44
- 14 672.000 982.800 p+( 0.380952 )
45
- 15 576.000 907.200 p+( 0.333333 )
46
- 16 480.000 810.000 p+( 0.285714 )
47
- 17 384.000 691.200 p+( 0.238095 )
48
- 18 288.000 550.800 p+( 0.190476 )
49
- 19 192.000 388.800 p+( 0.142857 )
50
- 20 96.000 205.200 p+( 0.095238 )
51
- 21 0.000 0.000 p+( 0.047619 )
31
+ 1 1920.000 1080.000 ki( 0.8 ) s( 66 66 64 64 ) p( 24 24 25 25 )
32
+ 2 1824.000 874.800 p+( 0.952381 )
33
+ 3 1728.000 691.200 p+( 0.904762 )
34
+ 4 1632.000 529.200 p+( 0.857143 )
35
+ 5 1536.000 388.800 p+( 0.809524 )
36
+ 6 1440.000 270.000 p+( 0.761905 )
37
+ 7 1344.000 172.800 p+( 0.714286 )
38
+ 8 1248.000 97.200 p+( 0.666667 )
39
+ 9 1152.000 43.200 p+( 0.619048 )
40
+ 10 1056.000 10.800 p+( 0.571429 )
41
+ 11 960.000 0.000 p+( 0.523810 )
42
+ 12 864.000 10.800 p+( 0.476190 )
43
+ 13 768.000 43.200 p+( 0.428571 )
44
+ 14 672.000 97.200 p+( 0.380952 )
45
+ 15 576.000 172.800 p+( 0.333333 )
46
+ 16 480.000 270.000 p+( 0.285714 )
47
+ 17 384.000 388.800 p+( 0.238095 )
48
+ 18 288.000 529.200 p+( 0.190476 )
49
+ 19 192.000 691.200 p+( 0.142857 )
50
+ 20 96.000 874.800 p+( 0.095238 )
51
+ 21 0.000 1080.000 p+( 0.047619 )
52
52
  }
@@ -31,13 +31,13 @@ class MatchMoverImportTest < Test::Unit::TestCase
31
31
 
32
32
  assert_equal 0, first_kf.frame
33
33
  assert_in_delta 649.523, first_kf.abs_x, DELTA
34
- assert_in_delta 423.929, first_kf.abs_y, DELTA
34
+ assert_in_delta 656.071, first_kf.abs_y, DELTA
35
35
  assert_in_delta 0.2, first_kf.residual, DELTA
36
36
 
37
37
  last_kf = first_t[-1]
38
38
  assert_equal 130, last_kf.frame
39
39
  assert_in_delta 603.148, last_kf.abs_x, DELTA
40
- assert_in_delta 728.46, last_kf.abs_y, DELTA
40
+ assert_in_delta 351.54, last_kf.abs_y, DELTA
41
41
  assert_in_delta 0.027457, last_kf.residual, DELTA
42
42
  end
43
43
 
data/test/test_tracker.rb CHANGED
@@ -16,6 +16,20 @@ class TrackerTest < Test::Unit::TestCase
16
16
  assert_respond_to t, :keyframes
17
17
  end
18
18
 
19
+ def test_properly_ignores_flattening
20
+ t = []
21
+ t << Tracksperanto::Tracker.new(:name => "Abc")
22
+ t[-1].keyframe! :abs_x => 12, :abs_y => 23, :frame => 1
23
+ t[-1].keyframe! :abs_x => 13, :abs_y => 24, :frame => 2
24
+
25
+ t << Tracksperanto::Tracker.new(:name => "Cde")
26
+ t[-1].keyframe! :abs_x => 12, :abs_y => 23, :frame => 1
27
+ t[-1].keyframe! :abs_x => 13, :abs_y => 24, :frame => 2
28
+
29
+ assert_kind_of Tracksperanto::Tracker, t.flatten[0]
30
+ assert_equal 2, t.flatten.length
31
+ end
32
+
19
33
  def test_supports_hash_init
20
34
  assert_equal "Foo", Tracksperanto::Tracker.new(:name => "Foo").name
21
35
  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.5.7
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-08 00:00:00 +01:00
12
+ date: 2009-11-16 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency