1b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian/* 2b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * 4b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * Use of this source code is governed by a BSD-style license 5b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * that can be found in the LICENSE file in the root of the source 6b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * tree. An additional intellectual property rights grant can be found 7b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * in the file PATENTS. All contributing project authors may 8b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian * be found in the AUTHORS file in the root of the source tree. 9b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian */ 10b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 11b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifndef VP9_DECODER_VP9_DECODER_H_ 12b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#define VP9_DECODER_VP9_DECODER_H_ 13b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 14b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "./vpx_config.h" 15b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 16b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vpx/vpx_codec.h" 17b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vpx_scale/yv12config.h" 18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 19b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/common/vp9_onyxc_int.h" 20b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/common/vp9_ppflags.h" 21b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/decoder/vp9_decoder.h" 23b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/decoder/vp9_dthread.h" 24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/decoder/vp9_thread.h" 25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 28b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 30b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniantypedef struct { 31b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int width; 32b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int height; 33b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int version; 34b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int max_threads; 35b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int inv_tile_order; 36b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} VP9D_CONFIG; 37b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 386ac915abcdb404a00d927fe6308a47fcf09d9519hkuangtypedef struct VP9Decoder { 39b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian DECLARE_ALIGNED(16, MACROBLOCKD, mb); 40b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 41b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian DECLARE_ALIGNED(16, VP9_COMMON, common); 42b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 43b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian VP9D_CONFIG oxcf; 44b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 45b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t last_time_stamp; 46b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int ready_for_new_data; 47b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 48b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int refresh_frame_flags; 49b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 50b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int decoded_key_frame; 51b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 52b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int initial_width; 53b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int initial_height; 54b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 55b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int do_loopfilter_inline; // apply loopfilter to available rows immediately 56b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian VP9Worker lf_worker; 57b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 58b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian VP9Worker *tile_workers; 59b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int num_tile_workers; 60b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 61b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian VP9LfSync lf_row_sync; 626ac915abcdb404a00d927fe6308a47fcf09d9519hkuang} VP9Decoder; 63b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 64b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_initialize_dec(); 65b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 666ac915abcdb404a00d927fe6308a47fcf09d9519hkuangint vp9_receive_compressed_data(struct VP9Decoder *pbi, 67b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian size_t size, const uint8_t **dest, 68b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t time_stamp); 69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 706ac915abcdb404a00d927fe6308a47fcf09d9519hkuangint vp9_get_raw_frame(struct VP9Decoder *pbi, 71b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian YV12_BUFFER_CONFIG *sd, 72b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t *time_stamp, int64_t *time_end_stamp, 73b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian vp9_ppflags_t *flags); 74b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 756ac915abcdb404a00d927fe6308a47fcf09d9519hkuangvpx_codec_err_t vp9_copy_reference_dec(struct VP9Decoder *pbi, 76b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian VP9_REFFRAME ref_frame_flag, 77b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian YV12_BUFFER_CONFIG *sd); 78b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 796ac915abcdb404a00d927fe6308a47fcf09d9519hkuangvpx_codec_err_t vp9_set_reference_dec(VP9_COMMON *cm, 80b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian VP9_REFFRAME ref_frame_flag, 81b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian YV12_BUFFER_CONFIG *sd); 82b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 836ac915abcdb404a00d927fe6308a47fcf09d9519hkuangint vp9_get_reference_dec(struct VP9Decoder *pbi, 84b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int index, YV12_BUFFER_CONFIG **fb); 85b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 86b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 876ac915abcdb404a00d927fe6308a47fcf09d9519hkuangstruct VP9Decoder *vp9_decoder_create(const VP9D_CONFIG *oxcf); 88b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 896ac915abcdb404a00d927fe6308a47fcf09d9519hkuangvoid vp9_decoder_remove(struct VP9Decoder *pbi); 90b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 91b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 92b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // extern "C" 93b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 94b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 95b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif // VP9_DECODER_VP9_DECODER_H_ 96