onyxd_int.h 3.68 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
2
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5 6
 *  that can be found in the LICENSE file in the root of the source
 *  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.
John Koleszar's avatar
John Koleszar committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
 */


#ifndef __INC_VP8D_INT_H
#define __INC_VP8D_INT_H
#include "vpx_ports/config.h"
#include "onyxd.h"
#include "treereader.h"
#include "onyxc_int.h"
#include "threading.h"
#include "dequantize.h"

typedef struct
{
    int ithread;
    void *ptr1;
    void *ptr2;
} DECODETHREAD_DATA;

typedef struct
{
    MACROBLOCKD  mbd;
    int mb_row;
    int current_mb_col;
    short *coef_ptr;
} MB_ROW_DEC;

typedef struct
{
    INT64 time_stamp;
    int size;
} DATARATE;

typedef struct
{
Yaowu Xu's avatar
Yaowu Xu committed
44 45 46
    INT16        min_val;
    INT16        Length;
    UINT8 Probs[14];
John Koleszar's avatar
John Koleszar committed
47 48 49 50
} TOKENEXTRABITS;

typedef struct
{
Johann's avatar
Johann committed
51
    int const *scan;
Johann's avatar
Johann committed
52
    UINT8 const *ptr_block2leftabove;
Johann's avatar
Johann committed
53 54
    vp8_tree_index const *vp8_coef_tree_ptr;
    TOKENEXTRABITS const *teb_base_ptr;
John Koleszar's avatar
John Koleszar committed
55
    unsigned char *norm_ptr;
Johann's avatar
Johann committed
56
    UINT8 *ptr_coef_bands_x;
John Koleszar's avatar
John Koleszar committed
57

Johann's avatar
Johann committed
58 59
    ENTROPY_CONTEXT_PLANES *A;
    ENTROPY_CONTEXT_PLANES *L;
John Koleszar's avatar
John Koleszar committed
60 61 62 63

    INT16 *qcoeff_start_ptr;
    BOOL_DECODER *current_bc;

Johann's avatar
Johann committed
64
    vp8_prob const *coef_probs[4];
John Koleszar's avatar
John Koleszar committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

    UINT8 eob[25];

} DETOK;

typedef struct VP8Decompressor
{
    DECLARE_ALIGNED(16, MACROBLOCKD, mb);

    DECLARE_ALIGNED(16, VP8_COMMON, common);

    vp8_reader bc, bc2;

    VP8D_CONFIG oxcf;


    const unsigned char *Source;
    unsigned int   source_sz;


    unsigned int CPUFreq;
    unsigned int decode_microseconds;
    unsigned int time_decoding;
    unsigned int time_loop_filtering;

    volatile int b_multithreaded_rd;
    int max_threads;
    int current_mb_col_main;
    int decoding_thread_count;
    int allocated_decoding_thread_count;

96
    /* variable for threading */
John Koleszar's avatar
John Koleszar committed
97
#if CONFIG_MULTITHREAD
98
    int mt_baseline_filter_level[MAX_MB_SEGMENTS];
99
    int sync_range;
100
    int *mt_current_mb_col;                  /* Each row remembers its already decoded column. */
101

102
    unsigned char **mt_yabove_row;           /* mb_rows x width */
103 104
    unsigned char **mt_uabove_row;
    unsigned char **mt_vabove_row;
105 106 107
    unsigned char **mt_yleft_col;            /* mb_rows x 16 */
    unsigned char **mt_uleft_col;            /* mb_rows x 8 */
    unsigned char **mt_vleft_col;            /* mb_rows x 8 */
108

John Koleszar's avatar
John Koleszar committed
109
    MB_ROW_DEC           *mb_row_di;
110 111
    DECODETHREAD_DATA    *de_thread_data;

John Koleszar's avatar
John Koleszar committed
112
    pthread_t           *h_decoding_thread;
113
    sem_t               *h_event_start_decoding;
114
    sem_t                h_event_end_decoding;
115
    /* end of threading data */
John Koleszar's avatar
John Koleszar committed
116
#endif
117

John Koleszar's avatar
John Koleszar committed
118 119 120 121 122 123 124 125 126 127 128 129 130
    vp8_reader *mbc;
    INT64 last_time_stamp;
    int   ready_for_new_data;

    DATARATE dr[16];

    DETOK detoken;

#if CONFIG_RUNTIME_CPU_DETECT
    vp8_dequant_rtcd_vtable_t        dequant;
    struct vp8_dboolhuff_rtcd_vtable dboolhuff;
#endif

Scott LaVarnway's avatar
Scott LaVarnway committed
131 132 133 134 135 136

    vp8_prob prob_intra;
    vp8_prob prob_last;
    vp8_prob prob_gf;
    vp8_prob prob_skip_false;

John Koleszar's avatar
John Koleszar committed
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
} VP8D_COMP;

int vp8_decode_frame(VP8D_COMP *cpi);
void vp8_dmachine_specific_config(VP8D_COMP *pbi);


#if CONFIG_DEBUG
#define CHECK_MEM_ERROR(lval,expr) do {\
        lval = (expr); \
        if(!lval) \
            vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,\
                               "Failed to allocate "#lval" at %s:%d", \
                               __FILE__,__LINE__);\
    } while(0)
#else
#define CHECK_MEM_ERROR(lval,expr) do {\
        lval = (expr); \
        if(!lval) \
            vpx_internal_error(&pbi->common.error, VPX_CODEC_MEM_ERROR,\
                               "Failed to allocate "#lval);\
    } while(0)
#endif

#endif