1 /* 2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef VP9_COMMON_VP9_LOOPFILTER_THREAD_H_ 12 #define VP9_COMMON_VP9_LOOPFILTER_THREAD_H_ 13 #include "./vpx_config.h" 14 #include "vp9/common/vp9_loopfilter.h" 15 #include "vpx_util/vpx_thread.h" 16 17 struct VP9Common; 18 struct FRAME_COUNTS; 19 20 // Loopfilter row synchronization 21 typedef struct VP9LfSyncData { 22 #if CONFIG_MULTITHREAD 23 pthread_mutex_t *mutex_; 24 pthread_cond_t *cond_; 25 #endif 26 // Allocate memory to store the loop-filtered superblock index in each row. 27 int *cur_sb_col; 28 // The optimal sync_range for different resolution and platform should be 29 // determined by testing. Currently, it is chosen to be a power-of-2 number. 30 int sync_range; 31 int rows; 32 33 // Row-based parallel loopfilter data 34 LFWorkerData *lfdata; 35 int num_workers; 36 } VP9LfSync; 37 38 // Allocate memory for loopfilter row synchronization. 39 void vp9_loop_filter_alloc(VP9LfSync *lf_sync, struct VP9Common *cm, int rows, 40 int width, int num_workers); 41 42 // Deallocate loopfilter synchronization related mutex and data. 43 void vp9_loop_filter_dealloc(VP9LfSync *lf_sync); 44 45 // Multi-threaded loopfilter that uses the tile threads. 46 void vp9_loop_filter_frame_mt(YV12_BUFFER_CONFIG *frame, 47 struct VP9Common *cm, 48 struct macroblockd_plane planes[MAX_MB_PLANE], 49 int frame_filter_level, 50 int y_only, int partial_frame, 51 VPxWorker *workers, int num_workers, 52 VP9LfSync *lf_sync); 53 54 void vp9_accumulate_frame_counts(struct VP9Common *cm, 55 struct FRAME_COUNTS *counts, int is_dec); 56 57 #endif // VP9_COMMON_VP9_LOOPFILTER_THREAD_H_ 58