tracksperanto 1.7.5 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,7 @@
1
+ === 1.8.0 / 2010-02-18
2
+
3
+ * Add Flame stabilizer export support
4
+
1
5
  === 1.7.5 / 2010-02-17
2
6
 
3
7
  * Use a special IO so that we can display progress when parsing/reading a file (based on the IO offset)
@@ -7,6 +7,7 @@ bin/tracksperanto
7
7
  lib/export/base.rb
8
8
  lib/export/equalizer3.rb
9
9
  lib/export/equalizer4.rb
10
+ lib/export/flame_stabilizer.rb
10
11
  lib/export/match_mover.rb
11
12
  lib/export/maya_live.rb
12
13
  lib/export/mux.rb
@@ -44,6 +45,7 @@ lib/tracksperanto/block_init.rb
44
45
  lib/tracksperanto/casts.rb
45
46
  lib/tracksperanto/const_name.rb
46
47
  lib/tracksperanto/ext_io.rb
48
+ lib/tracksperanto/flame_builder.rb
47
49
  lib/tracksperanto/format_detector.rb
48
50
  lib/tracksperanto/keyframe.rb
49
51
  lib/tracksperanto/progressive_io.rb
@@ -62,9 +64,11 @@ test/export/samples/ref_ShakeText.txt
62
64
  test/export/samples/ref_Syntheyes.txt
63
65
  test/export/samples/ref_equalizer.txt
64
66
  test/export/samples/ref_equalizer3.txt
67
+ test/export/samples/ref_flame.stabilizer
65
68
  test/export/samples/ref_matchmover.rz2
66
69
  test/export/test_equalizer3_export.rb
67
70
  test/export/test_equalizer_export.rb
71
+ test/export/test_flame_stabilizer_export.rb
68
72
  test/export/test_match_mover_export.rb
69
73
  test/export/test_maya_live_export.rb
70
74
  test/export/test_mux.rb
@@ -128,6 +132,7 @@ test/middleware/test_shift_middleware.rb
128
132
  test/middleware/test_slip_middleware.rb
129
133
  test/test_const_name.rb
130
134
  test/test_extio.rb
135
+ test/test_flame_builder.rb
131
136
  test/test_format_detector.rb
132
137
  test/test_keyframe.rb
133
138
  test/test_progressive_io.rb
data/README.txt CHANGED
@@ -70,10 +70,10 @@ Import and export support:
70
70
  * 3DE point exports (as output by the default script) - versions 3 and 4
71
71
  * MatchMover Pro .rz2
72
72
  * MayaLive track export (square pixel aspect only)
73
+ * Flame .stabilizer file
73
74
 
74
75
  Import only:
75
76
  * Boujou feature track export
76
- * Flame .stabilizer file (not the .stabilizer.p blob format)
77
77
  * Shake script (Tracker, Matchmove and Stabilize nodes)
78
78
 
79
79
  == Modularity
@@ -0,0 +1,191 @@
1
+ class Tracksperanto::Export::FlameStabilizer < Tracksperanto::Export::Base
2
+
3
+ COLOR = "50 50 50"
4
+ def self.desc_and_extension
5
+ "flame.stabilizer"
6
+ end
7
+
8
+ def self.human_name
9
+ "Flame/Smoke 2D Stabilizer setup"
10
+ end
11
+
12
+ # Builder-like writer for Flame chanels
13
+ def start_export( img_width, img_height)
14
+ @counter = 0
15
+ @width, @height = img_width, img_height
16
+ @temp = Tempfile.new("flamexp")
17
+ @writer = Tracksperanto::FlameBuilder.new(@temp)
18
+ end
19
+
20
+ def end_export
21
+ @writer = Tracksperanto::FlameBuilder.new(@io)
22
+ write_header
23
+
24
+ # Now write everything that we accumulated earlier into the base IO
25
+ @temp.rewind
26
+ @io.write(@temp.read) until @temp.eof?
27
+ @temp.close!
28
+
29
+ @writer.channel_end
30
+ @counter.times do |i|
31
+ @writer.tracker(i) do |t|
32
+ t.active true
33
+ t.color_hash!("colour", 0, 100, 0)
34
+ t.fixed_ref true
35
+ t.fixed_x false
36
+ t.fixed_y false
37
+ t.tolerance 100
38
+ end
39
+ end
40
+ end
41
+
42
+ def start_tracker_segment(tracker_name)
43
+ @counter += 1
44
+ @tracker_name = tracker_name
45
+ @x_values, @y_values = [], []
46
+ @write_first_frame = true
47
+ end
48
+
49
+ def export_point(frame, abs_float_x, abs_float_y, float_residual)
50
+ if @write_first_frame
51
+ write_first_frame(abs_float_x, abs_float_y, frame)
52
+ @x_values << [frame, 0]
53
+ @y_values << [frame, 0]
54
+ else
55
+ @x_values << [frame, (@base_x - abs_float_x)]
56
+ @y_values << [frame, (@base_y - abs_float_y)]
57
+ end
58
+ end
59
+
60
+ def end_tracker_segment
61
+ write_shift_channel("shift/x", @x_values, @base_x)
62
+ write_shift_channel("shift/y", @y_values, @base_y)
63
+ end
64
+
65
+ private
66
+
67
+ def write_shift_channel(name_without_prefix, values, base)
68
+ @writer.channel(prefix(name_without_prefix)) do | c |
69
+ c.extrapolation :constant
70
+ c.value values[0][1]
71
+ c.key_version 1
72
+ c.size values.length
73
+ values.each_with_index do | (f, v), i |
74
+ c.key(i) do | k |
75
+ k.frame(f + 1)
76
+ k.value(v)
77
+ k.interpolation :linear
78
+ k.left_slope 2.4
79
+ k.right_slope 2.4
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ def prefix(tracker_channel)
86
+ ["tracker#{@counter}", tracker_channel].join("/")
87
+ end
88
+
89
+ def write_header
90
+ @writer.stabilizer_file_version "5.0"
91
+ @writer.creation_date(Time.now.strftime('%a %b %d %H:%M:%S %Y'))
92
+ @writer.linebreak!(2)
93
+
94
+ @writer.nb_trackers(@counter)
95
+ @writer.selected 0
96
+ @writer.frame_width @width
97
+ @writer.frame_height @height
98
+ @writer.auto_key true
99
+ @writer.motion_path true
100
+ @writer.icons true
101
+ @writer.auto_pan false # hate it!
102
+ @writer.edit_mode 0
103
+ @writer.format 0
104
+ @writer.color_hash!("padding", 0, 100, 0)
105
+ @writer.oversampling false
106
+ @writer.opacity 50
107
+ @writer.zoom 3
108
+ @writer.field false
109
+ @writer.backward false
110
+ @writer.anim
111
+ end
112
+
113
+ def write_first_frame(x, y, f)
114
+ @write_first_frame = false
115
+ @base_x, @base_y = x, y
116
+
117
+ tx, ty = @width / 2, @height / 2
118
+ %w( track/x track/y).map(&method(:prefix)).zip([tx, ty]).each do | cname, default |
119
+ @writer.channel(cname) do | c |
120
+ c.extrapolation("constant")
121
+ c.value(default.to_i)
122
+ c.colour(COLOR)
123
+ end
124
+ end
125
+
126
+ %w( track/width track/height ).map(&method(:prefix)).each do | channel_name |
127
+ @writer.channel(channel_name) do | c |
128
+ c.extrapolation :linear
129
+ c.value 15
130
+ c.colour COLOR
131
+ end
132
+ end
133
+
134
+ %w( ref/width ref/height).map(&method(:prefix)).each do | channel_name |
135
+ @writer.channel(channel_name) do | c |
136
+ c.extrapolation :linear
137
+ c.value 10
138
+ c.colour COLOR
139
+ end
140
+ end
141
+
142
+ %w( ref/x ref/y).map(&method(:prefix)).zip([x, y]).each do | cname, default |
143
+ @writer.channel(cname) do | c |
144
+ c.extrapolation("constant")
145
+ c.value(default)
146
+ c.colour(COLOR)
147
+ c.key_version 1
148
+ c.size 1
149
+ c.key(0) do | k |
150
+ k.frame 1
151
+ k.value default
152
+ k.interpolation :constant
153
+ k.left_slope 2.4
154
+ k.right_slope 2.4
155
+ end
156
+ end
157
+ end
158
+
159
+ %w( ref/dx ref/dy).map(&method(:prefix)).each do | chan, v |
160
+ @writer.channel(chan) do | c |
161
+ c.extrapolation("constant")
162
+ c.value 0
163
+ c.colour(COLOR)
164
+ c.size 2
165
+ c.key_version 1
166
+ c.key(0) do | k |
167
+ k.frame 0
168
+ k.value 0
169
+ k.value_lock true
170
+ k.delete_lock true
171
+ k.interpolation :constant
172
+ end
173
+ c.key(1) do | k |
174
+ k.frame 1
175
+ k.value 0
176
+ k.value_lock true
177
+ k.delete_lock true
178
+ k.interpolation :constant
179
+ end
180
+ end # Chan block
181
+
182
+ %w(offset/x offset/y).map(&method(:prefix)).each do | c |
183
+ @writer.channel(c) do | chan |
184
+ chan.extrapolation :constant
185
+ chan.value 0
186
+ end
187
+ end
188
+ end #Iter
189
+ end # Meth
190
+
191
+ end
@@ -86,6 +86,7 @@ class Tracksperanto::Import::FlameStabilizer < Tracksperanto::Import::Base
86
86
  raise "The setup contained no channels that we could process" if channels.empty?
87
87
  raise "A channel was nil" if channels.find{|e| e.nil? }
88
88
 
89
+ report_progress("Assembling tracker curves from channels")
89
90
  scavenge_trackers_from_channels(channels)
90
91
  end
91
92
 
@@ -107,14 +107,14 @@ class Tracksperanto::Pipeline::Base
107
107
 
108
108
  trackers = parser.parse(io_with_progress)
109
109
 
110
+ yield(percent_complete = 50.0, "Validating #{trackers.length} imported trackers") if block_given?
111
+
110
112
  validate_trackers!(trackers)
111
113
 
112
- yield(percent_complete = 50.0, "Parsing complete, starting export for #{trackers.length} trackers") if block_given?
114
+ yield(percent_complete, "Starting export") if block_given?
113
115
 
114
116
  percent_per_tracker = (100.0 - percent_complete) / trackers.length
115
117
 
116
- yield(percent_complete, "Starting export") if block_given?
117
-
118
118
  # Use the width and height provided by the parser itself
119
119
  processor.start_export(parser.width, parser.height)
120
120
  trackers.each do | t |
@@ -4,7 +4,7 @@ require 'tempfile'
4
4
 
5
5
  module Tracksperanto
6
6
  PATH = File.expand_path(File.dirname(__FILE__))
7
- VERSION = '1.7.5'
7
+ VERSION = '1.8.0'
8
8
 
9
9
  module Import; end
10
10
  module Export; end
@@ -71,6 +71,7 @@ end
71
71
  progressive_io
72
72
  simple_export
73
73
  uv_coordinates
74
+ flame_builder
74
75
  ).each do | submodule |
75
76
  require File.join(Tracksperanto::PATH, "tracksperanto", submodule)
76
77
  end
@@ -0,0 +1,61 @@
1
+ # A Builder-like class for exporting Flame setups
2
+ class Tracksperanto::FlameBuilder
3
+ INDENT = "\t"
4
+
5
+ def initialize(io, indent = 0)
6
+ @io, @indent = io, indent
7
+ end
8
+
9
+ def write_block(name, value = nil, &blk)
10
+ value.nil? ? write_loose(name) : write_tuple(name, value)
11
+ yield(self.class.new(@io, @indent + 1))
12
+ @io.puts(INDENT * (@indent + 1) + "End")
13
+ end
14
+
15
+ def write_tuple(key, value)
16
+ @io.puts("%s%s %s" % [INDENT * @indent, camelize(key), flameize(value)])
17
+ end
18
+
19
+ def write_loose(value)
20
+ @io.puts("%s%s" % [INDENT * @indent, camelize(value)])
21
+ end
22
+
23
+ def linebreak!(how_many = 1)
24
+ @io.write("\n" * how_many)
25
+ end
26
+
27
+ def color_hash!(name, red, green, blue)
28
+ write_loose(name)
29
+ n = self.class.new(@io, @indent + 1)
30
+ n.red(red)
31
+ n.green(green)
32
+ n.blue(blue)
33
+ end
34
+
35
+ private
36
+
37
+ def method_missing(meth, arg = nil)
38
+ if block_given?
39
+ write_block(meth, arg) { |c| yield(c) }
40
+ else
41
+ arg.nil? ? write_loose(meth) : write_tuple(meth, arg)
42
+ end
43
+ end
44
+
45
+ def camelize(s)
46
+ s.to_s.gsub(/(^|_)(.)/) { $2.upcase }
47
+ end
48
+
49
+ def flameize(v)
50
+ case v
51
+ when Float
52
+ "%.3f" % v
53
+ when TrueClass
54
+ "yes"
55
+ when FalseClass
56
+ "no"
57
+ else
58
+ v.to_s
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,835 @@
1
+ StabilizerFileVersion 5.0
2
+ CreationDate Thu Feb 18 17:22:12 2010
3
+
4
+
5
+ NbTrackers 2
6
+ Selected 0
7
+ FrameWidth 1920
8
+ FrameHeight 1080
9
+ AutoKey yes
10
+ MotionPath yes
11
+ Icons yes
12
+ AutoPan no
13
+ EditMode 0
14
+ Format 0
15
+ Padding
16
+ Red 0
17
+ Green 100
18
+ Blue 0
19
+ Oversampling no
20
+ Opacity 50
21
+ Zoom 3
22
+ Field no
23
+ Backward no
24
+ Anim
25
+ Channel tracker1/track/x
26
+ Extrapolation constant
27
+ Value 960
28
+ Colour 50 50 50
29
+ End
30
+ Channel tracker1/track/y
31
+ Extrapolation constant
32
+ Value 540
33
+ Colour 50 50 50
34
+ End
35
+ Channel tracker1/track/width
36
+ Extrapolation linear
37
+ Value 15
38
+ Colour 50 50 50
39
+ End
40
+ Channel tracker1/track/height
41
+ Extrapolation linear
42
+ Value 15
43
+ Colour 50 50 50
44
+ End
45
+ Channel tracker1/ref/width
46
+ Extrapolation linear
47
+ Value 10
48
+ Colour 50 50 50
49
+ End
50
+ Channel tracker1/ref/height
51
+ Extrapolation linear
52
+ Value 10
53
+ Colour 50 50 50
54
+ End
55
+ Channel tracker1/ref/x
56
+ Extrapolation constant
57
+ Value 0.000
58
+ Colour 50 50 50
59
+ KeyVersion 1
60
+ Size 1
61
+ Key 0
62
+ Frame 1
63
+ Value 0.000
64
+ Interpolation constant
65
+ LeftSlope 2.400
66
+ RightSlope 2.400
67
+ End
68
+ End
69
+ Channel tracker1/ref/y
70
+ Extrapolation constant
71
+ Value 1080.000
72
+ Colour 50 50 50
73
+ KeyVersion 1
74
+ Size 1
75
+ Key 0
76
+ Frame 1
77
+ Value 1080.000
78
+ Interpolation constant
79
+ LeftSlope 2.400
80
+ RightSlope 2.400
81
+ End
82
+ End
83
+ Channel tracker1/ref/dx
84
+ Extrapolation constant
85
+ Value 0
86
+ Colour 50 50 50
87
+ Size 2
88
+ KeyVersion 1
89
+ Key 0
90
+ Frame 0
91
+ Value 0
92
+ ValueLock yes
93
+ DeleteLock yes
94
+ Interpolation constant
95
+ End
96
+ Key 1
97
+ Frame 1
98
+ Value 0
99
+ ValueLock yes
100
+ DeleteLock yes
101
+ Interpolation constant
102
+ End
103
+ End
104
+ Channel tracker1/offset/x
105
+ Extrapolation constant
106
+ Value 0
107
+ End
108
+ Channel tracker1/offset/y
109
+ Extrapolation constant
110
+ Value 0
111
+ End
112
+ Channel tracker1/ref/dy
113
+ Extrapolation constant
114
+ Value 0
115
+ Colour 50 50 50
116
+ Size 2
117
+ KeyVersion 1
118
+ Key 0
119
+ Frame 0
120
+ Value 0
121
+ ValueLock yes
122
+ DeleteLock yes
123
+ Interpolation constant
124
+ End
125
+ Key 1
126
+ Frame 1
127
+ Value 0
128
+ ValueLock yes
129
+ DeleteLock yes
130
+ Interpolation constant
131
+ End
132
+ End
133
+ Channel tracker1/offset/x
134
+ Extrapolation constant
135
+ Value 0
136
+ End
137
+ Channel tracker1/offset/y
138
+ Extrapolation constant
139
+ Value 0
140
+ End
141
+ Channel tracker1/shift/x
142
+ Extrapolation constant
143
+ Value 0
144
+ KeyVersion 1
145
+ Size 19
146
+ Key 0
147
+ Frame 1
148
+ Value 0
149
+ Interpolation linear
150
+ LeftSlope 2.400
151
+ RightSlope 2.400
152
+ End
153
+ Key 1
154
+ Frame 2
155
+ Value -96.000
156
+ Interpolation linear
157
+ LeftSlope 2.400
158
+ RightSlope 2.400
159
+ End
160
+ Key 2
161
+ Frame 3
162
+ Value -192.000
163
+ Interpolation linear
164
+ LeftSlope 2.400
165
+ RightSlope 2.400
166
+ End
167
+ Key 3
168
+ Frame 4
169
+ Value -288.000
170
+ Interpolation linear
171
+ LeftSlope 2.400
172
+ RightSlope 2.400
173
+ End
174
+ Key 4
175
+ Frame 5
176
+ Value -384.000
177
+ Interpolation linear
178
+ LeftSlope 2.400
179
+ RightSlope 2.400
180
+ End
181
+ Key 5
182
+ Frame 6
183
+ Value -480.000
184
+ Interpolation linear
185
+ LeftSlope 2.400
186
+ RightSlope 2.400
187
+ End
188
+ Key 6
189
+ Frame 7
190
+ Value -576.000
191
+ Interpolation linear
192
+ LeftSlope 2.400
193
+ RightSlope 2.400
194
+ End
195
+ Key 7
196
+ Frame 8
197
+ Value -672.000
198
+ Interpolation linear
199
+ LeftSlope 2.400
200
+ RightSlope 2.400
201
+ End
202
+ Key 8
203
+ Frame 9
204
+ Value -768.000
205
+ Interpolation linear
206
+ LeftSlope 2.400
207
+ RightSlope 2.400
208
+ End
209
+ Key 9
210
+ Frame 10
211
+ Value -864.000
212
+ Interpolation linear
213
+ LeftSlope 2.400
214
+ RightSlope 2.400
215
+ End
216
+ Key 10
217
+ Frame 13
218
+ Value -1152.000
219
+ Interpolation linear
220
+ LeftSlope 2.400
221
+ RightSlope 2.400
222
+ End
223
+ Key 11
224
+ Frame 14
225
+ Value -1248.000
226
+ Interpolation linear
227
+ LeftSlope 2.400
228
+ RightSlope 2.400
229
+ End
230
+ Key 12
231
+ Frame 15
232
+ Value -1344.000
233
+ Interpolation linear
234
+ LeftSlope 2.400
235
+ RightSlope 2.400
236
+ End
237
+ Key 13
238
+ Frame 16
239
+ Value -1440.000
240
+ Interpolation linear
241
+ LeftSlope 2.400
242
+ RightSlope 2.400
243
+ End
244
+ Key 14
245
+ Frame 17
246
+ Value -1536.000
247
+ Interpolation linear
248
+ LeftSlope 2.400
249
+ RightSlope 2.400
250
+ End
251
+ Key 15
252
+ Frame 18
253
+ Value -1632.000
254
+ Interpolation linear
255
+ LeftSlope 2.400
256
+ RightSlope 2.400
257
+ End
258
+ Key 16
259
+ Frame 19
260
+ Value -1728.000
261
+ Interpolation linear
262
+ LeftSlope 2.400
263
+ RightSlope 2.400
264
+ End
265
+ Key 17
266
+ Frame 20
267
+ Value -1824.000
268
+ Interpolation linear
269
+ LeftSlope 2.400
270
+ RightSlope 2.400
271
+ End
272
+ Key 18
273
+ Frame 21
274
+ Value -1920.000
275
+ Interpolation linear
276
+ LeftSlope 2.400
277
+ RightSlope 2.400
278
+ End
279
+ End
280
+ Channel tracker1/shift/y
281
+ Extrapolation constant
282
+ Value 0
283
+ KeyVersion 1
284
+ Size 19
285
+ Key 0
286
+ Frame 1
287
+ Value 0
288
+ Interpolation linear
289
+ LeftSlope 2.400
290
+ RightSlope 2.400
291
+ End
292
+ Key 1
293
+ Frame 2
294
+ Value 205.200
295
+ Interpolation linear
296
+ LeftSlope 2.400
297
+ RightSlope 2.400
298
+ End
299
+ Key 2
300
+ Frame 3
301
+ Value 388.800
302
+ Interpolation linear
303
+ LeftSlope 2.400
304
+ RightSlope 2.400
305
+ End
306
+ Key 3
307
+ Frame 4
308
+ Value 550.800
309
+ Interpolation linear
310
+ LeftSlope 2.400
311
+ RightSlope 2.400
312
+ End
313
+ Key 4
314
+ Frame 5
315
+ Value 691.200
316
+ Interpolation linear
317
+ LeftSlope 2.400
318
+ RightSlope 2.400
319
+ End
320
+ Key 5
321
+ Frame 6
322
+ Value 810.000
323
+ Interpolation linear
324
+ LeftSlope 2.400
325
+ RightSlope 2.400
326
+ End
327
+ Key 6
328
+ Frame 7
329
+ Value 907.200
330
+ Interpolation linear
331
+ LeftSlope 2.400
332
+ RightSlope 2.400
333
+ End
334
+ Key 7
335
+ Frame 8
336
+ Value 982.800
337
+ Interpolation linear
338
+ LeftSlope 2.400
339
+ RightSlope 2.400
340
+ End
341
+ Key 8
342
+ Frame 9
343
+ Value 1036.800
344
+ Interpolation linear
345
+ LeftSlope 2.400
346
+ RightSlope 2.400
347
+ End
348
+ Key 9
349
+ Frame 10
350
+ Value 1069.200
351
+ Interpolation linear
352
+ LeftSlope 2.400
353
+ RightSlope 2.400
354
+ End
355
+ Key 10
356
+ Frame 13
357
+ Value 1036.800
358
+ Interpolation linear
359
+ LeftSlope 2.400
360
+ RightSlope 2.400
361
+ End
362
+ Key 11
363
+ Frame 14
364
+ Value 982.800
365
+ Interpolation linear
366
+ LeftSlope 2.400
367
+ RightSlope 2.400
368
+ End
369
+ Key 12
370
+ Frame 15
371
+ Value 907.200
372
+ Interpolation linear
373
+ LeftSlope 2.400
374
+ RightSlope 2.400
375
+ End
376
+ Key 13
377
+ Frame 16
378
+ Value 810.000
379
+ Interpolation linear
380
+ LeftSlope 2.400
381
+ RightSlope 2.400
382
+ End
383
+ Key 14
384
+ Frame 17
385
+ Value 691.200
386
+ Interpolation linear
387
+ LeftSlope 2.400
388
+ RightSlope 2.400
389
+ End
390
+ Key 15
391
+ Frame 18
392
+ Value 550.800
393
+ Interpolation linear
394
+ LeftSlope 2.400
395
+ RightSlope 2.400
396
+ End
397
+ Key 16
398
+ Frame 19
399
+ Value 388.800
400
+ Interpolation linear
401
+ LeftSlope 2.400
402
+ RightSlope 2.400
403
+ End
404
+ Key 17
405
+ Frame 20
406
+ Value 205.200
407
+ Interpolation linear
408
+ LeftSlope 2.400
409
+ RightSlope 2.400
410
+ End
411
+ Key 18
412
+ Frame 21
413
+ Value 0.000
414
+ Interpolation linear
415
+ LeftSlope 2.400
416
+ RightSlope 2.400
417
+ End
418
+ End
419
+ Channel tracker2/track/x
420
+ Extrapolation constant
421
+ Value 960
422
+ Colour 50 50 50
423
+ End
424
+ Channel tracker2/track/y
425
+ Extrapolation constant
426
+ Value 540
427
+ Colour 50 50 50
428
+ End
429
+ Channel tracker2/track/width
430
+ Extrapolation linear
431
+ Value 15
432
+ Colour 50 50 50
433
+ End
434
+ Channel tracker2/track/height
435
+ Extrapolation linear
436
+ Value 15
437
+ Colour 50 50 50
438
+ End
439
+ Channel tracker2/ref/width
440
+ Extrapolation linear
441
+ Value 10
442
+ Colour 50 50 50
443
+ End
444
+ Channel tracker2/ref/height
445
+ Extrapolation linear
446
+ Value 10
447
+ Colour 50 50 50
448
+ End
449
+ Channel tracker2/ref/x
450
+ Extrapolation constant
451
+ Value 1920.000
452
+ Colour 50 50 50
453
+ KeyVersion 1
454
+ Size 1
455
+ Key 0
456
+ Frame 1
457
+ Value 1920.000
458
+ Interpolation constant
459
+ LeftSlope 2.400
460
+ RightSlope 2.400
461
+ End
462
+ End
463
+ Channel tracker2/ref/y
464
+ Extrapolation constant
465
+ Value 0.000
466
+ Colour 50 50 50
467
+ KeyVersion 1
468
+ Size 1
469
+ Key 0
470
+ Frame 1
471
+ Value 0.000
472
+ Interpolation constant
473
+ LeftSlope 2.400
474
+ RightSlope 2.400
475
+ End
476
+ End
477
+ Channel tracker2/ref/dx
478
+ Extrapolation constant
479
+ Value 0
480
+ Colour 50 50 50
481
+ Size 2
482
+ KeyVersion 1
483
+ Key 0
484
+ Frame 0
485
+ Value 0
486
+ ValueLock yes
487
+ DeleteLock yes
488
+ Interpolation constant
489
+ End
490
+ Key 1
491
+ Frame 1
492
+ Value 0
493
+ ValueLock yes
494
+ DeleteLock yes
495
+ Interpolation constant
496
+ End
497
+ End
498
+ Channel tracker2/offset/x
499
+ Extrapolation constant
500
+ Value 0
501
+ End
502
+ Channel tracker2/offset/y
503
+ Extrapolation constant
504
+ Value 0
505
+ End
506
+ Channel tracker2/ref/dy
507
+ Extrapolation constant
508
+ Value 0
509
+ Colour 50 50 50
510
+ Size 2
511
+ KeyVersion 1
512
+ Key 0
513
+ Frame 0
514
+ Value 0
515
+ ValueLock yes
516
+ DeleteLock yes
517
+ Interpolation constant
518
+ End
519
+ Key 1
520
+ Frame 1
521
+ Value 0
522
+ ValueLock yes
523
+ DeleteLock yes
524
+ Interpolation constant
525
+ End
526
+ End
527
+ Channel tracker2/offset/x
528
+ Extrapolation constant
529
+ Value 0
530
+ End
531
+ Channel tracker2/offset/y
532
+ Extrapolation constant
533
+ Value 0
534
+ End
535
+ Channel tracker2/shift/x
536
+ Extrapolation constant
537
+ Value 0
538
+ KeyVersion 1
539
+ Size 19
540
+ Key 0
541
+ Frame 1
542
+ Value 0
543
+ Interpolation linear
544
+ LeftSlope 2.400
545
+ RightSlope 2.400
546
+ End
547
+ Key 1
548
+ Frame 2
549
+ Value 96.000
550
+ Interpolation linear
551
+ LeftSlope 2.400
552
+ RightSlope 2.400
553
+ End
554
+ Key 2
555
+ Frame 3
556
+ Value 192.000
557
+ Interpolation linear
558
+ LeftSlope 2.400
559
+ RightSlope 2.400
560
+ End
561
+ Key 3
562
+ Frame 4
563
+ Value 288.000
564
+ Interpolation linear
565
+ LeftSlope 2.400
566
+ RightSlope 2.400
567
+ End
568
+ Key 4
569
+ Frame 5
570
+ Value 384.000
571
+ Interpolation linear
572
+ LeftSlope 2.400
573
+ RightSlope 2.400
574
+ End
575
+ Key 5
576
+ Frame 6
577
+ Value 480.000
578
+ Interpolation linear
579
+ LeftSlope 2.400
580
+ RightSlope 2.400
581
+ End
582
+ Key 6
583
+ Frame 7
584
+ Value 576.000
585
+ Interpolation linear
586
+ LeftSlope 2.400
587
+ RightSlope 2.400
588
+ End
589
+ Key 7
590
+ Frame 8
591
+ Value 672.000
592
+ Interpolation linear
593
+ LeftSlope 2.400
594
+ RightSlope 2.400
595
+ End
596
+ Key 8
597
+ Frame 9
598
+ Value 768.000
599
+ Interpolation linear
600
+ LeftSlope 2.400
601
+ RightSlope 2.400
602
+ End
603
+ Key 9
604
+ Frame 10
605
+ Value 864.000
606
+ Interpolation linear
607
+ LeftSlope 2.400
608
+ RightSlope 2.400
609
+ End
610
+ Key 10
611
+ Frame 13
612
+ Value 1152.000
613
+ Interpolation linear
614
+ LeftSlope 2.400
615
+ RightSlope 2.400
616
+ End
617
+ Key 11
618
+ Frame 14
619
+ Value 1248.000
620
+ Interpolation linear
621
+ LeftSlope 2.400
622
+ RightSlope 2.400
623
+ End
624
+ Key 12
625
+ Frame 15
626
+ Value 1344.000
627
+ Interpolation linear
628
+ LeftSlope 2.400
629
+ RightSlope 2.400
630
+ End
631
+ Key 13
632
+ Frame 16
633
+ Value 1440.000
634
+ Interpolation linear
635
+ LeftSlope 2.400
636
+ RightSlope 2.400
637
+ End
638
+ Key 14
639
+ Frame 17
640
+ Value 1536.000
641
+ Interpolation linear
642
+ LeftSlope 2.400
643
+ RightSlope 2.400
644
+ End
645
+ Key 15
646
+ Frame 18
647
+ Value 1632.000
648
+ Interpolation linear
649
+ LeftSlope 2.400
650
+ RightSlope 2.400
651
+ End
652
+ Key 16
653
+ Frame 19
654
+ Value 1728.000
655
+ Interpolation linear
656
+ LeftSlope 2.400
657
+ RightSlope 2.400
658
+ End
659
+ Key 17
660
+ Frame 20
661
+ Value 1824.000
662
+ Interpolation linear
663
+ LeftSlope 2.400
664
+ RightSlope 2.400
665
+ End
666
+ Key 18
667
+ Frame 21
668
+ Value 1920.000
669
+ Interpolation linear
670
+ LeftSlope 2.400
671
+ RightSlope 2.400
672
+ End
673
+ End
674
+ Channel tracker2/shift/y
675
+ Extrapolation constant
676
+ Value 0
677
+ KeyVersion 1
678
+ Size 19
679
+ Key 0
680
+ Frame 1
681
+ Value 0
682
+ Interpolation linear
683
+ LeftSlope 2.400
684
+ RightSlope 2.400
685
+ End
686
+ Key 1
687
+ Frame 2
688
+ Value -205.200
689
+ Interpolation linear
690
+ LeftSlope 2.400
691
+ RightSlope 2.400
692
+ End
693
+ Key 2
694
+ Frame 3
695
+ Value -388.800
696
+ Interpolation linear
697
+ LeftSlope 2.400
698
+ RightSlope 2.400
699
+ End
700
+ Key 3
701
+ Frame 4
702
+ Value -550.800
703
+ Interpolation linear
704
+ LeftSlope 2.400
705
+ RightSlope 2.400
706
+ End
707
+ Key 4
708
+ Frame 5
709
+ Value -691.200
710
+ Interpolation linear
711
+ LeftSlope 2.400
712
+ RightSlope 2.400
713
+ End
714
+ Key 5
715
+ Frame 6
716
+ Value -810.000
717
+ Interpolation linear
718
+ LeftSlope 2.400
719
+ RightSlope 2.400
720
+ End
721
+ Key 6
722
+ Frame 7
723
+ Value -907.200
724
+ Interpolation linear
725
+ LeftSlope 2.400
726
+ RightSlope 2.400
727
+ End
728
+ Key 7
729
+ Frame 8
730
+ Value -982.800
731
+ Interpolation linear
732
+ LeftSlope 2.400
733
+ RightSlope 2.400
734
+ End
735
+ Key 8
736
+ Frame 9
737
+ Value -1036.800
738
+ Interpolation linear
739
+ LeftSlope 2.400
740
+ RightSlope 2.400
741
+ End
742
+ Key 9
743
+ Frame 10
744
+ Value -1069.200
745
+ Interpolation linear
746
+ LeftSlope 2.400
747
+ RightSlope 2.400
748
+ End
749
+ Key 10
750
+ Frame 13
751
+ Value -1036.800
752
+ Interpolation linear
753
+ LeftSlope 2.400
754
+ RightSlope 2.400
755
+ End
756
+ Key 11
757
+ Frame 14
758
+ Value -982.800
759
+ Interpolation linear
760
+ LeftSlope 2.400
761
+ RightSlope 2.400
762
+ End
763
+ Key 12
764
+ Frame 15
765
+ Value -907.200
766
+ Interpolation linear
767
+ LeftSlope 2.400
768
+ RightSlope 2.400
769
+ End
770
+ Key 13
771
+ Frame 16
772
+ Value -810.000
773
+ Interpolation linear
774
+ LeftSlope 2.400
775
+ RightSlope 2.400
776
+ End
777
+ Key 14
778
+ Frame 17
779
+ Value -691.200
780
+ Interpolation linear
781
+ LeftSlope 2.400
782
+ RightSlope 2.400
783
+ End
784
+ Key 15
785
+ Frame 18
786
+ Value -550.800
787
+ Interpolation linear
788
+ LeftSlope 2.400
789
+ RightSlope 2.400
790
+ End
791
+ Key 16
792
+ Frame 19
793
+ Value -388.800
794
+ Interpolation linear
795
+ LeftSlope 2.400
796
+ RightSlope 2.400
797
+ End
798
+ Key 17
799
+ Frame 20
800
+ Value -205.200
801
+ Interpolation linear
802
+ LeftSlope 2.400
803
+ RightSlope 2.400
804
+ End
805
+ Key 18
806
+ Frame 21
807
+ Value 0.000
808
+ Interpolation linear
809
+ LeftSlope 2.400
810
+ RightSlope 2.400
811
+ End
812
+ End
813
+ ChannelEnd
814
+ Tracker 0
815
+ Active yes
816
+ Colour
817
+ Red 0
818
+ Green 100
819
+ Blue 0
820
+ FixedRef yes
821
+ FixedX no
822
+ FixedY no
823
+ Tolerance 100
824
+ End
825
+ Tracker 1
826
+ Active yes
827
+ Colour
828
+ Red 0
829
+ Green 100
830
+ Blue 0
831
+ FixedRef yes
832
+ FixedX no
833
+ FixedY no
834
+ Tolerance 100
835
+ End
@@ -7,7 +7,7 @@ class Equalizer4ExportTest < Test::Unit::TestCase
7
7
  def test_export_output_written
8
8
  # This test might be failing due to different float rounding between platforms
9
9
  # (currently fails on win ruby and jruby)
10
- ensure_same_output Tracksperanto::Export::Equalizer4, P
10
+ ensure_same_output Tracksperanto::Export::Equalizer4, P, "Please note this test might fail due to differences in float rounding between platforms"
11
11
  end
12
12
 
13
13
  def test_exporter_meta
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../helper'
2
+
3
+ class FlameStabilizerExportTestTest < Test::Unit::TestCase
4
+ include ParabolicTracks
5
+ P = File.dirname(__FILE__) + "/samples/ref_flame.stabilizer"
6
+
7
+ def test_export_output_written
8
+ t = Time.local(2010, "Feb", 18, 17, 22, 12)
9
+ flexmock(Time).should_receive(:now).once.and_return(t)
10
+ ensure_same_output Tracksperanto::Export::FlameStabilizer, P
11
+ end
12
+
13
+ def test_exporter_meta
14
+ assert_equal "flame.stabilizer", Tracksperanto::Export::FlameStabilizer.desc_and_extension
15
+ assert_equal "Flame/Smoke 2D Stabilizer setup", Tracksperanto::Export::FlameStabilizer.human_name
16
+ end
17
+ end
@@ -72,14 +72,14 @@ module ParabolicTracks
72
72
  end
73
73
  end
74
74
 
75
- def ensure_same_output(exporter_klass, reference_path)
75
+ def ensure_same_output(exporter_klass, reference_path, message = "Should write identical output")
76
76
  io = StringIO.new
77
77
  x = exporter_klass.new(io)
78
78
  yield(x) if block_given?
79
79
  export_parabolics_with(x)
80
80
  io.close
81
81
 
82
- assert_equal File.read(reference_path), io.string
82
+ assert_equal File.read(reference_path), io.string, message
83
83
  end
84
84
 
85
85
  def export_parabolics_with(exporter)
@@ -0,0 +1,57 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class FlameBuilderTest < Test::Unit::TestCase
4
+ def setup
5
+ @s = ""
6
+ @b = Tracksperanto::FlameBuilder.new(StringIO.new(@s))
7
+ end
8
+
9
+ def test_write_loose
10
+ @b.write_loose("Foo")
11
+ assert_equal "Foo\n", @s
12
+ end
13
+
14
+ def test_write_tuple
15
+ @b.write_tuple("Foo", 3)
16
+ assert_equal "Foo 3\n", @s
17
+ end
18
+
19
+ def test_write_tuple_with_true
20
+ @b.write_tuple("Foo", true)
21
+ assert_equal "Foo yes\n", @s
22
+ end
23
+
24
+ def test_write_tuple_with_false
25
+ @b.write_tuple("Foo", false)
26
+ assert_equal "Foo no\n", @s
27
+ end
28
+
29
+ def test_write_block
30
+ @b.write_block("Foo", 1) do | b |
31
+ b.write_tuple("Baz", 2)
32
+ end
33
+ assert_equal "Foo 1\n\tBaz 2\n\tEnd\n", @s
34
+ end
35
+
36
+ def test_automissing_with_values
37
+ @b.some_key(2)
38
+ assert_equal "SomeKey 2\n", @s
39
+ end
40
+
41
+ def test_automissing_with_block
42
+ @b.some_key(2) do | b |
43
+ b.some_subkey
44
+ end
45
+ assert_equal "SomeKey 2\n\tSomeSubkey\n\tEnd\n", @s
46
+ end
47
+
48
+ def test_linebreak
49
+ @b.linebreak!(5)
50
+ assert_equal "\n" * 5, @s
51
+ end
52
+
53
+ def test_color_hash
54
+ @b.color_hash!(:triplet, 10, 12, 15)
55
+ assert_equal "Triplet\n\tRed 10\n\tGreen 12\n\tBlue 15\n", @s
56
+ end
57
+ 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.7.5
4
+ version: 1.8.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: 2010-02-17 00:00:00 +01:00
12
+ date: 2010-02-18 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -54,6 +54,7 @@ files:
54
54
  - lib/export/base.rb
55
55
  - lib/export/equalizer3.rb
56
56
  - lib/export/equalizer4.rb
57
+ - lib/export/flame_stabilizer.rb
57
58
  - lib/export/match_mover.rb
58
59
  - lib/export/maya_live.rb
59
60
  - lib/export/mux.rb
@@ -91,6 +92,7 @@ files:
91
92
  - lib/tracksperanto/casts.rb
92
93
  - lib/tracksperanto/const_name.rb
93
94
  - lib/tracksperanto/ext_io.rb
95
+ - lib/tracksperanto/flame_builder.rb
94
96
  - lib/tracksperanto/format_detector.rb
95
97
  - lib/tracksperanto/keyframe.rb
96
98
  - lib/tracksperanto/progressive_io.rb
@@ -109,9 +111,11 @@ files:
109
111
  - test/export/samples/ref_Syntheyes.txt
110
112
  - test/export/samples/ref_equalizer.txt
111
113
  - test/export/samples/ref_equalizer3.txt
114
+ - test/export/samples/ref_flame.stabilizer
112
115
  - test/export/samples/ref_matchmover.rz2
113
116
  - test/export/test_equalizer3_export.rb
114
117
  - test/export/test_equalizer_export.rb
118
+ - test/export/test_flame_stabilizer_export.rb
115
119
  - test/export/test_match_mover_export.rb
116
120
  - test/export/test_maya_live_export.rb
117
121
  - test/export/test_mux.rb
@@ -175,6 +179,7 @@ files:
175
179
  - test/middleware/test_slip_middleware.rb
176
180
  - test/test_const_name.rb
177
181
  - test/test_extio.rb
182
+ - test/test_flame_builder.rb
178
183
  - test/test_format_detector.rb
179
184
  - test/test_keyframe.rb
180
185
  - test/test_progressive_io.rb
@@ -213,6 +218,7 @@ summary: Tracksperanto is a universal 2D-track translator between many apps.
213
218
  test_files:
214
219
  - test/export/test_equalizer3_export.rb
215
220
  - test/export/test_equalizer_export.rb
221
+ - test/export/test_flame_stabilizer_export.rb
216
222
  - test/export/test_match_mover_export.rb
217
223
  - test/export/test_maya_live_export.rb
218
224
  - test/export/test_mux.rb
@@ -244,6 +250,7 @@ test_files:
244
250
  - test/middleware/test_slip_middleware.rb
245
251
  - test/test_const_name.rb
246
252
  - test/test_extio.rb
253
+ - test/test_flame_builder.rb
247
254
  - test/test_format_detector.rb
248
255
  - test/test_keyframe.rb
249
256
  - test/test_progressive_io.rb