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