Hi, Here is a series of patches that addresses versioning issues in VA-API, the library (DSO) name, and the library name as shipped.
* Requirements We don't want to change the SONAME to preserve compatibility with applications that dlopen() libva.so.1. Thus any new libva version shall be binary compatible with prior versions. This means: - No binary incompatible change shall occur - Any new data structure field will be appended at the end of the structure - Any new bit-field shall be inserted at appropriate location to maintain LSB order (as no known libva runs on MSB platforms at this time) - If a data structure is changed, we shall still support the older one - No function is removed - If a function is modified, a compatibility version one is provided - We use versioned symbols * VA-API versioning - Increment major version for any ABI change (which shall not occur!) - Increment minor version for any interface change (new function, change) - Increment micro version for any change (new flag, new codec definition) - reset micro version to zero when minor version is incremented - reset minor version to zero when major version is incremented * libva package versioning - Increment major version when API major version changes (generated) - Increment minor version when API minor version changes (generated) - Increment micro version for any new release - increment micro for any library release - reset micro version to zero when VA-API major or minor version is incremented * DSO versioning - The SONAME shall remain to libva.so.1 for VA-API 0.x.y - The library name is generated as libva.<x>.<y>.0 where <x> = VA-API major version + 1 <y> = 100 * VA-API minor version + VA-API micro version For example: VA-API 0.32.0 generates libva.so.1.3200.0 (libva 1.0.14 as of today) VA-API 0.34.1 generates libva.so.1.3401.0 (e.g. libva 1.2.1) VA-API 1.2.13 generates libva.so.2.213.0 (e.g. libva 2.2.13) * Symbol versioning Symbol versioning will be used to maintain backwards compatibility for new functions we introduce or functions where we change the arguments. Use-case: change vaInitialize() function to take an extra argument for returning the VA-API micro version. Thus, we will have vaInitialize() that represents the old 0.32.0 version with 3 arguments, and a new version for e.g. 0.32.1 with 4 arguments. Symbols in DSO will be vaInitialize and vaInitialize@@VA_API_0.32.1. Through clever macros, we can also provide source compatibility with 3 args or 4 args variants of vaInitialize(). i.e. user code can still use plain vaInitialize() function name. 1. New exported interface in <va/va.h> will always appear as the latest one, thus the 4-argument vaInitialize(). 2. <va/va_compat.h> will include the magic to - redirect the 3-arg vaInitialize() to the older one (vaInitialize) - redirect the 4-arg vaInitialize() to the new one (vaInitialize@@VA_API_0.32.1) - alias implementations to plain vaInitialize() [.symver feature] 3. va_compat.c will implement the older API function in terms of the new one. If function that is modified is a VA hook (in the VTable), the older hook is still maintained but a new one with an appropriate suffix (2, 3, 4, etc.) is appended to the end of the VTable. On the drivers side, we will extend the initialization routine to match VA-API versions too. Gwenole Beauchesne (3): API: fix versioning. libva: fix reported version as the one from VA-API. vainfo: report both VA-API and libva versions. configure.ac | 67 ++++++++++++++++++++++++++++++++++++++-------- test/vainfo/Makefile.am | 7 +++- test/vainfo/vainfo.c | 3 +- va/va.c | 2 +- va/va_version.h.in | 28 ++++++++++---------- 5 files changed, 77 insertions(+), 30 deletions(-) _______________________________________________ Libva mailing list Libva@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libva