/******************************************************************************
*
* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
/**
*******************************************************************************
* @file
*  ihevc_chroma_itrans_recon.h
*
* @brief
*  Functions declarations for inverse transform and  reconstruction  of
* chroma interleaved data.
*
* @author
*  Ittiam
*
* @remarks
*  None
*
*******************************************************************************
*/


#ifndef _IHEVC_CHROMA_ITRANS_RECON_H_
#define _IHEVC_CHROMA_ITRANS_RECON_H_

typedef void ihevc_chroma_itrans_recon_4x4_ft(WORD16 *pi2_src,
                                              WORD16 *pi2_tmp,
                                              UWORD8 *pu1_pred,
                                              UWORD8 *pu1_dst,
                                              WORD32 src_strd,
                                              WORD32 pred_strd,
                                              WORD32 dst_strd,
                                              WORD32 zero_cols,
                                              WORD32 zero_rows);
typedef void ihevc_hbd_chroma_itrans_recon_4x4_ft(WORD16 *pi2_src,
                                                  WORD16 *pi2_tmp,
                                                  UWORD16 *pu2_pred,
                                                  UWORD16 *pu2_dst,
                                                  WORD32 src_strd,
                                                  WORD32 pred_strd,
                                                  WORD32 dst_strd,
                                                  WORD32 zero_cols,
                                                  WORD32 zero_rows,
                                                  UWORD8 bit_depth);
typedef void ihevc_chroma_itrans_recon_8x8_ft(WORD16 *pi2_src,
                                              WORD16 *pi2_tmp,
                                              UWORD8 *pu1_pred,
                                              UWORD8 *pu1_dst,
                                              WORD32 src_strd,
                                              WORD32 pred_strd,
                                              WORD32 dst_strd,
                                              WORD32 zero_cols,
                                              WORD32 zero_rows);
typedef void ihevc_hbd_chroma_itrans_recon_8x8_ft(WORD16 *pi2_src,
                                                  WORD16 *pi2_tmp,
                                                  UWORD16 *pu2_pred,
                                                  UWORD16 *pu2_dst,
                                                  WORD32 src_strd,
                                                  WORD32 pred_strd,
                                                  WORD32 dst_strd,
                                                  WORD32 zero_cols,
                                                  WORD32 zero_rows,
                                                  UWORD8 bit_depth);
typedef void ihevc_chroma_itrans_recon_16x16_ft(WORD16 *pi2_src,
                                                WORD16 *pi2_tmp,
                                                UWORD8 *pu1_pred,
                                                UWORD8 *pu1_dst,
                                                WORD32 src_strd,
                                                WORD32 pred_strd,
                                                WORD32 dst_strd,
                                                WORD32 zero_cols,
                                                WORD32 zero_rows);
typedef void ihevc_hbd_chroma_itrans_recon_16x16_ft(WORD16 *pi2_src,
                                                    WORD16 *pi2_tmp,
                                                    UWORD16 *pu2_pred,
                                                    UWORD16 *pu2_dst,
                                                    WORD32 src_strd,
                                                    WORD32 pred_strd,
                                                    WORD32 dst_strd,
                                                    WORD32 zero_cols,
                                                    WORD32 zero_rows,
                                                    UWORD8 bit_depth);

ihevc_chroma_itrans_recon_4x4_ft ihevc_chroma_itrans_recon_4x4;
ihevc_hbd_chroma_itrans_recon_4x4_ft ihevc_hbd_chroma_itrans_recon_4x4;
ihevc_chroma_itrans_recon_8x8_ft ihevc_chroma_itrans_recon_8x8;
ihevc_hbd_chroma_itrans_recon_8x8_ft ihevc_hbd_chroma_itrans_recon_8x8;
ihevc_chroma_itrans_recon_16x16_ft ihevc_chroma_itrans_recon_16x16;
ihevc_hbd_chroma_itrans_recon_16x16_ft ihevc_hbd_chroma_itrans_recon_16x16;

/* A9 Q Function Declarations */
ihevc_chroma_itrans_recon_4x4_ft ihevc_chroma_itrans_recon_4x4_a9q;
ihevc_chroma_itrans_recon_8x8_ft ihevc_chroma_itrans_recon_8x8_a9q;
ihevc_chroma_itrans_recon_16x16_ft ihevc_chroma_itrans_recon_16x16_a9q;

ihevc_hbd_chroma_itrans_recon_4x4_ft ihevc_hbd_chroma_itrans_recon_4x4_sse42;
ihevc_hbd_chroma_itrans_recon_8x8_ft ihevc_hbd_chroma_itrans_recon_8x8_sse42;
ihevc_hbd_chroma_itrans_recon_16x16_ft ihevc_hbd_chroma_itrans_recon_16x16_sse42;

#endif /*_IHEVC_CHROMA_ITRANS_RECON_H_*/
