12 #ifndef AOM_AV1_ENCODER_TEMPORAL_FILTER_H_ 13 #define AOM_AV1_ENCODER_TEMPORAL_FILTER_H_ 31 #define TF_BLOCK_SIZE BLOCK_32X32 34 #define TF_WINDOW_LENGTH 5 37 static const double SQRT_PI_BY_2 = 1.25331413732;
43 #define TF_WEIGHT_SCALE 1000 47 #define TF_WINDOW_BLOCK_BALANCE_WEIGHT 5 53 #define TF_Q_DECAY_THRESHOLD 20 57 #define TF_SEARCH_ERROR_NORM_WEIGHT 20 63 #define TF_STRENGTH_THRESHOLD 4 72 #define TF_SEARCH_DISTANCE_THRESHOLD 0.1 80 #define TF_QINDEX_CUTOFF 128 82 #define NOISE_ESTIMATION_EDGE_THRESHOLD 50 122 struct scale_factors sf;
126 double noise_levels[MAX_MB_PLANE];
154 #define TF_INFO_BUF_COUNT 2 237 FRAME_DIFF *frame_diff);
254 } TemporalFilterData;
258 #if CONFIG_MULTITHREAD 260 pthread_mutex_t *mutex_;
261 #endif // CONFIG_MULTITHREAD 264 } AV1TemporalFilterSync;
281 double *noise_level,
int plane_from,
int plane_to,
282 int bit_depth,
int edge_thresh);
324 const int filter_frame_lookahead_idx,
325 int gf_frame_index, FRAME_DIFF *frame_diff,
343 const FRAME_DIFF *frame_diff,
int q_index,
348 int av1_get_q(
const struct AV1_COMP *cpi);
357 static AOM_INLINE
bool tf_alloc_and_reset_data(TemporalFilterData *tf_data,
359 int is_high_bitdepth) {
360 tf_data->tmp_mbmi = (
MB_MODE_INFO *)malloc(
sizeof(*tf_data->tmp_mbmi));
361 memset(tf_data->tmp_mbmi, 0,
sizeof(*tf_data->tmp_mbmi));
363 (uint32_t *)aom_memalign(16, num_pels *
sizeof(*tf_data->accum));
365 (uint16_t *)aom_memalign(16, num_pels *
sizeof(*tf_data->count));
366 memset(&tf_data->diff, 0,
sizeof(tf_data->diff));
367 if (is_high_bitdepth)
368 tf_data->pred = CONVERT_TO_BYTEPTR(
369 aom_memalign(32, num_pels * 2 *
sizeof(*tf_data->pred)));
372 (uint8_t *)aom_memalign(32, num_pels *
sizeof(*tf_data->pred));
373 if (!(tf_data->accum && tf_data->count && tf_data->pred)) {
374 aom_free(tf_data->accum);
375 aom_free(tf_data->count);
376 aom_free(tf_data->pred);
389 static AOM_INLINE
void tf_setup_macroblockd(
MACROBLOCKD *mbd,
390 TemporalFilterData *tf_data,
391 const struct scale_factors *scale) {
394 mbd->
mi = &tf_data->tmp_mbmi;
404 static AOM_INLINE
void tf_dealloc_data(TemporalFilterData *tf_data,
405 int is_high_bitdepth) {
406 if (is_high_bitdepth)
407 tf_data->pred = (uint8_t *)CONVERT_TO_SHORTPTR(tf_data->pred);
408 free(tf_data->tmp_mbmi);
409 aom_free(tf_data->accum);
410 aom_free(tf_data->count);
411 aom_free(tf_data->pred);
424 uint8_t **input_buffer,
int num_planes) {
425 for (
int i = 0; i < num_planes; i++) {
426 input_buffer[i] = mbd->
plane[i].pre[0].buf;
428 *input_mbmi = mbd->
mi;
440 uint8_t **input_buffer,
int num_planes) {
441 for (
int i = 0; i < num_planes; i++) {
442 mbd->
plane[i].pre[0].buf = input_buffer[i];
444 mbd->
mi = input_mbmi;
452 #endif // AOM_AV1_ENCODER_TEMPORAL_FILTER_H_ void av1_temporal_filter(struct AV1_COMP *cpi, const int filter_frame_lookahead_idx, int gf_frame_index, FRAME_DIFF *frame_diff, YV12_BUFFER_CONFIG *output_frame)
Performs temporal filtering if needed on a source frame. For example to create a filtered alternate r...
YV12_BUFFER_CONFIG tf_buf[2]
Definition: temporal_filter.h:170
int mb_cols
Definition: temporal_filter.h:138
Parameters related to temporal filtering.
Definition: temporal_filter.h:96
int num_pels
Definition: temporal_filter.h:130
struct macroblockd_plane plane[3]
Definition: blockd.h:606
int compute_frame_diff
Definition: temporal_filter.h:118
Data related to the current GF/ARF group and the individual frames within the group.
Definition: firstpass.h:354
int filter_frame_idx
Definition: temporal_filter.h:114
const struct scale_factors * block_ref_scale_factors[2]
Definition: blockd.h:687
MOTION_MODE motion_mode
The motion mode used by the inter prediction.
Definition: blockd.h:250
int tf_buf_gf_index[2]
Definition: temporal_filter.h:186
int tf_buf_display_index_offset[2]
Definition: temporal_filter.h:190
int mb_rows
Definition: temporal_filter.h:134
YV12 frame buffer data structure.
Definition: yv12config.h:44
int tf_buf_valid[2]
Definition: temporal_filter.h:194
MB_MODE_INFO ** mi
Definition: blockd.h:617
Variables related to current coding block.
Definition: blockd.h:570
int is_temporal_filter_on
Definition: temporal_filter.h:165
int q_factor
Definition: temporal_filter.h:146
Top level encoder structure.
Definition: encoder.h:2815
enum aom_bit_depth aom_bit_depth_t
Bit depth for codecThis enumeration determines the bit depth of the codec.
FRAME_DIFF frame_diff[2]
Definition: temporal_filter.h:182
YV12_BUFFER_CONFIG tf_buf_second_arf
Definition: temporal_filter.h:178
Temporal filter info for a gop.
Definition: temporal_filter.h:159
Stores the prediction/txfm mode of the current coding block.
Definition: blockd.h:222
int num_frames
Definition: temporal_filter.h:104
int is_highbitdepth
Definition: temporal_filter.h:142
void av1_tf_do_filtering_row(struct AV1_COMP *cpi, struct ThreadData *td, int mb_row)
Does temporal filter for a given macroblock row.
Definition: temporal_filter.c:804
int av1_check_show_filtered_frame(const YV12_BUFFER_CONFIG *frame, const FRAME_DIFF *frame_diff, int q_index, aom_bit_depth_t bit_depth)
Check whether a filtered frame can be show directly.
Main encoder configuration data structure.
Definition: encoder.h:915
YV12_BUFFER_CONFIG * output_frame
Definition: temporal_filter.h:109