xref: /aosp_15_r20/external/libaom/av1/encoder/tune_vmaf.h (revision 77c1e3ccc04c968bd2bc212e87364f250e820521)
1*77c1e3ccSAndroid Build Coastguard Worker /*
2*77c1e3ccSAndroid Build Coastguard Worker  * Copyright (c) 2019, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker  *
4*77c1e3ccSAndroid Build Coastguard Worker  * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker  * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker  * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker  */
11*77c1e3ccSAndroid Build Coastguard Worker 
12*77c1e3ccSAndroid Build Coastguard Worker #ifndef AOM_AV1_ENCODER_TUNE_VMAF_H_
13*77c1e3ccSAndroid Build Coastguard Worker #define AOM_AV1_ENCODER_TUNE_VMAF_H_
14*77c1e3ccSAndroid Build Coastguard Worker 
15*77c1e3ccSAndroid Build Coastguard Worker #include "aom_dsp/vmaf.h"
16*77c1e3ccSAndroid Build Coastguard Worker #include "aom_scale/yv12config.h"
17*77c1e3ccSAndroid Build Coastguard Worker #include "av1/common/enums.h"
18*77c1e3ccSAndroid Build Coastguard Worker #include "av1/encoder/ratectrl.h"
19*77c1e3ccSAndroid Build Coastguard Worker #include "av1/encoder/block.h"
20*77c1e3ccSAndroid Build Coastguard Worker 
21*77c1e3ccSAndroid Build Coastguard Worker typedef struct {
22*77c1e3ccSAndroid Build Coastguard Worker   // Stores the scaling factors for rdmult when tuning for VMAF.
23*77c1e3ccSAndroid Build Coastguard Worker   // rdmult_scaling_factors[row * num_cols + col] stores the scaling factors for
24*77c1e3ccSAndroid Build Coastguard Worker   // 64x64 block at (row, col).
25*77c1e3ccSAndroid Build Coastguard Worker   double *rdmult_scaling_factors;
26*77c1e3ccSAndroid Build Coastguard Worker 
27*77c1e3ccSAndroid Build Coastguard Worker   // Stores the luma sse of the last frame.
28*77c1e3ccSAndroid Build Coastguard Worker   double last_frame_ysse[MAX_ARF_LAYERS];
29*77c1e3ccSAndroid Build Coastguard Worker 
30*77c1e3ccSAndroid Build Coastguard Worker   // Stores the VMAF of the last frame.
31*77c1e3ccSAndroid Build Coastguard Worker   double last_frame_vmaf[MAX_ARF_LAYERS];
32*77c1e3ccSAndroid Build Coastguard Worker 
33*77c1e3ccSAndroid Build Coastguard Worker   // Stores the filter strength of the last frame.
34*77c1e3ccSAndroid Build Coastguard Worker   double last_frame_unsharp_amount[MAX_ARF_LAYERS];
35*77c1e3ccSAndroid Build Coastguard Worker 
36*77c1e3ccSAndroid Build Coastguard Worker   // Stores the origial qindex before scaling.
37*77c1e3ccSAndroid Build Coastguard Worker   int original_qindex;
38*77c1e3ccSAndroid Build Coastguard Worker 
39*77c1e3ccSAndroid Build Coastguard Worker   // VMAF model used in VMAF caculations.
40*77c1e3ccSAndroid Build Coastguard Worker   VmafModel *vmaf_model;
41*77c1e3ccSAndroid Build Coastguard Worker } TuneVMAFInfo;
42*77c1e3ccSAndroid Build Coastguard Worker 
43*77c1e3ccSAndroid Build Coastguard Worker struct AV1_COMP;
44*77c1e3ccSAndroid Build Coastguard Worker 
45*77c1e3ccSAndroid Build Coastguard Worker void av1_vmaf_blk_preprocessing(struct AV1_COMP *cpi,
46*77c1e3ccSAndroid Build Coastguard Worker                                 const YV12_BUFFER_CONFIG *source);
47*77c1e3ccSAndroid Build Coastguard Worker 
48*77c1e3ccSAndroid Build Coastguard Worker void av1_vmaf_frame_preprocessing(struct AV1_COMP *cpi,
49*77c1e3ccSAndroid Build Coastguard Worker                                   const YV12_BUFFER_CONFIG *source);
50*77c1e3ccSAndroid Build Coastguard Worker 
51*77c1e3ccSAndroid Build Coastguard Worker void av1_vmaf_neg_preprocessing(struct AV1_COMP *cpi,
52*77c1e3ccSAndroid Build Coastguard Worker                                 const YV12_BUFFER_CONFIG *source);
53*77c1e3ccSAndroid Build Coastguard Worker 
54*77c1e3ccSAndroid Build Coastguard Worker void av1_set_mb_vmaf_rdmult_scaling(struct AV1_COMP *cpi);
55*77c1e3ccSAndroid Build Coastguard Worker 
56*77c1e3ccSAndroid Build Coastguard Worker void av1_set_vmaf_rdmult(const struct AV1_COMP *cpi, MACROBLOCK *x,
57*77c1e3ccSAndroid Build Coastguard Worker                          BLOCK_SIZE bsize, int mi_row, int mi_col, int *rdmult);
58*77c1e3ccSAndroid Build Coastguard Worker 
59*77c1e3ccSAndroid Build Coastguard Worker int av1_get_vmaf_base_qindex(const struct AV1_COMP *cpi, int current_qindex);
60*77c1e3ccSAndroid Build Coastguard Worker 
61*77c1e3ccSAndroid Build Coastguard Worker void av1_update_vmaf_curve(struct AV1_COMP *cpi);
62*77c1e3ccSAndroid Build Coastguard Worker 
63*77c1e3ccSAndroid Build Coastguard Worker #endif  // AOM_AV1_ENCODER_TUNE_VMAF_H_
64