xref: /aosp_15_r20/external/libavc/encoder/ih264e_sei.c (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker  *
5*495ae853SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker  *
9*495ae853SAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker  *
11*495ae853SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker  * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker  *
17*495ae853SAndroid Build Coastguard Worker  *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker 
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker *  ih264e_sei.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker *  This file contains function definitions related to SEI NAL's header encoding
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker *  ittiam
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @par List of Functions:
33*495ae853SAndroid Build Coastguard Worker *  - ih264e_put_sei_mdcv_params
34*495ae853SAndroid Build Coastguard Worker *  - ih264e_put_sei_cll_params
35*495ae853SAndroid Build Coastguard Worker *  - ih264e_put_sei_ave_params
36*495ae853SAndroid Build Coastguard Worker *  - ih264e_put_sei_ccv_params
37*495ae853SAndroid Build Coastguard Worker *  - ih264e_put_sei_msg
38*495ae853SAndroid Build Coastguard Worker *  - ih264e_put_sei_sii_params
39*495ae853SAndroid Build Coastguard Worker *
40*495ae853SAndroid Build Coastguard Worker * @remarks
41*495ae853SAndroid Build Coastguard Worker *  None
42*495ae853SAndroid Build Coastguard Worker *
43*495ae853SAndroid Build Coastguard Worker *******************************************************************************
44*495ae853SAndroid Build Coastguard Worker */
45*495ae853SAndroid Build Coastguard Worker 
46*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
47*495ae853SAndroid Build Coastguard Worker /* File Includes                                                             */
48*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
49*495ae853SAndroid Build Coastguard Worker 
50*495ae853SAndroid Build Coastguard Worker /* System include files */
51*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
52*495ae853SAndroid Build Coastguard Worker #include <stddef.h>
53*495ae853SAndroid Build Coastguard Worker #include <stdlib.h>
54*495ae853SAndroid Build Coastguard Worker #include <string.h>
55*495ae853SAndroid Build Coastguard Worker #include <assert.h>
56*495ae853SAndroid Build Coastguard Worker 
57*495ae853SAndroid Build Coastguard Worker /* User include files */
58*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
59*495ae853SAndroid Build Coastguard Worker #include "iv2.h"
60*495ae853SAndroid Build Coastguard Worker #include "ive2.h"
61*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
62*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
63*495ae853SAndroid Build Coastguard Worker #include "ih264e_trace.h"
64*495ae853SAndroid Build Coastguard Worker #include "ih264e_error.h"
65*495ae853SAndroid Build Coastguard Worker #include "ih264e_bitstream.h"
66*495ae853SAndroid Build Coastguard Worker #include "ih264_defs.h"
67*495ae853SAndroid Build Coastguard Worker #include "ih264_structs.h"
68*495ae853SAndroid Build Coastguard Worker #include "ih264_cabac_tables.h"
69*495ae853SAndroid Build Coastguard Worker #include "ih264e_cabac_structs.h"
70*495ae853SAndroid Build Coastguard Worker #include "irc_cntrl_param.h"
71*495ae853SAndroid Build Coastguard Worker #include "ime_distortion_metrics.h"
72*495ae853SAndroid Build Coastguard Worker #include "ime_defs.h"
73*495ae853SAndroid Build Coastguard Worker #include "ime_structs.h"
74*495ae853SAndroid Build Coastguard Worker #include "ih264e_defs.h"
75*495ae853SAndroid Build Coastguard Worker #include "irc_cntrl_param.h"
76*495ae853SAndroid Build Coastguard Worker #include "irc_frame_info_collector.h"
77*495ae853SAndroid Build Coastguard Worker #include "ih264_trans_quant_itrans_iquant.h"
78*495ae853SAndroid Build Coastguard Worker #include "ih264_inter_pred_filters.h"
79*495ae853SAndroid Build Coastguard Worker #include "ih264_deblk_edge_filters.h"
80*495ae853SAndroid Build Coastguard Worker #include "ih264e_structs.h"
81*495ae853SAndroid Build Coastguard Worker #include "ih264e_encode_header.h"
82*495ae853SAndroid Build Coastguard Worker #include "ih264e_sei.h"
83*495ae853SAndroid Build Coastguard Worker 
84*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
85*495ae853SAndroid Build Coastguard Worker /* Function Definitions                                                      */
86*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
87*495ae853SAndroid Build Coastguard Worker 
88*495ae853SAndroid Build Coastguard Worker /**
89*495ae853SAndroid Build Coastguard Worker ******************************************************************************
90*495ae853SAndroid Build Coastguard Worker *
91*495ae853SAndroid Build Coastguard Worker *  @brief Generates Mastering Display Color Volume (Supplemental Enhancement Information )
92*495ae853SAndroid Build Coastguard Worker *
93*495ae853SAndroid Build Coastguard Worker *  @par   Description
94*495ae853SAndroid Build Coastguard Worker *  Parse Supplemental Enhancement Information
95*495ae853SAndroid Build Coastguard Worker *
96*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_bitstrm
97*495ae853SAndroid Build Coastguard Worker *  pointer to bitstream context (handle)
98*495ae853SAndroid Build Coastguard Worker *
99*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_sei_mdcv
100*495ae853SAndroid Build Coastguard Worker *  pointer to structure containing mdcv SEI data
101*495ae853SAndroid Build Coastguard Worker *
102*495ae853SAndroid Build Coastguard Worker *  @return      success or failure error code
103*495ae853SAndroid Build Coastguard Worker *
104*495ae853SAndroid Build Coastguard Worker ******************************************************************************
105*495ae853SAndroid Build Coastguard Worker */
ih264e_put_sei_mdcv_params(sei_mdcv_params_t * ps_sei_mdcv,bitstrm_t * ps_bitstrm)106*495ae853SAndroid Build Coastguard Worker IH264E_ERROR_T ih264e_put_sei_mdcv_params(sei_mdcv_params_t *ps_sei_mdcv,
107*495ae853SAndroid Build Coastguard Worker                                  bitstrm_t *ps_bitstrm)
108*495ae853SAndroid Build Coastguard Worker {
109*495ae853SAndroid Build Coastguard Worker     WORD32 return_status = IH264E_SUCCESS;
110*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_payload_size = 0;
111*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_count;
112*495ae853SAndroid Build Coastguard Worker 
113*495ae853SAndroid Build Coastguard Worker     if(ps_sei_mdcv == NULL)
114*495ae853SAndroid Build Coastguard Worker     {
115*495ae853SAndroid Build Coastguard Worker         return IH264E_FAIL;
116*495ae853SAndroid Build Coastguard Worker     }
117*495ae853SAndroid Build Coastguard Worker 
118*495ae853SAndroid Build Coastguard Worker     u1_payload_size += (NUM_SEI_MDCV_PRIMARIES * 2); /* display primaries x */
119*495ae853SAndroid Build Coastguard Worker     u1_payload_size += (NUM_SEI_MDCV_PRIMARIES * 2); /* display primaries y */
120*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 2; /* white point x */
121*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 2; /* white point y */
122*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 4; /* max display mastering luminance */
123*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 4; /* min display mastering luminance */
124*495ae853SAndroid Build Coastguard Worker 
125*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
126*495ae853SAndroid Build Coastguard Worker     /* PayloadSize : This is the size of the payload in bytes               */
127*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
128*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, u1_payload_size, 8, return_status, "u1_payload_size");
129*495ae853SAndroid Build Coastguard Worker 
130*495ae853SAndroid Build Coastguard Worker     /*******************************************************************************/
131*495ae853SAndroid Build Coastguard Worker     /* Put the mastering display color volume SEI parameters into the bitstream.   */
132*495ae853SAndroid Build Coastguard Worker     /*******************************************************************************/
133*495ae853SAndroid Build Coastguard Worker 
134*495ae853SAndroid Build Coastguard Worker     /* display primaries x */
135*495ae853SAndroid Build Coastguard Worker     for(u4_count = 0; u4_count < NUM_SEI_MDCV_PRIMARIES; u4_count++)
136*495ae853SAndroid Build Coastguard Worker     {
137*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_mdcv->au2_display_primaries_x[u4_count], 16,
138*495ae853SAndroid Build Coastguard Worker                                 return_status, "u2_display_primaries_x");
139*495ae853SAndroid Build Coastguard Worker 
140*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_mdcv->au2_display_primaries_y[u4_count], 16,
141*495ae853SAndroid Build Coastguard Worker                                 return_status, "u2_display_primaries_y");
142*495ae853SAndroid Build Coastguard Worker     }
143*495ae853SAndroid Build Coastguard Worker 
144*495ae853SAndroid Build Coastguard Worker     /* white point x */
145*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_mdcv->u2_white_point_x, 16, return_status, "u2_white point x");
146*495ae853SAndroid Build Coastguard Worker 
147*495ae853SAndroid Build Coastguard Worker     /* white point y */
148*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_mdcv->u2_white_point_y, 16, return_status, "u2_white point y");
149*495ae853SAndroid Build Coastguard Worker 
150*495ae853SAndroid Build Coastguard Worker     /* max display mastering luminance */
151*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_mdcv->u4_max_display_mastering_luminance, 32,
152*495ae853SAndroid Build Coastguard Worker                                 return_status, "u4_max_display_mastering_luminance");
153*495ae853SAndroid Build Coastguard Worker 
154*495ae853SAndroid Build Coastguard Worker     /* min display mastering luminance */
155*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_mdcv->u4_min_display_mastering_luminance, 32,
156*495ae853SAndroid Build Coastguard Worker                                 return_status, "u4_max_display_mastering_luminance");
157*495ae853SAndroid Build Coastguard Worker 
158*495ae853SAndroid Build Coastguard Worker     return (return_status);
159*495ae853SAndroid Build Coastguard Worker }
160*495ae853SAndroid Build Coastguard Worker 
161*495ae853SAndroid Build Coastguard Worker /**
162*495ae853SAndroid Build Coastguard Worker ******************************************************************************
163*495ae853SAndroid Build Coastguard Worker *
164*495ae853SAndroid Build Coastguard Worker *  @brief Stores content light level info in bitstream
165*495ae853SAndroid Build Coastguard Worker *
166*495ae853SAndroid Build Coastguard Worker *  @par   Description
167*495ae853SAndroid Build Coastguard Worker *  Parse Supplemental Enhancement Information
168*495ae853SAndroid Build Coastguard Worker *
169*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_bitstrm
170*495ae853SAndroid Build Coastguard Worker *  pointer to bitstream context (handle)
171*495ae853SAndroid Build Coastguard Worker *
172*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_sei_cll
173*495ae853SAndroid Build Coastguard Worker *  Pinter to structure containing cll sei params
174*495ae853SAndroid Build Coastguard Worker *
175*495ae853SAndroid Build Coastguard Worker *  @return      success or failure error code
176*495ae853SAndroid Build Coastguard Worker *
177*495ae853SAndroid Build Coastguard Worker ******************************************************************************
178*495ae853SAndroid Build Coastguard Worker */
ih264e_put_sei_cll_params(sei_cll_params_t * ps_sei_cll,bitstrm_t * ps_bitstrm)179*495ae853SAndroid Build Coastguard Worker IH264E_ERROR_T ih264e_put_sei_cll_params(sei_cll_params_t *ps_sei_cll,
180*495ae853SAndroid Build Coastguard Worker                                 bitstrm_t *ps_bitstrm)
181*495ae853SAndroid Build Coastguard Worker {
182*495ae853SAndroid Build Coastguard Worker     WORD32 return_status = IH264E_SUCCESS;
183*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_payload_size = 0;
184*495ae853SAndroid Build Coastguard Worker 
185*495ae853SAndroid Build Coastguard Worker     if(ps_sei_cll == NULL)
186*495ae853SAndroid Build Coastguard Worker     {
187*495ae853SAndroid Build Coastguard Worker         return IH264E_FAIL;
188*495ae853SAndroid Build Coastguard Worker     }
189*495ae853SAndroid Build Coastguard Worker 
190*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 2; /* max pic average light level */
191*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 2; /* max content light level */
192*495ae853SAndroid Build Coastguard Worker 
193*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
194*495ae853SAndroid Build Coastguard Worker     /* PayloadSize : This is the size of the payload in bytes               */
195*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
196*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, u1_payload_size, 8, return_status, "u1_payload_size");
197*495ae853SAndroid Build Coastguard Worker 
198*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_cll->u2_max_content_light_level, 16,
199*495ae853SAndroid Build Coastguard Worker                                 return_status, "u2_max_content_light_level");
200*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_cll->u2_max_pic_average_light_level, 16,
201*495ae853SAndroid Build Coastguard Worker                                 return_status, "u2_max_pic_average_light_level");
202*495ae853SAndroid Build Coastguard Worker 
203*495ae853SAndroid Build Coastguard Worker     return (return_status);
204*495ae853SAndroid Build Coastguard Worker }
205*495ae853SAndroid Build Coastguard Worker 
206*495ae853SAndroid Build Coastguard Worker /**
207*495ae853SAndroid Build Coastguard Worker ******************************************************************************
208*495ae853SAndroid Build Coastguard Worker *
209*495ae853SAndroid Build Coastguard Worker *  @brief Stores ambient viewing environment info in bitstream
210*495ae853SAndroid Build Coastguard Worker *
211*495ae853SAndroid Build Coastguard Worker *  @par   Description
212*495ae853SAndroid Build Coastguard Worker *  Parse Supplemental Enhancement Information
213*495ae853SAndroid Build Coastguard Worker *
214*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_bitstrm
215*495ae853SAndroid Build Coastguard Worker *  pointer to bitstream context (handle)
216*495ae853SAndroid Build Coastguard Worker *
217*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_sei_ave
218*495ae853SAndroid Build Coastguard Worker *  pointer to ambient viewing environment info
219*495ae853SAndroid Build Coastguard Worker *
220*495ae853SAndroid Build Coastguard Worker *  @return      success or failure error code
221*495ae853SAndroid Build Coastguard Worker *
222*495ae853SAndroid Build Coastguard Worker ******************************************************************************
223*495ae853SAndroid Build Coastguard Worker */
ih264e_put_sei_ave_params(sei_ave_params_t * ps_sei_ave,bitstrm_t * ps_bitstrm)224*495ae853SAndroid Build Coastguard Worker IH264E_ERROR_T ih264e_put_sei_ave_params(sei_ave_params_t *ps_sei_ave,
225*495ae853SAndroid Build Coastguard Worker                                 bitstrm_t *ps_bitstrm)
226*495ae853SAndroid Build Coastguard Worker {
227*495ae853SAndroid Build Coastguard Worker     WORD32 return_status = IH264E_SUCCESS;
228*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_payload_size = 0;
229*495ae853SAndroid Build Coastguard Worker 
230*495ae853SAndroid Build Coastguard Worker     if(ps_sei_ave == NULL)
231*495ae853SAndroid Build Coastguard Worker     {
232*495ae853SAndroid Build Coastguard Worker         return IH264E_FAIL;
233*495ae853SAndroid Build Coastguard Worker     }
234*495ae853SAndroid Build Coastguard Worker 
235*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 4; /* ambient illuminance */
236*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 2; /* ambient light x */
237*495ae853SAndroid Build Coastguard Worker     u1_payload_size += 2; /* ambient light y */
238*495ae853SAndroid Build Coastguard Worker 
239*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
240*495ae853SAndroid Build Coastguard Worker     /* PayloadSize : This is the size of the payload in bytes               */
241*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
242*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, u1_payload_size, 8, return_status, "u1_payload_size");
243*495ae853SAndroid Build Coastguard Worker 
244*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_ave->u4_ambient_illuminance, 32,
245*495ae853SAndroid Build Coastguard Worker                                 return_status, "u4_ambient_illuminance");
246*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_ave->u2_ambient_light_x, 16,
247*495ae853SAndroid Build Coastguard Worker                                 return_status, "u2_ambient_light_x");
248*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_ave->u2_ambient_light_y, 16,
249*495ae853SAndroid Build Coastguard Worker                                 return_status, "u2_ambient_light_y");
250*495ae853SAndroid Build Coastguard Worker 
251*495ae853SAndroid Build Coastguard Worker     return (return_status);
252*495ae853SAndroid Build Coastguard Worker }
253*495ae853SAndroid Build Coastguard Worker 
254*495ae853SAndroid Build Coastguard Worker /**
255*495ae853SAndroid Build Coastguard Worker ******************************************************************************
256*495ae853SAndroid Build Coastguard Worker *
257*495ae853SAndroid Build Coastguard Worker *  @brief Generates Content Color Volume info (Supplemental Enhancement Information )
258*495ae853SAndroid Build Coastguard Worker *
259*495ae853SAndroid Build Coastguard Worker *  @par   Description
260*495ae853SAndroid Build Coastguard Worker *  Parse Supplemental Enhancement Information
261*495ae853SAndroid Build Coastguard Worker *
262*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_bitstrm
263*495ae853SAndroid Build Coastguard Worker *  pointer to bitstream context (handle)
264*495ae853SAndroid Build Coastguard Worker *
265*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_sei_ccv
266*495ae853SAndroid Build Coastguard Worker *  pointer to structure containing CCV SEI data
267*495ae853SAndroid Build Coastguard Worker *
268*495ae853SAndroid Build Coastguard Worker *  @return      success or failure error code
269*495ae853SAndroid Build Coastguard Worker *
270*495ae853SAndroid Build Coastguard Worker ******************************************************************************
271*495ae853SAndroid Build Coastguard Worker */
ih264e_put_sei_ccv_params(sei_ccv_params_t * ps_sei_ccv,bitstrm_t * ps_bitstrm)272*495ae853SAndroid Build Coastguard Worker IH264E_ERROR_T ih264e_put_sei_ccv_params(sei_ccv_params_t *ps_sei_ccv,
273*495ae853SAndroid Build Coastguard Worker                                 bitstrm_t *ps_bitstrm)
274*495ae853SAndroid Build Coastguard Worker {
275*495ae853SAndroid Build Coastguard Worker     WORD32 return_status = IH264E_SUCCESS;
276*495ae853SAndroid Build Coastguard Worker     UWORD16 u2_payload_bits = 0;
277*495ae853SAndroid Build Coastguard Worker     UWORD8  u1_payload_bytes = 0;
278*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_count;
279*495ae853SAndroid Build Coastguard Worker 
280*495ae853SAndroid Build Coastguard Worker     if(ps_sei_ccv == NULL)
281*495ae853SAndroid Build Coastguard Worker     {
282*495ae853SAndroid Build Coastguard Worker         return IH264E_FAIL;
283*495ae853SAndroid Build Coastguard Worker     }
284*495ae853SAndroid Build Coastguard Worker 
285*495ae853SAndroid Build Coastguard Worker     u2_payload_bits += 1;   /* ccv cancel flag */
286*495ae853SAndroid Build Coastguard Worker     if(0 == (UWORD32)ps_sei_ccv->u1_ccv_cancel_flag)
287*495ae853SAndroid Build Coastguard Worker     {
288*495ae853SAndroid Build Coastguard Worker         u2_payload_bits += 1;   /* ccv persistence flag */
289*495ae853SAndroid Build Coastguard Worker         u2_payload_bits += 1;   /* ccv primaries present flag */
290*495ae853SAndroid Build Coastguard Worker         u2_payload_bits += 1;   /* ccv min luminance value present flag */
291*495ae853SAndroid Build Coastguard Worker         u2_payload_bits += 1;   /* ccv max luminance value present flag */
292*495ae853SAndroid Build Coastguard Worker         u2_payload_bits += 1;   /* ccv avg luminance value present flag */
293*495ae853SAndroid Build Coastguard Worker         u2_payload_bits += 2;   /* ccv reserved zero 2bits */
294*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_primaries_present_flag)
295*495ae853SAndroid Build Coastguard Worker         {
296*495ae853SAndroid Build Coastguard Worker             u2_payload_bits += (NUM_SEI_CCV_PRIMARIES * 32);  /* ccv primaries x[ c ] */
297*495ae853SAndroid Build Coastguard Worker             u2_payload_bits += (NUM_SEI_CCV_PRIMARIES * 32);  /* ccv primaries y[ c ] */
298*495ae853SAndroid Build Coastguard Worker         }
299*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_min_luminance_value_present_flag)
300*495ae853SAndroid Build Coastguard Worker         {
301*495ae853SAndroid Build Coastguard Worker             u2_payload_bits += 32;  /* ccv min luminance value */
302*495ae853SAndroid Build Coastguard Worker         }
303*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_max_luminance_value_present_flag)
304*495ae853SAndroid Build Coastguard Worker         {
305*495ae853SAndroid Build Coastguard Worker             u2_payload_bits += 32;  /* ccv max luminance value */
306*495ae853SAndroid Build Coastguard Worker         }
307*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_avg_luminance_value_present_flag)
308*495ae853SAndroid Build Coastguard Worker         {
309*495ae853SAndroid Build Coastguard Worker             u2_payload_bits += 32;  /* ccv avg luminance value */
310*495ae853SAndroid Build Coastguard Worker         }
311*495ae853SAndroid Build Coastguard Worker     }
312*495ae853SAndroid Build Coastguard Worker 
313*495ae853SAndroid Build Coastguard Worker     u1_payload_bytes = (UWORD8)((u2_payload_bits + 7) >> 3);
314*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
315*495ae853SAndroid Build Coastguard Worker     /* PayloadSize : This is the size of the payload in bytes               */
316*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
317*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, u1_payload_bytes, 8, return_status, "u1_payload_bytes");
318*495ae853SAndroid Build Coastguard Worker 
319*495ae853SAndroid Build Coastguard Worker     /*******************************************************************************/
320*495ae853SAndroid Build Coastguard Worker     /* Put the Content Color Volume SEI parameters into the bitstream.  */
321*495ae853SAndroid Build Coastguard Worker     /*******************************************************************************/
322*495ae853SAndroid Build Coastguard Worker 
323*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, ps_sei_ccv->u1_ccv_cancel_flag, 1,
324*495ae853SAndroid Build Coastguard Worker                             return_status, "u1_ccv_cancel_flag");
325*495ae853SAndroid Build Coastguard Worker 
326*495ae853SAndroid Build Coastguard Worker     if(0 == ps_sei_ccv->u1_ccv_cancel_flag)
327*495ae853SAndroid Build Coastguard Worker     {
328*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_ccv->u1_ccv_persistence_flag, 1,
329*495ae853SAndroid Build Coastguard Worker                                 return_status, "u1_ccv_persistence_flag");
330*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_ccv->u1_ccv_primaries_present_flag, 1,
331*495ae853SAndroid Build Coastguard Worker                                 return_status, "u1_ccv_primaries_present_flag");
332*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_ccv->u1_ccv_min_luminance_value_present_flag, 1,
333*495ae853SAndroid Build Coastguard Worker                                 return_status, "u1_ccv_min_luminance_value_present_flag");
334*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_ccv->u1_ccv_max_luminance_value_present_flag, 1,
335*495ae853SAndroid Build Coastguard Worker                                 return_status, "u1_ccv_max_luminance_value_present_flag");
336*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_ccv->u1_ccv_avg_luminance_value_present_flag, 1,
337*495ae853SAndroid Build Coastguard Worker                                 return_status, "u1_ccv_avg_luminance_value_present_flag");
338*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_ccv->u1_ccv_reserved_zero_2bits, 2,
339*495ae853SAndroid Build Coastguard Worker                                 return_status, "u1_ccv_reserved_zero_2bits");
340*495ae853SAndroid Build Coastguard Worker 
341*495ae853SAndroid Build Coastguard Worker         /* ccv primaries */
342*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_primaries_present_flag)
343*495ae853SAndroid Build Coastguard Worker         {
344*495ae853SAndroid Build Coastguard Worker             for(u4_count = 0; u4_count < NUM_SEI_CCV_PRIMARIES; u4_count++)
345*495ae853SAndroid Build Coastguard Worker             {
346*495ae853SAndroid Build Coastguard Worker                 PUT_BITS(ps_bitstrm, ps_sei_ccv->ai4_ccv_primaries_x[u4_count], 32,
347*495ae853SAndroid Build Coastguard Worker                                 return_status, "i4_ccv_primaries_x");
348*495ae853SAndroid Build Coastguard Worker                 PUT_BITS(ps_bitstrm, ps_sei_ccv->ai4_ccv_primaries_y[u4_count], 32,
349*495ae853SAndroid Build Coastguard Worker                                 return_status, "i4_ccv_primaries_y");
350*495ae853SAndroid Build Coastguard Worker             }
351*495ae853SAndroid Build Coastguard Worker         }
352*495ae853SAndroid Build Coastguard Worker 
353*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_min_luminance_value_present_flag)
354*495ae853SAndroid Build Coastguard Worker         {
355*495ae853SAndroid Build Coastguard Worker             PUT_BITS(ps_bitstrm, ps_sei_ccv->u4_ccv_min_luminance_value, 32,
356*495ae853SAndroid Build Coastguard Worker                                 return_status, "u4_ccv_min_luminance_value");
357*495ae853SAndroid Build Coastguard Worker         }
358*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_max_luminance_value_present_flag)
359*495ae853SAndroid Build Coastguard Worker         {
360*495ae853SAndroid Build Coastguard Worker             PUT_BITS(ps_bitstrm, ps_sei_ccv->u4_ccv_max_luminance_value, 32,
361*495ae853SAndroid Build Coastguard Worker                                 return_status, "u4_ccv_max_luminance_value");
362*495ae853SAndroid Build Coastguard Worker         }
363*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_ccv->u1_ccv_avg_luminance_value_present_flag)
364*495ae853SAndroid Build Coastguard Worker         {
365*495ae853SAndroid Build Coastguard Worker             PUT_BITS(ps_bitstrm, ps_sei_ccv->u4_ccv_avg_luminance_value, 32,
366*495ae853SAndroid Build Coastguard Worker                                 return_status, "u4_ccv_avg_luminance_value");
367*495ae853SAndroid Build Coastguard Worker         }
368*495ae853SAndroid Build Coastguard Worker     }
369*495ae853SAndroid Build Coastguard Worker 
370*495ae853SAndroid Build Coastguard Worker     return (return_status);
371*495ae853SAndroid Build Coastguard Worker }
372*495ae853SAndroid Build Coastguard Worker 
373*495ae853SAndroid Build Coastguard Worker /**
374*495ae853SAndroid Build Coastguard Worker ******************************************************************************
375*495ae853SAndroid Build Coastguard Worker *
376*495ae853SAndroid Build Coastguard Worker *  @brief Signal shutter interval info in the bitstream
377*495ae853SAndroid Build Coastguard Worker *
378*495ae853SAndroid Build Coastguard Worker *  @par   Description
379*495ae853SAndroid Build Coastguard Worker *  Parse Supplemental Enhancement Information
380*495ae853SAndroid Build Coastguard Worker *
381*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_bitstrm
382*495ae853SAndroid Build Coastguard Worker *  pointer to bitstream context (handle)
383*495ae853SAndroid Build Coastguard Worker *
384*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_sei_sii
385*495ae853SAndroid Build Coastguard Worker *  pointer to shutter interval info
386*495ae853SAndroid Build Coastguard Worker *
387*495ae853SAndroid Build Coastguard Worker *  @return      success or failure error code
388*495ae853SAndroid Build Coastguard Worker *
389*495ae853SAndroid Build Coastguard Worker ******************************************************************************
390*495ae853SAndroid Build Coastguard Worker */
ih264e_put_sei_sii_params(sei_sii_params_t * ps_sei_sii,bitstrm_t * ps_bitstrm)391*495ae853SAndroid Build Coastguard Worker IH264E_ERROR_T ih264e_put_sei_sii_params(sei_sii_params_t *ps_sei_sii, bitstrm_t *ps_bitstrm)
392*495ae853SAndroid Build Coastguard Worker {
393*495ae853SAndroid Build Coastguard Worker     WORD32 return_status = IH264E_SUCCESS;
394*495ae853SAndroid Build Coastguard Worker     UWORD16 u2_payload_bits = 0;
395*495ae853SAndroid Build Coastguard Worker     UWORD8 u1_payload_bytes = 0;
396*495ae853SAndroid Build Coastguard Worker 
397*495ae853SAndroid Build Coastguard Worker     if(ps_sei_sii == NULL)
398*495ae853SAndroid Build Coastguard Worker     {
399*495ae853SAndroid Build Coastguard Worker         return IH264E_FAIL;
400*495ae853SAndroid Build Coastguard Worker     }
401*495ae853SAndroid Build Coastguard Worker 
402*495ae853SAndroid Build Coastguard Worker     if(0 == ps_sei_sii->u4_sii_sub_layer_idx)
403*495ae853SAndroid Build Coastguard Worker     {
404*495ae853SAndroid Build Coastguard Worker         u2_payload_bits += 1; /* shutter interval info present flag */
405*495ae853SAndroid Build Coastguard Worker 
406*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_sii->u1_shutter_interval_info_present_flag)
407*495ae853SAndroid Build Coastguard Worker         {
408*495ae853SAndroid Build Coastguard Worker             u2_payload_bits += 32; /* sii time scale */
409*495ae853SAndroid Build Coastguard Worker             u2_payload_bits += 1;  /* fixed shutter interval within cvs flag */
410*495ae853SAndroid Build Coastguard Worker 
411*495ae853SAndroid Build Coastguard Worker             if(1 == ps_sei_sii->u1_fixed_shutter_interval_within_cvs_flag)
412*495ae853SAndroid Build Coastguard Worker             {
413*495ae853SAndroid Build Coastguard Worker                 u2_payload_bits += 32; /* sii num units in shutter interval */
414*495ae853SAndroid Build Coastguard Worker             }
415*495ae853SAndroid Build Coastguard Worker             else
416*495ae853SAndroid Build Coastguard Worker             {
417*495ae853SAndroid Build Coastguard Worker                 int sizeofSubLayer;
418*495ae853SAndroid Build Coastguard Worker                 u2_payload_bits += 3; /* sii max sub layers minus1 */
419*495ae853SAndroid Build Coastguard Worker                 sizeofSubLayer =
420*495ae853SAndroid Build Coastguard Worker                     sizeof(ps_sei_sii->au4_sub_layer_num_units_in_shutter_interval) /
421*495ae853SAndroid Build Coastguard Worker                     sizeof(ps_sei_sii->au4_sub_layer_num_units_in_shutter_interval[0]);
422*495ae853SAndroid Build Coastguard Worker                 u2_payload_bits +=
423*495ae853SAndroid Build Coastguard Worker                     32 * sizeofSubLayer; /* sii sub layer num units in shutter interval */
424*495ae853SAndroid Build Coastguard Worker             }
425*495ae853SAndroid Build Coastguard Worker         }
426*495ae853SAndroid Build Coastguard Worker     }
427*495ae853SAndroid Build Coastguard Worker 
428*495ae853SAndroid Build Coastguard Worker     u1_payload_bytes = (UWORD8) ((u2_payload_bits + 7) >> 3);
429*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
430*495ae853SAndroid Build Coastguard Worker     /* PayloadSize : This is the size of the payload in bytes               */
431*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
432*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, u1_payload_bytes, 8, return_status, "u1_payload_bytes");
433*495ae853SAndroid Build Coastguard Worker 
434*495ae853SAndroid Build Coastguard Worker     /*******************************************************************************/
435*495ae853SAndroid Build Coastguard Worker     /* Put the Shutter Interval Info SEI parameters into the bitstream.            */
436*495ae853SAndroid Build Coastguard Worker     /*******************************************************************************/
437*495ae853SAndroid Build Coastguard Worker 
438*495ae853SAndroid Build Coastguard Worker     PUT_BITS_UEV(ps_bitstrm, ps_sei_sii->u4_sii_sub_layer_idx, return_status,
439*495ae853SAndroid Build Coastguard Worker                  "u4_sii_sub_layer_idx");
440*495ae853SAndroid Build Coastguard Worker 
441*495ae853SAndroid Build Coastguard Worker     if(0 == ps_sei_sii->u4_sii_sub_layer_idx)
442*495ae853SAndroid Build Coastguard Worker     {
443*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, ps_sei_sii->u1_shutter_interval_info_present_flag, 1, return_status,
444*495ae853SAndroid Build Coastguard Worker                  "u1_shutter_interval_info_present_flag");
445*495ae853SAndroid Build Coastguard Worker 
446*495ae853SAndroid Build Coastguard Worker         if(1 == ps_sei_sii->u1_shutter_interval_info_present_flag)
447*495ae853SAndroid Build Coastguard Worker         {
448*495ae853SAndroid Build Coastguard Worker             PUT_BITS(ps_bitstrm, ps_sei_sii->u4_sii_time_scale, 32, return_status,
449*495ae853SAndroid Build Coastguard Worker                      "u4_sii_time_scale");
450*495ae853SAndroid Build Coastguard Worker             PUT_BITS(ps_bitstrm, ps_sei_sii->u1_fixed_shutter_interval_within_cvs_flag, 1,
451*495ae853SAndroid Build Coastguard Worker                      return_status, "u1_fixed_shutter_interval_within_cvs_flag");
452*495ae853SAndroid Build Coastguard Worker 
453*495ae853SAndroid Build Coastguard Worker             if(1 == ps_sei_sii->u1_fixed_shutter_interval_within_cvs_flag)
454*495ae853SAndroid Build Coastguard Worker             {
455*495ae853SAndroid Build Coastguard Worker                 PUT_BITS(ps_bitstrm, ps_sei_sii->u4_sii_num_units_in_shutter_interval, 32,
456*495ae853SAndroid Build Coastguard Worker                          return_status, "u4_sii_num_units_in_shutter_interval");
457*495ae853SAndroid Build Coastguard Worker             }
458*495ae853SAndroid Build Coastguard Worker             else
459*495ae853SAndroid Build Coastguard Worker             {
460*495ae853SAndroid Build Coastguard Worker                 int i;
461*495ae853SAndroid Build Coastguard Worker                 PUT_BITS(ps_bitstrm, ps_sei_sii->u1_sii_max_sub_layers_minus1, 3, return_status,
462*495ae853SAndroid Build Coastguard Worker                          "u1_sii_max_sub_layers_minus1");
463*495ae853SAndroid Build Coastguard Worker 
464*495ae853SAndroid Build Coastguard Worker                 for(i = 0; i <= ps_sei_sii->u1_sii_max_sub_layers_minus1; i++)
465*495ae853SAndroid Build Coastguard Worker                 {
466*495ae853SAndroid Build Coastguard Worker                     PUT_BITS(ps_bitstrm, ps_sei_sii->au4_sub_layer_num_units_in_shutter_interval[i],
467*495ae853SAndroid Build Coastguard Worker                              32, return_status, "au4_sub_layer_num_units_in_shutter_interval[i]");
468*495ae853SAndroid Build Coastguard Worker                 }
469*495ae853SAndroid Build Coastguard Worker             }
470*495ae853SAndroid Build Coastguard Worker         }
471*495ae853SAndroid Build Coastguard Worker     }
472*495ae853SAndroid Build Coastguard Worker     return (return_status);
473*495ae853SAndroid Build Coastguard Worker }
474*495ae853SAndroid Build Coastguard Worker 
475*495ae853SAndroid Build Coastguard Worker /**
476*495ae853SAndroid Build Coastguard Worker ******************************************************************************
477*495ae853SAndroid Build Coastguard Worker *
478*495ae853SAndroid Build Coastguard Worker *  @brief Generates SEI (Supplemental Enhancement Information )
479*495ae853SAndroid Build Coastguard Worker *
480*495ae853SAndroid Build Coastguard Worker *  @par   Description
481*495ae853SAndroid Build Coastguard Worker *  Parse Supplemental Enhancement Information
482*495ae853SAndroid Build Coastguard Worker *
483*495ae853SAndroid Build Coastguard Worker *  @param[in]   e_payload_type
484*495ae853SAndroid Build Coastguard Worker *  Determines the type of SEI msg
485*495ae853SAndroid Build Coastguard Worker *
486*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_bitstrm
487*495ae853SAndroid Build Coastguard Worker *  pointer to bitstream context (handle)
488*495ae853SAndroid Build Coastguard Worker *
489*495ae853SAndroid Build Coastguard Worker *  @param[in]   ps_sei_params
490*495ae853SAndroid Build Coastguard Worker *  pointer to structure containing SEI data
491*495ae853SAndroid Build Coastguard Worker *               buffer period, recovery point, picture timing
492*495ae853SAndroid Build Coastguard Worker *
493*495ae853SAndroid Build Coastguard Worker *  @return      success or failure error code
494*495ae853SAndroid Build Coastguard Worker *
495*495ae853SAndroid Build Coastguard Worker ******************************************************************************
496*495ae853SAndroid Build Coastguard Worker */
ih264e_put_sei_msg(IH264_SEI_TYPE e_payload_type,sei_params_t * ps_sei_params,bitstrm_t * ps_bitstrm)497*495ae853SAndroid Build Coastguard Worker IH264E_ERROR_T ih264e_put_sei_msg(IH264_SEI_TYPE e_payload_type,
498*495ae853SAndroid Build Coastguard Worker                          sei_params_t *ps_sei_params,
499*495ae853SAndroid Build Coastguard Worker                          bitstrm_t *ps_bitstrm)
500*495ae853SAndroid Build Coastguard Worker {
501*495ae853SAndroid Build Coastguard Worker     WORD32 return_status = IH264E_SUCCESS;
502*495ae853SAndroid Build Coastguard Worker 
503*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
504*495ae853SAndroid Build Coastguard Worker     /* PayloadType : Send in the SEI type in the stream                     */
505*495ae853SAndroid Build Coastguard Worker     /************************************************************************/
506*495ae853SAndroid Build Coastguard Worker 
507*495ae853SAndroid Build Coastguard Worker     UWORD32 u4_payload_type = e_payload_type;
508*495ae853SAndroid Build Coastguard Worker 
509*495ae853SAndroid Build Coastguard Worker     while(u4_payload_type > 0xFF)
510*495ae853SAndroid Build Coastguard Worker     {
511*495ae853SAndroid Build Coastguard Worker         PUT_BITS(ps_bitstrm, 0xFF, 8, return_status, "payload");
512*495ae853SAndroid Build Coastguard Worker         u4_payload_type -= 0xFF;
513*495ae853SAndroid Build Coastguard Worker     }
514*495ae853SAndroid Build Coastguard Worker 
515*495ae853SAndroid Build Coastguard Worker     PUT_BITS(ps_bitstrm, (UWORD32)u4_payload_type, 8, return_status, "e_payload_type");
516*495ae853SAndroid Build Coastguard Worker 
517*495ae853SAndroid Build Coastguard Worker     switch(e_payload_type)
518*495ae853SAndroid Build Coastguard Worker     {
519*495ae853SAndroid Build Coastguard Worker     case IH264_SEI_MASTERING_DISP_COL_VOL :
520*495ae853SAndroid Build Coastguard Worker         return_status = ih264e_put_sei_mdcv_params(&(ps_sei_params->s_sei_mdcv_params),
521*495ae853SAndroid Build Coastguard Worker                                                     ps_bitstrm);
522*495ae853SAndroid Build Coastguard Worker         break;
523*495ae853SAndroid Build Coastguard Worker 
524*495ae853SAndroid Build Coastguard Worker     case IH264_SEI_CONTENT_LIGHT_LEVEL_DATA :
525*495ae853SAndroid Build Coastguard Worker         return_status = ih264e_put_sei_cll_params(&(ps_sei_params->s_sei_cll_params),
526*495ae853SAndroid Build Coastguard Worker                                                     ps_bitstrm);
527*495ae853SAndroid Build Coastguard Worker         break;
528*495ae853SAndroid Build Coastguard Worker 
529*495ae853SAndroid Build Coastguard Worker     case IH264_SEI_AMBIENT_VIEWING_ENVIRONMENT :
530*495ae853SAndroid Build Coastguard Worker         return_status = ih264e_put_sei_ave_params(&(ps_sei_params->s_sei_ave_params),
531*495ae853SAndroid Build Coastguard Worker                                                     ps_bitstrm);
532*495ae853SAndroid Build Coastguard Worker         break;
533*495ae853SAndroid Build Coastguard Worker 
534*495ae853SAndroid Build Coastguard Worker     case IH264_SEI_CONTENT_COLOR_VOLUME :
535*495ae853SAndroid Build Coastguard Worker          return_status = ih264e_put_sei_ccv_params(&(ps_sei_params->s_sei_ccv_params),
536*495ae853SAndroid Build Coastguard Worker                                                     ps_bitstrm);
537*495ae853SAndroid Build Coastguard Worker          break;
538*495ae853SAndroid Build Coastguard Worker 
539*495ae853SAndroid Build Coastguard Worker     case IH264_SEI_SHUTTER_INTERVAL_INFO:
540*495ae853SAndroid Build Coastguard Worker          return_status = ih264e_put_sei_sii_params(&(ps_sei_params->s_sei_sii_params), ps_bitstrm);
541*495ae853SAndroid Build Coastguard Worker 
542*495ae853SAndroid Build Coastguard Worker          break;
543*495ae853SAndroid Build Coastguard Worker 
544*495ae853SAndroid Build Coastguard Worker     default :
545*495ae853SAndroid Build Coastguard Worker         return_status = IH264E_FAIL;
546*495ae853SAndroid Build Coastguard Worker     }
547*495ae853SAndroid Build Coastguard Worker 
548*495ae853SAndroid Build Coastguard Worker     /* rbsp trailing bits */
549*495ae853SAndroid Build Coastguard Worker     if((IH264E_SUCCESS == return_status) && (ps_bitstrm->i4_bits_left_in_cw & 0x7))
550*495ae853SAndroid Build Coastguard Worker         return_status = ih264e_put_rbsp_trailing_bits(ps_bitstrm);
551*495ae853SAndroid Build Coastguard Worker 
552*495ae853SAndroid Build Coastguard Worker     return(return_status);
553*495ae853SAndroid Build Coastguard Worker }
554*495ae853SAndroid Build Coastguard Worker 
555*495ae853SAndroid Build Coastguard Worker 
556