README.txt in tracksperanto-1.8.4 vs README.txt in tracksperanto-1.9.0
- old
+ new
@@ -86,26 +86,44 @@
keyframes are extracted, converting them to
the internal representation.
* Trackers and their keyframes are dumped to all export
formats Tracksperanto supports, optionally passing through Middleware
-== Importing your own formats
+== Limitations
+
+Information about the search area, reference area and offset is not passed along (outside
+of scope for the app and different trackers handle these differently, if at all). For some
+modules no residual will be passed along (3D tracking apps generally do not export residual
+with backprojected 3D features).
+
+== Extending Tracksperanto
+
+=== Importing your own formats
+
You can easily write a Tracksperanto import module - refer to Tracksperanto::Import::Base
-docs. Your importer should return an array of Tracksperanto::Tracker objects which
+docs. Your importer will be configured with width and height of the comp that it is importing, and will get an IO
+object with the file that you are processing. The parse method should then return an array of Tracksperanto::Tracker objects which
are themselves arrays of Tracksperanto::Keyframe objects.
-== Exporting your own formats
+=== Exporting your own formats
-You can easily write an exporter. Refer to the Tracksperanto::Export::Base docs.
+You can easily write an exporter. Refer to the Tracksperanto::Export::Base docs. Note that your exporter should be able to chew alot of data
+(hundreds of trackers with thousands of keyframes with exported files growing up to 5-10 megs in size are not uncommon!). This means that
+the exporter should work with streams (smaller parts of the file being exported will be held in memory at a time).
-== Ading your own processing steps
+=== Ading your own processing steps
-You probably want to write a Middleware (consult the Tracksperanto::Middleware::Base docs). A Middleware is just like
-an exporter, except that it wraps another exporter instead (so you can intercept export calls and massage the data as it is moving through).
+You probably want to write a Middleware (consult the Tracksperanto::Middleware::Base docs) if you need some processing applied to the tracks
+or their data. A Middleware is just like an export module, except that instead it sits between the exporter and the exporting routine. Middlewares wrap export
+modules or each other, so you can stack different middleware modules together (like "scale first, then move").
-== Limitations
+=== Writing your own processing routines
-Information about the search area, reference area and offset is not passed along (outside
-of scope for the app and different trackers handle these differently, if at all). For some
-modules no residual will be passed along (3D tracking apps generally do not export residual
-with backprojected 3D features).
+You probably want to write a descendant of Tracksperanto::Pipeline::Base. This is a class that manages a conversion from start to finish, including detecting the
+input format, allocating output files and building a chain of Middlewares to process the export. If you want to make a GUI for Tracksperanto you will likely need
+to write your own Pipeline class or reimplement parts of it.
+
+=== Reporting status from long-running operations
+
+Almost every module in Tracksperanto has a method called report_progress. This method is used to notify an external callback of what you are doing, and helps keep
+the software user-friendly. A well-behaved Tracksperanto module should manage it's progress reports properly.