lib/export/syntheyes.rb in tracksperanto-1.9.2 vs lib/export/syntheyes.rb in tracksperanto-1.9.3
- old
+ new
@@ -1,19 +1,9 @@
-# Export for Syntheyes tracker UVs. We actually just use prebaked sample values, and do not use bitmasks such as
-# OUTCOME_RUN = 1
-# OUTCOME_ENABLE = 2 -- mirrors the enable track
-# OUTCOME_OK = 4 -- usable u/v present on this frame
-# OUTCOME_KEY = 8 -- there is a key here (OK will be on too)
-# OUTCOME_JUMPED = 16
-# OUTCOME_OUTASIGHT = 32
+# Export for Syntheyes tracker UVs.
class Tracksperanto::Export::SynthEyes < Tracksperanto::Export::Base
include Tracksperanto::UVCoordinates
- STATUS_KF = 30
- STATUS_STD = 7
- STATUS_REENABLE = 15
-
def self.desc_and_extension
"syntheyes_2dt.txt"
end
def self.human_name
@@ -27,17 +17,32 @@
def start_tracker_segment(tracker_name)
@last_registered_frame, @tracker_name = nil, tracker_name
end
def export_point(frame, abs_float_x, abs_float_y, float_residual)
- values = [@tracker_name, frame] + absolute_to_uv(abs_float_x, abs_float_y, @width, @height)
- values << get_outcome_code(frame)
+ values = [
+ @tracker_name, frame, convert_to_uv(abs_float_x, @width),
+ convert_to_uv(abs_float_y, @height) * -1,
+ get_outcome_code(frame)
+ ]
@io.puts("%s %d %.6f %.6f %d" % values)
end
private
+ STATUS_KF = 30 # When tracker starts or reenables
+ STATUS_STD = 7 # For a standard frame (not a keyframe)
+ STATUS_REENABLE = 15 # When the tracker goes back into view
+
# It's very important that we provide an outcome code for Syntheyes. Regular keyframes get
- # STATUS_STD, and after a gap we have to signal STATUS_REENABLE, otherwise this might bust solves
+ # STATUS_STD, and after a gap we have to signal STATUS_REENABLE, otherwise this might bust solves.
+ # When syntheyes reads the file, it ORs the status of the keyframe with a number of masks
+ # OUTCOME_RUN = 1
+ # OUTCOME_ENABLE = 2 -- mirrors the enable track
+ # OUTCOME_OK = 4 -- usable u/v present on this frame
+ # OUTCOME_KEY = 8 -- there is a key here (OK will be on too)
+ # OUTCOME_JUMPED = 16
+ # OUTCOME_OUTASIGHT = 32
+ # We actually provide pregenerated status codes instead of that to get the desired outcome codes.
def get_outcome_code(frame)
outcome = if @last_registered_frame.nil?
STATUS_KF
elsif @last_registered_frame != (frame - 1)
STATUS_REENABLE