xref: /aosp_15_r20/external/libavc/decoder/ih264d_sei.c (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker  *
3*495ae853SAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker  *
5*495ae853SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker  *
9*495ae853SAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker  *
11*495ae853SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker  * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker  *
17*495ae853SAndroid Build Coastguard Worker  *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker 
21*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
22*495ae853SAndroid Build Coastguard Worker /*                                                                           */
23*495ae853SAndroid Build Coastguard Worker /*  File 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