7 Changelog
7.1 Migration from Upipe 0.3 to 0.4
Upipe 0.4 introduces struct urequest, which allows the negotiation of data structures and formats between pipes. Consequently, every pipe that has an output must register all the requests the output pipe should provide. Similarly, every pipe that has an input must handle the requests registered by the input pipe, and either provide the structures itself, or ask the application to provide them via a probe event.
Application migration
There are only a few modifications to migrate applications to Upipe 0.4:
uprobe_output and uprobe_filter_suggest are now deprecated, as the functionality is now handled directly by UPIPE_HELPER_OUTPUT. These probes are now idempotent, so they can still be used by unmodified applications, but in the long run they should be removed.
The event UPROBE_NEW_FLOW_DEF, as it was previously used by applications, has been renamed UPROBE_NEED_OUTPUT. UPROBE_NEW_FLOW_DEF still exists, but with different semantics (called each time the output flow definition changes, regardless of the behaviour of the output pipe), and it should not be used to build dynamic pipelines.
upipe_attach_uref_mgr and upipe_attach_ubuf_mgr do no longer exist, as these structures should be provided automatically.
The upipe_pthread_xfer_mgr_alloc call now has an extra argument, allowing to get the pthread ID of the created thread.
The upipe_source_{get,set}_read_size calls have been renamed to upipe_get_output_size and upipe_set_output_size.
Pipe migration
There are quite a few modifications to migrate pipes to Upipe 0.4:
The UPIPE_HELPER_OUTPUT no longer takes a boolean argument, but takes two additional arguments. See upipe_idem.c for an example. The helper provides additional functions to register requests to the output pipe, and to proxy requests coming from an input pipe.
All pipes accepting an input must also accept the control commands UPIPE_REGISTER_REQUEST and UPIPE_UNREGISTER_REQUEST. Most of the time the requests will be proxied to the output pipe, or thrown as probe events if the pipe is a sink, but sometimes it may be interesting to modify the request. This mechanism replaces UPIPE_AMEND_FLOW_FORMAT and UPIPE_SUGGEST_FLOW_DEF, along with the new UPIPE_HELPER_FLOW_FORMAT. See upipe_avcodec_encode.c and upipe_sws.c for examples.
The UPIPE_HELPER_SINK was renamed UPIPE_HELPER_INPUT. All function names containing _sink have been renamed _input. Pipes that require a ubuf manager may need to buffer input urefs until the ubuf manager has been asynchronously received. See upipe_genaux.c for an example.
The helpers UPIPE_HELPER_UREF_MGR, UPIPE_HELPER_UBUF_MGR and UPIPE_HELPER_UCLOCK now take additional arguemnts, and upipe_throw_need_uref_mgr, upipe_throw_need_ubuf_mgr and upipe_throw_need_uclock do no longer exist. The helpers now provide a way to require those structures using a struct urequest. See upipe_genaux.c for an example.
The current helper for bin pipes has been renamed UPIPE_HELPER_BIN_OUTPUT, and there is a new helper for input requests UPIPE_HELPER_BIN_INPUT.
7.2 Migration from Upipe 0.4 to 0.5
Upipe 0.5 features only minor changes to the API.
Application migration
There are only a few modifications to migrate applications to Upipe 0.5:
The deprecated uprobe_output and uprobe_filter_suggest have been removed.
The upipe_pthread_xfer_mgr_alloc call now has yet another extra argument, allowing to pass an opaque to the thread start call-back.
Pipe migration
There are quite a few modifications to migrate pipes to Upipe 0.5:
An additional UPIPE_HELPER_INNER helper allows to simplify the encapsulation of inner pipes, and UPIPE_HELPER_UPROBE simplifies the encapsulation of inner probes. As a result, The UPIPE_HELPER_BIN_INPUT and UPIPE_HELPER_BIN_OUTPUT helpers have been modified.