176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org/* 276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org * 476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org * Use of this source code is governed by a BSD-style license 576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org * that can be found in the LICENSE file in the root of the source 676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org * tree. An additional intellectual property rights grant can be found 776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org * in the file PATENTS. All contributing project authors may 876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org * be found in the AUTHORS file in the root of the source tree. 976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org */ 1076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 1176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org#ifndef VP9_DECODER_VP9_DTHREAD_H_ 1276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org#define VP9_DECODER_VP9_DTHREAD_H_ 1376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 1476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org#include "./vpx_config.h" 1595aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com#include "vp9/common/vp9_thread.h" 1676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org#include "vp9/decoder/vp9_reader.h" 1776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 1876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgstruct VP9Common; 1993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgstruct VP9Decoder; 2076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 2176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgtypedef struct TileWorkerData { 2276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org struct VP9Common *cm; 2376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org vp9_reader bit_reader; 2476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org DECLARE_ALIGNED(16, struct macroblockd, xd); 2576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 2676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org // Row-based parallel loopfilter data 2776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org LFWorkerData lfdata; 2876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org} TileWorkerData; 2976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 3076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org// Loopfilter row synchronization 3176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.orgtypedef struct VP9LfSyncData { 3276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org#if CONFIG_MULTITHREAD 3376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org pthread_mutex_t *mutex_; 3476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org pthread_cond_t *cond_; 3576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org#endif 3676e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org // Allocate memory to store the loop-filtered superblock index in each row. 3776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org int *cur_sb_col; 3876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org // The optimal sync_range for different resolution and platform should be 3976e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org // determined by testing. Currently, it is chosen to be a power-of-2 number. 4076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org int sync_range; 41d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org int rows; 4276e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org} VP9LfSync; 4376e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 4476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org// Allocate memory for loopfilter row synchronization. 4587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid vp9_loop_filter_alloc(VP9LfSync *lf_sync, VP9_COMMON *cm, int rows, 4687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int width); 4776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 4876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org// Deallocate loopfilter synchronization related mutex and data. 49d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.orgvoid vp9_loop_filter_dealloc(VP9LfSync *lf_sync); 5076e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 5176e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org// Multi-threaded loopfilter that uses the tile threads. 527765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.orgvoid vp9_loop_filter_frame_mt(YV12_BUFFER_CONFIG *frame, 537765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org struct VP9Decoder *pbi, 5476e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org struct VP9Common *cm, 5576e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org int frame_filter_level, 567765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org int y_only); 5776e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org 5876e516e2154f353aa02c504bac88afb0f95fefa7johannkoenig@chromium.org#endif // VP9_DECODER_VP9_DTHREAD_H_ 59