Repository navigation
v1.1.3.0: API documentation, fixes and hardening
A maintenance release of API set 1. No public function was added or removed, and the layout of the public structures is unchanged.
Shared library name
The SOVERSION is now derived from both the API set and the major version (OAPV_VER_APISET * 10 + OAPV_VER_MAJOR), so this release installs liboapv.so.11 (liboapv-11.dll on Windows). Previous 1.1.x releases installed liboapv.so.1, the same name as 0.1.x. Applications linked against the shared library must be relinked (#308).
Fixes
- Encoder: small leftover tiles at the frame boundary (e.g. 262x262 with 256x256 tiles) no longer fail with
OAPV_ERR_OUT_OF_BS_BUF(#306) - Encoder:
OAPVE_PARAM_QP_AUTO, the default QP, now selectsOAPV_RC_ABR, andOAPV_RC_ABRwithout a bitrate targets the maximum bitrate of the level and band. Before, encoding with the defaults clipped the QP to its maximum. A numeric QP withOAPV_RC_CQPencodes as before (#310) - Frame hash: the encoder and the decoder hash the frame padded to the MB boundary as derived from the frame size, not from the
aw/ahof the caller's buffer (#309) - Frame hash: requesting it without a reconstruction buffer no longer dereferences a NULL pointer (#309)
- Metadata:
oapvm_read_mdcv()reads the primaries in the order of the APV syntax; before, the x and y chromaticities came back mixed up (#312) - Metadata:
oapvm_rem()drops a group once its last payload is removed, instead of leaving an empty group that counted towardOAPV_MAX_NUM_METASand was written as an empty metadata PBU (#313) - Metadata: a failed
oapvm_set()no longer leaves an empty group behind (#303) - Decoder: an out-of-range access of the output frames in
oapvd_decode()was fixed (#303) oapv_app_decreturns the error status when decoding fails (#313)
Robustness
- Public API calls return the error code that matches each failure, and their argument checks were hardened (#303)
oapve_create()rejects a non-positivemax_bs_buf_sizeand checksmax_num_frmsbefore any allocation (#304)- Group IDs above
OAPV_MAX_GROUP_IDare rejected byoapve_encode()andoapvm_set()instead of being truncated to 16 bits, and a reserved group ID in the AU information PBU is rejected (#304, #311) - Bitstream size fields are rewritten only within the bitstream buffer, and the AU signature is read through the bounded bitstream reader (#311)
oapvd_config()checks its size argument asoapve_config()does (#311)
Documentation and tools
oapv.hdocuments the API: an overview, the meaning of each error code, and each public function and structure. The header is reordered into sections (#304)- The release workflow generates
SHA256SUMSafter all assets are uploaded, and uploads the packages to the release that triggered it (#302) - test/README.md lists the right frame count for syn_A and syn_B (#313)
Upgrading from v1.1.2.0
Applications linked against the shared library must be relinked against liboapv.so.11. Source code needs changes only if it relies on one of the following:
OAPV_MAX_GRP_SIZEwas replaced byOAPV_MAX_GROUP_ID, the maximum valid group ID (0xFFFE), and the unusedOAPV_PBU_NUMSwas removed (#304)frm_sizeinoapve_stat_tandoapvd_stat_tis now the size of the frame PBU itself, without the 4-bytepbu_sizefield, so it matches thepbu_sizevalue.oapvd_decode_frame()already reported this size (#313)- Frame hash with a
OAPV_CF_PLANAR2image buffer is rejected withOAPV_ERR_UNSUPPORTEDbyoapve_encode(),oapvd_decode()andoapvd_decode_frame()(#309) - Encoding with the default QP now uses rate control, as described above (#310)
- Some API calls return a more specific error code than before (#303)