blob: 427e2e1dd75c7a0a89d42b94ee5989ea3b44117c [file] [log] [blame]
/*
* Copyright (c) 2016-2017, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
//!
//! \file vphal_render_ief.h
//! \brief VPHAL IEF feature interface and structure
//! \details VPHAL IEF feature interface and structure
//!
#ifndef __VPHAL_RENDER_IEF_H__
#define __VPHAL_RENDER_IEF_H__
#include "vphal_common.h"
#include "mhw_sfc.h"
// Detail filter
#define DETAIL_STRONG_EDGE_WEIGHT 7
#define DETAIL_NON_EDGE_WEIGHT 1
#define DETAIL_REGULAR_EDGE_WEIGHT 2
#define DETAIL_WEAK_EDGE_THRESHOLD 1
#define DETAIL_STRONG_EDGE_THRESHOLD 8
//!
//! \brief IEF Parameters
//!
#define VPHAL_IEF_MIN 0
#define VPHAL_IEF_MAX 64
#define VPHAL_IEF_DEFAULT 0
#define VPHAL_IEF_STEP 1
#define VPHAL_IEF_OPTIMAL 44 // for perfect SD-HQV Score
#define VPHAL_IEF_UPPER (VPHAL_IEF_MAX - 1 - VPHAL_IEF_OPTIMAL)
#define VPHAL_IEF_VERYSTRONG 63
extern const uint32_t R5x[VPHAL_IEF_MAX];
extern const uint32_t R5cx[VPHAL_IEF_MAX];
extern const uint32_t R5c[VPHAL_IEF_MAX];
extern const uint32_t R3x[VPHAL_IEF_MAX];
extern const uint32_t R3c[VPHAL_IEF_MAX];
//!
//! Class Ief
//! \brief IEF extension components
//!
class Ief
{
public:
//! \brief IEF Constructor
//! \param [in] pSource
//! Pointer to VPHAL Surface
//!
Ief(
PVPHAL_SURFACE pSource);
//! \brief IEF Destructor
//! \details IEF Destructor
//!
virtual ~Ief();
//!
//! \brief Set HW State(SFC) according to IEF parameter
//! \param [in,out] pSfcStateParams
//! Pointer to MHW SFC state
//! \param [in,out] pSfcIefStateParams
//! Pointer to MHW SFC IEF state
//! \return MOS_STATUS
//!
MOS_STATUS SetHwState(
PMHW_SFC_STATE_PARAMS pSfcStateParams,
PMHW_SFC_IEF_STATE_PARAMS pSfcIefStateParams);
//!
//! \brief Set HW State(Sampler) according to IEF parameter
//! \param [in,out] pSamplerStateParams
//! Pointer to MHW Sampler state
//! \return MOS_STATUS
//!
MOS_STATUS SetHwState(
PMHW_SAMPLER_STATE_PARAM pSamplerStateParams);
protected:
//!
//! \brief Calculate IEF parameters
//! \details Calculate IEF parameters
//! \return MOS_STATUS
//!
MOS_STATUS CalculateIefParams();
// VPHAL surface contain required IEF parameter and format info
PVPHAL_SURFACE m_pSource;
// IEF parameters
uint16_t m_wIEFFactor;
// common HW state IEF fields
uint32_t m_dwR5xCoefficient;
uint32_t m_dwR5cxCoefficient;
uint32_t m_dwR5cCoefficient;
uint32_t m_dwR3xCoefficient;
uint32_t m_dwR3cCoefficient;
};
#endif // __VPHAL_RENDER_IEF_H__