blob: b432031d855bc3c1ef745b534c2ed552e20816da [file]
/*
* Copyright (c) 2026, Alliance for Open Media. All rights reserved
*
* This source code is subject to the terms of the BSD 3-Clause Clear License
* and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
* License was not distributed with this source code in the LICENSE file, you
* can obtain it at aomedia.org/license/software-license/bsd-3-c-c/. If the
* Alliance for Open Media Patent License 1.0 was not distributed with this
* source code in the PATENTS file, you can obtain it at
* aomedia.org/license/patent-license/.
*/
#ifndef AVM_AV2_COMMON_BANDING_DETECTION_H_
#define AVM_AV2_COMMON_BANDING_DETECTION_H_
#include "avm/avm_integer.h"
#include "av2/common/av2_common_int.h"
#include "av2/common/reconinter.h"
#include "av2/common/banding_metadata.h"
#ifdef __cplusplus
extern "C" {
#endif
/*!\brief Initialize banding detection
*
* Allocates working buffers and validates frame dimensions for CAMBI
*
* \param[in,out] dbi Banding detection information structure
* \param[in] frame_width Width of the frame in pixels
* \param[in] frame_height Height of the frame in pixels
* \param[in] bit_depth Bit depth of the frame (8 or 10)
*
* \return 1 on success, 0 if dimensions or bit depth are unsupported
*/
int avm_band_detection_init(Av2BandDetectInfo *const dbi, const int frame_width,
const int frame_height, const int bit_depth);
/*!\brief Free banding detection resources
*
* Releases all working buffers allocated by avm_band_detection_init
*
* \param[in,out] dbi Banding detection information structure
*/
void avm_band_detection_close(Av2BandDetectInfo *const dbi);
/*!\brief Assess banding via CAMBI
*
* Searches for presence of banding computing CAMBI on refernce and distorted
*
* \param[in] frame Compressed frame buffer
* \param[in] ref Source frame buffer
* \param[in,out] cm Pointer to top level common structure
* \param[in] dbi Banding detection information structure
* \param[out] band_metadata Banding hints metadata structure to be filled
*
* \return Nothing is returned. Instead, presence of banding is stored
*/
void avm_band_detection(const YV12_BUFFER_CONFIG *frame,
const YV12_BUFFER_CONFIG *ref,
Av2BandDetectInfo *const dbi, MACROBLOCKD *xd,
avm_banding_hints_metadata_t *band_metadata);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // AVM_AV2_COMMON_BANDING_DETECTION_H_