lib/export/syntheyes.rb in tracksperanto-1.7.3 vs lib/export/syntheyes.rb in tracksperanto-1.7.4

- old
+ new

@@ -1,9 +1,19 @@ -# Export for Syntheyes tracker UVs +# 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 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 @@ -13,13 +23,29 @@ def start_export( img_width, img_height) @width, @height = img_width, img_height end def start_tracker_segment(tracker_name) - @tracker_name = tracker_name + @last_f, @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) - @io.puts("%s %d %.6f %.6f 30" % values) + values << get_outcome_code(frame) + @io.puts("%s %d %.6f %.6f %d" % values) end + + private + # 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 + def get_outcome_code(frame) + outcome = if @last_f.nil? + STATUS_KF + elsif @last_f && (@last_f != frame -1) + STATUS_REENABLE + else + STATUS_STD + end + @last_f = frame + outcome + end end