blob: c301e2c275822ce676780c724a626892424a3a59 [file] [log] [blame]
Hamsalekha S8d3d3032015-03-13 21:24:58 +05301/******************************************************************************
2 *
3 * Copyright (C) 2015 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *****************************************************************************
18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*/
20
21/**
22*******************************************************************************
23* @file
24* ih264e_modify_frm_rate.h
25*
26* @brief
27* Functions declarations used to modify frame rate
28*
29* @author
30* ittiam
31*
32* @remarks
33* None
34*
35*******************************************************************************
36*/
37
38#ifndef IH264E_MODIFY_FRM_RATE_H_
39#define IH264E_MODIFY_FRM_RATE_H_
40
41/*****************************************************************************/
42/* Constant Definitions */
43/*****************************************************************************/
44
45#define MAX_NUM_FRAME 120
46
47
48/*****************************************************************************/
49/* Structures */
50/*****************************************************************************/
51typedef struct pd_frm_rate_t
52{
53 /*
54 * The input frame rate set in the encoder (per 1000 sec)
55 */
56 UWORD32 u4_input_frm_rate;
57
58 /*
59 * Frame rate of current frame due to pull down
60 */
61 UWORD32 u4_cur_frm_rate[MAX_NUM_FRAME];
62
63 /*
64 * current frame num in the above buffer
65 */
66 UWORD32 u4_frm_num;
67
68 /*
69 * Total number of frames encoded.
70 * if greater than input frame rate stays at input frame rate
71 */
72 UWORD32 u4_tot_frm_encoded;
73
74}pd_frm_rate_t;
75
76typedef struct pd_frm_rate_t *pd_frm_rate_handle;
77
78
79/*****************************************************************************/
80/* Function Declarations */
81/*****************************************************************************/
82
83/**
84*******************************************************************************
85*
86* @brief Function to init pd frame rate memtab
87*
88* @par Description
89* Function to init pull down frame rate memtab
90*
91* @param[in] pps_pd_frm_rate
92* pull down frame rate context
93*
94* @param[in] ps_memtab
95* Handle to memtab
96*
97* @param[in] e_func_type
98* Function type (get memtab/ update memtab)
99*
100* @returns Number of memtabs used
101*
102* @remarks None
103*
104*******************************************************************************
105*/
106WORD32 ih264e_pd_frm_rate_get_init_free_memtab(pd_frm_rate_handle *pps_pd_frm_rate,
107 itt_memtab_t *ps_memtab,
108 ITT_FUNC_TYPE_E e_func_type);
109/**
110*******************************************************************************
111*
112* @brief Initializes the pull down frame rate state structure based on input
113* frame rate
114*
115* @par Description
116* Initializes the pull down frame rate state structure based on input frame rate
117*
118* @param[in] ps_pd_frm_rate
119* Pull down frame rate context
120*
121* @param[in] u4_input_frm_rate
122* Input frame rate in frame per 1000sec
123*
124* @returns none
125*
126* @remarks
127*
128*******************************************************************************
129*/
130void ih264e_init_pd_frm_rate(pd_frm_rate_handle ps_pd_frm_rate,
131 UWORD32 u4_input_frm_rate);
132
133/**
134*******************************************************************************
135*
136* @brief Function to update pull down frame rate
137*
138* @par Description
139* For each frame a run time frame rate value is sent based on whether a frame
140* is skipped or not. If it is skipped for pull down then the current frame
141* rate for the pull down period is signaled as 4/5th of the original frame
142* rate. Thus when this is averaged the frame rate gradually switches from the
143* input frame rate to 4/5th of input frame rate as and when more 3:2 pull
144* down patterns are detected
145*
146* @param[in] ps_pd_frm_rate
147* Pull down frame rate context
148*
149* @param[in] u4_input_frm_rate
150* Input frame rate in frame per 1000sec
151*
152* @returns none
153*
154* @remarks
155*
156*******************************************************************************
157*/
158void ih264e_update_pd_frm_rate(pd_frm_rate_handle ps_pd_frm_rate,
159 UWORD32 u4_cur_frm_rate);
160
161/**
162*******************************************************************************
163*
164* @brief returns average frame rate in 1 sec duration
165*
166* @par Description
167* Averages the last N frame in period(1 sec) and then gives that
168* as the current frames frame rate. Thus this averages out the sudden
169* variation in frame rate
170*
171* @param[in] ps_pd_frm_rate
172* Handle to pull down frame rate context
173*
174* @returns average frame rate
175*
176* @remarks
177*
178*******************************************************************************
179*/
180UWORD32 ih264e_get_pd_avg_frm_rate(pd_frm_rate_handle ps_pd_frm_rate);
181
182#endif /* IH264E_MODIFY_FRM_RATE_H_ */