Home | History | Annotate | Download | only in decoder
      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