aboutsummaryrefslogtreecommitdiff
path: root/encoder/ih264e_modify_frm_rate.h
blob: c301e2c275822ce676780c724a626892424a3a59 (plain)
1
2
3
4
5
6
7
8
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/******************************************************************************
 *
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/

/**
*******************************************************************************
* @file
*  ih264e_modify_frm_rate.h
*
* @brief
*  Functions declarations used to modify frame rate
*
* @author
*  ittiam
*
* @remarks
*  None
*
*******************************************************************************
*/

#ifndef IH264E_MODIFY_FRM_RATE_H_
#define IH264E_MODIFY_FRM_RATE_H_

/*****************************************************************************/
/* Constant Definitions                                                      */
/*****************************************************************************/

#define MAX_NUM_FRAME   120


/*****************************************************************************/
/* Structures                                                                */
/*****************************************************************************/
typedef struct pd_frm_rate_t
{
    /*
     * The input frame rate set in the encoder (per 1000 sec)
     */
    UWORD32 u4_input_frm_rate;

    /*
     * Frame rate of current frame due to pull down
     */
    UWORD32 u4_cur_frm_rate[MAX_NUM_FRAME];

    /*
     * current frame num in the above buffer
     */
    UWORD32 u4_frm_num;

    /*
     * Total number of frames encoded.
     * if greater than input frame rate stays at input frame rate
     */
    UWORD32 u4_tot_frm_encoded;

}pd_frm_rate_t;

typedef struct pd_frm_rate_t *pd_frm_rate_handle;


/*****************************************************************************/
/* Function Declarations                                                     */
/*****************************************************************************/

/**
*******************************************************************************
*
* @brief Function to init pd frame rate memtab
*
* @par Description
*  Function to init pull down frame rate memtab
*
* @param[in] pps_pd_frm_rate
*  pull down frame rate context
*
* @param[in] ps_memtab
*  Handle to memtab
*
* @param[in] e_func_type
*  Function type (get memtab/ update memtab)
*
* @returns  Number of memtabs used
*
* @remarks  None
*
*******************************************************************************
*/
WORD32 ih264e_pd_frm_rate_get_init_free_memtab(pd_frm_rate_handle *pps_pd_frm_rate,
                                               itt_memtab_t *ps_memtab,
                                               ITT_FUNC_TYPE_E e_func_type);
/**
*******************************************************************************
*
* @brief Initializes the pull down frame rate state structure based on input
*  frame rate
*
* @par Description
*  Initializes the pull down frame rate state structure based on input frame rate
*
* @param[in] ps_pd_frm_rate
*  Pull down frame rate context
*
* @param[in] u4_input_frm_rate
*  Input frame rate in frame per 1000sec
*
* @returns none
*
* @remarks
*
*******************************************************************************
*/
void ih264e_init_pd_frm_rate(pd_frm_rate_handle ps_pd_frm_rate,
                             UWORD32 u4_input_frm_rate);

/**
*******************************************************************************
*
* @brief Function to update pull down frame rate
*
* @par   Description
*  For each frame a run time frame rate value is sent based on whether a frame
*  is skipped or not. If it is skipped for pull down then the current frame
*  rate for the pull down period is signaled as 4/5th of the original frame
*  rate. Thus when this is averaged the frame rate gradually switches from the
*  input frame rate to 4/5th of input frame rate as and when more 3:2 pull
*  down patterns are detected
*
* @param[in] ps_pd_frm_rate
*  Pull down frame rate context
*
* @param[in] u4_input_frm_rate
*  Input frame rate in frame per 1000sec
*
* @returns none
*
* @remarks
*
*******************************************************************************
*/
void ih264e_update_pd_frm_rate(pd_frm_rate_handle ps_pd_frm_rate,
                               UWORD32 u4_cur_frm_rate);

/**
*******************************************************************************
*
* @brief returns average frame rate in 1 sec duration
*
* @par Description
*  Averages the last N frame in period(1 sec) and then gives that
*  as the current frames frame rate. Thus this averages out the sudden
*  variation in frame rate
*
* @param[in] ps_pd_frm_rate
*  Handle to pull down frame rate context
*
* @returns average frame rate
*
* @remarks
*
*******************************************************************************
*/
UWORD32 ih264e_get_pd_avg_frm_rate(pd_frm_rate_handle ps_pd_frm_rate);

#endif /* IH264E_MODIFY_FRM_RATE_H_ */