Skip to content

v1.1.3.0

Latest

Choose a tag to compare

@kpchoi kpchoi released this 11 Oct 13:08
b4ff698

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 selects OAPV_RC_ABR, and OAPV_RC_ABR without 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 with OAPV_RC_CQP encodes 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/ah of 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 toward OAPV_MAX_NUM_METAS and 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_dec returns 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-positive max_bs_buf_size and checks max_num_frms before any allocation (#304)
  • Group IDs above OAPV_MAX_GROUP_ID are rejected by oapve_encode() and oapvm_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 as oapve_config() does (#311)

Documentation and tools

  • oapv.h documents 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 SHA256SUMS after 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_SIZE was replaced by OAPV_MAX_GROUP_ID, the maximum valid group ID (0xFFFE), and the unused OAPV_PBU_NUMS was removed (#304)
  • frm_size in oapve_stat_t and oapvd_stat_t is now the size of the frame PBU itself, without the 4-byte pbu_size field, so it matches the pbu_size value. oapvd_decode_frame() already reported this size (#313)
  • Frame hash with a OAPV_CF_PLANAR2 image buffer is rejected with OAPV_ERR_UNSUPPORTED by oapve_encode(), oapvd_decode() and oapvd_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)