• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DECODER_VP9_DTHREAD_H_
12 #define VP9_DECODER_VP9_DTHREAD_H_
13 
14 #include "./vpx_config.h"
15 #include "vp9/common/vp9_loopfilter.h"
16 #include "vp9/decoder/vp9_reader.h"
17 #include "vp9/decoder/vp9_thread.h"
18 
19 struct macroblockd;
20 struct VP9Common;
21 struct VP9Decompressor;
22 
23 typedef struct TileWorkerData {
24   struct VP9Common *cm;
25   vp9_reader bit_reader;
26   DECLARE_ALIGNED(16, struct macroblockd, xd);
27 
28   // Row-based parallel loopfilter data
29   LFWorkerData lfdata;
30 } TileWorkerData;
31 
32 // Loopfilter row synchronization
33 typedef struct VP9LfSyncData {
34 #if CONFIG_MULTITHREAD
35   pthread_mutex_t *mutex_;
36   pthread_cond_t *cond_;
37 #endif
38   // Allocate memory to store the loop-filtered superblock index in each row.
39   int *cur_sb_col;
40   // The optimal sync_range for different resolution and platform should be
41   // determined by testing. Currently, it is chosen to be a power-of-2 number.
42   int sync_range;
43 } VP9LfSync;
44 
45 // Allocate memory for loopfilter row synchronization.
46 void vp9_loop_filter_alloc(struct VP9Common *cm, struct VP9LfSyncData *lf_sync,
47                            int rows, int width);
48 
49 // Deallocate loopfilter synchronization related mutex and data.
50 void vp9_loop_filter_dealloc(struct VP9LfSyncData *lf_sync, int rows);
51 
52 // Multi-threaded loopfilter that uses the tile threads.
53 void vp9_loop_filter_frame_mt(struct VP9Decompressor *pbi,
54                               struct VP9Common *cm,
55                               struct macroblockd *xd,
56                               int frame_filter_level,
57                               int y_only, int partial_frame);
58 
59 #endif  // VP9_DECODER_VP9_DTHREAD_H_
60