190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* 2f71323e297a928af368937089d3ed71239786f86Andreas Huber * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 4f71323e297a928af368937089d3ed71239786f86Andreas Huber * Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber * that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber * tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber * in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber * be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#ifndef ONYXD_INT_H_ 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define ONYXD_INT_H_ 14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 151b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h" 1679f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/onyxd.h" 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "treereader.h" 1879f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/onyxc_int.h" 1979f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/threading.h" 201b362b15af34006e6a11974088a46d42b903418eJohann 211b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_ERROR_CONCEALMENT 221b362b15af34006e6a11974088a46d42b903418eJohann#include "ec_types.h" 231b362b15af34006e6a11974088a46d42b903418eJohann#endif 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ithread; 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void *ptr1; 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void *ptr2; 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} DECODETHREAD_DATA; 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber MACROBLOCKD mbd; 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MB_ROW_DEC; 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtypedef struct 39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{ 40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int enabled; 41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang unsigned int count; 42ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const unsigned char *ptrs[MAX_PARTITIONS]; 43ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang unsigned int sizes[MAX_PARTITIONS]; 44ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} FRAGMENT_DATA; 45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define MAX_FB_MT_DEC 32 47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 48ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstruct frame_buffers 49ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang{ 50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang /* 51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * this struct will be populated with frame buffer management 52ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * info in future commits. */ 53ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang /* enable/disable frame-based threading */ 55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int use_frame_threads; 56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 57ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang /* decoder instances */ 58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang struct VP8D_COMP *pbi[MAX_FB_MT_DEC]; 59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 60ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}; 61ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 621b362b15af34006e6a11974088a46d42b903418eJohanntypedef struct VP8D_COMP 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber DECLARE_ALIGNED(16, MACROBLOCKD, mb); 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 661b362b15af34006e6a11974088a46d42b903418eJohann YV12_BUFFER_CONFIG *dec_fb_ref[NUM_YV12_BUFFERS]; 671b362b15af34006e6a11974088a46d42b903418eJohann 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber DECLARE_ALIGNED(16, VP8_COMMON, common); 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 701b362b15af34006e6a11974088a46d42b903418eJohann /* the last partition will be used for the modes/mvs */ 711b362b15af34006e6a11974088a46d42b903418eJohann vp8_reader mbc[MAX_PARTITIONS]; 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8D_CONFIG oxcf; 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang FRAGMENT_DATA fragments; 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7779f15823c34ae1e423108295e416213200bb280fAndreas Huber#if CONFIG_MULTITHREAD 7879f15823c34ae1e423108295e416213200bb280fAndreas Huber /* variable for threading */ 7979f15823c34ae1e423108295e416213200bb280fAndreas Huber 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber volatile int b_multithreaded_rd; 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int max_threads; 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int current_mb_col_main; 831b362b15af34006e6a11974088a46d42b903418eJohann unsigned int decoding_thread_count; 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int allocated_decoding_thread_count; 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 86538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int mt_baseline_filter_level[MAX_MB_SEGMENTS]; 87538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int sync_range; 88538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int *mt_current_mb_col; /* Each row remembers its already decoded column. */ 89538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 90538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char **mt_yabove_row; /* mb_rows x width */ 91538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char **mt_uabove_row; 92538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char **mt_vabove_row; 93538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char **mt_yleft_col; /* mb_rows x 16 */ 94538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char **mt_uleft_col; /* mb_rows x 8 */ 95538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char **mt_vleft_col; /* mb_rows x 8 */ 96538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber MB_ROW_DEC *mb_row_di; 98538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECODETHREAD_DATA *de_thread_data; 99538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pthread_t *h_decoding_thread; 101f71323e297a928af368937089d3ed71239786f86Andreas Huber sem_t *h_event_start_decoding; 102538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber sem_t h_event_end_decoding; 103538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /* end of threading data */ 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 105538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 1061b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_time_stamp; 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ready_for_new_data; 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 109f71323e297a928af368937089d3ed71239786f86Andreas Huber vp8_prob prob_intra; 110f71323e297a928af368937089d3ed71239786f86Andreas Huber vp8_prob prob_last; 111f71323e297a928af368937089d3ed71239786f86Andreas Huber vp8_prob prob_gf; 112f71323e297a928af368937089d3ed71239786f86Andreas Huber vp8_prob prob_skip_false; 113f71323e297a928af368937089d3ed71239786f86Andreas Huber 1141b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_ERROR_CONCEALMENT 1151b362b15af34006e6a11974088a46d42b903418eJohann MB_OVERLAP *overlaps; 1161b362b15af34006e6a11974088a46d42b903418eJohann /* the mb num from which modes and mvs (first partition) are corrupt */ 1171b362b15af34006e6a11974088a46d42b903418eJohann unsigned int mvs_corrupt_from_mb; 1181b362b15af34006e6a11974088a46d42b903418eJohann#endif 1191b362b15af34006e6a11974088a46d42b903418eJohann int ec_enabled; 1201b362b15af34006e6a11974088a46d42b903418eJohann int ec_active; 1211b362b15af34006e6a11974088a46d42b903418eJohann int decoded_key_frame; 1221b362b15af34006e6a11974088a46d42b903418eJohann int independent_partitions; 1231b362b15af34006e6a11974088a46d42b903418eJohann int frame_corrupt_residual; 1241b362b15af34006e6a11974088a46d42b903418eJohann 125ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang vp8_decrypt_cb *decrypt_cb; 126ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang void *decrypt_state; 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} VP8D_COMP; 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint vp8_decode_frame(VP8D_COMP *cpi); 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 131ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangint vp8_create_decoder_instances(struct frame_buffers *fb, VP8D_CONFIG *oxcf); 132ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangint vp8_remove_decoder_instances(struct frame_buffers *fb); 133ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_DEBUG 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define CHECK_MEM_ERROR(lval,expr) do {\ 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lval = (expr); \ 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if(!lval) \ 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,\ 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "Failed to allocate "#lval" at %s:%d", \ 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber __FILE__,__LINE__);\ 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } while(0) 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define CHECK_MEM_ERROR(lval,expr) do {\ 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lval = (expr); \ 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if(!lval) \ 14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,\ 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "Failed to allocate "#lval);\ 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } while(0) 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 151ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // ONYXD_INT_H_ 152