1 /* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * 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. 9 */ 10 11 #ifndef VP9_DECODER_VP9_DECODER_H_ 12 #define VP9_DECODER_VP9_DECODER_H_ 13 14 #include "./vpx_config.h" 15 16 #include "vpx/vpx_codec.h" 17 #include "vpx_scale/yv12config.h" 18 19 #include "vp9/common/vp9_onyxc_int.h" 20 #include "vp9/common/vp9_ppflags.h" 21 22 #include "vp9/decoder/vp9_decoder.h" 23 #include "vp9/decoder/vp9_dthread.h" 24 #include "vp9/decoder/vp9_thread.h" 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 typedef struct { 31 int width; 32 int height; 33 int version; 34 int max_threads; 35 int inv_tile_order; 36 } VP9D_CONFIG; 37 38 typedef struct VP9Decompressor { 39 DECLARE_ALIGNED(16, MACROBLOCKD, mb); 40 41 DECLARE_ALIGNED(16, VP9_COMMON, common); 42 43 VP9D_CONFIG oxcf; 44 45 int64_t last_time_stamp; 46 int ready_for_new_data; 47 48 int refresh_frame_flags; 49 50 int decoded_key_frame; 51 52 int initial_width; 53 int initial_height; 54 55 int do_loopfilter_inline; // apply loopfilter to available rows immediately 56 VP9Worker lf_worker; 57 58 VP9Worker *tile_workers; 59 int num_tile_workers; 60 61 VP9LfSync lf_row_sync; 62 } VP9D_COMP; 63 64 void vp9_initialize_dec(); 65 66 int vp9_receive_compressed_data(struct VP9Decompressor *pbi, 67 size_t size, const uint8_t **dest, 68 int64_t time_stamp); 69 70 int vp9_get_raw_frame(struct VP9Decompressor *pbi, 71 YV12_BUFFER_CONFIG *sd, 72 int64_t *time_stamp, int64_t *time_end_stamp, 73 vp9_ppflags_t *flags); 74 75 vpx_codec_err_t vp9_copy_reference_dec(struct VP9Decompressor *pbi, 76 VP9_REFFRAME ref_frame_flag, 77 YV12_BUFFER_CONFIG *sd); 78 79 vpx_codec_err_t vp9_set_reference_dec(VP9_COMMON *cm, 80 VP9_REFFRAME ref_frame_flag, 81 YV12_BUFFER_CONFIG *sd); 82 83 int vp9_get_reference_dec(struct VP9Decompressor *pbi, 84 int index, YV12_BUFFER_CONFIG **fb); 85 86 87 struct VP9Decompressor *vp9_create_decompressor(const VP9D_CONFIG *oxcf); 88 89 void vp9_remove_decompressor(struct VP9Decompressor *pbi); 90 91 #ifdef __cplusplus 92 } // extern "C" 93 #endif 94 95 #endif // VP9_DECODER_VP9_DECODER_H_ 96