1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 128b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#ifndef VP8_DECODER_ONYXD_INT_H_ 138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#define VP8_DECODER_ONYXD_INT_H_ 144b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org 15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h" 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/onyxd.h" 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "treereader.h" 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/onyxc_int.h" 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/threading.h" 20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_ERROR_CONCEALMENT 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ec_types.h" 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 25dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus 26dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.orgextern "C" { 27dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif 28dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ithread; 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org void *ptr1; 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org void *ptr2; 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} DECODETHREAD_DATA; 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MACROBLOCKD mbd; 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MB_ROW_DEC; 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 41fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org 42da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.orgtypedef struct 43da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org{ 44da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org int enabled; 45da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org unsigned int count; 46da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org const unsigned char *ptrs[MAX_PARTITIONS]; 47da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org unsigned int sizes[MAX_PARTITIONS]; 48da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org} FRAGMENT_DATA; 49da24c9017693dec11c2925131958a7e0e0b9f1cffgalligan@chromium.org 50fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org#define MAX_FB_MT_DEC 32 51fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org 52fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.orgstruct frame_buffers 53fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org{ 54fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org /* 55fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org * this struct will be populated with frame buffer management 56fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org * info in future commits. */ 57fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org 58fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org /* enable/disable frame-based threading */ 59fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org int use_frame_threads; 60fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org 61fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org /* decoder instances */ 62fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org struct VP8D_COMP *pbi[MAX_FB_MT_DEC]; 63fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org 64fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org}; 65fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org 66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef struct VP8D_COMP 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, MACROBLOCKD, mb); 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 70ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org YV12_BUFFER_CONFIG *dec_fb_ref[NUM_YV12_BUFFERS]; 71ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, VP8_COMMON, common); 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 74ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* the last partition will be used for the modes/mvs */ 75ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_reader mbc[MAX_PARTITIONS]; 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org VP8D_CONFIG oxcf; 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 79c5ff9561dffb0f6b6a64796713281339282aea41fgalligan@chromium.org FRAGMENT_DATA fragments; 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MULTITHREAD 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org /* variable for threading */ 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org volatile int b_multithreaded_rd; 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int max_threads; 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int current_mb_col_main; 870f63c1066cd1edc83ea58380069ce0fe25050d26scottmg@google.com unsigned int decoding_thread_count; 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int allocated_decoding_thread_count; 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int mt_baseline_filter_level[MAX_MB_SEGMENTS]; 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int sync_range; 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int *mt_current_mb_col; /* Each row remembers its already decoded column. */ 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char **mt_yabove_row; /* mb_rows x width */ 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char **mt_uabove_row; 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char **mt_vabove_row; 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char **mt_yleft_col; /* mb_rows x 16 */ 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char **mt_uleft_col; /* mb_rows x 8 */ 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char **mt_vleft_col; /* mb_rows x 8 */ 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MB_ROW_DEC *mb_row_di; 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECODETHREAD_DATA *de_thread_data; 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pthread_t *h_decoding_thread; 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sem_t *h_event_start_decoding; 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sem_t h_event_end_decoding; 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org /* end of threading data */ 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t last_time_stamp; 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ready_for_new_data; 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_prob prob_intra; 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_prob prob_last; 115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_prob prob_gf; 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_prob prob_skip_false; 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_ERROR_CONCEALMENT 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MB_OVERLAP *overlaps; 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org /* the mb num from which modes and mvs (first partition) are corrupt */ 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int mvs_corrupt_from_mb; 122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ec_enabled; 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ec_active; 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int decoded_key_frame; 126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int independent_partitions; 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int frame_corrupt_residual; 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 129693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com vpx_decrypt_cb decrypt_cb; 1306ffb5d8eaaa9cb68c354c46f375ccc5b9bc8b107jpet@google.com void *decrypt_state; 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} VP8D_COMP; 132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgint vp8_decode_frame(VP8D_COMP *cpi); 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 135fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.orgint vp8_create_decoder_instances(struct frame_buffers *fb, VP8D_CONFIG *oxcf); 136fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.orgint vp8_remove_decoder_instances(struct frame_buffers *fb); 137fa43a22c16ae2b81f2532c907fb9eb2c1cd2a373fgalligan@chromium.org 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_DEBUG 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define CHECK_MEM_ERROR(lval,expr) do {\ 140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lval = (expr); \ 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if(!lval) \ 142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,\ 143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org "Failed to allocate "#lval" at %s:%d", \ 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org __FILE__,__LINE__);\ 145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } while(0) 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define CHECK_MEM_ERROR(lval,expr) do {\ 148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lval = (expr); \ 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if(!lval) \ 150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,\ 151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org "Failed to allocate "#lval);\ 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } while(0) 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 155dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus 156dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org} // extern "C" 157dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif 158dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 1598b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#endif // VP8_DECODER_ONYXD_INT_H_ 160