1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* ///////////////////////////////////////////////////////////////////////
2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//
3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//               INTEL CORPORATION PROPRIETARY INFORMATION
4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  This software is supplied under the terms of a license agreement or
5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  nondisclosure agreement with Intel Corporation and may not be copied
6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  or disclosed except in accordance with the terms of that agreement.
7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//        Copyright (c) 2001-2006 Intel Corporation. All Rights Reserved.
8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//
9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//  Description:    MPEG-4 header.
10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//
11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/
12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef _H264_DPB_CTL_H_
15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define _H264_DPB_CTL_H_
16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "h264.h"
19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifdef __cplusplus
21bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern "C" {
22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif
23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee////////////////////////////////////////////////////////////////////
25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee///////////////////////////// Parser control functions
26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee////////////////////////////////////////////////////////////////////
27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee///// Reference list
29bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_update_ref_lists(h264_Info * pInfo);
30bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_reorder_lists(h264_Info * pInfo);
31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
32bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_insert_ref_lists(h264_DecodedPictureBuffer * p_dpb,int32_t NonExisting);
33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee///// POC
35bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_hdr_decoding_poc (h264_Info * pInfo,int32_t NonExisting, int32_t frame_num);
36bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_hdr_post_poc(h264_Info* pInfo,int32_t NonExisting, int32_t frame_num, int32_t use_old);
37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee///// DPB buffer mangement
39bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_init_dpb(h264_DecodedPictureBuffer * p_dpb);
40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
41bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_unmark_for_reference(h264_DecodedPictureBuffer *p_dpb, int32_t fs_idc);
42bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_unmark_for_long_term_reference(h264_DecodedPictureBuffer *p_dpb, int32_t fs_idc);
43bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_unmark_long_term_frame_for_reference_by_frame_idx(h264_DecodedPictureBuffer *p_dpb, int32_t long_term_frame_idx);
44bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_unmark_long_term_field_for_reference_by_frame_idx(h264_DecodedPictureBuffer *p_dpb, int32_t long_term_frame_idx, int32_t fs_idc, int32_t polarity);
45bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_mark_pic_long_term(h264_Info * pInfo, int32_t long_term_frame_idx, int32_t picNumX);
46bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_mark_dangling_field(h264_DecodedPictureBuffer *p_dpb, int32_t fs_idc);
47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
48bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_update_queue_dangling_field(h264_Info * pInfo);
49bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_is_used_for_reference(int32_t * flag);
50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
52bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_set_active_fs(h264_DecodedPictureBuffer * p_dpb,int32_t index);
53bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_flush_dpb (h264_Info * pInfo,int32_t output_all, int32_t keep_complement, int32_t num_ref_frames);
54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
55bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_idr_memory_management (h264_Info * pInfo,
56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee											seq_param_set_used_ptr active_sps,
57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee											int32_t no_output_of_prior_pics_flag);
58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
59bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_init_frame_store(h264_Info * pInfo);
60bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_reset_dpb(h264_Info * pInfo,int32_t PicWidthInMbs, int32_t FrameHeightInMbs,
61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee							   int32_t SizeChange, int32_t no_output_of_prior_pics_flag);
62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
63bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_gaps_in_frame_num_mem_management(h264_Info * pInfo);
64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
65bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern int32_t h264_dpb_assign_frame_store(h264_Info * pInfo, int32_t NonExisting);
66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
67bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_get_smallest_poc(h264_DecodedPictureBuffer *p_dpb, int32_t *poc, int32_t *pos);
68bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_remove_unused_frame_from_dpb(h264_DecodedPictureBuffer *p_dpb, int32_t * flag);
69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
70bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_sliding_window_memory_management(h264_DecodedPictureBuffer *p_dpb,
71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee													  int32_t NonExisting,
72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee													  int32_t num_ref_frames);
73bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern int32_t h264_dpb_queue_update(h264_Info * pInfo,
74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee									 int32_t push,
75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee									 int32_t direct,
76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee									 int32_t frame_request,
77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee									 int32_t num_ref_frames);
78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
79bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_split_field (h264_Info * pInfo);
80bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_combine_field(int32_t use_old);
81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
82bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_insert_picture_in_dpb(h264_Info * pInfo,
83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee										   int32_t used_for_reference,
84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee										   int32_t add2dpb,
85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee										   int32_t NonExisting,
86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee										   int32_t use_old);
87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
88bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_store_previous_picture_in_dpb(h264_Info * pInfo,
89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee											int32_t NonExisting,
90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee											int32_t use_old);
91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
92bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_adaptive_memory_management (h264_Info * pInfo);
93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
94bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern int32_t h264_dpb_output_one_frame_from_dpb(h264_Info* pInfo,
95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			int32_t direct, int32_t request, int32_t num_ref_frames);
96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
97bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_remove_frame_from_dpb(h264_DecodedPictureBuffer *p_dpb, int32_t idx);
98bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern void h264_dpb_frame_output(h264_Info * pInfo,int32_t fs_idc, int32_t direct, int32_t * existing);
99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//////////////////////////////////////////////////////////// Globals
101bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeextern frame_store *active_fs;
102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif  //_H264_DPB_CTL_H_
106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
108