blob: 582da5a755fff570ecf3fb1690d7cdbbc8cb1bcc [file] [log] [blame]
/*
* Copyright (c) 2020, Alliance for Open Media. All rights reserved
*
* This source code is subject to the terms of the BSD 2 Clause License and
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
* was not distributed with this source code in the LICENSE file, you can
* obtain it at www.aomedia.org/license/software. 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 www.aomedia.org/license/patent.
*/
#ifndef AOM_AV1_COMMON_INTERINTRA_ML_H_
#define AOM_AV1_COMMON_INTERINTRA_ML_H_
#include <stdbool.h>
#include <stddef.h>
#include "av1/common/enums.h"
#include "av1/common/blockd.h"
#ifdef __cplusplus
extern "C" {
#endif
#define INTERINTRA_ML_BORDER 4
// Returns whether the interintra ML modes are supported.
bool is_interintra_ml_supported(const MACROBLOCKD *xd, bool wedge);
// Entry point. Checks if the right block size is passed in.
// Invokes the ML model and stores the output in comp_pred. Note
// that border must be greater than or equal to INTERINTRA_ML_BORDER,
// and represents the amount of border built for the interpredictor
// and intrapredictor (only INTERINTRA_ML_BORDER will be used).
void av1_combine_interintra_ml(INTERINTRA_MODE mode, BLOCK_SIZE bsize,
BLOCK_SIZE plane_bsize, int plane,
uint8_t *comp_pred, int comp_stride,
const uint8_t *inter_pred, int inter_stride,
const uint8_t *intra_pred, int intra_stride,
int border);
// High bit-depth version of the entry point.
void av1_combine_interintra_ml_highbd(INTERINTRA_MODE mode, BLOCK_SIZE bsize,
BLOCK_SIZE plane_bsize, int plane,
uint8_t *comp_pred8, int comp_stride,
const uint8_t *inter_pred8,
int inter_stride,
const uint8_t *intra_pred8,
int intra_stride, int bd, int border);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // AOM_AV1_COMMON_INTERINTRA_ML_H_