Commit a93ba0ffaa for aom
commit a93ba0ffaacd5f576a241bf739110e65287e516d
Author: Marco Paniconi <marpan@google.com>
Date: Sun Apr 19 20:41:07 2026 -0700
svc: Check for invalid params for svc layer id setting
Return AOM_CODEC_INVALID_PARAM if the spatial or
temporal layer id is set to be below 0 or above
the configured setting. Update the documentation
of the control.
Bug: 503975732, 503993984, 503993985
Change-Id: Idb30133e116bddb8ac869bb7dcf37a4b99c12f64
diff --git a/aom/aomcx.h b/aom/aomcx.h
index 7c7ad7bebd..1c344f70f3 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -198,7 +198,9 @@ enum aome_enc_control_id {
AOME_SET_SCALEMODE = 11,
/*!\brief Codec control function to set encoder spatial layer id, int
- * parameter.
+ * parameter. Spatial layer id must be within valid range of 0 to the
+ * allowed number of spatial layers, set via the control
+ * AV1E_SET_SVC_PARAMS, or via AOME_SET_SPATIAL_LAYER_ID.
*/
AOME_SET_SPATIAL_LAYER_ID = 12,
@@ -1289,7 +1291,9 @@ enum aome_enc_control_id {
/* NOTE: enums 145-149 unused */
/*!\brief Codec control function to set the layer id, aom_svc_layer_id_t*
- * parameter
+ * parameter. Layer id for spatial or temporal layer must be within valid
+ * range of 0 to the allowed number of spatial or temporal layers, set via
+ * the control AV1E_SET_SVC_PARAMS, or via AOME_SET_SPATIAL_LAYER_ID.
*/
AV1E_SET_SVC_LAYER_ID = 131,
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 3b63df5740..1ab5822abb 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -4034,7 +4034,8 @@ static aom_codec_err_t ctrl_set_scale_mode(aom_codec_alg_priv_t *ctx,
static aom_codec_err_t ctrl_set_spatial_layer_id(aom_codec_alg_priv_t *ctx,
va_list args) {
const int spatial_layer_id = va_arg(args, int);
- if (spatial_layer_id >= MAX_NUM_SPATIAL_LAYERS)
+ if (spatial_layer_id < 0 ||
+ spatial_layer_id >= (int)ctx->ppi->number_spatial_layers)
return AOM_CODEC_INVALID_PARAM;
ctx->ppi->cpi->common.spatial_layer_id = spatial_layer_id;
return AOM_CODEC_OK;
@@ -4064,6 +4065,11 @@ static aom_codec_err_t ctrl_set_number_spatial_layers(aom_codec_alg_priv_t *ctx,
static aom_codec_err_t ctrl_set_layer_id(aom_codec_alg_priv_t *ctx,
va_list args) {
aom_svc_layer_id_t *const data = va_arg(args, aom_svc_layer_id_t *);
+ if (data->spatial_layer_id < 0 || data->temporal_layer_id < 0 ||
+ data->spatial_layer_id >= (int)ctx->ppi->number_spatial_layers ||
+ data->temporal_layer_id >= (int)ctx->ppi->number_temporal_layers) {
+ return AOM_CODEC_INVALID_PARAM;
+ }
ctx->ppi->cpi->common.spatial_layer_id = data->spatial_layer_id;
ctx->ppi->cpi->common.temporal_layer_id = data->temporal_layer_id;
ctx->ppi->cpi->svc.spatial_layer_id = data->spatial_layer_id;