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 Name : ih264d_sei.c */
24*495ae853SAndroid Build Coastguard Worker /* */
25*495ae853SAndroid Build Coastguard Worker /* Description : This file contains routines to parse SEI NAL's */
26*495ae853SAndroid Build Coastguard Worker /* */
27*495ae853SAndroid Build Coastguard Worker /* List of Functions : <List the functions defined in this file> */
28*495ae853SAndroid Build Coastguard Worker /* */
29*495ae853SAndroid Build Coastguard Worker /* Issues / Problems : None */
30*495ae853SAndroid Build Coastguard Worker /* */
31*495ae853SAndroid Build Coastguard Worker /* Revision History : */
32*495ae853SAndroid Build Coastguard Worker /* */
33*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
34*495ae853SAndroid Build Coastguard Worker /* 25 05 2005 NS Draft */
35*495ae853SAndroid Build Coastguard Worker /* */
36*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
37*495ae853SAndroid Build Coastguard Worker
38*495ae853SAndroid Build Coastguard Worker #include <string.h>
39*495ae853SAndroid Build Coastguard Worker
40*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
41*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
42*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
43*495ae853SAndroid Build Coastguard Worker #include "ih264d_bitstrm.h"
44*495ae853SAndroid Build Coastguard Worker #include "ih264d_structs.h"
45*495ae853SAndroid Build Coastguard Worker #include "ih264d_error_handler.h"
46*495ae853SAndroid Build Coastguard Worker #include "ih264d_vui.h"
47*495ae853SAndroid Build Coastguard Worker #include "ih264d_parse_cavlc.h"
48*495ae853SAndroid Build Coastguard Worker #include "ih264d_defs.h"
49*495ae853SAndroid Build Coastguard Worker
50*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
51*495ae853SAndroid Build Coastguard Worker /* */
52*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_buffering_period */
53*495ae853SAndroid Build Coastguard Worker /* */
54*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message buffering_period */
55*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_buf_prd pointer to struct buf_period_t */
56*495ae853SAndroid Build Coastguard Worker /* ps_bitstrm Bitstream */
57*495ae853SAndroid Build Coastguard Worker /* Globals : None */
58*495ae853SAndroid Build Coastguard Worker /* Processing : Parses SEI payload buffering period. */
59*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
60*495ae853SAndroid Build Coastguard Worker /* Return : 0 for successfull parsing, else error message */
61*495ae853SAndroid Build Coastguard Worker /* */
62*495ae853SAndroid Build Coastguard Worker /* Issues : Not implemented fully */
63*495ae853SAndroid Build Coastguard Worker /* */
64*495ae853SAndroid Build Coastguard Worker /* Revision History: */
65*495ae853SAndroid Build Coastguard Worker /* */
66*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
67*495ae853SAndroid Build Coastguard Worker /* 06 05 2002 NS Draft */
68*495ae853SAndroid Build Coastguard Worker /* */
69*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
70*495ae853SAndroid Build Coastguard Worker
ih264d_parse_buffering_period(buf_period_t * ps_buf_prd,dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec)71*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_buffering_period(buf_period_t *ps_buf_prd,
72*495ae853SAndroid Build Coastguard Worker dec_bit_stream_t *ps_bitstrm,
73*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec)
74*495ae853SAndroid Build Coastguard Worker {
75*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seq_parameter_set_id;
76*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_seq;
77*495ae853SAndroid Build Coastguard Worker UWORD8 u1_nal_hrd_present, u1_vcl_hrd_present;
78*495ae853SAndroid Build Coastguard Worker UWORD32 i;
79*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
80*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
81*495ae853SAndroid Build Coastguard Worker UNUSED(ps_buf_prd);
82*495ae853SAndroid Build Coastguard Worker u1_seq_parameter_set_id = ih264d_uev(pu4_bitstrm_ofst,
83*495ae853SAndroid Build Coastguard Worker pu4_bitstrm_buf);
84*495ae853SAndroid Build Coastguard Worker if(u1_seq_parameter_set_id >= MAX_NUM_SEQ_PARAMS)
85*495ae853SAndroid Build Coastguard Worker return ERROR_INVALID_SEQ_PARAM;
86*495ae853SAndroid Build Coastguard Worker ps_seq = &ps_dec->ps_sps[u1_seq_parameter_set_id];
87*495ae853SAndroid Build Coastguard Worker if(TRUE != ps_seq->u1_is_valid)
88*495ae853SAndroid Build Coastguard Worker return ERROR_INVALID_SEQ_PARAM;
89*495ae853SAndroid Build Coastguard Worker
90*495ae853SAndroid Build Coastguard Worker ps_dec->ps_sei->u1_seq_param_set_id = u1_seq_parameter_set_id;
91*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_sps = ps_seq;
92*495ae853SAndroid Build Coastguard Worker if(FALSE == ps_seq->u1_is_valid)
93*495ae853SAndroid Build Coastguard Worker return ERROR_INVALID_SEQ_PARAM;
94*495ae853SAndroid Build Coastguard Worker if(1 == ps_seq->u1_vui_parameters_present_flag)
95*495ae853SAndroid Build Coastguard Worker {
96*495ae853SAndroid Build Coastguard Worker u1_nal_hrd_present = ps_seq->s_vui.u1_nal_hrd_params_present;
97*495ae853SAndroid Build Coastguard Worker if(u1_nal_hrd_present)
98*495ae853SAndroid Build Coastguard Worker {
99*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_seq->s_vui.s_nal_hrd.u4_cpb_cnt; i++)
100*495ae853SAndroid Build Coastguard Worker {
101*495ae853SAndroid Build Coastguard Worker ih264d_get_bits_h264(
102*495ae853SAndroid Build Coastguard Worker ps_bitstrm,
103*495ae853SAndroid Build Coastguard Worker ps_seq->s_vui.s_nal_hrd.u1_initial_cpb_removal_delay);
104*495ae853SAndroid Build Coastguard Worker ih264d_get_bits_h264(
105*495ae853SAndroid Build Coastguard Worker ps_bitstrm,
106*495ae853SAndroid Build Coastguard Worker ps_seq->s_vui.s_nal_hrd.u1_initial_cpb_removal_delay);
107*495ae853SAndroid Build Coastguard Worker }
108*495ae853SAndroid Build Coastguard Worker }
109*495ae853SAndroid Build Coastguard Worker
110*495ae853SAndroid Build Coastguard Worker u1_vcl_hrd_present = ps_seq->s_vui.u1_vcl_hrd_params_present;
111*495ae853SAndroid Build Coastguard Worker if(u1_vcl_hrd_present)
112*495ae853SAndroid Build Coastguard Worker {
113*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_seq->s_vui.s_vcl_hrd.u4_cpb_cnt; i++)
114*495ae853SAndroid Build Coastguard Worker {
115*495ae853SAndroid Build Coastguard Worker ih264d_get_bits_h264(
116*495ae853SAndroid Build Coastguard Worker ps_bitstrm,
117*495ae853SAndroid Build Coastguard Worker ps_seq->s_vui.s_vcl_hrd.u1_initial_cpb_removal_delay);
118*495ae853SAndroid Build Coastguard Worker ih264d_get_bits_h264(
119*495ae853SAndroid Build Coastguard Worker ps_bitstrm,
120*495ae853SAndroid Build Coastguard Worker ps_seq->s_vui.s_vcl_hrd.u1_initial_cpb_removal_delay);
121*495ae853SAndroid Build Coastguard Worker }
122*495ae853SAndroid Build Coastguard Worker }
123*495ae853SAndroid Build Coastguard Worker }
124*495ae853SAndroid Build Coastguard Worker return (OK);
125*495ae853SAndroid Build Coastguard Worker }
126*495ae853SAndroid Build Coastguard Worker
127*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
128*495ae853SAndroid Build Coastguard Worker /* */
129*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_pic_timing */
130*495ae853SAndroid Build Coastguard Worker /* */
131*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message pic_timing */
132*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
133*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
134*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
135*495ae853SAndroid Build Coastguard Worker /* Globals : None */
136*495ae853SAndroid Build Coastguard Worker /* Processing : Parses SEI payload picture timing */
137*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
138*495ae853SAndroid Build Coastguard Worker /* Return : 0 */
139*495ae853SAndroid Build Coastguard Worker /* */
140*495ae853SAndroid Build Coastguard Worker /* Issues : Not implemented fully */
141*495ae853SAndroid Build Coastguard Worker /* */
142*495ae853SAndroid Build Coastguard Worker /* Revision History: */
143*495ae853SAndroid Build Coastguard Worker /* */
144*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
145*495ae853SAndroid Build Coastguard Worker /* 06 05 2002 NS Draft */
146*495ae853SAndroid Build Coastguard Worker /* */
147*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_pic_timing(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)148*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_pic_timing(dec_bit_stream_t *ps_bitstrm,
149*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec,
150*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
151*495ae853SAndroid Build Coastguard Worker {
152*495ae853SAndroid Build Coastguard Worker sei *ps_sei;
153*495ae853SAndroid Build Coastguard Worker vui_t *ps_vu4;
154*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cpb_dpb_present;
155*495ae853SAndroid Build Coastguard Worker UWORD8 u1_pic_struct_present_flag;
156*495ae853SAndroid Build Coastguard Worker UWORD32 u4_start_offset, u4_bits_consumed;
157*495ae853SAndroid Build Coastguard Worker UWORD8 u1_cpb_removal_delay_length, u1_dpb_output_delay_length;
158*495ae853SAndroid Build Coastguard Worker
159*495ae853SAndroid Build Coastguard Worker ps_sei = (sei *)ps_dec->ps_sei;
160*495ae853SAndroid Build Coastguard Worker ps_vu4 = &ps_dec->ps_cur_sps->s_vui;
161*495ae853SAndroid Build Coastguard Worker
162*495ae853SAndroid Build Coastguard Worker u1_cpb_dpb_present = ps_vu4->u1_vcl_hrd_params_present
163*495ae853SAndroid Build Coastguard Worker + ps_vu4->u1_nal_hrd_params_present;
164*495ae853SAndroid Build Coastguard Worker
165*495ae853SAndroid Build Coastguard Worker if(ps_vu4->u1_vcl_hrd_params_present)
166*495ae853SAndroid Build Coastguard Worker {
167*495ae853SAndroid Build Coastguard Worker u1_cpb_removal_delay_length =
168*495ae853SAndroid Build Coastguard Worker ps_vu4->s_vcl_hrd.u1_cpb_removal_delay_length;
169*495ae853SAndroid Build Coastguard Worker u1_dpb_output_delay_length =
170*495ae853SAndroid Build Coastguard Worker ps_vu4->s_vcl_hrd.u1_dpb_output_delay_length;
171*495ae853SAndroid Build Coastguard Worker }
172*495ae853SAndroid Build Coastguard Worker else if(ps_vu4->u1_nal_hrd_params_present)
173*495ae853SAndroid Build Coastguard Worker {
174*495ae853SAndroid Build Coastguard Worker u1_cpb_removal_delay_length =
175*495ae853SAndroid Build Coastguard Worker ps_vu4->s_nal_hrd.u1_cpb_removal_delay_length;
176*495ae853SAndroid Build Coastguard Worker u1_dpb_output_delay_length =
177*495ae853SAndroid Build Coastguard Worker ps_vu4->s_nal_hrd.u1_dpb_output_delay_length;
178*495ae853SAndroid Build Coastguard Worker }
179*495ae853SAndroid Build Coastguard Worker else
180*495ae853SAndroid Build Coastguard Worker {
181*495ae853SAndroid Build Coastguard Worker u1_cpb_removal_delay_length = 24;
182*495ae853SAndroid Build Coastguard Worker u1_dpb_output_delay_length = 24;
183*495ae853SAndroid Build Coastguard Worker
184*495ae853SAndroid Build Coastguard Worker }
185*495ae853SAndroid Build Coastguard Worker
186*495ae853SAndroid Build Coastguard Worker u4_start_offset = ps_bitstrm->u4_ofst;
187*495ae853SAndroid Build Coastguard Worker if(u1_cpb_dpb_present)
188*495ae853SAndroid Build Coastguard Worker {
189*495ae853SAndroid Build Coastguard Worker ih264d_get_bits_h264(ps_bitstrm, u1_cpb_removal_delay_length);
190*495ae853SAndroid Build Coastguard Worker ih264d_get_bits_h264(ps_bitstrm, u1_dpb_output_delay_length);
191*495ae853SAndroid Build Coastguard Worker }
192*495ae853SAndroid Build Coastguard Worker
193*495ae853SAndroid Build Coastguard Worker u1_pic_struct_present_flag = ps_vu4->u1_pic_struct_present_flag;
194*495ae853SAndroid Build Coastguard Worker if(u1_pic_struct_present_flag)
195*495ae853SAndroid Build Coastguard Worker {
196*495ae853SAndroid Build Coastguard Worker ps_sei->u1_pic_struct = ih264d_get_bits_h264(ps_bitstrm, 4);
197*495ae853SAndroid Build Coastguard Worker ps_dec->u1_pic_struct_copy = ps_sei->u1_pic_struct;
198*495ae853SAndroid Build Coastguard Worker ps_sei->u1_is_valid = 1;
199*495ae853SAndroid Build Coastguard Worker }
200*495ae853SAndroid Build Coastguard Worker u4_bits_consumed = ps_bitstrm->u4_ofst - u4_start_offset;
201*495ae853SAndroid Build Coastguard Worker
202*495ae853SAndroid Build Coastguard Worker if((ui4_payload_size << 3) < u4_bits_consumed)
203*495ae853SAndroid Build Coastguard Worker return ERROR_CORRUPTED_SLICE;
204*495ae853SAndroid Build Coastguard Worker
205*495ae853SAndroid Build Coastguard Worker ih264d_flush_bits_h264(ps_bitstrm,
206*495ae853SAndroid Build Coastguard Worker (ui4_payload_size << 3) - u4_bits_consumed);
207*495ae853SAndroid Build Coastguard Worker
208*495ae853SAndroid Build Coastguard Worker return (OK);
209*495ae853SAndroid Build Coastguard Worker }
210*495ae853SAndroid Build Coastguard Worker
211*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
212*495ae853SAndroid Build Coastguard Worker /* */
213*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_recovery_point */
214*495ae853SAndroid Build Coastguard Worker /* */
215*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message recovery point */
216*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
217*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
218*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
219*495ae853SAndroid Build Coastguard Worker /* Globals : None */
220*495ae853SAndroid Build Coastguard Worker /* Processing : Parses SEI payload picture timing */
221*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
222*495ae853SAndroid Build Coastguard Worker /* Return : 0 */
223*495ae853SAndroid Build Coastguard Worker /* */
224*495ae853SAndroid Build Coastguard Worker /* Issues : Not implemented fully */
225*495ae853SAndroid Build Coastguard Worker /* */
226*495ae853SAndroid Build Coastguard Worker /* Revision History: */
227*495ae853SAndroid Build Coastguard Worker /* */
228*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
229*495ae853SAndroid Build Coastguard Worker /* 06 05 2002 NS Draft */
230*495ae853SAndroid Build Coastguard Worker /* */
231*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_recovery_point(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)232*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_recovery_point(dec_bit_stream_t *ps_bitstrm,
233*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec,
234*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
235*495ae853SAndroid Build Coastguard Worker {
236*495ae853SAndroid Build Coastguard Worker sei *ps_sei = ps_dec->ps_sei;
237*495ae853SAndroid Build Coastguard Worker dec_err_status_t *ps_err = ps_dec->ps_dec_err_status;
238*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
239*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
240*495ae853SAndroid Build Coastguard Worker UNUSED(ui4_payload_size);
241*495ae853SAndroid Build Coastguard Worker ps_sei->u2_recovery_frame_cnt = ih264d_uev(pu4_bitstrm_ofst,
242*495ae853SAndroid Build Coastguard Worker pu4_bitstrm_buf);
243*495ae853SAndroid Build Coastguard Worker ps_err->u4_frm_sei_sync = ps_err->u4_cur_frm
244*495ae853SAndroid Build Coastguard Worker + ps_sei->u2_recovery_frame_cnt;
245*495ae853SAndroid Build Coastguard Worker ps_sei->u1_exact_match_flag = ih264d_get_bit_h264(ps_bitstrm);
246*495ae853SAndroid Build Coastguard Worker ps_sei->u1_broken_link_flag = ih264d_get_bit_h264(ps_bitstrm);
247*495ae853SAndroid Build Coastguard Worker ps_sei->u1_changing_slice_grp_idc = ih264d_get_bits_h264(ps_bitstrm, 2);
248*495ae853SAndroid Build Coastguard Worker
249*495ae853SAndroid Build Coastguard Worker return (OK);
250*495ae853SAndroid Build Coastguard Worker }
251*495ae853SAndroid Build Coastguard Worker
252*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
253*495ae853SAndroid Build Coastguard Worker /* */
254*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_mdcv */
255*495ae853SAndroid Build Coastguard Worker /* */
256*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message mdcv */
257*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
258*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
259*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
260*495ae853SAndroid Build Coastguard Worker /* Globals : None */
261*495ae853SAndroid Build Coastguard Worker /* Processing : */
262*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
263*495ae853SAndroid Build Coastguard Worker /* Return : 0 for successfull parsing, else -1 */
264*495ae853SAndroid Build Coastguard Worker /* */
265*495ae853SAndroid Build Coastguard Worker /* Issues : */
266*495ae853SAndroid Build Coastguard Worker /* */
267*495ae853SAndroid Build Coastguard Worker /* Revision History: */
268*495ae853SAndroid Build Coastguard Worker /* */
269*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
270*495ae853SAndroid Build Coastguard Worker /* Draft */
271*495ae853SAndroid Build Coastguard Worker /* */
272*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_mdcv(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)273*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_mdcv(dec_bit_stream_t *ps_bitstrm,
274*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec,
275*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
276*495ae853SAndroid Build Coastguard Worker {
277*495ae853SAndroid Build Coastguard Worker sei *ps_sei = ps_dec->ps_sei_parse;
278*495ae853SAndroid Build Coastguard Worker dec_err_status_t *ps_err = ps_dec->ps_dec_err_status;
279*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
280*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
281*495ae853SAndroid Build Coastguard Worker UWORD32 u4_count;
282*495ae853SAndroid Build Coastguard Worker UNUSED(ui4_payload_size);
283*495ae853SAndroid Build Coastguard Worker
284*495ae853SAndroid Build Coastguard Worker if((ps_dec == NULL) || (ps_sei == NULL))
285*495ae853SAndroid Build Coastguard Worker {
286*495ae853SAndroid Build Coastguard Worker return NOT_OK;
287*495ae853SAndroid Build Coastguard Worker }
288*495ae853SAndroid Build Coastguard Worker
289*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 1;
290*495ae853SAndroid Build Coastguard Worker
291*495ae853SAndroid Build Coastguard Worker /* display primaries x */
292*495ae853SAndroid Build Coastguard Worker for(u4_count = 0; u4_count < NUM_SEI_MDCV_PRIMARIES; u4_count++)
293*495ae853SAndroid Build Coastguard Worker {
294*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.au2_display_primaries_x[u4_count] =
295*495ae853SAndroid Build Coastguard Worker (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
296*495ae853SAndroid Build Coastguard Worker
297*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_mdcv_params.au2_display_primaries_x[u4_count] >
298*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_X_UPPER_LIMIT) ||
299*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_mdcv_params.au2_display_primaries_x[u4_count] <
300*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_X_LOWER_LIMIT) ||
301*495ae853SAndroid Build Coastguard Worker ((ps_sei->s_sei_mdcv_params.au2_display_primaries_x[u4_count] %
302*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_X_DIVISION_FACTOR) != 0))
303*495ae853SAndroid Build Coastguard Worker {
304*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 0;
305*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_MDCV_PARAMS;
306*495ae853SAndroid Build Coastguard Worker }
307*495ae853SAndroid Build Coastguard Worker
308*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.au2_display_primaries_y[u4_count] =
309*495ae853SAndroid Build Coastguard Worker (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
310*495ae853SAndroid Build Coastguard Worker
311*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_mdcv_params.au2_display_primaries_y[u4_count] >
312*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_Y_UPPER_LIMIT) ||
313*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_mdcv_params.au2_display_primaries_y[u4_count] <
314*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_Y_LOWER_LIMIT) ||
315*495ae853SAndroid Build Coastguard Worker ((ps_sei->s_sei_mdcv_params.au2_display_primaries_y[u4_count] %
316*495ae853SAndroid Build Coastguard Worker DISPLAY_PRIMARIES_Y_DIVISION_FACTOR) != 0))
317*495ae853SAndroid Build Coastguard Worker {
318*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 0;
319*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_MDCV_PARAMS;
320*495ae853SAndroid Build Coastguard Worker }
321*495ae853SAndroid Build Coastguard Worker }
322*495ae853SAndroid Build Coastguard Worker
323*495ae853SAndroid Build Coastguard Worker /* white point x */
324*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u2_white_point_x = (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
325*495ae853SAndroid Build Coastguard Worker
326*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_mdcv_params.u2_white_point_x > WHITE_POINT_X_UPPER_LIMIT) ||
327*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_mdcv_params.u2_white_point_x < WHITE_POINT_X_LOWER_LIMIT) ||
328*495ae853SAndroid Build Coastguard Worker ((ps_sei->s_sei_mdcv_params.u2_white_point_x % WHITE_POINT_X_DIVISION_FACTOR) != 0))
329*495ae853SAndroid Build Coastguard Worker {
330*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 0;
331*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_MDCV_PARAMS;
332*495ae853SAndroid Build Coastguard Worker }
333*495ae853SAndroid Build Coastguard Worker /* white point y */
334*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u2_white_point_y = (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
335*495ae853SAndroid Build Coastguard Worker
336*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_mdcv_params.u2_white_point_y > WHITE_POINT_Y_UPPER_LIMIT) ||
337*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_mdcv_params.u2_white_point_y < WHITE_POINT_Y_LOWER_LIMIT) ||
338*495ae853SAndroid Build Coastguard Worker ((ps_sei->s_sei_mdcv_params.u2_white_point_y % WHITE_POINT_Y_DIVISION_FACTOR) != 0))
339*495ae853SAndroid Build Coastguard Worker {
340*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 0;
341*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_MDCV_PARAMS;
342*495ae853SAndroid Build Coastguard Worker }
343*495ae853SAndroid Build Coastguard Worker /* max display mastering luminance */
344*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u4_max_display_mastering_luminance =
345*495ae853SAndroid Build Coastguard Worker (UWORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
346*495ae853SAndroid Build Coastguard Worker
347*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_mdcv_params.u4_max_display_mastering_luminance >
348*495ae853SAndroid Build Coastguard Worker MAX_DISPLAY_MASTERING_LUMINANCE_UPPER_LIMIT) ||
349*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_mdcv_params.u4_max_display_mastering_luminance <
350*495ae853SAndroid Build Coastguard Worker MAX_DISPLAY_MASTERING_LUMINANCE_LOWER_LIMIT) ||
351*495ae853SAndroid Build Coastguard Worker ((ps_sei->s_sei_mdcv_params.u4_max_display_mastering_luminance %
352*495ae853SAndroid Build Coastguard Worker MAX_DISPLAY_MASTERING_LUMINANCE_DIVISION_FACTOR) != 0))
353*495ae853SAndroid Build Coastguard Worker {
354*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 0;
355*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_MDCV_PARAMS;
356*495ae853SAndroid Build Coastguard Worker }
357*495ae853SAndroid Build Coastguard Worker /* min display mastering luminance */
358*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u4_min_display_mastering_luminance =
359*495ae853SAndroid Build Coastguard Worker (UWORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
360*495ae853SAndroid Build Coastguard Worker
361*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_mdcv_params.u4_min_display_mastering_luminance >
362*495ae853SAndroid Build Coastguard Worker MIN_DISPLAY_MASTERING_LUMINANCE_UPPER_LIMIT) ||
363*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_mdcv_params.u4_min_display_mastering_luminance <
364*495ae853SAndroid Build Coastguard Worker MIN_DISPLAY_MASTERING_LUMINANCE_LOWER_LIMIT))
365*495ae853SAndroid Build Coastguard Worker {
366*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 0;
367*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_MDCV_PARAMS;
368*495ae853SAndroid Build Coastguard Worker }
369*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_mdcv_params.u4_max_display_mastering_luminance <=
370*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_mdcv_params.u4_min_display_mastering_luminance)
371*495ae853SAndroid Build Coastguard Worker {
372*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_mdcv_params_present_flag = 0;
373*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_MDCV_PARAMS;
374*495ae853SAndroid Build Coastguard Worker }
375*495ae853SAndroid Build Coastguard Worker return (OK);
376*495ae853SAndroid Build Coastguard Worker }
377*495ae853SAndroid Build Coastguard Worker
378*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
379*495ae853SAndroid Build Coastguard Worker /* */
380*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_cll */
381*495ae853SAndroid Build Coastguard Worker /* */
382*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message cll */
383*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
384*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
385*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
386*495ae853SAndroid Build Coastguard Worker /* Globals : None */
387*495ae853SAndroid Build Coastguard Worker /* Processing : */
388*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
389*495ae853SAndroid Build Coastguard Worker /* Return : 0 for successfull parsing, else -1 */
390*495ae853SAndroid Build Coastguard Worker /* */
391*495ae853SAndroid Build Coastguard Worker /* Issues : */
392*495ae853SAndroid Build Coastguard Worker /* */
393*495ae853SAndroid Build Coastguard Worker /* Revision History: */
394*495ae853SAndroid Build Coastguard Worker /* */
395*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
396*495ae853SAndroid Build Coastguard Worker /* Draft */
397*495ae853SAndroid Build Coastguard Worker /* */
398*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_cll(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)399*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_cll(dec_bit_stream_t *ps_bitstrm,
400*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec,
401*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
402*495ae853SAndroid Build Coastguard Worker {
403*495ae853SAndroid Build Coastguard Worker sei *ps_sei = ps_dec->ps_sei_parse;
404*495ae853SAndroid Build Coastguard Worker dec_err_status_t *ps_err = ps_dec->ps_dec_err_status;
405*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
406*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
407*495ae853SAndroid Build Coastguard Worker UNUSED(ui4_payload_size);
408*495ae853SAndroid Build Coastguard Worker
409*495ae853SAndroid Build Coastguard Worker if((ps_dec == NULL) || (ps_sei == NULL))
410*495ae853SAndroid Build Coastguard Worker {
411*495ae853SAndroid Build Coastguard Worker return NOT_OK;
412*495ae853SAndroid Build Coastguard Worker }
413*495ae853SAndroid Build Coastguard Worker
414*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_cll_params_present_flag = 1;
415*495ae853SAndroid Build Coastguard Worker
416*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_cll_params.u2_max_content_light_level =
417*495ae853SAndroid Build Coastguard Worker (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
418*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_cll_params.u2_max_pic_average_light_level =
419*495ae853SAndroid Build Coastguard Worker (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
420*495ae853SAndroid Build Coastguard Worker /*No any sanity checks done for CLL params*/
421*495ae853SAndroid Build Coastguard Worker
422*495ae853SAndroid Build Coastguard Worker return (OK);
423*495ae853SAndroid Build Coastguard Worker }
424*495ae853SAndroid Build Coastguard Worker
425*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
426*495ae853SAndroid Build Coastguard Worker /* */
427*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_ave */
428*495ae853SAndroid Build Coastguard Worker /* */
429*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message ave */
430*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
431*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
432*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
433*495ae853SAndroid Build Coastguard Worker /* Globals : None */
434*495ae853SAndroid Build Coastguard Worker /* Processing : */
435*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
436*495ae853SAndroid Build Coastguard Worker /* Return : 0 for successfull parsing, else -1 */
437*495ae853SAndroid Build Coastguard Worker /* */
438*495ae853SAndroid Build Coastguard Worker /* Issues : */
439*495ae853SAndroid Build Coastguard Worker /* */
440*495ae853SAndroid Build Coastguard Worker /* Revision History: */
441*495ae853SAndroid Build Coastguard Worker /* */
442*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
443*495ae853SAndroid Build Coastguard Worker /* Draft */
444*495ae853SAndroid Build Coastguard Worker /* */
445*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_ave(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)446*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_ave(dec_bit_stream_t *ps_bitstrm,
447*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec,
448*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
449*495ae853SAndroid Build Coastguard Worker {
450*495ae853SAndroid Build Coastguard Worker sei *ps_sei = ps_dec->ps_sei_parse;
451*495ae853SAndroid Build Coastguard Worker dec_err_status_t *ps_err = ps_dec->ps_dec_err_status;
452*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
453*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
454*495ae853SAndroid Build Coastguard Worker UNUSED(ui4_payload_size);
455*495ae853SAndroid Build Coastguard Worker
456*495ae853SAndroid Build Coastguard Worker if((ps_dec == NULL) || (ps_sei == NULL))
457*495ae853SAndroid Build Coastguard Worker {
458*495ae853SAndroid Build Coastguard Worker return NOT_OK;
459*495ae853SAndroid Build Coastguard Worker }
460*495ae853SAndroid Build Coastguard Worker
461*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ave_params_present_flag = 1;
462*495ae853SAndroid Build Coastguard Worker
463*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ave_params.u4_ambient_illuminance = (UWORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
464*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei->s_sei_ave_params.u4_ambient_illuminance)
465*495ae853SAndroid Build Coastguard Worker {
466*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ave_params_present_flag = 0;
467*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_AVE_PARAMS;
468*495ae853SAndroid Build Coastguard Worker }
469*495ae853SAndroid Build Coastguard Worker
470*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ave_params.u2_ambient_light_x = (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
471*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ave_params.u2_ambient_light_x > AMBIENT_LIGHT_X_UPPER_LIMIT)
472*495ae853SAndroid Build Coastguard Worker {
473*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ave_params_present_flag = 0;
474*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_AVE_PARAMS;
475*495ae853SAndroid Build Coastguard Worker }
476*495ae853SAndroid Build Coastguard Worker
477*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ave_params.u2_ambient_light_y = (UWORD16)ih264d_get_bits_h264(ps_bitstrm, 16);
478*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ave_params.u2_ambient_light_y > AMBIENT_LIGHT_Y_UPPER_LIMIT)
479*495ae853SAndroid Build Coastguard Worker {
480*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ave_params_present_flag = 0;
481*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_AVE_PARAMS;
482*495ae853SAndroid Build Coastguard Worker }
483*495ae853SAndroid Build Coastguard Worker return (OK);
484*495ae853SAndroid Build Coastguard Worker }
485*495ae853SAndroid Build Coastguard Worker
486*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
487*495ae853SAndroid Build Coastguard Worker /* */
488*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_ccv */
489*495ae853SAndroid Build Coastguard Worker /* */
490*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message ccv */
491*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
492*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
493*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
494*495ae853SAndroid Build Coastguard Worker /* Globals : None */
495*495ae853SAndroid Build Coastguard Worker /* Processing : */
496*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
497*495ae853SAndroid Build Coastguard Worker /* Return : 0 for successfull parsing, else -1 */
498*495ae853SAndroid Build Coastguard Worker /* */
499*495ae853SAndroid Build Coastguard Worker /* Issues : */
500*495ae853SAndroid Build Coastguard Worker /* */
501*495ae853SAndroid Build Coastguard Worker /* Revision History: */
502*495ae853SAndroid Build Coastguard Worker /* */
503*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
504*495ae853SAndroid Build Coastguard Worker /* Draft */
505*495ae853SAndroid Build Coastguard Worker /* */
506*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_ccv(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)507*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_ccv(dec_bit_stream_t *ps_bitstrm,
508*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec,
509*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
510*495ae853SAndroid Build Coastguard Worker {
511*495ae853SAndroid Build Coastguard Worker sei *ps_sei = ps_dec->ps_sei_parse;
512*495ae853SAndroid Build Coastguard Worker dec_err_status_t *ps_err = ps_dec->ps_dec_err_status;
513*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
514*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
515*495ae853SAndroid Build Coastguard Worker UWORD32 u4_count;
516*495ae853SAndroid Build Coastguard Worker UNUSED(ui4_payload_size);
517*495ae853SAndroid Build Coastguard Worker
518*495ae853SAndroid Build Coastguard Worker if((ps_dec == NULL) || (ps_sei == NULL))
519*495ae853SAndroid Build Coastguard Worker {
520*495ae853SAndroid Build Coastguard Worker return NOT_OK;
521*495ae853SAndroid Build Coastguard Worker }
522*495ae853SAndroid Build Coastguard Worker
523*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ccv_params_present_flag = 0;
524*495ae853SAndroid Build Coastguard Worker
525*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_cancel_flag = (UWORD8)ih264d_get_bit_h264(ps_bitstrm);
526*495ae853SAndroid Build Coastguard Worker
527*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ccv_params.u1_ccv_cancel_flag > 1)
528*495ae853SAndroid Build Coastguard Worker {
529*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
530*495ae853SAndroid Build Coastguard Worker }
531*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei->s_sei_ccv_params.u1_ccv_cancel_flag)
532*495ae853SAndroid Build Coastguard Worker {
533*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_persistence_flag =
534*495ae853SAndroid Build Coastguard Worker (UWORD8)ih264d_get_bit_h264(ps_bitstrm);
535*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ccv_params.u1_ccv_persistence_flag > 1)
536*495ae853SAndroid Build Coastguard Worker {
537*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
538*495ae853SAndroid Build Coastguard Worker }
539*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_primaries_present_flag =
540*495ae853SAndroid Build Coastguard Worker (UWORD8)ih264d_get_bit_h264(ps_bitstrm);
541*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ccv_params.u1_ccv_primaries_present_flag > 1)
542*495ae853SAndroid Build Coastguard Worker {
543*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
544*495ae853SAndroid Build Coastguard Worker }
545*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_min_luminance_value_present_flag =
546*495ae853SAndroid Build Coastguard Worker (UWORD8)ih264d_get_bit_h264(ps_bitstrm);
547*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ccv_params.u1_ccv_min_luminance_value_present_flag > 1)
548*495ae853SAndroid Build Coastguard Worker {
549*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
550*495ae853SAndroid Build Coastguard Worker }
551*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_max_luminance_value_present_flag =
552*495ae853SAndroid Build Coastguard Worker (UWORD8)ih264d_get_bit_h264(ps_bitstrm);
553*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ccv_params.u1_ccv_max_luminance_value_present_flag > 1)
554*495ae853SAndroid Build Coastguard Worker {
555*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
556*495ae853SAndroid Build Coastguard Worker }
557*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_avg_luminance_value_present_flag =
558*495ae853SAndroid Build Coastguard Worker (UWORD8)ih264d_get_bit_h264(ps_bitstrm);
559*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_ccv_params.u1_ccv_avg_luminance_value_present_flag > 1)
560*495ae853SAndroid Build Coastguard Worker {
561*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
562*495ae853SAndroid Build Coastguard Worker }
563*495ae853SAndroid Build Coastguard Worker
564*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_ccv_params.u1_ccv_primaries_present_flag == 0) &&
565*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.u1_ccv_min_luminance_value_present_flag == 0) &&
566*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.u1_ccv_max_luminance_value_present_flag == 0) &&
567*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.u1_ccv_avg_luminance_value_present_flag == 0))
568*495ae853SAndroid Build Coastguard Worker {
569*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
570*495ae853SAndroid Build Coastguard Worker }
571*495ae853SAndroid Build Coastguard Worker
572*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u1_ccv_reserved_zero_2bits =
573*495ae853SAndroid Build Coastguard Worker (UWORD8)ih264d_get_bits_h264(ps_bitstrm, 2);
574*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_ccv_params.u1_ccv_reserved_zero_2bits != 0))
575*495ae853SAndroid Build Coastguard Worker {
576*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
577*495ae853SAndroid Build Coastguard Worker }
578*495ae853SAndroid Build Coastguard Worker
579*495ae853SAndroid Build Coastguard Worker /* ccv primaries */
580*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei->s_sei_ccv_params.u1_ccv_primaries_present_flag)
581*495ae853SAndroid Build Coastguard Worker {
582*495ae853SAndroid Build Coastguard Worker for(u4_count = 0; u4_count < NUM_SEI_CCV_PRIMARIES; u4_count++)
583*495ae853SAndroid Build Coastguard Worker {
584*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.ai4_ccv_primaries_x[u4_count] =
585*495ae853SAndroid Build Coastguard Worker (WORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
586*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_ccv_params.ai4_ccv_primaries_x[u4_count] >
587*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_X_UPPER_LIMIT) ||
588*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.ai4_ccv_primaries_x[u4_count] <
589*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_X_LOWER_LIMIT))
590*495ae853SAndroid Build Coastguard Worker {
591*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
592*495ae853SAndroid Build Coastguard Worker }
593*495ae853SAndroid Build Coastguard Worker
594*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.ai4_ccv_primaries_y[u4_count] =
595*495ae853SAndroid Build Coastguard Worker (WORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
596*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_ccv_params.ai4_ccv_primaries_y[u4_count] >
597*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_Y_UPPER_LIMIT) ||
598*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.ai4_ccv_primaries_y[u4_count] <
599*495ae853SAndroid Build Coastguard Worker CCV_PRIMARIES_Y_LOWER_LIMIT))
600*495ae853SAndroid Build Coastguard Worker {
601*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
602*495ae853SAndroid Build Coastguard Worker }
603*495ae853SAndroid Build Coastguard Worker }
604*495ae853SAndroid Build Coastguard Worker }
605*495ae853SAndroid Build Coastguard Worker
606*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei->s_sei_ccv_params.u1_ccv_min_luminance_value_present_flag)
607*495ae853SAndroid Build Coastguard Worker {
608*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_min_luminance_value =
609*495ae853SAndroid Build Coastguard Worker (UWORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
610*495ae853SAndroid Build Coastguard Worker }
611*495ae853SAndroid Build Coastguard Worker
612*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei->s_sei_ccv_params.u1_ccv_max_luminance_value_present_flag)
613*495ae853SAndroid Build Coastguard Worker {
614*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_max_luminance_value =
615*495ae853SAndroid Build Coastguard Worker (UWORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
616*495ae853SAndroid Build Coastguard Worker if((1 == ps_sei->s_sei_ccv_params.u1_ccv_min_luminance_value_present_flag) &&
617*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.u4_ccv_max_luminance_value <
618*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_min_luminance_value))
619*495ae853SAndroid Build Coastguard Worker {
620*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
621*495ae853SAndroid Build Coastguard Worker }
622*495ae853SAndroid Build Coastguard Worker }
623*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei->s_sei_ccv_params.u1_ccv_avg_luminance_value_present_flag)
624*495ae853SAndroid Build Coastguard Worker {
625*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_avg_luminance_value =
626*495ae853SAndroid Build Coastguard Worker (UWORD32)ih264d_get_bits_h264(ps_bitstrm, 32);
627*495ae853SAndroid Build Coastguard Worker if((1 == ps_sei->s_sei_ccv_params.u1_ccv_min_luminance_value_present_flag) &&
628*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.u4_ccv_avg_luminance_value <
629*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_min_luminance_value))
630*495ae853SAndroid Build Coastguard Worker {
631*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
632*495ae853SAndroid Build Coastguard Worker }
633*495ae853SAndroid Build Coastguard Worker if((1 == ps_sei->s_sei_ccv_params.u1_ccv_max_luminance_value_present_flag) &&
634*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_ccv_params.u4_ccv_max_luminance_value <
635*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_ccv_params.u4_ccv_avg_luminance_value))
636*495ae853SAndroid Build Coastguard Worker {
637*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_CCV_PARAMS;
638*495ae853SAndroid Build Coastguard Worker }
639*495ae853SAndroid Build Coastguard Worker }
640*495ae853SAndroid Build Coastguard Worker }
641*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_ccv_params_present_flag = 1;
642*495ae853SAndroid Build Coastguard Worker return (OK);
643*495ae853SAndroid Build Coastguard Worker }
644*495ae853SAndroid Build Coastguard Worker
645*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
646*495ae853SAndroid Build Coastguard Worker /* */
647*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_sii */
648*495ae853SAndroid Build Coastguard Worker /* */
649*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message sii */
650*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
651*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
652*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
653*495ae853SAndroid Build Coastguard Worker /* Globals : None */
654*495ae853SAndroid Build Coastguard Worker /* Processing : */
655*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
656*495ae853SAndroid Build Coastguard Worker /* Return : 0 for successfull parsing, else -1 */
657*495ae853SAndroid Build Coastguard Worker /* */
658*495ae853SAndroid Build Coastguard Worker /* Issues : */
659*495ae853SAndroid Build Coastguard Worker /* */
660*495ae853SAndroid Build Coastguard Worker /* Revision History: */
661*495ae853SAndroid Build Coastguard Worker /* */
662*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
663*495ae853SAndroid Build Coastguard Worker /* Draft */
664*495ae853SAndroid Build Coastguard Worker /* */
665*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_sii(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)666*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_sii(dec_bit_stream_t *ps_bitstrm, dec_struct_t *ps_dec,
667*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
668*495ae853SAndroid Build Coastguard Worker {
669*495ae853SAndroid Build Coastguard Worker sei *ps_sei;
670*495ae853SAndroid Build Coastguard Worker dec_err_status_t *ps_err;
671*495ae853SAndroid Build Coastguard Worker int i;
672*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
673*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
674*495ae853SAndroid Build Coastguard Worker UNUSED(ui4_payload_size);
675*495ae853SAndroid Build Coastguard Worker
676*495ae853SAndroid Build Coastguard Worker if(ps_dec == NULL)
677*495ae853SAndroid Build Coastguard Worker {
678*495ae853SAndroid Build Coastguard Worker return NOT_OK;
679*495ae853SAndroid Build Coastguard Worker }
680*495ae853SAndroid Build Coastguard Worker ps_sei = ps_dec->ps_sei_parse;
681*495ae853SAndroid Build Coastguard Worker
682*495ae853SAndroid Build Coastguard Worker if(ps_sei == NULL)
683*495ae853SAndroid Build Coastguard Worker {
684*495ae853SAndroid Build Coastguard Worker return NOT_OK;
685*495ae853SAndroid Build Coastguard Worker }
686*495ae853SAndroid Build Coastguard Worker ps_err = ps_dec->ps_dec_err_status;
687*495ae853SAndroid Build Coastguard Worker
688*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_sii_params_present_flag = 0;
689*495ae853SAndroid Build Coastguard Worker memset(&ps_sei->s_sei_sii_params, 0, sizeof(ps_sei->s_sei_sii_params));
690*495ae853SAndroid Build Coastguard Worker
691*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.u4_sii_sub_layer_idx = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
692*495ae853SAndroid Build Coastguard Worker
693*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei->s_sei_sii_params.u4_sii_sub_layer_idx)
694*495ae853SAndroid Build Coastguard Worker {
695*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.u1_shutter_interval_info_present_flag =
696*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bit_h264(ps_bitstrm);
697*495ae853SAndroid Build Coastguard Worker
698*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei->s_sei_sii_params.u1_shutter_interval_info_present_flag)
699*495ae853SAndroid Build Coastguard Worker {
700*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.u4_sii_time_scale =
701*495ae853SAndroid Build Coastguard Worker (UWORD32) ih264d_get_bits_h264(ps_bitstrm, 32);
702*495ae853SAndroid Build Coastguard Worker
703*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.u1_fixed_shutter_interval_within_cvs_flag =
704*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bit_h264(ps_bitstrm);
705*495ae853SAndroid Build Coastguard Worker
706*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei->s_sei_sii_params.u1_fixed_shutter_interval_within_cvs_flag)
707*495ae853SAndroid Build Coastguard Worker {
708*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.u4_sii_num_units_in_shutter_interval =
709*495ae853SAndroid Build Coastguard Worker (UWORD32) ih264d_get_bits_h264(ps_bitstrm, 32);
710*495ae853SAndroid Build Coastguard Worker }
711*495ae853SAndroid Build Coastguard Worker else
712*495ae853SAndroid Build Coastguard Worker {
713*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.u1_sii_max_sub_layers_minus1 =
714*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 3);
715*495ae853SAndroid Build Coastguard Worker for(i = 0; i <= ps_sei->s_sei_sii_params.u1_sii_max_sub_layers_minus1; i++)
716*495ae853SAndroid Build Coastguard Worker {
717*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.au4_sub_layer_num_units_in_shutter_interval[i] =
718*495ae853SAndroid Build Coastguard Worker (UWORD32) ih264d_get_bits_h264(ps_bitstrm, 32);
719*495ae853SAndroid Build Coastguard Worker }
720*495ae853SAndroid Build Coastguard Worker }
721*495ae853SAndroid Build Coastguard Worker }
722*495ae853SAndroid Build Coastguard Worker }
723*495ae853SAndroid Build Coastguard Worker
724*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_sii_params.u4_sii_sub_layer_idx >
725*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_sii_params.u1_sii_max_sub_layers_minus1) &&
726*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_sii_params.u1_fixed_shutter_interval_within_cvs_flag == 0))
727*495ae853SAndroid Build Coastguard Worker {
728*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_SII_PARAMS;
729*495ae853SAndroid Build Coastguard Worker }
730*495ae853SAndroid Build Coastguard Worker
731*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_sii_params_present_flag = 1;
732*495ae853SAndroid Build Coastguard Worker return (OK);
733*495ae853SAndroid Build Coastguard Worker }
734*495ae853SAndroid Build Coastguard Worker
735*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
736*495ae853SAndroid Build Coastguard Worker /* */
737*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_fgc */
738*495ae853SAndroid Build Coastguard Worker /* */
739*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI message film grain charcaristics*/
740*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
741*495ae853SAndroid Build Coastguard Worker /* ps_dec Poniter decoder context */
742*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size pay load i4_size */
743*495ae853SAndroid Build Coastguard Worker /* Globals : None */
744*495ae853SAndroid Build Coastguard Worker /* Processing : */
745*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
746*495ae853SAndroid Build Coastguard Worker /* Return : 0 for successfull parsing, else -1 */
747*495ae853SAndroid Build Coastguard Worker /* */
748*495ae853SAndroid Build Coastguard Worker /* Issues : */
749*495ae853SAndroid Build Coastguard Worker /* */
750*495ae853SAndroid Build Coastguard Worker /* Revision History: */
751*495ae853SAndroid Build Coastguard Worker /* */
752*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
753*495ae853SAndroid Build Coastguard Worker /* Draft */
754*495ae853SAndroid Build Coastguard Worker /* */
755*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_parse_fgc(dec_bit_stream_t * ps_bitstrm,dec_struct_t * ps_dec,UWORD32 ui4_payload_size)756*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_fgc(dec_bit_stream_t *ps_bitstrm, dec_struct_t *ps_dec,
757*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size)
758*495ae853SAndroid Build Coastguard Worker {
759*495ae853SAndroid Build Coastguard Worker sei *ps_sei = ps_dec->ps_sei_parse;
760*495ae853SAndroid Build Coastguard Worker dec_err_status_t *ps_err = ps_dec->ps_dec_err_status;
761*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
762*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
763*495ae853SAndroid Build Coastguard Worker UWORD32 u4_count;
764*495ae853SAndroid Build Coastguard Worker WORD32 i4_luma_bitdepth, i4_chroma_bitdepth;
765*495ae853SAndroid Build Coastguard Worker UWORD32 c, i, j;
766*495ae853SAndroid Build Coastguard Worker UNUSED(ui4_payload_size);
767*495ae853SAndroid Build Coastguard Worker
768*495ae853SAndroid Build Coastguard Worker if((ps_dec == NULL) || (ps_sei == NULL))
769*495ae853SAndroid Build Coastguard Worker {
770*495ae853SAndroid Build Coastguard Worker return NOT_OK;
771*495ae853SAndroid Build Coastguard Worker }
772*495ae853SAndroid Build Coastguard Worker
773*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_fgc_params_present_flag = 0;
774*495ae853SAndroid Build Coastguard Worker
775*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_characteristics_cancel_flag =
776*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bit_h264(ps_bitstrm);
777*495ae853SAndroid Build Coastguard Worker
778*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei->s_sei_fgc_params.u1_film_grain_characteristics_cancel_flag)
779*495ae853SAndroid Build Coastguard Worker {
780*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_model_id =
781*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 2);
782*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_fgc_params.u1_film_grain_model_id > 1)
783*495ae853SAndroid Build Coastguard Worker {
784*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
785*495ae853SAndroid Build Coastguard Worker }
786*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_separate_colour_description_present_flag =
787*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bit_h264(ps_bitstrm);
788*495ae853SAndroid Build Coastguard Worker
789*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_fgc_params.u1_separate_colour_description_present_flag)
790*495ae853SAndroid Build Coastguard Worker {
791*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_bit_depth_luma_minus8 =
792*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 3);
793*495ae853SAndroid Build Coastguard Worker
794*495ae853SAndroid Build Coastguard Worker i4_luma_bitdepth = ps_sei->s_sei_fgc_params.u1_film_grain_bit_depth_luma_minus8 + 8;
795*495ae853SAndroid Build Coastguard Worker
796*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_bit_depth_chroma_minus8 =
797*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 3);
798*495ae853SAndroid Build Coastguard Worker
799*495ae853SAndroid Build Coastguard Worker i4_chroma_bitdepth = ps_sei->s_sei_fgc_params.u1_film_grain_bit_depth_chroma_minus8 + 8;
800*495ae853SAndroid Build Coastguard Worker
801*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_full_range_flag =
802*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bit_h264(ps_bitstrm);
803*495ae853SAndroid Build Coastguard Worker
804*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_colour_primaries =
805*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 8);
806*495ae853SAndroid Build Coastguard Worker
807*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_transfer_characteristics =
808*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 8);
809*495ae853SAndroid Build Coastguard Worker
810*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_film_grain_matrix_coefficients =
811*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 8);
812*495ae853SAndroid Build Coastguard Worker }
813*495ae853SAndroid Build Coastguard Worker else
814*495ae853SAndroid Build Coastguard Worker {
815*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_cur_sps == NULL)
816*495ae853SAndroid Build Coastguard Worker {
817*495ae853SAndroid Build Coastguard Worker return NOT_OK;
818*495ae853SAndroid Build Coastguard Worker }
819*495ae853SAndroid Build Coastguard Worker i4_luma_bitdepth = ps_dec->ps_cur_sps->i4_bit_depth_luma_minus8 + 8;
820*495ae853SAndroid Build Coastguard Worker i4_chroma_bitdepth = ps_dec->ps_cur_sps->i4_bit_depth_chroma_minus8 + 8;
821*495ae853SAndroid Build Coastguard Worker }
822*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_blending_mode_id = (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 2);
823*495ae853SAndroid Build Coastguard Worker
824*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_fgc_params.u1_blending_mode_id > 1)
825*495ae853SAndroid Build Coastguard Worker {
826*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
827*495ae853SAndroid Build Coastguard Worker }
828*495ae853SAndroid Build Coastguard Worker
829*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u1_log2_scale_factor =
830*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 4);
831*495ae853SAndroid Build Coastguard Worker
832*495ae853SAndroid Build Coastguard Worker for(c = 0; c < SEI_FGC_NUM_COLOUR_COMPONENTS; c++)
833*495ae853SAndroid Build Coastguard Worker {
834*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.au1_comp_model_present_flag[c] =
835*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bit_h264(ps_bitstrm);
836*495ae853SAndroid Build Coastguard Worker }
837*495ae853SAndroid Build Coastguard Worker
838*495ae853SAndroid Build Coastguard Worker for(c = 0; c < SEI_FGC_NUM_COLOUR_COMPONENTS; c++)
839*495ae853SAndroid Build Coastguard Worker {
840*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_fgc_params.au1_comp_model_present_flag[c])
841*495ae853SAndroid Build Coastguard Worker {
842*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.au1_num_intensity_intervals_minus1[c] =
843*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 8);
844*495ae853SAndroid Build Coastguard Worker
845*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.au1_num_model_values_minus1[c] =
846*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 3);
847*495ae853SAndroid Build Coastguard Worker
848*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_fgc_params.au1_num_model_values_minus1[c] >
849*495ae853SAndroid Build Coastguard Worker (SEI_FGC_MAX_NUM_MODEL_VALUES - 1))
850*495ae853SAndroid Build Coastguard Worker {
851*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
852*495ae853SAndroid Build Coastguard Worker }
853*495ae853SAndroid Build Coastguard Worker
854*495ae853SAndroid Build Coastguard Worker for(i = 0; i <= ps_sei->s_sei_fgc_params.au1_num_intensity_intervals_minus1[c]; i++)
855*495ae853SAndroid Build Coastguard Worker {
856*495ae853SAndroid Build Coastguard Worker /* Although the fag end of both the NALU and the bitstream buffer */
857*495ae853SAndroid Build Coastguard Worker /* is being parsed, not all FGC SEI symbols would have been */
858*495ae853SAndroid Build Coastguard Worker /* decoded semantically. The code below detects this condition */
859*495ae853SAndroid Build Coastguard Worker if((ps_bitstrm->u4_ofst + 8 + 8) >= ps_bitstrm->u4_max_ofst)
860*495ae853SAndroid Build Coastguard Worker {
861*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
862*495ae853SAndroid Build Coastguard Worker }
863*495ae853SAndroid Build Coastguard Worker
864*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.au1_intensity_interval_lower_bound[c][i] =
865*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 8);
866*495ae853SAndroid Build Coastguard Worker
867*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.au1_intensity_interval_upper_bound[c][i] =
868*495ae853SAndroid Build Coastguard Worker (UWORD8) ih264d_get_bits_h264(ps_bitstrm, 8);
869*495ae853SAndroid Build Coastguard Worker
870*495ae853SAndroid Build Coastguard Worker for(j = 0; j <= ps_sei->s_sei_fgc_params.au1_num_model_values_minus1[c]; j++)
871*495ae853SAndroid Build Coastguard Worker {
872*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] =
873*495ae853SAndroid Build Coastguard Worker (WORD32) ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
874*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei->s_sei_fgc_params.u1_film_grain_model_id)
875*495ae853SAndroid Build Coastguard Worker {
876*495ae853SAndroid Build Coastguard Worker if((1 == j) || (2 == j))
877*495ae853SAndroid Build Coastguard Worker {
878*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] < 0) ||
879*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] > 16))
880*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
881*495ae853SAndroid Build Coastguard Worker }
882*495ae853SAndroid Build Coastguard Worker else if((3 == j) || (4 == j))
883*495ae853SAndroid Build Coastguard Worker {
884*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] < 0) ||
885*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] >
886*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j - 2]))
887*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
888*495ae853SAndroid Build Coastguard Worker }
889*495ae853SAndroid Build Coastguard Worker else
890*495ae853SAndroid Build Coastguard Worker {
891*495ae853SAndroid Build Coastguard Worker WORD32 max_lim = (c == 0) ? (1 << i4_luma_bitdepth) - 1
892*495ae853SAndroid Build Coastguard Worker : (1 << i4_chroma_bitdepth) - 1;
893*495ae853SAndroid Build Coastguard Worker
894*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] < 0) ||
895*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] >
896*495ae853SAndroid Build Coastguard Worker max_lim))
897*495ae853SAndroid Build Coastguard Worker {
898*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
899*495ae853SAndroid Build Coastguard Worker }
900*495ae853SAndroid Build Coastguard Worker }
901*495ae853SAndroid Build Coastguard Worker }
902*495ae853SAndroid Build Coastguard Worker else
903*495ae853SAndroid Build Coastguard Worker {
904*495ae853SAndroid Build Coastguard Worker WORD32 max_lim = (c == 0) ? (1 << (i4_luma_bitdepth - 1))
905*495ae853SAndroid Build Coastguard Worker : (1 << (i4_chroma_bitdepth - 1));
906*495ae853SAndroid Build Coastguard Worker
907*495ae853SAndroid Build Coastguard Worker if((ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] <
908*495ae853SAndroid Build Coastguard Worker -max_lim) ||
909*495ae853SAndroid Build Coastguard Worker (ps_sei->s_sei_fgc_params.ai4_comp_model_value[c][i][j] >= max_lim))
910*495ae853SAndroid Build Coastguard Worker {
911*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
912*495ae853SAndroid Build Coastguard Worker }
913*495ae853SAndroid Build Coastguard Worker }
914*495ae853SAndroid Build Coastguard Worker }
915*495ae853SAndroid Build Coastguard Worker }
916*495ae853SAndroid Build Coastguard Worker }
917*495ae853SAndroid Build Coastguard Worker }
918*495ae853SAndroid Build Coastguard Worker
919*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u4_film_grain_characteristics_repetition_period =
920*495ae853SAndroid Build Coastguard Worker (UWORD32) ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
921*495ae853SAndroid Build Coastguard Worker
922*495ae853SAndroid Build Coastguard Worker if(ps_sei->s_sei_fgc_params.u4_film_grain_characteristics_repetition_period < 0 ||
923*495ae853SAndroid Build Coastguard Worker ps_sei->s_sei_fgc_params.u4_film_grain_characteristics_repetition_period > 16384)
924*495ae853SAndroid Build Coastguard Worker {
925*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SEI_FGC_PARAMS;
926*495ae853SAndroid Build Coastguard Worker }
927*495ae853SAndroid Build Coastguard Worker
928*495ae853SAndroid Build Coastguard Worker ps_sei->u1_sei_fgc_params_present_flag = 1;
929*495ae853SAndroid Build Coastguard Worker }
930*495ae853SAndroid Build Coastguard Worker
931*495ae853SAndroid Build Coastguard Worker return (OK);
932*495ae853SAndroid Build Coastguard Worker }
933*495ae853SAndroid Build Coastguard Worker
934*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
935*495ae853SAndroid Build Coastguard Worker /* */
936*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_sei_payload */
937*495ae853SAndroid Build Coastguard Worker /* */
938*495ae853SAndroid Build Coastguard Worker /* Description : This function parses SEI pay loads. Currently it's */
939*495ae853SAndroid Build Coastguard Worker /* implemented partially. */
940*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_bitstrm Bitstream */
941*495ae853SAndroid Build Coastguard Worker /* ui4_payload_type SEI payload type */
942*495ae853SAndroid Build Coastguard Worker /* ui4_payload_size SEI payload i4_size */
943*495ae853SAndroid Build Coastguard Worker /* Globals : None */
944*495ae853SAndroid Build Coastguard Worker /* Processing : Parses SEI payloads units and stores the info */
945*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
946*495ae853SAndroid Build Coastguard Worker /* Return : status for successful parsing, else -1 */
947*495ae853SAndroid Build Coastguard Worker /* */
948*495ae853SAndroid Build Coastguard Worker /* Issues : Not implemented fully */
949*495ae853SAndroid Build Coastguard Worker /* */
950*495ae853SAndroid Build Coastguard Worker /* Revision History: */
951*495ae853SAndroid Build Coastguard Worker /* */
952*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
953*495ae853SAndroid Build Coastguard Worker /* 06 05 2002 NS Draft */
954*495ae853SAndroid Build Coastguard Worker /* */
955*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
956*495ae853SAndroid Build Coastguard Worker
ih264d_parse_sei_payload(dec_bit_stream_t * ps_bitstrm,UWORD32 ui4_payload_type,UWORD32 ui4_payload_size,dec_struct_t * ps_dec)957*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_sei_payload(dec_bit_stream_t *ps_bitstrm,
958*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_type,
959*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_size,
960*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec)
961*495ae853SAndroid Build Coastguard Worker {
962*495ae853SAndroid Build Coastguard Worker sei *ps_sei;
963*495ae853SAndroid Build Coastguard Worker WORD32 i4_status = 0;
964*495ae853SAndroid Build Coastguard Worker ps_sei = (sei *)ps_dec->ps_sei_parse;
965*495ae853SAndroid Build Coastguard Worker
966*495ae853SAndroid Build Coastguard Worker if(ui4_payload_size == 0)
967*495ae853SAndroid Build Coastguard Worker return -1;
968*495ae853SAndroid Build Coastguard Worker if(NULL == ps_bitstrm)
969*495ae853SAndroid Build Coastguard Worker {
970*495ae853SAndroid Build Coastguard Worker return NOT_OK;
971*495ae853SAndroid Build Coastguard Worker }
972*495ae853SAndroid Build Coastguard Worker
973*495ae853SAndroid Build Coastguard Worker switch(ui4_payload_type)
974*495ae853SAndroid Build Coastguard Worker {
975*495ae853SAndroid Build Coastguard Worker case SEI_BUF_PERIOD:
976*495ae853SAndroid Build Coastguard Worker
977*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_buffering_period(&ps_sei->s_buf_period,
978*495ae853SAndroid Build Coastguard Worker ps_bitstrm, ps_dec);
979*495ae853SAndroid Build Coastguard Worker break;
980*495ae853SAndroid Build Coastguard Worker case SEI_PIC_TIMING:
981*495ae853SAndroid Build Coastguard Worker if(NULL == ps_dec->ps_cur_sps)
982*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_flush_bits_h264(ps_bitstrm, (ui4_payload_size << 3));
983*495ae853SAndroid Build Coastguard Worker else
984*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_pic_timing(ps_bitstrm, ps_dec,
985*495ae853SAndroid Build Coastguard Worker ui4_payload_size);
986*495ae853SAndroid Build Coastguard Worker break;
987*495ae853SAndroid Build Coastguard Worker case SEI_RECOVERY_PT:
988*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_recovery_point(ps_bitstrm, ps_dec,
989*495ae853SAndroid Build Coastguard Worker ui4_payload_size);
990*495ae853SAndroid Build Coastguard Worker break;
991*495ae853SAndroid Build Coastguard Worker case SEI_MASTERING_DISP_COL_VOL:
992*495ae853SAndroid Build Coastguard Worker
993*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_mdcv(ps_bitstrm, ps_dec,
994*495ae853SAndroid Build Coastguard Worker ui4_payload_size);
995*495ae853SAndroid Build Coastguard Worker break;
996*495ae853SAndroid Build Coastguard Worker case SEI_CONTENT_LIGHT_LEVEL_DATA:
997*495ae853SAndroid Build Coastguard Worker
998*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_cll(ps_bitstrm, ps_dec,
999*495ae853SAndroid Build Coastguard Worker ui4_payload_size);
1000*495ae853SAndroid Build Coastguard Worker break;
1001*495ae853SAndroid Build Coastguard Worker case SEI_AMBIENT_VIEWING_ENVIRONMENT:
1002*495ae853SAndroid Build Coastguard Worker
1003*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_ave(ps_bitstrm, ps_dec,
1004*495ae853SAndroid Build Coastguard Worker ui4_payload_size);
1005*495ae853SAndroid Build Coastguard Worker break;
1006*495ae853SAndroid Build Coastguard Worker case SEI_CONTENT_COLOR_VOLUME:
1007*495ae853SAndroid Build Coastguard Worker
1008*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_ccv(ps_bitstrm, ps_dec,
1009*495ae853SAndroid Build Coastguard Worker ui4_payload_size);
1010*495ae853SAndroid Build Coastguard Worker break;
1011*495ae853SAndroid Build Coastguard Worker case SEI_SHUTTER_INTERVAL_INFO:
1012*495ae853SAndroid Build Coastguard Worker
1013*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_sii(ps_bitstrm, ps_dec, ui4_payload_size);
1014*495ae853SAndroid Build Coastguard Worker break;
1015*495ae853SAndroid Build Coastguard Worker
1016*495ae853SAndroid Build Coastguard Worker case SEI_FILM_GRAIN_CHARACTERISTICS:
1017*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_fgc(ps_bitstrm, ps_dec, ui4_payload_size);
1018*495ae853SAndroid Build Coastguard Worker
1019*495ae853SAndroid Build Coastguard Worker break;
1020*495ae853SAndroid Build Coastguard Worker default:
1021*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_flush_bits_h264(ps_bitstrm, (ui4_payload_size << 3));
1022*495ae853SAndroid Build Coastguard Worker break;
1023*495ae853SAndroid Build Coastguard Worker }
1024*495ae853SAndroid Build Coastguard Worker return (i4_status);
1025*495ae853SAndroid Build Coastguard Worker }
1026*495ae853SAndroid Build Coastguard Worker
1027*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1028*495ae853SAndroid Build Coastguard Worker /* */
1029*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_parse_sei_message */
1030*495ae853SAndroid Build Coastguard Worker /* */
1031*495ae853SAndroid Build Coastguard Worker /* Description : This function is parses and decode SEI. Currently it's */
1032*495ae853SAndroid Build Coastguard Worker /* not implemented fully. */
1033*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_dec Decoder parameters */
1034*495ae853SAndroid Build Coastguard Worker /* ps_bitstrm Bitstream */
1035*495ae853SAndroid Build Coastguard Worker /* Globals : None */
1036*495ae853SAndroid Build Coastguard Worker /* Processing : Parses SEI NAL units and stores the info */
1037*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
1038*495ae853SAndroid Build Coastguard Worker /* Returns : None */
1039*495ae853SAndroid Build Coastguard Worker /* */
1040*495ae853SAndroid Build Coastguard Worker /* Issues : Not implemented fully */
1041*495ae853SAndroid Build Coastguard Worker /* */
1042*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1043*495ae853SAndroid Build Coastguard Worker /* */
1044*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1045*495ae853SAndroid Build Coastguard Worker /* 06 05 2002 NS Draft */
1046*495ae853SAndroid Build Coastguard Worker /* */
1047*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1048*495ae853SAndroid Build Coastguard Worker
ih264d_parse_sei_message(dec_struct_t * ps_dec,dec_bit_stream_t * ps_bitstrm)1049*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_sei_message(dec_struct_t *ps_dec,
1050*495ae853SAndroid Build Coastguard Worker dec_bit_stream_t *ps_bitstrm)
1051*495ae853SAndroid Build Coastguard Worker {
1052*495ae853SAndroid Build Coastguard Worker UWORD32 ui4_payload_type, ui4_payload_size;
1053*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bits;
1054*495ae853SAndroid Build Coastguard Worker WORD32 i4_status = 0;
1055*495ae853SAndroid Build Coastguard Worker
1056*495ae853SAndroid Build Coastguard Worker do
1057*495ae853SAndroid Build Coastguard Worker {
1058*495ae853SAndroid Build Coastguard Worker ui4_payload_type = 0;
1059*495ae853SAndroid Build Coastguard Worker
1060*495ae853SAndroid Build Coastguard Worker if(!CHECK_BITS_SUFFICIENT(ps_bitstrm, 8))
1061*495ae853SAndroid Build Coastguard Worker {
1062*495ae853SAndroid Build Coastguard Worker return ERROR_EOB_GETBITS_T;
1063*495ae853SAndroid Build Coastguard Worker }
1064*495ae853SAndroid Build Coastguard Worker u4_bits = ih264d_get_bits_h264(ps_bitstrm, 8);
1065*495ae853SAndroid Build Coastguard Worker while(0xff == u4_bits && CHECK_BITS_SUFFICIENT(ps_bitstrm, 8))
1066*495ae853SAndroid Build Coastguard Worker {
1067*495ae853SAndroid Build Coastguard Worker u4_bits = ih264d_get_bits_h264(ps_bitstrm, 8);
1068*495ae853SAndroid Build Coastguard Worker ui4_payload_type += 255;
1069*495ae853SAndroid Build Coastguard Worker }
1070*495ae853SAndroid Build Coastguard Worker ui4_payload_type += u4_bits;
1071*495ae853SAndroid Build Coastguard Worker
1072*495ae853SAndroid Build Coastguard Worker ui4_payload_size = 0;
1073*495ae853SAndroid Build Coastguard Worker if(!CHECK_BITS_SUFFICIENT(ps_bitstrm, 8))
1074*495ae853SAndroid Build Coastguard Worker {
1075*495ae853SAndroid Build Coastguard Worker return ERROR_EOB_GETBITS_T;
1076*495ae853SAndroid Build Coastguard Worker }
1077*495ae853SAndroid Build Coastguard Worker u4_bits = ih264d_get_bits_h264(ps_bitstrm, 8);
1078*495ae853SAndroid Build Coastguard Worker while(0xff == u4_bits && CHECK_BITS_SUFFICIENT(ps_bitstrm, 8))
1079*495ae853SAndroid Build Coastguard Worker {
1080*495ae853SAndroid Build Coastguard Worker u4_bits = ih264d_get_bits_h264(ps_bitstrm, 8);
1081*495ae853SAndroid Build Coastguard Worker ui4_payload_size += 255;
1082*495ae853SAndroid Build Coastguard Worker }
1083*495ae853SAndroid Build Coastguard Worker ui4_payload_size += u4_bits;
1084*495ae853SAndroid Build Coastguard Worker
1085*495ae853SAndroid Build Coastguard Worker if(!CHECK_BITS_SUFFICIENT(ps_bitstrm, (ui4_payload_size << 3)))
1086*495ae853SAndroid Build Coastguard Worker {
1087*495ae853SAndroid Build Coastguard Worker return ERROR_EOB_GETBITS_T;
1088*495ae853SAndroid Build Coastguard Worker }
1089*495ae853SAndroid Build Coastguard Worker i4_status = ih264d_parse_sei_payload(ps_bitstrm, ui4_payload_type,
1090*495ae853SAndroid Build Coastguard Worker ui4_payload_size, ps_dec);
1091*495ae853SAndroid Build Coastguard Worker if(i4_status != OK)
1092*495ae853SAndroid Build Coastguard Worker return i4_status;
1093*495ae853SAndroid Build Coastguard Worker
1094*495ae853SAndroid Build Coastguard Worker if(ih264d_check_byte_aligned(ps_bitstrm) == 0)
1095*495ae853SAndroid Build Coastguard Worker {
1096*495ae853SAndroid Build Coastguard Worker u4_bits = ih264d_get_bit_h264(ps_bitstrm);
1097*495ae853SAndroid Build Coastguard Worker if(0 == u4_bits)
1098*495ae853SAndroid Build Coastguard Worker {
1099*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("\nError in parsing SEI message");
1100*495ae853SAndroid Build Coastguard Worker }
1101*495ae853SAndroid Build Coastguard Worker while(0 == ih264d_check_byte_aligned(ps_bitstrm)
1102*495ae853SAndroid Build Coastguard Worker && CHECK_BITS_SUFFICIENT(ps_bitstrm, 1))
1103*495ae853SAndroid Build Coastguard Worker {
1104*495ae853SAndroid Build Coastguard Worker u4_bits = ih264d_get_bit_h264(ps_bitstrm);
1105*495ae853SAndroid Build Coastguard Worker if(u4_bits)
1106*495ae853SAndroid Build Coastguard Worker {
1107*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("\nError in parsing SEI message");
1108*495ae853SAndroid Build Coastguard Worker }
1109*495ae853SAndroid Build Coastguard Worker }
1110*495ae853SAndroid Build Coastguard Worker }
1111*495ae853SAndroid Build Coastguard Worker }
1112*495ae853SAndroid Build Coastguard Worker while(MORE_RBSP_DATA(ps_bitstrm));
1113*495ae853SAndroid Build Coastguard Worker return (i4_status);
1114*495ae853SAndroid Build Coastguard Worker }
1115*495ae853SAndroid Build Coastguard Worker
1116*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1117*495ae853SAndroid Build Coastguard Worker /* */
1118*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_export_sei_mdcv_params */
1119*495ae853SAndroid Build Coastguard Worker /* */
1120*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI mdcv message in */
1121*495ae853SAndroid Build Coastguard Worker /* output structure */
1122*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_sei_mdcv_op pointer to sei mdcv o\p struct */
1123*495ae853SAndroid Build Coastguard Worker /* : ps_sei pointer to decoded sei params */
1124*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1125*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0 for success; -1 for failure */
1126*495ae853SAndroid Build Coastguard Worker /* */
1127*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1128*495ae853SAndroid Build Coastguard Worker /* */
1129*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1130*495ae853SAndroid Build Coastguard Worker /* */
1131*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1132*495ae853SAndroid Build Coastguard Worker /* */
1133*495ae853SAndroid Build Coastguard Worker /* */
1134*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_export_sei_mdcv_params(ivd_sei_decode_op_t * ps_sei_decode_op,sei * ps_sei,sei * ps_sei_export)1135*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_export_sei_mdcv_params(ivd_sei_decode_op_t *ps_sei_decode_op,
1136*495ae853SAndroid Build Coastguard Worker sei *ps_sei, sei *ps_sei_export)
1137*495ae853SAndroid Build Coastguard Worker {
1138*495ae853SAndroid Build Coastguard Worker if((ps_sei_export == NULL) || (ps_sei == NULL))
1139*495ae853SAndroid Build Coastguard Worker {
1140*495ae853SAndroid Build Coastguard Worker return NOT_OK;
1141*495ae853SAndroid Build Coastguard Worker }
1142*495ae853SAndroid Build Coastguard Worker
1143*495ae853SAndroid Build Coastguard Worker ps_sei_export->u1_sei_mdcv_params_present_flag = ps_sei->u1_sei_mdcv_params_present_flag;
1144*495ae853SAndroid Build Coastguard Worker ps_sei_decode_op->u1_sei_mdcv_params_present_flag = ps_sei->u1_sei_mdcv_params_present_flag;
1145*495ae853SAndroid Build Coastguard Worker
1146*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei_export->u1_sei_mdcv_params_present_flag)
1147*495ae853SAndroid Build Coastguard Worker {
1148*495ae853SAndroid Build Coastguard Worker memset(&ps_sei_export->s_sei_mdcv_params, 0, sizeof(sei_mdcv_params_t));
1149*495ae853SAndroid Build Coastguard Worker }
1150*495ae853SAndroid Build Coastguard Worker else
1151*495ae853SAndroid Build Coastguard Worker {
1152*495ae853SAndroid Build Coastguard Worker memcpy(&ps_sei_export->s_sei_mdcv_params, &ps_sei->s_sei_mdcv_params,
1153*495ae853SAndroid Build Coastguard Worker sizeof(sei_mdcv_params_t));
1154*495ae853SAndroid Build Coastguard Worker }
1155*495ae853SAndroid Build Coastguard Worker
1156*495ae853SAndroid Build Coastguard Worker return (OK);
1157*495ae853SAndroid Build Coastguard Worker }
1158*495ae853SAndroid Build Coastguard Worker
1159*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1160*495ae853SAndroid Build Coastguard Worker /* */
1161*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_export_sei_cll_params */
1162*495ae853SAndroid Build Coastguard Worker /* */
1163*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI cll message in */
1164*495ae853SAndroid Build Coastguard Worker /* output structure */
1165*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_sei_cll_op pointer to sei cll o\p struct */
1166*495ae853SAndroid Build Coastguard Worker /* : ps_sei pointer to decoded sei params */
1167*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1168*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0 for success; -1 for failure */
1169*495ae853SAndroid Build Coastguard Worker /* */
1170*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1171*495ae853SAndroid Build Coastguard Worker /* */
1172*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1173*495ae853SAndroid Build Coastguard Worker /* */
1174*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1175*495ae853SAndroid Build Coastguard Worker /* */
1176*495ae853SAndroid Build Coastguard Worker /* */
1177*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_export_sei_cll_params(ivd_sei_decode_op_t * ps_sei_decode_op,sei * ps_sei,sei * ps_sei_export)1178*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_export_sei_cll_params(ivd_sei_decode_op_t *ps_sei_decode_op,
1179*495ae853SAndroid Build Coastguard Worker sei *ps_sei, sei *ps_sei_export)
1180*495ae853SAndroid Build Coastguard Worker {
1181*495ae853SAndroid Build Coastguard Worker if((ps_sei_export == NULL) || (ps_sei == NULL))
1182*495ae853SAndroid Build Coastguard Worker {
1183*495ae853SAndroid Build Coastguard Worker return NOT_OK;
1184*495ae853SAndroid Build Coastguard Worker }
1185*495ae853SAndroid Build Coastguard Worker
1186*495ae853SAndroid Build Coastguard Worker ps_sei_export->u1_sei_cll_params_present_flag = ps_sei->u1_sei_cll_params_present_flag;
1187*495ae853SAndroid Build Coastguard Worker ps_sei_decode_op->u1_sei_cll_params_present_flag = ps_sei->u1_sei_cll_params_present_flag;
1188*495ae853SAndroid Build Coastguard Worker
1189*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei_export->u1_sei_cll_params_present_flag)
1190*495ae853SAndroid Build Coastguard Worker {
1191*495ae853SAndroid Build Coastguard Worker memset(&ps_sei_export->s_sei_cll_params, 0, sizeof(sei_cll_params_t));
1192*495ae853SAndroid Build Coastguard Worker }
1193*495ae853SAndroid Build Coastguard Worker else
1194*495ae853SAndroid Build Coastguard Worker {
1195*495ae853SAndroid Build Coastguard Worker memcpy(&ps_sei_export->s_sei_cll_params, &ps_sei->s_sei_cll_params,
1196*495ae853SAndroid Build Coastguard Worker sizeof(sei_cll_params_t));
1197*495ae853SAndroid Build Coastguard Worker }
1198*495ae853SAndroid Build Coastguard Worker return (OK);
1199*495ae853SAndroid Build Coastguard Worker }
1200*495ae853SAndroid Build Coastguard Worker
1201*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1202*495ae853SAndroid Build Coastguard Worker /* */
1203*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_export_sei_ave_params */
1204*495ae853SAndroid Build Coastguard Worker /* */
1205*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI ave message in */
1206*495ae853SAndroid Build Coastguard Worker /* output structure */
1207*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_sei_ave_op pointer to sei ave o\p struct */
1208*495ae853SAndroid Build Coastguard Worker /* : ps_sei pointer to decoded sei params */
1209*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1210*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0 for success; -1 for failure */
1211*495ae853SAndroid Build Coastguard Worker /* */
1212*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1213*495ae853SAndroid Build Coastguard Worker /* */
1214*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1215*495ae853SAndroid Build Coastguard Worker /* */
1216*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1217*495ae853SAndroid Build Coastguard Worker /* */
1218*495ae853SAndroid Build Coastguard Worker /* */
1219*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_export_sei_ave_params(ivd_sei_decode_op_t * ps_sei_decode_op,sei * ps_sei,sei * ps_sei_export)1220*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_export_sei_ave_params(ivd_sei_decode_op_t *ps_sei_decode_op,
1221*495ae853SAndroid Build Coastguard Worker sei *ps_sei, sei *ps_sei_export)
1222*495ae853SAndroid Build Coastguard Worker {
1223*495ae853SAndroid Build Coastguard Worker if((ps_sei_export == NULL) || (ps_sei == NULL))
1224*495ae853SAndroid Build Coastguard Worker {
1225*495ae853SAndroid Build Coastguard Worker return NOT_OK;
1226*495ae853SAndroid Build Coastguard Worker }
1227*495ae853SAndroid Build Coastguard Worker
1228*495ae853SAndroid Build Coastguard Worker ps_sei_export->u1_sei_ave_params_present_flag = ps_sei->u1_sei_ave_params_present_flag;
1229*495ae853SAndroid Build Coastguard Worker ps_sei_decode_op->u1_sei_ave_params_present_flag = ps_sei->u1_sei_ave_params_present_flag;
1230*495ae853SAndroid Build Coastguard Worker
1231*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei_export->u1_sei_ave_params_present_flag)
1232*495ae853SAndroid Build Coastguard Worker {
1233*495ae853SAndroid Build Coastguard Worker memset(&ps_sei_export->s_sei_ave_params, 0, sizeof(sei_ave_params_t));
1234*495ae853SAndroid Build Coastguard Worker }
1235*495ae853SAndroid Build Coastguard Worker else
1236*495ae853SAndroid Build Coastguard Worker {
1237*495ae853SAndroid Build Coastguard Worker memcpy(&ps_sei_export->s_sei_ave_params, &ps_sei->s_sei_ave_params,
1238*495ae853SAndroid Build Coastguard Worker sizeof(sei_ave_params_t));
1239*495ae853SAndroid Build Coastguard Worker }
1240*495ae853SAndroid Build Coastguard Worker
1241*495ae853SAndroid Build Coastguard Worker return (OK);
1242*495ae853SAndroid Build Coastguard Worker }
1243*495ae853SAndroid Build Coastguard Worker
1244*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1245*495ae853SAndroid Build Coastguard Worker /* */
1246*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_export_sei_ccv_params */
1247*495ae853SAndroid Build Coastguard Worker /* */
1248*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI ccv message in */
1249*495ae853SAndroid Build Coastguard Worker /* output structure */
1250*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_sei_ccv_op pointer to sei ccv o\p struct */
1251*495ae853SAndroid Build Coastguard Worker /* : ps_sei pointer to decoded sei params */
1252*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1253*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0 for success; -1 for failure */
1254*495ae853SAndroid Build Coastguard Worker /* */
1255*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1256*495ae853SAndroid Build Coastguard Worker /* */
1257*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1258*495ae853SAndroid Build Coastguard Worker /* */
1259*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1260*495ae853SAndroid Build Coastguard Worker /* */
1261*495ae853SAndroid Build Coastguard Worker /* */
1262*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_export_sei_ccv_params(ivd_sei_decode_op_t * ps_sei_decode_op,sei * ps_sei,sei * ps_sei_export)1263*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_export_sei_ccv_params(ivd_sei_decode_op_t *ps_sei_decode_op,
1264*495ae853SAndroid Build Coastguard Worker sei *ps_sei, sei *ps_sei_export)
1265*495ae853SAndroid Build Coastguard Worker {
1266*495ae853SAndroid Build Coastguard Worker if((ps_sei_export == NULL) || (ps_sei == NULL))
1267*495ae853SAndroid Build Coastguard Worker {
1268*495ae853SAndroid Build Coastguard Worker return NOT_OK;
1269*495ae853SAndroid Build Coastguard Worker }
1270*495ae853SAndroid Build Coastguard Worker
1271*495ae853SAndroid Build Coastguard Worker ps_sei_export->u1_sei_ccv_params_present_flag = ps_sei->u1_sei_ccv_params_present_flag;
1272*495ae853SAndroid Build Coastguard Worker ps_sei_decode_op->u1_sei_ccv_params_present_flag = ps_sei->u1_sei_ccv_params_present_flag;
1273*495ae853SAndroid Build Coastguard Worker
1274*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei_export->u1_sei_ccv_params_present_flag)
1275*495ae853SAndroid Build Coastguard Worker {
1276*495ae853SAndroid Build Coastguard Worker memset(&ps_sei_export->s_sei_ccv_params, 0, sizeof(sei_ccv_params_t));
1277*495ae853SAndroid Build Coastguard Worker }
1278*495ae853SAndroid Build Coastguard Worker else
1279*495ae853SAndroid Build Coastguard Worker {
1280*495ae853SAndroid Build Coastguard Worker memcpy(&ps_sei_export->s_sei_ccv_params, &ps_sei->s_sei_ccv_params,
1281*495ae853SAndroid Build Coastguard Worker sizeof(sei_ccv_params_t));
1282*495ae853SAndroid Build Coastguard Worker }
1283*495ae853SAndroid Build Coastguard Worker return (OK);
1284*495ae853SAndroid Build Coastguard Worker }
1285*495ae853SAndroid Build Coastguard Worker
1286*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1287*495ae853SAndroid Build Coastguard Worker /* */
1288*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_export_sei_sii_params */
1289*495ae853SAndroid Build Coastguard Worker /* */
1290*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI sii message in */
1291*495ae853SAndroid Build Coastguard Worker /* output structure */
1292*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_sei_sii_op pointer to sei sii o\p struct */
1293*495ae853SAndroid Build Coastguard Worker /* : ps_sei pointer to decoded sei params */
1294*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1295*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0 for success; -1 for failure */
1296*495ae853SAndroid Build Coastguard Worker /* */
1297*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1298*495ae853SAndroid Build Coastguard Worker /* */
1299*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1300*495ae853SAndroid Build Coastguard Worker /* */
1301*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1302*495ae853SAndroid Build Coastguard Worker /* */
1303*495ae853SAndroid Build Coastguard Worker /* */
1304*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_export_sei_sii_params(ivd_sei_decode_op_t * ps_sei_decode_op,sei * ps_sei,sei * ps_sei_export)1305*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_export_sei_sii_params(ivd_sei_decode_op_t *ps_sei_decode_op, sei *ps_sei,
1306*495ae853SAndroid Build Coastguard Worker sei *ps_sei_export)
1307*495ae853SAndroid Build Coastguard Worker {
1308*495ae853SAndroid Build Coastguard Worker if((ps_sei_export == NULL) || (ps_sei == NULL))
1309*495ae853SAndroid Build Coastguard Worker {
1310*495ae853SAndroid Build Coastguard Worker return NOT_OK;
1311*495ae853SAndroid Build Coastguard Worker }
1312*495ae853SAndroid Build Coastguard Worker
1313*495ae853SAndroid Build Coastguard Worker ps_sei_export->u1_sei_sii_params_present_flag = ps_sei->u1_sei_sii_params_present_flag;
1314*495ae853SAndroid Build Coastguard Worker ps_sei_decode_op->u1_sei_sii_params_present_flag = ps_sei->u1_sei_sii_params_present_flag;
1315*495ae853SAndroid Build Coastguard Worker
1316*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei_export->u1_sei_sii_params_present_flag)
1317*495ae853SAndroid Build Coastguard Worker {
1318*495ae853SAndroid Build Coastguard Worker memset(&ps_sei_export->s_sei_sii_params, 0, sizeof(sei_sii_params_t));
1319*495ae853SAndroid Build Coastguard Worker }
1320*495ae853SAndroid Build Coastguard Worker else
1321*495ae853SAndroid Build Coastguard Worker {
1322*495ae853SAndroid Build Coastguard Worker memcpy(&ps_sei_export->s_sei_sii_params, &ps_sei->s_sei_sii_params,
1323*495ae853SAndroid Build Coastguard Worker sizeof(sei_sii_params_t));
1324*495ae853SAndroid Build Coastguard Worker }
1325*495ae853SAndroid Build Coastguard Worker return (OK);
1326*495ae853SAndroid Build Coastguard Worker }
1327*495ae853SAndroid Build Coastguard Worker
1328*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1329*495ae853SAndroid Build Coastguard Worker /* */
1330*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_export_sei_fgc_params */
1331*495ae853SAndroid Build Coastguard Worker /* */
1332*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI film grain params in */
1333*495ae853SAndroid Build Coastguard Worker /* output structure */
1334*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_sei_fgc_op pointer to sei fgc o\p struct */
1335*495ae853SAndroid Build Coastguard Worker /* : ps_sei pointer to decoded sei params */
1336*495ae853SAndroid Build Coastguard Worker /* Outputs : */
1337*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0 for success; -1 for failure */
1338*495ae853SAndroid Build Coastguard Worker /* */
1339*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1340*495ae853SAndroid Build Coastguard Worker /* */
1341*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1342*495ae853SAndroid Build Coastguard Worker /* */
1343*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1344*495ae853SAndroid Build Coastguard Worker /* */
1345*495ae853SAndroid Build Coastguard Worker /* */
1346*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
ih264d_export_sei_fgc_params(ivd_sei_decode_op_t * ps_sei_decode_op,sei * ps_sei,sei * ps_sei_export)1347*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_export_sei_fgc_params(ivd_sei_decode_op_t *ps_sei_decode_op, sei *ps_sei,
1348*495ae853SAndroid Build Coastguard Worker sei *ps_sei_export)
1349*495ae853SAndroid Build Coastguard Worker {
1350*495ae853SAndroid Build Coastguard Worker if((ps_sei_export == NULL) || (ps_sei == NULL))
1351*495ae853SAndroid Build Coastguard Worker {
1352*495ae853SAndroid Build Coastguard Worker return NOT_OK;
1353*495ae853SAndroid Build Coastguard Worker }
1354*495ae853SAndroid Build Coastguard Worker
1355*495ae853SAndroid Build Coastguard Worker ps_sei_export->u1_sei_fgc_params_present_flag = ps_sei->u1_sei_fgc_params_present_flag;
1356*495ae853SAndroid Build Coastguard Worker ps_sei_decode_op->u1_sei_fgc_params_present_flag = ps_sei->u1_sei_fgc_params_present_flag;
1357*495ae853SAndroid Build Coastguard Worker
1358*495ae853SAndroid Build Coastguard Worker if(0 == ps_sei_export->u1_sei_fgc_params_present_flag)
1359*495ae853SAndroid Build Coastguard Worker {
1360*495ae853SAndroid Build Coastguard Worker memset(&ps_sei_export->s_sei_fgc_params, 0, sizeof(sei_fgc_params_t));
1361*495ae853SAndroid Build Coastguard Worker }
1362*495ae853SAndroid Build Coastguard Worker else
1363*495ae853SAndroid Build Coastguard Worker {
1364*495ae853SAndroid Build Coastguard Worker memcpy(&ps_sei_export->s_sei_fgc_params, &ps_sei->s_sei_fgc_params,
1365*495ae853SAndroid Build Coastguard Worker sizeof(sei_fgc_params_t));
1366*495ae853SAndroid Build Coastguard Worker }
1367*495ae853SAndroid Build Coastguard Worker
1368*495ae853SAndroid Build Coastguard Worker return (OK);
1369*495ae853SAndroid Build Coastguard Worker }
1370