1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker * isvcd_api.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker * Contains all the API related functions
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker * Kishore
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @par List of Functions:
33*495ae853SAndroid Build Coastguard Worker * - api_check_struct_sanity()
34*495ae853SAndroid Build Coastguard Worker * - isvcd_set_processor()
35*495ae853SAndroid Build Coastguard Worker * - isvcd_init_decoder()
36*495ae853SAndroid Build Coastguard Worker * - isvcd_nal_parse_ctxt_free()
37*495ae853SAndroid Build Coastguard Worker * - isvcd_residual_resample_ctxt_free()
38*495ae853SAndroid Build Coastguard Worker * - isvcd_intra_resample_ctxt_free()
39*495ae853SAndroid Build Coastguard Worker * - isvcd_mode_mv_resample_ctxt_free()
40*495ae853SAndroid Build Coastguard Worker * - isvcd_free_static_bufs()
41*495ae853SAndroid Build Coastguard Worker * - isvcd_nal_parse_ctxt_create()
42*495ae853SAndroid Build Coastguard Worker * - isvcd_intra_resample_ctxt_create()
43*495ae853SAndroid Build Coastguard Worker * - isvcd_residual_resample_ctxt_create()
44*495ae853SAndroid Build Coastguard Worker * - isvcd_mode_mv_resample_ctxt_create()
45*495ae853SAndroid Build Coastguard Worker * - isvcd_allocate_static_bufs()
46*495ae853SAndroid Build Coastguard Worker * - isvcd_create()
47*495ae853SAndroid Build Coastguard Worker * - isvcd_update_dqid()
48*495ae853SAndroid Build Coastguard Worker * - isvcd_detect_res_change()
49*495ae853SAndroid Build Coastguard Worker * - isvcd_parse_ref_pic_list_modify()
50*495ae853SAndroid Build Coastguard Worker * - isvcd_parse_slice_hdr_refdq_id()
51*495ae853SAndroid Build Coastguard Worker * - isvcd_get_ref_lyr_dqid()
52*495ae853SAndroid Build Coastguard Worker * - isvcd_conceal_node_params()
53*495ae853SAndroid Build Coastguard Worker * - isvcd_refine_dep_list()
54*495ae853SAndroid Build Coastguard Worker * - isvcd_dec_non_vcl()
55*495ae853SAndroid Build Coastguard Worker * - isvcd_seq_hdr_dec()
56*495ae853SAndroid Build Coastguard Worker * - isvcd_pre_parse_refine_au()
57*495ae853SAndroid Build Coastguard Worker * - isvcd_video_decode()
58*495ae853SAndroid Build Coastguard Worker * - isvcd_set_display_frame()
59*495ae853SAndroid Build Coastguard Worker * - isvcd_set_flush_mode()
60*495ae853SAndroid Build Coastguard Worker * - isvcd_get_status()
61*495ae853SAndroid Build Coastguard Worker * - isvcd_get_buf_info()
62*495ae853SAndroid Build Coastguard Worker * - isvcd_set_params()
63*495ae853SAndroid Build Coastguard Worker * - isvcd_set_target_layer()
64*495ae853SAndroid Build Coastguard Worker * - isvcd_set_default_params()
65*495ae853SAndroid Build Coastguard Worker * - isvcd_delete()
66*495ae853SAndroid Build Coastguard Worker * - isvcd_reset()
67*495ae853SAndroid Build Coastguard Worker * - isvcd_ctl()
68*495ae853SAndroid Build Coastguard Worker * - isvcd_rel_display_frame()
69*495ae853SAndroid Build Coastguard Worker * - isvcd_set_degrade()
70*495ae853SAndroid Build Coastguard Worker * - isvcd_get_frame_dimensions()
71*495ae853SAndroid Build Coastguard Worker * - isvcd_get_vui_params()
72*495ae853SAndroid Build Coastguard Worker * - isvcd_get_sei_mdcv_params()
73*495ae853SAndroid Build Coastguard Worker * - isvcd_get_sei_cll_params()
74*495ae853SAndroid Build Coastguard Worker * - isvcd_get_sei_ave_params()
75*495ae853SAndroid Build Coastguard Worker * - isvcd_get_sei_ccv_params()
76*495ae853SAndroid Build Coastguard Worker * - isvcd_set_num_cores()
77*495ae853SAndroid Build Coastguard Worker * - isvcd_fill_output_struct_from_context()
78*495ae853SAndroid Build Coastguard Worker * - isvcd_api_function()
79*495ae853SAndroid Build Coastguard Worker *
80*495ae853SAndroid Build Coastguard Worker * @remarks
81*495ae853SAndroid Build Coastguard Worker * None
82*495ae853SAndroid Build Coastguard Worker *
83*495ae853SAndroid Build Coastguard Worker *******************************************************************************
84*495ae853SAndroid Build Coastguard Worker */
85*495ae853SAndroid Build Coastguard Worker
86*495ae853SAndroid Build Coastguard Worker #include <string.h>
87*495ae853SAndroid Build Coastguard Worker #include <limits.h>
88*495ae853SAndroid Build Coastguard Worker #include <stddef.h>
89*495ae853SAndroid Build Coastguard Worker #include <assert.h>
90*495ae853SAndroid Build Coastguard Worker #include "ih264_defs.h"
91*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
92*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
93*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
94*495ae853SAndroid Build Coastguard Worker #include "ih264d_tables.h"
95*495ae853SAndroid Build Coastguard Worker #include "iv.h"
96*495ae853SAndroid Build Coastguard Worker #include "ivd.h"
97*495ae853SAndroid Build Coastguard Worker #include "ih264d_defs.h"
98*495ae853SAndroid Build Coastguard Worker #include "ih264d_debug.h"
99*495ae853SAndroid Build Coastguard Worker #include "ih264_debug.h"
100*495ae853SAndroid Build Coastguard Worker #include "ih264d_inter_pred.h"
101*495ae853SAndroid Build Coastguard Worker #include "isvcd_structs.h"
102*495ae853SAndroid Build Coastguard Worker #include "ih264d_nal.h"
103*495ae853SAndroid Build Coastguard Worker #include "ih264d_error_handler.h"
104*495ae853SAndroid Build Coastguard Worker #include "ithread.h"
105*495ae853SAndroid Build Coastguard Worker #include "ih264d_parse_slice.h"
106*495ae853SAndroid Build Coastguard Worker #include "ih264d_function_selector.h"
107*495ae853SAndroid Build Coastguard Worker #include "ih264_error.h"
108*495ae853SAndroid Build Coastguard Worker #include "ih264_disp_mgr.h"
109*495ae853SAndroid Build Coastguard Worker #include "ih264_buf_mgr.h"
110*495ae853SAndroid Build Coastguard Worker #include "ih264d_deblocking.h"
111*495ae853SAndroid Build Coastguard Worker #include "ih264d_parse_cavlc.h"
112*495ae853SAndroid Build Coastguard Worker #include "ih264d_parse_cabac.h"
113*495ae853SAndroid Build Coastguard Worker #include "ih264d_process_pslice.h"
114*495ae853SAndroid Build Coastguard Worker #include "isvcd_process_epslice.h"
115*495ae853SAndroid Build Coastguard Worker #include "ih264d_utils.h"
116*495ae853SAndroid Build Coastguard Worker #include "ih264d_api_utils.h"
117*495ae853SAndroid Build Coastguard Worker #include "ih264d_format_conv.h"
118*495ae853SAndroid Build Coastguard Worker #include "ih264d_parse_headers.h"
119*495ae853SAndroid Build Coastguard Worker #include "ih264d_thread_compute_bs.h"
120*495ae853SAndroid Build Coastguard Worker #include "isvcd_utils.h"
121*495ae853SAndroid Build Coastguard Worker #include "isvcd.h"
122*495ae853SAndroid Build Coastguard Worker #include "isvcd_mode_mv_resamp.h"
123*495ae853SAndroid Build Coastguard Worker #include "isvcd_parse_headers.h"
124*495ae853SAndroid Build Coastguard Worker #include "isvcd_thread_compute_bs.h"
125*495ae853SAndroid Build Coastguard Worker #include "isvcd_function_selector.h"
126*495ae853SAndroid Build Coastguard Worker /*********************/
127*495ae853SAndroid Build Coastguard Worker /* Codec Versioning */
128*495ae853SAndroid Build Coastguard Worker /*********************/
129*495ae853SAndroid Build Coastguard Worker // Move this to where it is used
130*495ae853SAndroid Build Coastguard Worker #define CODEC_NAME "H264VDEC"
131*495ae853SAndroid Build Coastguard Worker #define CODEC_RELEASE_TYPE "production"
132*495ae853SAndroid Build Coastguard Worker #define CODEC_RELEASE_VER "05.00"
133*495ae853SAndroid Build Coastguard Worker #define CODEC_VENDOR "ITTIAM"
134*495ae853SAndroid Build Coastguard Worker #define MAXVERSION_STRLEN 511
135*495ae853SAndroid Build Coastguard Worker #ifdef ANDROID
136*495ae853SAndroid Build Coastguard Worker #define VERSION(version_string, codec_name, codec_release_type, codec_release_ver, codec_vendor) \
137*495ae853SAndroid Build Coastguard Worker snprintf(version_string, MAXVERSION_STRLEN, "@(#)Id:%s_%s Ver:%s Released by %s", codec_name, \
138*495ae853SAndroid Build Coastguard Worker codec_release_type, codec_release_ver, codec_vendor)
139*495ae853SAndroid Build Coastguard Worker #else
140*495ae853SAndroid Build Coastguard Worker #define VERSION(version_string, codec_name, codec_release_type, codec_release_ver, codec_vendor) \
141*495ae853SAndroid Build Coastguard Worker snprintf(version_string, MAXVERSION_STRLEN, \
142*495ae853SAndroid Build Coastguard Worker "@(#)Id:%s_%s Ver:%s Released by %s Build: %s @ %s", codec_name, codec_release_type, \
143*495ae853SAndroid Build Coastguard Worker codec_release_ver, codec_vendor, __DATE__, __TIME__)
144*495ae853SAndroid Build Coastguard Worker #endif
145*495ae853SAndroid Build Coastguard Worker
146*495ae853SAndroid Build Coastguard Worker #define MIN_IN_BUFS 1
147*495ae853SAndroid Build Coastguard Worker #define MIN_OUT_BUFS_420 3
148*495ae853SAndroid Build Coastguard Worker #define MIN_OUT_BUFS_422ILE 1
149*495ae853SAndroid Build Coastguard Worker #define MIN_OUT_BUFS_RGB565 1
150*495ae853SAndroid Build Coastguard Worker #define MIN_OUT_BUFS_420SP 2
151*495ae853SAndroid Build Coastguard Worker
152*495ae853SAndroid Build Coastguard Worker #define NUM_FRAMES_LIMIT_ENABLED 0
153*495ae853SAndroid Build Coastguard Worker
154*495ae853SAndroid Build Coastguard Worker #if NUM_FRAMES_LIMIT_ENABLED
155*495ae853SAndroid Build Coastguard Worker #define NUM_FRAMES_LIMIT 10000
156*495ae853SAndroid Build Coastguard Worker #else
157*495ae853SAndroid Build Coastguard Worker #define NUM_FRAMES_LIMIT 0x7FFFFFFF
158*495ae853SAndroid Build Coastguard Worker #endif
159*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_get_version(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
160*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_parse_sei(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm);
161*495ae853SAndroid Build Coastguard Worker WORD32 check_app_out_buf_size(dec_struct_t *ps_dec);
162*495ae853SAndroid Build Coastguard Worker UWORD32 ih264d_get_extra_mem_external(UWORD32 width, UWORD32 height);
163*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_frame_dimensions(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
164*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_vui_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
165*495ae853SAndroid Build Coastguard Worker
166*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_mdcv_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
167*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_cll_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
168*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_ave_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
169*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_ccv_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
170*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_num_cores(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
171*495ae853SAndroid Build Coastguard Worker
172*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_deblock_display(dec_struct_t *ps_dec);
173*495ae853SAndroid Build Coastguard Worker WORD32 ih264d_get_display_frame(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
174*495ae853SAndroid Build Coastguard Worker
175*495ae853SAndroid Build Coastguard Worker void ih264d_signal_decode_thread(dec_struct_t *ps_dec);
176*495ae853SAndroid Build Coastguard Worker
177*495ae853SAndroid Build Coastguard Worker void ih264d_signal_bs_deblk_thread(dec_struct_t *ps_dec);
178*495ae853SAndroid Build Coastguard Worker void ih264d_decode_picture_thread(dec_struct_t *ps_dec);
179*495ae853SAndroid Build Coastguard Worker void isvcd_decode_picture_thread(svc_dec_lyr_struct_t *ps_svc_lyr_dec);
180*495ae853SAndroid Build Coastguard Worker
181*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_degrade(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op);
182*495ae853SAndroid Build Coastguard Worker
183*495ae853SAndroid Build Coastguard Worker void isvcd_fill_output_struct_from_context(svc_dec_lyr_struct_t *ps_svc_lyr_dec,
184*495ae853SAndroid Build Coastguard Worker ivd_video_decode_op_t *ps_dec_op);
185*495ae853SAndroid Build Coastguard Worker
api_check_struct_sanity(iv_obj_t * ps_handle,void * pv_api_ip,void * pv_api_op)186*495ae853SAndroid Build Coastguard Worker static IV_API_CALL_STATUS_T api_check_struct_sanity(iv_obj_t *ps_handle, void *pv_api_ip,
187*495ae853SAndroid Build Coastguard Worker void *pv_api_op)
188*495ae853SAndroid Build Coastguard Worker {
189*495ae853SAndroid Build Coastguard Worker IVD_API_COMMAND_TYPE_T e_cmd;
190*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_api_ip;
191*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_api_op;
192*495ae853SAndroid Build Coastguard Worker UWORD32 i;
193*495ae853SAndroid Build Coastguard Worker
194*495ae853SAndroid Build Coastguard Worker if(NULL == pv_api_op) return (IV_FAIL);
195*495ae853SAndroid Build Coastguard Worker
196*495ae853SAndroid Build Coastguard Worker if(NULL == pv_api_ip) return (IV_FAIL);
197*495ae853SAndroid Build Coastguard Worker
198*495ae853SAndroid Build Coastguard Worker pu4_api_ip = (UWORD32 *) pv_api_ip;
199*495ae853SAndroid Build Coastguard Worker pu4_api_op = (UWORD32 *) pv_api_op;
200*495ae853SAndroid Build Coastguard Worker e_cmd = *(pu4_api_ip + 1);
201*495ae853SAndroid Build Coastguard Worker
202*495ae853SAndroid Build Coastguard Worker /* error checks on handle */
203*495ae853SAndroid Build Coastguard Worker switch((WORD32) e_cmd)
204*495ae853SAndroid Build Coastguard Worker {
205*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CREATE:
206*495ae853SAndroid Build Coastguard Worker break;
207*495ae853SAndroid Build Coastguard Worker
208*495ae853SAndroid Build Coastguard Worker case IVD_CMD_REL_DISPLAY_FRAME:
209*495ae853SAndroid Build Coastguard Worker case IVD_CMD_SET_DISPLAY_FRAME:
210*495ae853SAndroid Build Coastguard Worker case IVD_CMD_GET_DISPLAY_FRAME:
211*495ae853SAndroid Build Coastguard Worker case IVD_CMD_VIDEO_DECODE:
212*495ae853SAndroid Build Coastguard Worker case IVD_CMD_DELETE:
213*495ae853SAndroid Build Coastguard Worker case IVD_CMD_VIDEO_CTL:
214*495ae853SAndroid Build Coastguard Worker if(ps_handle == NULL)
215*495ae853SAndroid Build Coastguard Worker {
216*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
217*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVD_HANDLE_NULL;
218*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
219*495ae853SAndroid Build Coastguard Worker }
220*495ae853SAndroid Build Coastguard Worker
221*495ae853SAndroid Build Coastguard Worker if(ps_handle->u4_size != sizeof(iv_obj_t))
222*495ae853SAndroid Build Coastguard Worker {
223*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
224*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVD_HANDLE_STRUCT_SIZE_INCORRECT;
225*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
226*495ae853SAndroid Build Coastguard Worker }
227*495ae853SAndroid Build Coastguard Worker
228*495ae853SAndroid Build Coastguard Worker if(ps_handle->pv_fxns != isvcd_api_function)
229*495ae853SAndroid Build Coastguard Worker {
230*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
231*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVD_INVALID_HANDLE_NULL;
232*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
233*495ae853SAndroid Build Coastguard Worker }
234*495ae853SAndroid Build Coastguard Worker
235*495ae853SAndroid Build Coastguard Worker if(ps_handle->pv_codec_handle == NULL)
236*495ae853SAndroid Build Coastguard Worker {
237*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
238*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVD_INVALID_HANDLE_NULL;
239*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
240*495ae853SAndroid Build Coastguard Worker }
241*495ae853SAndroid Build Coastguard Worker break;
242*495ae853SAndroid Build Coastguard Worker default:
243*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
244*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVD_INVALID_API_CMD;
245*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
246*495ae853SAndroid Build Coastguard Worker }
247*495ae853SAndroid Build Coastguard Worker
248*495ae853SAndroid Build Coastguard Worker switch((WORD32) e_cmd)
249*495ae853SAndroid Build Coastguard Worker {
250*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CREATE:
251*495ae853SAndroid Build Coastguard Worker {
252*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t *ps_ip = (isvcd_create_ip_t *) pv_api_ip;
253*495ae853SAndroid Build Coastguard Worker isvcd_create_op_t *ps_op = (isvcd_create_op_t *) pv_api_op;
254*495ae853SAndroid Build Coastguard Worker
255*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_create_op_t.u4_error_code = 0;
256*495ae853SAndroid Build Coastguard Worker
257*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ivd_create_ip_t.u4_size > sizeof(isvcd_create_ip_t)) ||
258*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_create_ip_t.u4_size < sizeof(ivd_create_ip_t)))
259*495ae853SAndroid Build Coastguard Worker {
260*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_create_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
261*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_create_op_t.u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
262*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("\n");
263*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
264*495ae853SAndroid Build Coastguard Worker }
265*495ae853SAndroid Build Coastguard Worker
266*495ae853SAndroid Build Coastguard Worker if((ps_op->s_ivd_create_op_t.u4_size != sizeof(isvcd_create_op_t)) &&
267*495ae853SAndroid Build Coastguard Worker (ps_op->s_ivd_create_op_t.u4_size != sizeof(ivd_create_op_t)))
268*495ae853SAndroid Build Coastguard Worker {
269*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_create_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
270*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_create_op_t.u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
271*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("\n");
272*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
273*495ae853SAndroid Build Coastguard Worker }
274*495ae853SAndroid Build Coastguard Worker
275*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_420P) &&
276*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_422ILE) &&
277*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_create_ip_t.e_output_format != IV_RGB_565) &&
278*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_420SP_UV) &&
279*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_420SP_VU))
280*495ae853SAndroid Build Coastguard Worker {
281*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_create_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
282*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_create_op_t.u4_error_code |= IVD_INIT_DEC_COL_FMT_NOT_SUPPORTED;
283*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("\n");
284*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
285*495ae853SAndroid Build Coastguard Worker }
286*495ae853SAndroid Build Coastguard Worker }
287*495ae853SAndroid Build Coastguard Worker break;
288*495ae853SAndroid Build Coastguard Worker
289*495ae853SAndroid Build Coastguard Worker case IVD_CMD_GET_DISPLAY_FRAME:
290*495ae853SAndroid Build Coastguard Worker {
291*495ae853SAndroid Build Coastguard Worker isvcd_get_display_frame_ip_t *ps_ip = (isvcd_get_display_frame_ip_t *) pv_api_ip;
292*495ae853SAndroid Build Coastguard Worker isvcd_get_display_frame_op_t *ps_op = (isvcd_get_display_frame_op_t *) pv_api_op;
293*495ae853SAndroid Build Coastguard Worker
294*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_get_display_frame_op_t.u4_error_code = 0;
295*495ae853SAndroid Build Coastguard Worker
296*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ivd_get_display_frame_ip_t.u4_size !=
297*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_get_display_frame_ip_t)) &&
298*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_get_display_frame_ip_t.u4_size != sizeof(ivd_get_display_frame_ip_t)))
299*495ae853SAndroid Build Coastguard Worker {
300*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_get_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
301*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_get_display_frame_op_t.u4_error_code |=
302*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
303*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
304*495ae853SAndroid Build Coastguard Worker }
305*495ae853SAndroid Build Coastguard Worker
306*495ae853SAndroid Build Coastguard Worker if((ps_op->s_ivd_get_display_frame_op_t.u4_size !=
307*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_get_display_frame_op_t)) &&
308*495ae853SAndroid Build Coastguard Worker (ps_op->s_ivd_get_display_frame_op_t.u4_size != sizeof(ivd_get_display_frame_op_t)))
309*495ae853SAndroid Build Coastguard Worker {
310*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_get_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
311*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_get_display_frame_op_t.u4_error_code |=
312*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
313*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
314*495ae853SAndroid Build Coastguard Worker }
315*495ae853SAndroid Build Coastguard Worker }
316*495ae853SAndroid Build Coastguard Worker break;
317*495ae853SAndroid Build Coastguard Worker
318*495ae853SAndroid Build Coastguard Worker case IVD_CMD_REL_DISPLAY_FRAME:
319*495ae853SAndroid Build Coastguard Worker {
320*495ae853SAndroid Build Coastguard Worker isvcd_rel_display_frame_ip_t *ps_ip = (isvcd_rel_display_frame_ip_t *) pv_api_ip;
321*495ae853SAndroid Build Coastguard Worker isvcd_rel_display_frame_op_t *ps_op = (isvcd_rel_display_frame_op_t *) pv_api_op;
322*495ae853SAndroid Build Coastguard Worker
323*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_rel_display_frame_op_t.u4_error_code = 0;
324*495ae853SAndroid Build Coastguard Worker
325*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ivd_rel_display_frame_ip_t.u4_size !=
326*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_rel_display_frame_ip_t)) &&
327*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_rel_display_frame_ip_t.u4_size != sizeof(ivd_rel_display_frame_ip_t)))
328*495ae853SAndroid Build Coastguard Worker {
329*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
330*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |=
331*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
332*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
333*495ae853SAndroid Build Coastguard Worker }
334*495ae853SAndroid Build Coastguard Worker
335*495ae853SAndroid Build Coastguard Worker if((ps_op->s_ivd_rel_display_frame_op_t.u4_size !=
336*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_rel_display_frame_op_t)) &&
337*495ae853SAndroid Build Coastguard Worker (ps_op->s_ivd_rel_display_frame_op_t.u4_size != sizeof(ivd_rel_display_frame_op_t)))
338*495ae853SAndroid Build Coastguard Worker {
339*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
340*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |=
341*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
342*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
343*495ae853SAndroid Build Coastguard Worker }
344*495ae853SAndroid Build Coastguard Worker }
345*495ae853SAndroid Build Coastguard Worker break;
346*495ae853SAndroid Build Coastguard Worker
347*495ae853SAndroid Build Coastguard Worker case IVD_CMD_SET_DISPLAY_FRAME:
348*495ae853SAndroid Build Coastguard Worker {
349*495ae853SAndroid Build Coastguard Worker isvcd_set_display_frame_ip_t *ps_ip = (isvcd_set_display_frame_ip_t *) pv_api_ip;
350*495ae853SAndroid Build Coastguard Worker isvcd_set_display_frame_op_t *ps_op = (isvcd_set_display_frame_op_t *) pv_api_op;
351*495ae853SAndroid Build Coastguard Worker UWORD32 j;
352*495ae853SAndroid Build Coastguard Worker
353*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code = 0;
354*495ae853SAndroid Build Coastguard Worker
355*495ae853SAndroid Build Coastguard Worker if((ps_ip->s_ivd_set_display_frame_ip_t.u4_size !=
356*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_set_display_frame_ip_t)) &&
357*495ae853SAndroid Build Coastguard Worker (ps_ip->s_ivd_set_display_frame_ip_t.u4_size != sizeof(ivd_set_display_frame_ip_t)))
358*495ae853SAndroid Build Coastguard Worker {
359*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
360*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
361*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
362*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
363*495ae853SAndroid Build Coastguard Worker }
364*495ae853SAndroid Build Coastguard Worker
365*495ae853SAndroid Build Coastguard Worker if((ps_op->s_ivd_set_display_frame_op_t.u4_size !=
366*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_set_display_frame_op_t)) &&
367*495ae853SAndroid Build Coastguard Worker (ps_op->s_ivd_set_display_frame_op_t.u4_size != sizeof(ivd_set_display_frame_op_t)))
368*495ae853SAndroid Build Coastguard Worker {
369*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
370*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
371*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
372*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
373*495ae853SAndroid Build Coastguard Worker }
374*495ae853SAndroid Build Coastguard Worker
375*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_set_display_frame_ip_t.num_disp_bufs == 0)
376*495ae853SAndroid Build Coastguard Worker {
377*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
378*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUFS;
379*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
380*495ae853SAndroid Build Coastguard Worker }
381*495ae853SAndroid Build Coastguard Worker
382*495ae853SAndroid Build Coastguard Worker for(j = 0; j < ps_ip->s_ivd_set_display_frame_ip_t.num_disp_bufs; j++)
383*495ae853SAndroid Build Coastguard Worker {
384*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_num_bufs == 0)
385*495ae853SAndroid Build Coastguard Worker {
386*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
387*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUFS;
388*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
389*495ae853SAndroid Build Coastguard Worker }
390*495ae853SAndroid Build Coastguard Worker
391*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_num_bufs;
392*495ae853SAndroid Build Coastguard Worker i++)
393*495ae853SAndroid Build Coastguard Worker {
394*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].pu1_bufs[i] == NULL)
395*495ae853SAndroid Build Coastguard Worker {
396*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
397*495ae853SAndroid Build Coastguard Worker 1 << IVD_UNSUPPORTEDPARAM;
398*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
399*495ae853SAndroid Build Coastguard Worker IVD_DISP_FRM_OP_BUF_NULL;
400*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
401*495ae853SAndroid Build Coastguard Worker }
402*495ae853SAndroid Build Coastguard Worker
403*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j]
404*495ae853SAndroid Build Coastguard Worker .u4_min_out_buf_size[i] == 0)
405*495ae853SAndroid Build Coastguard Worker {
406*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
407*495ae853SAndroid Build Coastguard Worker 1 << IVD_UNSUPPORTEDPARAM;
408*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
409*495ae853SAndroid Build Coastguard Worker IVD_DISP_FRM_ZERO_OP_BUF_SIZE;
410*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
411*495ae853SAndroid Build Coastguard Worker }
412*495ae853SAndroid Build Coastguard Worker }
413*495ae853SAndroid Build Coastguard Worker }
414*495ae853SAndroid Build Coastguard Worker }
415*495ae853SAndroid Build Coastguard Worker break;
416*495ae853SAndroid Build Coastguard Worker
417*495ae853SAndroid Build Coastguard Worker case IVD_CMD_VIDEO_DECODE:
418*495ae853SAndroid Build Coastguard Worker {
419*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_ip_t *ps_ip = (isvcd_video_decode_ip_t *) pv_api_ip;
420*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_op_t *ps_op = (isvcd_video_decode_op_t *) pv_api_op;
421*495ae853SAndroid Build Coastguard Worker
422*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("The input bytes is: %d",
423*495ae853SAndroid Build Coastguard Worker ps_ip->s_ivd_video_decode_ip_t.u4_num_Bytes);
424*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_error_code = 0;
425*495ae853SAndroid Build Coastguard Worker
426*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_video_decode_ip_t.u4_size != sizeof(isvcd_video_decode_ip_t) &&
427*495ae853SAndroid Build Coastguard Worker ps_ip->s_ivd_video_decode_ip_t.u4_size !=
428*495ae853SAndroid Build Coastguard Worker offsetof(ivd_video_decode_ip_t, s_out_buffer))
429*495ae853SAndroid Build Coastguard Worker {
430*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
431*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
432*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
433*495ae853SAndroid Build Coastguard Worker }
434*495ae853SAndroid Build Coastguard Worker
435*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_video_decode_op_t.u4_size != sizeof(isvcd_video_decode_op_t) &&
436*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_size !=
437*495ae853SAndroid Build Coastguard Worker offsetof(ivd_video_decode_op_t, u4_output_present))
438*495ae853SAndroid Build Coastguard Worker {
439*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
440*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
441*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
442*495ae853SAndroid Build Coastguard Worker }
443*495ae853SAndroid Build Coastguard Worker {
444*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
445*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
446*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
447*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) (ps_handle->pv_codec_handle);
448*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[0];
449*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
450*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_enable_mb_info)
451*495ae853SAndroid Build Coastguard Worker {
452*495ae853SAndroid Build Coastguard Worker if(!ps_ip->pu1_8x8_blk_qp_map && !ps_ip->pu1_8x8_blk_type_map)
453*495ae853SAndroid Build Coastguard Worker {
454*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
455*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_video_decode_op_t.u4_error_code |=
456*495ae853SAndroid Build Coastguard Worker IH264D_FRAME_INFO_OP_BUF_NULL;
457*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
458*495ae853SAndroid Build Coastguard Worker }
459*495ae853SAndroid Build Coastguard Worker }
460*495ae853SAndroid Build Coastguard Worker }
461*495ae853SAndroid Build Coastguard Worker }
462*495ae853SAndroid Build Coastguard Worker break;
463*495ae853SAndroid Build Coastguard Worker
464*495ae853SAndroid Build Coastguard Worker case IVD_CMD_DELETE:
465*495ae853SAndroid Build Coastguard Worker {
466*495ae853SAndroid Build Coastguard Worker isvcd_delete_ip_t *ps_ip = (isvcd_delete_ip_t *) pv_api_ip;
467*495ae853SAndroid Build Coastguard Worker isvcd_delete_op_t *ps_op = (isvcd_delete_op_t *) pv_api_op;
468*495ae853SAndroid Build Coastguard Worker
469*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_delete_op_t.u4_error_code = 0;
470*495ae853SAndroid Build Coastguard Worker
471*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_delete_ip_t.u4_size != sizeof(isvcd_delete_ip_t))
472*495ae853SAndroid Build Coastguard Worker {
473*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_delete_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
474*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_delete_op_t.u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
475*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
476*495ae853SAndroid Build Coastguard Worker }
477*495ae853SAndroid Build Coastguard Worker
478*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_delete_op_t.u4_size != sizeof(isvcd_delete_op_t))
479*495ae853SAndroid Build Coastguard Worker {
480*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_delete_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
481*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_delete_op_t.u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
482*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
483*495ae853SAndroid Build Coastguard Worker }
484*495ae853SAndroid Build Coastguard Worker }
485*495ae853SAndroid Build Coastguard Worker break;
486*495ae853SAndroid Build Coastguard Worker
487*495ae853SAndroid Build Coastguard Worker case IVD_CMD_VIDEO_CTL:
488*495ae853SAndroid Build Coastguard Worker {
489*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_ptr_cmd;
490*495ae853SAndroid Build Coastguard Worker UWORD32 sub_command;
491*495ae853SAndroid Build Coastguard Worker
492*495ae853SAndroid Build Coastguard Worker pu4_ptr_cmd = (UWORD32 *) pv_api_ip;
493*495ae853SAndroid Build Coastguard Worker pu4_ptr_cmd += 2;
494*495ae853SAndroid Build Coastguard Worker sub_command = *pu4_ptr_cmd;
495*495ae853SAndroid Build Coastguard Worker
496*495ae853SAndroid Build Coastguard Worker switch(sub_command)
497*495ae853SAndroid Build Coastguard Worker {
498*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_SETPARAMS:
499*495ae853SAndroid Build Coastguard Worker {
500*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t *ps_ip;
501*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t *ps_op;
502*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_set_config_ip_t *) pv_api_ip;
503*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_set_config_op_t *) pv_api_op;
504*495ae853SAndroid Build Coastguard Worker
505*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_ctl_set_config_ip_t.u4_size !=
506*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_set_config_ip_t))
507*495ae853SAndroid Build Coastguard Worker {
508*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
509*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |=
510*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
511*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
512*495ae853SAndroid Build Coastguard Worker }
513*495ae853SAndroid Build Coastguard Worker }
514*495ae853SAndroid Build Coastguard Worker break;
515*495ae853SAndroid Build Coastguard Worker
516*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_SETDEFAULT:
517*495ae853SAndroid Build Coastguard Worker {
518*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t *ps_op;
519*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_set_config_op_t *) pv_api_op;
520*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_ctl_set_config_op_t.u4_size !=
521*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_set_config_op_t))
522*495ae853SAndroid Build Coastguard Worker {
523*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
524*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |=
525*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
526*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
527*495ae853SAndroid Build Coastguard Worker }
528*495ae853SAndroid Build Coastguard Worker }
529*495ae853SAndroid Build Coastguard Worker break;
530*495ae853SAndroid Build Coastguard Worker
531*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_GETPARAMS:
532*495ae853SAndroid Build Coastguard Worker {
533*495ae853SAndroid Build Coastguard Worker isvcd_ctl_getstatus_ip_t *ps_ip;
534*495ae853SAndroid Build Coastguard Worker isvcd_ctl_getstatus_op_t *ps_op;
535*495ae853SAndroid Build Coastguard Worker
536*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_getstatus_ip_t *) pv_api_ip;
537*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_getstatus_op_t *) pv_api_op;
538*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_ctl_getstatus_ip_t.u4_size != sizeof(isvcd_ctl_getstatus_ip_t))
539*495ae853SAndroid Build Coastguard Worker {
540*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
541*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |=
542*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
543*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
544*495ae853SAndroid Build Coastguard Worker }
545*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_ctl_getstatus_op_t.u4_size != sizeof(isvcd_ctl_getstatus_op_t))
546*495ae853SAndroid Build Coastguard Worker {
547*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
548*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |=
549*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
550*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
551*495ae853SAndroid Build Coastguard Worker }
552*495ae853SAndroid Build Coastguard Worker }
553*495ae853SAndroid Build Coastguard Worker break;
554*495ae853SAndroid Build Coastguard Worker
555*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_GETBUFINFO:
556*495ae853SAndroid Build Coastguard Worker {
557*495ae853SAndroid Build Coastguard Worker isvcd_ctl_getbufinfo_ip_t *ps_ip;
558*495ae853SAndroid Build Coastguard Worker isvcd_ctl_getbufinfo_op_t *ps_op;
559*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_getbufinfo_ip_t *) pv_api_ip;
560*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_getbufinfo_op_t *) pv_api_op;
561*495ae853SAndroid Build Coastguard Worker
562*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_ctl_getbufinfo_ip_t.u4_size !=
563*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_getbufinfo_ip_t))
564*495ae853SAndroid Build Coastguard Worker {
565*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
566*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |=
567*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
568*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
569*495ae853SAndroid Build Coastguard Worker }
570*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_ctl_getbufinfo_op_t.u4_size !=
571*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_getbufinfo_op_t))
572*495ae853SAndroid Build Coastguard Worker {
573*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
574*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |=
575*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
576*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
577*495ae853SAndroid Build Coastguard Worker }
578*495ae853SAndroid Build Coastguard Worker }
579*495ae853SAndroid Build Coastguard Worker break;
580*495ae853SAndroid Build Coastguard Worker
581*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_GETVERSION:
582*495ae853SAndroid Build Coastguard Worker {
583*495ae853SAndroid Build Coastguard Worker isvcd_ctl_getversioninfo_ip_t *ps_ip;
584*495ae853SAndroid Build Coastguard Worker isvcd_ctl_getversioninfo_op_t *ps_op;
585*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_getversioninfo_ip_t *) pv_api_ip;
586*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_getversioninfo_op_t *) pv_api_op;
587*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_ctl_getversioninfo_ip_t.u4_size !=
588*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_getversioninfo_ip_t))
589*495ae853SAndroid Build Coastguard Worker {
590*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
591*495ae853SAndroid Build Coastguard Worker 1 << IVD_UNSUPPORTEDPARAM;
592*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
593*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
594*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
595*495ae853SAndroid Build Coastguard Worker }
596*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_ctl_getversioninfo_op_t.u4_size !=
597*495ae853SAndroid Build Coastguard Worker sizeof(isvcd_ctl_getversioninfo_op_t))
598*495ae853SAndroid Build Coastguard Worker {
599*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
600*495ae853SAndroid Build Coastguard Worker 1 << IVD_UNSUPPORTEDPARAM;
601*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
602*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
603*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
604*495ae853SAndroid Build Coastguard Worker }
605*495ae853SAndroid Build Coastguard Worker }
606*495ae853SAndroid Build Coastguard Worker break;
607*495ae853SAndroid Build Coastguard Worker
608*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_FLUSH:
609*495ae853SAndroid Build Coastguard Worker {
610*495ae853SAndroid Build Coastguard Worker isvcd_ctl_flush_ip_t *ps_ip;
611*495ae853SAndroid Build Coastguard Worker isvcd_ctl_flush_op_t *ps_op;
612*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_flush_ip_t *) pv_api_ip;
613*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_flush_op_t *) pv_api_op;
614*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_ctl_flush_ip_t.u4_size != sizeof(isvcd_ctl_flush_ip_t))
615*495ae853SAndroid Build Coastguard Worker {
616*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_flush_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
617*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_flush_op_t.u4_error_code |=
618*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
619*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
620*495ae853SAndroid Build Coastguard Worker }
621*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_ctl_flush_op_t.u4_size != sizeof(isvcd_ctl_flush_op_t))
622*495ae853SAndroid Build Coastguard Worker {
623*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_flush_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
624*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_flush_op_t.u4_error_code |=
625*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
626*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
627*495ae853SAndroid Build Coastguard Worker }
628*495ae853SAndroid Build Coastguard Worker }
629*495ae853SAndroid Build Coastguard Worker break;
630*495ae853SAndroid Build Coastguard Worker
631*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_RESET:
632*495ae853SAndroid Build Coastguard Worker {
633*495ae853SAndroid Build Coastguard Worker isvcd_ctl_reset_ip_t *ps_ip;
634*495ae853SAndroid Build Coastguard Worker isvcd_ctl_reset_op_t *ps_op;
635*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_reset_ip_t *) pv_api_ip;
636*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_reset_op_t *) pv_api_op;
637*495ae853SAndroid Build Coastguard Worker if(ps_ip->s_ivd_ctl_reset_ip_t.u4_size != sizeof(isvcd_ctl_reset_ip_t))
638*495ae853SAndroid Build Coastguard Worker {
639*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_reset_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
640*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_reset_op_t.u4_error_code |=
641*495ae853SAndroid Build Coastguard Worker IVD_IP_API_STRUCT_SIZE_INCORRECT;
642*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
643*495ae853SAndroid Build Coastguard Worker }
644*495ae853SAndroid Build Coastguard Worker if(ps_op->s_ivd_ctl_reset_op_t.u4_size != sizeof(isvcd_ctl_reset_op_t))
645*495ae853SAndroid Build Coastguard Worker {
646*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_reset_op_t.u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
647*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_ctl_reset_op_t.u4_error_code |=
648*495ae853SAndroid Build Coastguard Worker IVD_OP_API_STRUCT_SIZE_INCORRECT;
649*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
650*495ae853SAndroid Build Coastguard Worker }
651*495ae853SAndroid Build Coastguard Worker }
652*495ae853SAndroid Build Coastguard Worker break;
653*495ae853SAndroid Build Coastguard Worker
654*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_DEGRADE:
655*495ae853SAndroid Build Coastguard Worker {
656*495ae853SAndroid Build Coastguard Worker isvcd_ctl_degrade_ip_t *ps_ip;
657*495ae853SAndroid Build Coastguard Worker isvcd_ctl_degrade_op_t *ps_op;
658*495ae853SAndroid Build Coastguard Worker
659*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_degrade_ip_t *) pv_api_ip;
660*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_degrade_op_t *) pv_api_op;
661*495ae853SAndroid Build Coastguard Worker
662*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_degrade_ip_t))
663*495ae853SAndroid Build Coastguard Worker {
664*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
665*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
666*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
667*495ae853SAndroid Build Coastguard Worker }
668*495ae853SAndroid Build Coastguard Worker
669*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_degrade_op_t))
670*495ae853SAndroid Build Coastguard Worker {
671*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
672*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
673*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
674*495ae853SAndroid Build Coastguard Worker }
675*495ae853SAndroid Build Coastguard Worker
676*495ae853SAndroid Build Coastguard Worker if((ps_ip->i4_degrade_pics < 0) || (ps_ip->i4_degrade_pics > 4) ||
677*495ae853SAndroid Build Coastguard Worker (ps_ip->i4_nondegrade_interval < 0) || (ps_ip->i4_degrade_type < 0) ||
678*495ae853SAndroid Build Coastguard Worker (ps_ip->i4_degrade_type > 15))
679*495ae853SAndroid Build Coastguard Worker {
680*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
681*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
682*495ae853SAndroid Build Coastguard Worker }
683*495ae853SAndroid Build Coastguard Worker
684*495ae853SAndroid Build Coastguard Worker break;
685*495ae853SAndroid Build Coastguard Worker }
686*495ae853SAndroid Build Coastguard Worker
687*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS:
688*495ae853SAndroid Build Coastguard Worker {
689*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_frame_dimensions_ip_t *ps_ip;
690*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_frame_dimensions_op_t *ps_op;
691*495ae853SAndroid Build Coastguard Worker
692*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_frame_dimensions_ip_t *) pv_api_ip;
693*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_frame_dimensions_op_t *) pv_api_op;
694*495ae853SAndroid Build Coastguard Worker
695*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_get_frame_dimensions_ip_t))
696*495ae853SAndroid Build Coastguard Worker {
697*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
698*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
699*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
700*495ae853SAndroid Build Coastguard Worker }
701*495ae853SAndroid Build Coastguard Worker
702*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_get_frame_dimensions_op_t))
703*495ae853SAndroid Build Coastguard Worker {
704*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
705*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
706*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
707*495ae853SAndroid Build Coastguard Worker }
708*495ae853SAndroid Build Coastguard Worker
709*495ae853SAndroid Build Coastguard Worker break;
710*495ae853SAndroid Build Coastguard Worker }
711*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_VUI_PARAMS:
712*495ae853SAndroid Build Coastguard Worker {
713*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_vui_params_ip_t *ps_ip;
714*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_vui_params_op_t *ps_op;
715*495ae853SAndroid Build Coastguard Worker
716*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_vui_params_ip_t *) pv_api_ip;
717*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_vui_params_op_t *) pv_api_op;
718*495ae853SAndroid Build Coastguard Worker
719*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_get_vui_params_ip_t))
720*495ae853SAndroid Build Coastguard Worker {
721*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
722*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
723*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
724*495ae853SAndroid Build Coastguard Worker }
725*495ae853SAndroid Build Coastguard Worker
726*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_get_vui_params_op_t))
727*495ae853SAndroid Build Coastguard Worker {
728*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
729*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
730*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
731*495ae853SAndroid Build Coastguard Worker }
732*495ae853SAndroid Build Coastguard Worker
733*495ae853SAndroid Build Coastguard Worker break;
734*495ae853SAndroid Build Coastguard Worker }
735*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_MDCV_PARAMS:
736*495ae853SAndroid Build Coastguard Worker {
737*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_ip_t *ps_ip;
738*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_op_t *ps_op;
739*495ae853SAndroid Build Coastguard Worker
740*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_mdcv_params_ip_t *) pv_api_ip;
741*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_mdcv_params_op_t *) pv_api_op;
742*495ae853SAndroid Build Coastguard Worker
743*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_get_sei_mdcv_params_ip_t))
744*495ae853SAndroid Build Coastguard Worker {
745*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
746*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
747*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
748*495ae853SAndroid Build Coastguard Worker }
749*495ae853SAndroid Build Coastguard Worker
750*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_get_sei_mdcv_params_op_t))
751*495ae853SAndroid Build Coastguard Worker {
752*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
753*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
754*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
755*495ae853SAndroid Build Coastguard Worker }
756*495ae853SAndroid Build Coastguard Worker
757*495ae853SAndroid Build Coastguard Worker break;
758*495ae853SAndroid Build Coastguard Worker }
759*495ae853SAndroid Build Coastguard Worker
760*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_CLL_PARAMS:
761*495ae853SAndroid Build Coastguard Worker {
762*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_ip_t *ps_ip;
763*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_op_t *ps_op;
764*495ae853SAndroid Build Coastguard Worker
765*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_cll_params_ip_t *) pv_api_ip;
766*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_cll_params_op_t *) pv_api_op;
767*495ae853SAndroid Build Coastguard Worker
768*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_get_sei_cll_params_ip_t))
769*495ae853SAndroid Build Coastguard Worker {
770*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
771*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
772*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
773*495ae853SAndroid Build Coastguard Worker }
774*495ae853SAndroid Build Coastguard Worker
775*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_get_sei_cll_params_op_t))
776*495ae853SAndroid Build Coastguard Worker {
777*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
778*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
779*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
780*495ae853SAndroid Build Coastguard Worker }
781*495ae853SAndroid Build Coastguard Worker
782*495ae853SAndroid Build Coastguard Worker break;
783*495ae853SAndroid Build Coastguard Worker }
784*495ae853SAndroid Build Coastguard Worker
785*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_AVE_PARAMS:
786*495ae853SAndroid Build Coastguard Worker {
787*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_ip_t *ps_ip;
788*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_op_t *ps_op;
789*495ae853SAndroid Build Coastguard Worker
790*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_ave_params_ip_t *) pv_api_ip;
791*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_ave_params_op_t *) pv_api_op;
792*495ae853SAndroid Build Coastguard Worker
793*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_get_sei_ave_params_ip_t))
794*495ae853SAndroid Build Coastguard Worker {
795*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
796*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
797*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
798*495ae853SAndroid Build Coastguard Worker }
799*495ae853SAndroid Build Coastguard Worker
800*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_get_sei_ave_params_op_t))
801*495ae853SAndroid Build Coastguard Worker {
802*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
803*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
804*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
805*495ae853SAndroid Build Coastguard Worker }
806*495ae853SAndroid Build Coastguard Worker
807*495ae853SAndroid Build Coastguard Worker break;
808*495ae853SAndroid Build Coastguard Worker }
809*495ae853SAndroid Build Coastguard Worker
810*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_CCV_PARAMS:
811*495ae853SAndroid Build Coastguard Worker {
812*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_ip_t *ps_ip;
813*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_op_t *ps_op;
814*495ae853SAndroid Build Coastguard Worker
815*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_ccv_params_ip_t *) pv_api_ip;
816*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_ccv_params_op_t *) pv_api_op;
817*495ae853SAndroid Build Coastguard Worker
818*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_get_sei_ccv_params_ip_t))
819*495ae853SAndroid Build Coastguard Worker {
820*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
821*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
822*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
823*495ae853SAndroid Build Coastguard Worker }
824*495ae853SAndroid Build Coastguard Worker
825*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_get_sei_ccv_params_op_t))
826*495ae853SAndroid Build Coastguard Worker {
827*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
828*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
829*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
830*495ae853SAndroid Build Coastguard Worker }
831*495ae853SAndroid Build Coastguard Worker
832*495ae853SAndroid Build Coastguard Worker break;
833*495ae853SAndroid Build Coastguard Worker }
834*495ae853SAndroid Build Coastguard Worker
835*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_SET_NUM_CORES:
836*495ae853SAndroid Build Coastguard Worker {
837*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_ip_t *ps_ip;
838*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_op_t *ps_op;
839*495ae853SAndroid Build Coastguard Worker
840*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_set_num_cores_ip_t *) pv_api_ip;
841*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_set_num_cores_op_t *) pv_api_op;
842*495ae853SAndroid Build Coastguard Worker
843*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_set_num_cores_ip_t))
844*495ae853SAndroid Build Coastguard Worker {
845*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
846*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
847*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
848*495ae853SAndroid Build Coastguard Worker }
849*495ae853SAndroid Build Coastguard Worker
850*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_set_num_cores_op_t))
851*495ae853SAndroid Build Coastguard Worker {
852*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
853*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
854*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
855*495ae853SAndroid Build Coastguard Worker }
856*495ae853SAndroid Build Coastguard Worker
857*495ae853SAndroid Build Coastguard Worker if((ps_ip->u4_num_cores != 1) && (ps_ip->u4_num_cores != 2) &&
858*495ae853SAndroid Build Coastguard Worker (ps_ip->u4_num_cores != 3) && (ps_ip->u4_num_cores != 4))
859*495ae853SAndroid Build Coastguard Worker {
860*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
861*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
862*495ae853SAndroid Build Coastguard Worker }
863*495ae853SAndroid Build Coastguard Worker break;
864*495ae853SAndroid Build Coastguard Worker }
865*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_SET_PROCESSOR:
866*495ae853SAndroid Build Coastguard Worker {
867*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_ip_t *ps_ip;
868*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_op_t *ps_op;
869*495ae853SAndroid Build Coastguard Worker
870*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_set_processor_ip_t *) pv_api_ip;
871*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_set_processor_op_t *) pv_api_op;
872*495ae853SAndroid Build Coastguard Worker
873*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_ctl_set_processor_ip_t))
874*495ae853SAndroid Build Coastguard Worker {
875*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
876*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
877*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
878*495ae853SAndroid Build Coastguard Worker }
879*495ae853SAndroid Build Coastguard Worker
880*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_ctl_set_processor_op_t))
881*495ae853SAndroid Build Coastguard Worker {
882*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
883*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
884*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
885*495ae853SAndroid Build Coastguard Worker }
886*495ae853SAndroid Build Coastguard Worker
887*495ae853SAndroid Build Coastguard Worker break;
888*495ae853SAndroid Build Coastguard Worker }
889*495ae853SAndroid Build Coastguard Worker
890*495ae853SAndroid Build Coastguard Worker case ISVCD_CMD_CTL_SET_TGT_LAYER:
891*495ae853SAndroid Build Coastguard Worker {
892*495ae853SAndroid Build Coastguard Worker isvcd_set_target_layer_ip_t *ps_ip;
893*495ae853SAndroid Build Coastguard Worker isvcd_set_target_layer_op_t *ps_op;
894*495ae853SAndroid Build Coastguard Worker
895*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_set_target_layer_ip_t *) pv_api_ip;
896*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_set_target_layer_op_t *) pv_api_op;
897*495ae853SAndroid Build Coastguard Worker
898*495ae853SAndroid Build Coastguard Worker if(ps_ip->u4_size != sizeof(isvcd_set_target_layer_ip_t))
899*495ae853SAndroid Build Coastguard Worker {
900*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
901*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_IP_API_STRUCT_SIZE_INCORRECT;
902*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
903*495ae853SAndroid Build Coastguard Worker }
904*495ae853SAndroid Build Coastguard Worker
905*495ae853SAndroid Build Coastguard Worker if(ps_ip->u1_tgt_dep_id > MAX_DEPENDENCY_ID)
906*495ae853SAndroid Build Coastguard Worker {
907*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
908*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
909*495ae853SAndroid Build Coastguard Worker }
910*495ae853SAndroid Build Coastguard Worker
911*495ae853SAndroid Build Coastguard Worker if(ps_ip->u1_tgt_temp_id > MAX_TEMPORAL_ID)
912*495ae853SAndroid Build Coastguard Worker {
913*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
914*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
915*495ae853SAndroid Build Coastguard Worker }
916*495ae853SAndroid Build Coastguard Worker
917*495ae853SAndroid Build Coastguard Worker if(ps_ip->u1_tgt_quality_id > MAX_QUALITY_ID)
918*495ae853SAndroid Build Coastguard Worker {
919*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
920*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
921*495ae853SAndroid Build Coastguard Worker }
922*495ae853SAndroid Build Coastguard Worker
923*495ae853SAndroid Build Coastguard Worker if(ps_ip->u1_tgt_priority_id > MAX_PRIORITY_ID)
924*495ae853SAndroid Build Coastguard Worker {
925*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
926*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
927*495ae853SAndroid Build Coastguard Worker }
928*495ae853SAndroid Build Coastguard Worker
929*495ae853SAndroid Build Coastguard Worker if(ps_op->u4_size != sizeof(isvcd_set_target_layer_op_t))
930*495ae853SAndroid Build Coastguard Worker {
931*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
932*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code |= IVD_OP_API_STRUCT_SIZE_INCORRECT;
933*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
934*495ae853SAndroid Build Coastguard Worker }
935*495ae853SAndroid Build Coastguard Worker
936*495ae853SAndroid Build Coastguard Worker break;
937*495ae853SAndroid Build Coastguard Worker }
938*495ae853SAndroid Build Coastguard Worker
939*495ae853SAndroid Build Coastguard Worker default:
940*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
941*495ae853SAndroid Build Coastguard Worker *(pu4_api_op + 1) |= IVD_UNSUPPORTED_API_CMD;
942*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
943*495ae853SAndroid Build Coastguard Worker break;
944*495ae853SAndroid Build Coastguard Worker }
945*495ae853SAndroid Build Coastguard Worker }
946*495ae853SAndroid Build Coastguard Worker break;
947*495ae853SAndroid Build Coastguard Worker }
948*495ae853SAndroid Build Coastguard Worker
949*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
950*495ae853SAndroid Build Coastguard Worker }
951*495ae853SAndroid Build Coastguard Worker
952*495ae853SAndroid Build Coastguard Worker /**
953*495ae853SAndroid Build Coastguard Worker *******************************************************************************
954*495ae853SAndroid Build Coastguard Worker *
955*495ae853SAndroid Build Coastguard Worker * @brief
956*495ae853SAndroid Build Coastguard Worker * Sets Processor type
957*495ae853SAndroid Build Coastguard Worker *
958*495ae853SAndroid Build Coastguard Worker * @par Description:
959*495ae853SAndroid Build Coastguard Worker * Sets Processor type
960*495ae853SAndroid Build Coastguard Worker *
961*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
962*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
963*495ae853SAndroid Build Coastguard Worker *
964*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
965*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
966*495ae853SAndroid Build Coastguard Worker *
967*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
968*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
969*495ae853SAndroid Build Coastguard Worker *
970*495ae853SAndroid Build Coastguard Worker * @returns Status
971*495ae853SAndroid Build Coastguard Worker *
972*495ae853SAndroid Build Coastguard Worker * @remarks
973*495ae853SAndroid Build Coastguard Worker *
974*495ae853SAndroid Build Coastguard Worker *
975*495ae853SAndroid Build Coastguard Worker *******************************************************************************
976*495ae853SAndroid Build Coastguard Worker */
977*495ae853SAndroid Build Coastguard Worker
isvcd_set_processor(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)978*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_processor(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
979*495ae853SAndroid Build Coastguard Worker {
980*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_ip_t *ps_ip;
981*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_processor_op_t *ps_op;
982*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
983*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_codec;
984*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
985*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
986*495ae853SAndroid Build Coastguard Worker
987*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_set_processor_ip_t *) pv_api_ip;
988*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_set_processor_op_t *) pv_api_op;
989*495ae853SAndroid Build Coastguard Worker
990*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->e_processor_arch = (IVD_ARCH_T) ps_ip->u4_arch;
991*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->e_processor_soc = (IVD_SOC_T) ps_ip->u4_soc;
992*495ae853SAndroid Build Coastguard Worker
993*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
994*495ae853SAndroid Build Coastguard Worker {
995*495ae853SAndroid Build Coastguard Worker ps_codec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
996*495ae853SAndroid Build Coastguard Worker ps_codec->s_dec.e_processor_arch = (IVD_ARCH_T) ps_ip->u4_arch;
997*495ae853SAndroid Build Coastguard Worker ps_codec->s_dec.e_processor_soc = (IVD_SOC_T) ps_ip->u4_soc;
998*495ae853SAndroid Build Coastguard Worker
999*495ae853SAndroid Build Coastguard Worker isvcd_init_function_ptr(ps_codec);
1000*495ae853SAndroid Build Coastguard Worker }
1001*495ae853SAndroid Build Coastguard Worker
1002*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
1003*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
1004*495ae853SAndroid Build Coastguard Worker }
1005*495ae853SAndroid Build Coastguard Worker
1006*495ae853SAndroid Build Coastguard Worker /**************************************************************************
1007*495ae853SAndroid Build Coastguard Worker * \if Function name : isvcd_init_decoder \endif
1008*495ae853SAndroid Build Coastguard Worker *
1009*495ae853SAndroid Build Coastguard Worker *
1010*495ae853SAndroid Build Coastguard Worker * \brief
1011*495ae853SAndroid Build Coastguard Worker * Initializes the decoder
1012*495ae853SAndroid Build Coastguard Worker *
1013*495ae853SAndroid Build Coastguard Worker * \param apiVersion : Version of the api being used.
1014*495ae853SAndroid Build Coastguard Worker * \param errorHandlingMechanism : Mechanism to be used for errror handling.
1015*495ae853SAndroid Build Coastguard Worker * \param postFilteringType: Type of post filtering operation to be used.
1016*495ae853SAndroid Build Coastguard Worker * \param uc_outputFormat: Format of the decoded picture [default 4:2:0].
1017*495ae853SAndroid Build Coastguard Worker * \param uc_dispBufs: Number of Display Buffers.
1018*495ae853SAndroid Build Coastguard Worker * \param p_NALBufAPI: Pointer to NAL Buffer API.
1019*495ae853SAndroid Build Coastguard Worker * \param p_DispBufAPI: Pointer to Display Buffer API.
1020*495ae853SAndroid Build Coastguard Worker * \param ih264d_dec_mem_manager :Pointer to the function that will be called
1021*495ae853SAndroid Build Coastguard Worker *by decoder for memory allocation and freeing.
1022*495ae853SAndroid Build Coastguard Worker *
1023*495ae853SAndroid Build Coastguard Worker * \return
1024*495ae853SAndroid Build Coastguard Worker * 0 on Success and -1 on error
1025*495ae853SAndroid Build Coastguard Worker *
1026*495ae853SAndroid Build Coastguard Worker **************************************************************************
1027*495ae853SAndroid Build Coastguard Worker */
isvcd_init_decoder(svc_dec_lyr_struct_t * ps_dec_svc_lyr_params)1028*495ae853SAndroid Build Coastguard Worker void isvcd_init_decoder(svc_dec_lyr_struct_t *ps_dec_svc_lyr_params)
1029*495ae853SAndroid Build Coastguard Worker {
1030*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec = (svc_dec_lyr_struct_t *) ps_dec_svc_lyr_params;
1031*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
1032*495ae853SAndroid Build Coastguard Worker dec_slice_params_t *ps_cur_slice;
1033*495ae853SAndroid Build Coastguard Worker pocstruct_t *ps_prev_poc, *ps_cur_poc;
1034*495ae853SAndroid Build Coastguard Worker size_t size;
1035*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
1036*495ae853SAndroid Build Coastguard Worker
1037*495ae853SAndroid Build Coastguard Worker size = sizeof(pred_info_t) * 2 * 32;
1038*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_pred, 0, size);
1039*495ae853SAndroid Build Coastguard Worker
1040*495ae853SAndroid Build Coastguard Worker size = sizeof(disp_mgr_t);
1041*495ae853SAndroid Build Coastguard Worker memset(ps_dec->pv_disp_buf_mgr, 0, size);
1042*495ae853SAndroid Build Coastguard Worker
1043*495ae853SAndroid Build Coastguard Worker size = ih264_buf_mgr_size();
1044*495ae853SAndroid Build Coastguard Worker memset(ps_dec->pv_pic_buf_mgr, 0, size);
1045*495ae853SAndroid Build Coastguard Worker
1046*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_err_status_t);
1047*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_dec_err_status, 0, size);
1048*495ae853SAndroid Build Coastguard Worker
1049*495ae853SAndroid Build Coastguard Worker size = sizeof(sei);
1050*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_sei, 0, size);
1051*495ae853SAndroid Build Coastguard Worker
1052*495ae853SAndroid Build Coastguard Worker size = sizeof(sei);
1053*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_sei_parse, 0, size);
1054*495ae853SAndroid Build Coastguard Worker
1055*495ae853SAndroid Build Coastguard Worker size = sizeof(dpb_commands_t);
1056*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_dpb_cmds, 0, size);
1057*495ae853SAndroid Build Coastguard Worker
1058*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_bit_stream_t);
1059*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_bitstrm, 0, size);
1060*495ae853SAndroid Build Coastguard Worker
1061*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_slice_params_t);
1062*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_cur_slice, 0, size);
1063*495ae853SAndroid Build Coastguard Worker
1064*495ae853SAndroid Build Coastguard Worker size = MAX(sizeof(dec_seq_params_t), sizeof(dec_pic_params_t));
1065*495ae853SAndroid Build Coastguard Worker memset(ps_dec->pv_scratch_sps_pps, 0, size);
1066*495ae853SAndroid Build Coastguard Worker
1067*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_svc_seq_params_t);
1068*495ae853SAndroid Build Coastguard Worker memset(ps_svc_lyr_dec->pv_scratch_subset_sps, 0, size);
1069*495ae853SAndroid Build Coastguard Worker
1070*495ae853SAndroid Build Coastguard Worker size = sizeof(ctxt_inc_mb_info_t);
1071*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_left_mb_ctxt_info, 0, size);
1072*495ae853SAndroid Build Coastguard Worker
1073*495ae853SAndroid Build Coastguard Worker size = (sizeof(neighbouradd_t) << 2);
1074*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_left_mvpred_addr, 0, size);
1075*495ae853SAndroid Build Coastguard Worker
1076*495ae853SAndroid Build Coastguard Worker size = ih264_buf_mgr_size();
1077*495ae853SAndroid Build Coastguard Worker memset(ps_dec->pv_mv_buf_mgr, 0, size);
1078*495ae853SAndroid Build Coastguard Worker
1079*495ae853SAndroid Build Coastguard Worker /* Free any dynamic buffers that are allocated */
1080*495ae853SAndroid Build Coastguard Worker isvcd_free_dynamic_bufs(ps_svc_lyr_dec);
1081*495ae853SAndroid Build Coastguard Worker
1082*495ae853SAndroid Build Coastguard Worker {
1083*495ae853SAndroid Build Coastguard Worker UWORD8 i;
1084*495ae853SAndroid Build Coastguard Worker struct pic_buffer_t *ps_init_dpb;
1085*495ae853SAndroid Build Coastguard Worker ps_init_dpb = ps_dec->ps_dpb_mgr->ps_init_dpb[0][0];
1086*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 2 * MAX_REF_BUFS; i++)
1087*495ae853SAndroid Build Coastguard Worker {
1088*495ae853SAndroid Build Coastguard Worker ps_init_dpb->pu1_buf1 = NULL;
1089*495ae853SAndroid Build Coastguard Worker ps_init_dpb->u1_long_term_frm_idx = MAX_REF_BUFS + 1;
1090*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->ps_init_dpb[0][i] = ps_init_dpb;
1091*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->ps_mod_dpb[0][i] = ps_init_dpb;
1092*495ae853SAndroid Build Coastguard Worker ps_init_dpb++;
1093*495ae853SAndroid Build Coastguard Worker }
1094*495ae853SAndroid Build Coastguard Worker
1095*495ae853SAndroid Build Coastguard Worker ps_init_dpb = ps_dec->ps_dpb_mgr->ps_init_dpb[1][0];
1096*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 2 * MAX_REF_BUFS; i++)
1097*495ae853SAndroid Build Coastguard Worker {
1098*495ae853SAndroid Build Coastguard Worker ps_init_dpb->pu1_buf1 = NULL;
1099*495ae853SAndroid Build Coastguard Worker ps_init_dpb->u1_long_term_frm_idx = MAX_REF_BUFS + 1;
1100*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->ps_init_dpb[1][i] = ps_init_dpb;
1101*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->ps_mod_dpb[1][i] = ps_init_dpb;
1102*495ae853SAndroid Build Coastguard Worker ps_init_dpb++;
1103*495ae853SAndroid Build Coastguard Worker }
1104*495ae853SAndroid Build Coastguard Worker }
1105*495ae853SAndroid Build Coastguard Worker
1106*495ae853SAndroid Build Coastguard Worker ps_cur_slice = ps_dec->ps_cur_slice;
1107*495ae853SAndroid Build Coastguard Worker ps_dec->init_done = 0;
1108*495ae853SAndroid Build Coastguard Worker
1109*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_cores = 1;
1110*495ae853SAndroid Build Coastguard Worker ps_dec->u2_pic_ht = ps_dec->u2_pic_wd = 0;
1111*495ae853SAndroid Build Coastguard Worker
1112*495ae853SAndroid Build Coastguard Worker ps_dec->u1_separate_parse = DEFAULT_SEPARATE_PARSE;
1113*495ae853SAndroid Build Coastguard Worker ps_dec->u4_app_disable_deblk_frm = 0;
1114*495ae853SAndroid Build Coastguard Worker ps_dec->i4_degrade_type = 0;
1115*495ae853SAndroid Build Coastguard Worker ps_dec->i4_degrade_pics = 0;
1116*495ae853SAndroid Build Coastguard Worker
1117*495ae853SAndroid Build Coastguard Worker /* Initialization of function pointers ih264d_deblock_picture function*/
1118*495ae853SAndroid Build Coastguard Worker ps_dec->p_DeblockPicture[0] = ih264d_deblock_picture_non_mbaff;
1119*495ae853SAndroid Build Coastguard Worker ps_dec->p_DeblockPicture[1] = ih264d_deblock_picture_mbaff;
1120*495ae853SAndroid Build Coastguard Worker
1121*495ae853SAndroid Build Coastguard Worker ps_dec->s_cab_dec_env.pv_codec_handle = ps_dec;
1122*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_fld_in_frm = 0;
1123*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->pv_codec_handle = ps_dec;
1124*495ae853SAndroid Build Coastguard Worker
1125*495ae853SAndroid Build Coastguard Worker /* Initialize the sei validity u4_flag with zero indiacting sei is not valid*/
1126*495ae853SAndroid Build Coastguard Worker ps_dec->ps_sei->u1_is_valid = 0;
1127*495ae853SAndroid Build Coastguard Worker
1128*495ae853SAndroid Build Coastguard Worker /* decParams Initializations */
1129*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pps = NULL;
1130*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_sps = NULL;
1131*495ae853SAndroid Build Coastguard Worker ps_dec->u1_init_dec_flag = 0;
1132*495ae853SAndroid Build Coastguard Worker ps_dec->u1_first_slice_in_stream = 1;
1133*495ae853SAndroid Build Coastguard Worker ps_dec->u1_last_pic_not_decoded = 0;
1134*495ae853SAndroid Build Coastguard Worker ps_dec->u4_app_disp_width = 0;
1135*495ae853SAndroid Build Coastguard Worker ps_dec->i4_header_decoded = 0;
1136*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_frames_decoded = 0;
1137*495ae853SAndroid Build Coastguard Worker
1138*495ae853SAndroid Build Coastguard Worker ps_dec->i4_error_code = 0;
1139*495ae853SAndroid Build Coastguard Worker ps_dec->i4_content_type = IV_CONTENTTYPE_NA;
1140*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_slice->u1_mbaff_frame_flag = 0;
1141*495ae853SAndroid Build Coastguard Worker
1142*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dec_err_status->u1_err_flag = ACCEPT_ALL_PICS;
1143*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dec_err_status->u1_cur_pic_type = PIC_TYPE_UNKNOWN;
1144*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dec_err_status->u4_frm_sei_sync = SYNC_FRM_DEFAULT;
1145*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dec_err_status->u4_cur_frm = INIT_FRAME;
1146*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dec_err_status->u1_pic_aud_i = PIC_TYPE_UNKNOWN;
1147*495ae853SAndroid Build Coastguard Worker
1148*495ae853SAndroid Build Coastguard Worker ps_dec->u1_pr_sl_type = 0xFF;
1149*495ae853SAndroid Build Coastguard Worker ps_dec->u2_mbx = 0xffff;
1150*495ae853SAndroid Build Coastguard Worker ps_dec->u2_mby = 0;
1151*495ae853SAndroid Build Coastguard Worker ps_dec->u2_total_mbs_coded = 0;
1152*495ae853SAndroid Build Coastguard Worker
1153*495ae853SAndroid Build Coastguard Worker /* POC initializations */
1154*495ae853SAndroid Build Coastguard Worker ps_prev_poc = &ps_dec->s_prev_pic_poc;
1155*495ae853SAndroid Build Coastguard Worker ps_cur_poc = &ps_dec->s_cur_pic_poc;
1156*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_pic_order_cnt_lsb = ps_cur_poc->i4_pic_order_cnt_lsb = 0;
1157*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_pic_order_cnt_msb = ps_cur_poc->i4_pic_order_cnt_msb = 0;
1158*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_delta_pic_order_cnt_bottom = ps_cur_poc->i4_delta_pic_order_cnt_bottom = 0;
1159*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_delta_pic_order_cnt[0] = ps_cur_poc->i4_delta_pic_order_cnt[0] = 0;
1160*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_delta_pic_order_cnt[1] = ps_cur_poc->i4_delta_pic_order_cnt[1] = 0;
1161*495ae853SAndroid Build Coastguard Worker ps_prev_poc->u1_mmco_equalto5 = ps_cur_poc->u1_mmco_equalto5 = 0;
1162*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_top_field_order_count = ps_cur_poc->i4_top_field_order_count = 0;
1163*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_bottom_field_order_count = ps_cur_poc->i4_bottom_field_order_count = 0;
1164*495ae853SAndroid Build Coastguard Worker ps_prev_poc->u1_bot_field = ps_cur_poc->u1_bot_field = 0;
1165*495ae853SAndroid Build Coastguard Worker ps_prev_poc->u1_mmco_equalto5 = ps_cur_poc->u1_mmco_equalto5 = 0;
1166*495ae853SAndroid Build Coastguard Worker ps_prev_poc->i4_prev_frame_num_ofst = ps_cur_poc->i4_prev_frame_num_ofst = 0;
1167*495ae853SAndroid Build Coastguard Worker ps_cur_slice->u1_mmco_equalto5 = 0;
1168*495ae853SAndroid Build Coastguard Worker ps_cur_slice->u2_frame_num = 0;
1169*495ae853SAndroid Build Coastguard Worker
1170*495ae853SAndroid Build Coastguard Worker ps_dec->i4_max_poc = 0;
1171*495ae853SAndroid Build Coastguard Worker ps_dec->i4_prev_max_display_seq = 0;
1172*495ae853SAndroid Build Coastguard Worker ps_dec->u1_recon_mb_grp = 4;
1173*495ae853SAndroid Build Coastguard Worker ps_dec->i4_reorder_depth = -1;
1174*495ae853SAndroid Build Coastguard Worker
1175*495ae853SAndroid Build Coastguard Worker /* Field PIC initializations */
1176*495ae853SAndroid Build Coastguard Worker ps_dec->u1_second_field = 0;
1177*495ae853SAndroid Build Coastguard Worker ps_dec->s_prev_seq_params.u1_eoseq_pending = 0;
1178*495ae853SAndroid Build Coastguard Worker
1179*495ae853SAndroid Build Coastguard Worker /* Set the cropping parameters as zero */
1180*495ae853SAndroid Build Coastguard Worker ps_dec->u2_crop_offset_y = 0;
1181*495ae853SAndroid Build Coastguard Worker ps_dec->u2_crop_offset_uv = 0;
1182*495ae853SAndroid Build Coastguard Worker
1183*495ae853SAndroid Build Coastguard Worker /* The Initial Frame Rate Info is not Present */
1184*495ae853SAndroid Build Coastguard Worker ps_dec->i4_vui_frame_rate = -1;
1185*495ae853SAndroid Build Coastguard Worker ps_dec->i4_pic_type = NA_SLICE;
1186*495ae853SAndroid Build Coastguard Worker ps_dec->i4_frametype = IV_NA_FRAME;
1187*495ae853SAndroid Build Coastguard Worker ps_dec->i4_content_type = IV_CONTENTTYPE_NA;
1188*495ae853SAndroid Build Coastguard Worker
1189*495ae853SAndroid Build Coastguard Worker ps_dec->u1_res_changed = 0;
1190*495ae853SAndroid Build Coastguard Worker
1191*495ae853SAndroid Build Coastguard Worker ps_dec->u1_frame_decoded_flag = 0;
1192*495ae853SAndroid Build Coastguard Worker
1193*495ae853SAndroid Build Coastguard Worker /* Set the default frame seek mask mode */
1194*495ae853SAndroid Build Coastguard Worker ps_dec->u4_skip_frm_mask = SKIP_NONE;
1195*495ae853SAndroid Build Coastguard Worker
1196*495ae853SAndroid Build Coastguard Worker /********************************************************/
1197*495ae853SAndroid Build Coastguard Worker /* Initialize CAVLC residual decoding function pointers */
1198*495ae853SAndroid Build Coastguard Worker /********************************************************/
1199*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_4x4res_block[0] = ih264d_cavlc_4x4res_block_totalcoeff_1;
1200*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_4x4res_block[1] = ih264d_cavlc_4x4res_block_totalcoeff_2to10;
1201*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_4x4res_block[2] = ih264d_cavlc_4x4res_block_totalcoeff_11to16;
1202*495ae853SAndroid Build Coastguard Worker
1203*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_parse4x4coeff[0] = ih264d_cavlc_parse4x4coeff_n0to7;
1204*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_parse4x4coeff[1] = ih264d_cavlc_parse4x4coeff_n8;
1205*495ae853SAndroid Build Coastguard Worker
1206*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_parse_8x8block[0] = ih264d_cavlc_parse_8x8block_none_available;
1207*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_parse_8x8block[1] = ih264d_cavlc_parse_8x8block_left_available;
1208*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_parse_8x8block[2] = ih264d_cavlc_parse_8x8block_top_available;
1209*495ae853SAndroid Build Coastguard Worker ps_dec->pf_cavlc_parse_8x8block[3] = ih264d_cavlc_parse_8x8block_both_available;
1210*495ae853SAndroid Build Coastguard Worker
1211*495ae853SAndroid Build Coastguard Worker /***************************************************************************/
1212*495ae853SAndroid Build Coastguard Worker /* Initialize Bs calculation function pointers for P and B, 16x16/non16x16 */
1213*495ae853SAndroid Build Coastguard Worker /***************************************************************************/
1214*495ae853SAndroid Build Coastguard Worker ps_dec->pf_fill_bs1[0][0] = ih264d_fill_bs1_16x16mb_pslice;
1215*495ae853SAndroid Build Coastguard Worker ps_dec->pf_fill_bs1[0][1] = ih264d_fill_bs1_non16x16mb_pslice;
1216*495ae853SAndroid Build Coastguard Worker
1217*495ae853SAndroid Build Coastguard Worker ps_dec->pf_fill_bs1[1][0] = ih264d_fill_bs1_16x16mb_bslice;
1218*495ae853SAndroid Build Coastguard Worker ps_dec->pf_fill_bs1[1][1] = ih264d_fill_bs1_non16x16mb_bslice;
1219*495ae853SAndroid Build Coastguard Worker
1220*495ae853SAndroid Build Coastguard Worker ps_dec->pf_fill_bs_xtra_left_edge[0] = ih264d_fill_bs_xtra_left_edge_cur_frm;
1221*495ae853SAndroid Build Coastguard Worker ps_dec->pf_fill_bs_xtra_left_edge[1] = ih264d_fill_bs_xtra_left_edge_cur_fld;
1222*495ae853SAndroid Build Coastguard Worker
1223*495ae853SAndroid Build Coastguard Worker /* Initialize Reference Pic Buffers */
1224*495ae853SAndroid Build Coastguard Worker ih264d_init_ref_bufs(ps_dec->ps_dpb_mgr);
1225*495ae853SAndroid Build Coastguard Worker
1226*495ae853SAndroid Build Coastguard Worker ps_dec->u2_prv_frame_num = 0;
1227*495ae853SAndroid Build Coastguard Worker ps_dec->u1_top_bottom_decoded = 0;
1228*495ae853SAndroid Build Coastguard Worker ps_dec->u1_dangling_field = 0;
1229*495ae853SAndroid Build Coastguard Worker
1230*495ae853SAndroid Build Coastguard Worker ps_dec->s_cab_dec_env.cabac_table = gau4_ih264d_cabac_table;
1231*495ae853SAndroid Build Coastguard Worker
1232*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_left_mv_ctxt_inc = ps_dec->u1_left_mv_ctxt_inc_arr[0];
1233*495ae853SAndroid Build Coastguard Worker ps_dec->pi1_left_ref_idx_ctxt_inc = &ps_dec->i1_left_ref_idx_ctx_inc_arr[0][0];
1234*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_left_yuv_dc_csbp = &ps_dec->u1_yuv_dc_csbp_topmb;
1235*495ae853SAndroid Build Coastguard Worker
1236*495ae853SAndroid Build Coastguard Worker /* ! */
1237*495ae853SAndroid Build Coastguard Worker /* Initializing flush frame u4_flag */
1238*495ae853SAndroid Build Coastguard Worker ps_dec->u1_flushfrm = 0;
1239*495ae853SAndroid Build Coastguard Worker
1240*495ae853SAndroid Build Coastguard Worker ps_dec->s_cab_dec_env.pv_codec_handle = (void *) ps_dec;
1241*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->pv_codec_handle = (void *) ps_dec;
1242*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_slice->pv_codec_handle = (void *) ps_dec;
1243*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->pv_codec_handle = (void *) ps_dec;
1244*495ae853SAndroid Build Coastguard Worker
1245*495ae853SAndroid Build Coastguard Worker memset(ps_dec->disp_bufs, 0, (MAX_DISP_BUFS_NEW) * sizeof(disp_buf_t));
1246*495ae853SAndroid Build Coastguard Worker memset(ps_dec->u4_disp_buf_mapping, 0, (MAX_DISP_BUFS_NEW) * sizeof(UWORD32));
1247*495ae853SAndroid Build Coastguard Worker memset(ps_dec->u4_disp_buf_to_be_freed, 0, (MAX_DISP_BUFS_NEW) * sizeof(UWORD32));
1248*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_cur_slice, 0, sizeof(dec_slice_params_t));
1249*495ae853SAndroid Build Coastguard Worker
1250*495ae853SAndroid Build Coastguard Worker ih264d_init_arch(ps_dec);
1251*495ae853SAndroid Build Coastguard Worker isvcd_init_function_ptr(ps_svc_lyr_dec);
1252*495ae853SAndroid Build Coastguard Worker ps_dec->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
1253*495ae853SAndroid Build Coastguard Worker ps_dec->init_done = 1;
1254*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_layer_identifier = BASE_LAYER;
1255*495ae853SAndroid Build Coastguard Worker }
1256*495ae853SAndroid Build Coastguard Worker
1257*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1258*495ae853SAndroid Build Coastguard Worker /* */
1259*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_nal_parse_ctxt_free */
1260*495ae853SAndroid Build Coastguard Worker /* */
1261*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to free the nal parse context */
1262*495ae853SAndroid Build Coastguard Worker /* Inputs : */
1263*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1264*495ae853SAndroid Build Coastguard Worker /* Processing : */
1265*495ae853SAndroid Build Coastguard Worker /* */
1266*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1267*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1268*495ae853SAndroid Build Coastguard Worker /* */
1269*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1270*495ae853SAndroid Build Coastguard Worker /* */
1271*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1272*495ae853SAndroid Build Coastguard Worker /* */
1273*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1274*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 Kishore creation */
1275*495ae853SAndroid Build Coastguard Worker /* */
1276*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1277*495ae853SAndroid Build Coastguard Worker
isvcd_nal_parse_ctxt_free(svc_dec_ctxt_t * ps_svcd_ctxt)1278*495ae853SAndroid Build Coastguard Worker void isvcd_nal_parse_ctxt_free(svc_dec_ctxt_t *ps_svcd_ctxt)
1279*495ae853SAndroid Build Coastguard Worker {
1280*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
1281*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
1282*495ae853SAndroid Build Coastguard Worker void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
1283*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
1284*495ae853SAndroid Build Coastguard Worker nal_parse_ctxt_t *ps_ctxt;
1285*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[0];
1286*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
1287*495ae853SAndroid Build Coastguard Worker pf_aligned_free = ps_dec->pf_aligned_free;
1288*495ae853SAndroid Build Coastguard Worker
1289*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_dec->pv_mem_ctxt;
1290*495ae853SAndroid Build Coastguard Worker ps_ctxt = (nal_parse_ctxt_t *) ps_svcd_ctxt->pv_nal_parse_ctxt;
1291*495ae853SAndroid Build Coastguard Worker
1292*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->s_dqid_ctxt.ps_dqid_node);
1293*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pv_nal_header_buf);
1294*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pv_nal_unit);
1295*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_vcl_nal_buff);
1296*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_non_vcl_nal_buff);
1297*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_nal_parse_ctxt);
1298*495ae853SAndroid Build Coastguard Worker }
1299*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1300*495ae853SAndroid Build Coastguard Worker /* */
1301*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_residual_resample_ctxt_free */
1302*495ae853SAndroid Build Coastguard Worker /* */
1303*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to free the resd_resamp context */
1304*495ae853SAndroid Build Coastguard Worker /* Inputs : */
1305*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1306*495ae853SAndroid Build Coastguard Worker /* Processing : */
1307*495ae853SAndroid Build Coastguard Worker /* */
1308*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1309*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1310*495ae853SAndroid Build Coastguard Worker /* */
1311*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1312*495ae853SAndroid Build Coastguard Worker /* */
1313*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1314*495ae853SAndroid Build Coastguard Worker /* */
1315*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1316*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 Kishore creation */
1317*495ae853SAndroid Build Coastguard Worker /* */
1318*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1319*495ae853SAndroid Build Coastguard Worker
isvcd_residual_resample_ctxt_free(svc_dec_ctxt_t * ps_svcd_ctxt)1320*495ae853SAndroid Build Coastguard Worker void isvcd_residual_resample_ctxt_free(svc_dec_ctxt_t *ps_svcd_ctxt)
1321*495ae853SAndroid Build Coastguard Worker {
1322*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
1323*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
1324*495ae853SAndroid Build Coastguard Worker void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
1325*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
1326*495ae853SAndroid Build Coastguard Worker residual_sampling_ctxt_t *ps_ctxt;
1327*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[0];
1328*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
1329*495ae853SAndroid Build Coastguard Worker pf_aligned_free = ps_dec->pf_aligned_free;
1330*495ae853SAndroid Build Coastguard Worker
1331*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_dec->pv_mem_ctxt;
1332*495ae853SAndroid Build Coastguard Worker ps_ctxt = (residual_sampling_ctxt_t *) ps_svcd_ctxt->pv_residual_sample_ctxt;
1333*495ae853SAndroid Build Coastguard Worker
1334*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pi2_refarray_buffer);
1335*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pu1_ref_x_ptr_incr);
1336*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_x_offset_length);
1337*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_y_offset_length);
1338*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_x_pos_phase);
1339*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_y_pos_phase);
1340*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_residual_sample_ctxt);
1341*495ae853SAndroid Build Coastguard Worker }
1342*495ae853SAndroid Build Coastguard Worker
1343*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1344*495ae853SAndroid Build Coastguard Worker /* */
1345*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_intra_resample_ctxt_free */
1346*495ae853SAndroid Build Coastguard Worker /* */
1347*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to free the intra_resamp context */
1348*495ae853SAndroid Build Coastguard Worker /* Inputs : */
1349*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1350*495ae853SAndroid Build Coastguard Worker /* Processing : */
1351*495ae853SAndroid Build Coastguard Worker /* */
1352*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1353*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1354*495ae853SAndroid Build Coastguard Worker /* */
1355*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1356*495ae853SAndroid Build Coastguard Worker /* */
1357*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1358*495ae853SAndroid Build Coastguard Worker /* */
1359*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1360*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 Kishore creation */
1361*495ae853SAndroid Build Coastguard Worker /* */
1362*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_intra_resample_ctxt_free(svc_dec_ctxt_t * ps_svcd_ctxt)1363*495ae853SAndroid Build Coastguard Worker void isvcd_intra_resample_ctxt_free(svc_dec_ctxt_t *ps_svcd_ctxt)
1364*495ae853SAndroid Build Coastguard Worker {
1365*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
1366*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
1367*495ae853SAndroid Build Coastguard Worker void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
1368*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
1369*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt;
1370*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[0];
1371*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
1372*495ae853SAndroid Build Coastguard Worker pf_aligned_free = ps_dec->pf_aligned_free;
1373*495ae853SAndroid Build Coastguard Worker
1374*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_dec->pv_mem_ctxt;
1375*495ae853SAndroid Build Coastguard Worker ps_ctxt = (intra_sampling_ctxt_t *) ps_svcd_ctxt->pv_intra_sample_ctxt;
1376*495ae853SAndroid Build Coastguard Worker
1377*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pu1_refarray_buffer);
1378*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pu1_refarray_cb);
1379*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pu1_refarray_cr);
1380*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->pi4_temp_interpolation_buffer);
1381*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_x_offset_length);
1382*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_y_offset_length);
1383*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_x_min_max);
1384*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_y_min_max);
1385*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_x_pos_phase);
1386*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_y_pos_phase);
1387*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.pi2_xd_index);
1388*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.pi2_yd_index);
1389*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.pi2_ya_index);
1390*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_seg_lookup_horz);
1391*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.ps_seg_lookup_vert);
1392*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_ctxt->as_res_lyrs[0].s_luma_map_ctxt.pu1_refarray_x_idx);
1393*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_intra_sample_ctxt);
1394*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_ii_pred_ctxt);
1395*495ae853SAndroid Build Coastguard Worker }
1396*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1397*495ae853SAndroid Build Coastguard Worker /* */
1398*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_mode_mv_resample_ctxt_free */
1399*495ae853SAndroid Build Coastguard Worker /* */
1400*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to free the mv resamp context */
1401*495ae853SAndroid Build Coastguard Worker /* Inputs : */
1402*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1403*495ae853SAndroid Build Coastguard Worker /* Processing : */
1404*495ae853SAndroid Build Coastguard Worker /* */
1405*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1406*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1407*495ae853SAndroid Build Coastguard Worker /* */
1408*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1409*495ae853SAndroid Build Coastguard Worker /* */
1410*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1411*495ae853SAndroid Build Coastguard Worker /* */
1412*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1413*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 Kishore creation */
1414*495ae853SAndroid Build Coastguard Worker /* */
1415*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_mode_mv_resample_ctxt_free(svc_dec_ctxt_t * ps_svcd_ctxt)1416*495ae853SAndroid Build Coastguard Worker void isvcd_mode_mv_resample_ctxt_free(svc_dec_ctxt_t *ps_svcd_ctxt)
1417*495ae853SAndroid Build Coastguard Worker {
1418*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
1419*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
1420*495ae853SAndroid Build Coastguard Worker void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
1421*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
1422*495ae853SAndroid Build Coastguard Worker mode_motion_ctxt_t *ps_mode_motion;
1423*495ae853SAndroid Build Coastguard Worker
1424*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[0];
1425*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
1426*495ae853SAndroid Build Coastguard Worker pf_aligned_free = ps_dec->pf_aligned_free;
1427*495ae853SAndroid Build Coastguard Worker
1428*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_dec->pv_mem_ctxt;
1429*495ae853SAndroid Build Coastguard Worker ps_mode_motion = (mode_motion_ctxt_t *) ps_svcd_ctxt->pv_mode_mv_sample_ctxt;
1430*495ae853SAndroid Build Coastguard Worker
1431*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_mode_motion->ps_motion_pred_struct);
1432*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_mode_motion->as_res_lyr_mem[0].pi2_ref_loc_x);
1433*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_mode_motion->as_res_lyr_mem[0].pi2_ref_loc_y);
1434*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_ref_lyr_offset);
1435*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->pv_mode_mv_sample_ctxt);
1436*495ae853SAndroid Build Coastguard Worker }
1437*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1438*495ae853SAndroid Build Coastguard Worker /* */
1439*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_free_static_bufs */
1440*495ae853SAndroid Build Coastguard Worker /* */
1441*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to free the static buffers */
1442*495ae853SAndroid Build Coastguard Worker /* Inputs : */
1443*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1444*495ae853SAndroid Build Coastguard Worker /* Processing : */
1445*495ae853SAndroid Build Coastguard Worker /* */
1446*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1447*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1448*495ae853SAndroid Build Coastguard Worker /* */
1449*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1450*495ae853SAndroid Build Coastguard Worker /* */
1451*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1452*495ae853SAndroid Build Coastguard Worker /* */
1453*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1454*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 Kishore creation */
1455*495ae853SAndroid Build Coastguard Worker /* */
1456*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1457*495ae853SAndroid Build Coastguard Worker
isvcd_free_static_bufs(iv_obj_t * dec_hdl)1458*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_free_static_bufs(iv_obj_t *dec_hdl)
1459*495ae853SAndroid Build Coastguard Worker {
1460*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
1461*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
1462*495ae853SAndroid Build Coastguard Worker
1463*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
1464*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
1465*495ae853SAndroid Build Coastguard Worker
1466*495ae853SAndroid Build Coastguard Worker void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
1467*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
1468*495ae853SAndroid Build Coastguard Worker
1469*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
1470*495ae853SAndroid Build Coastguard Worker
1471*495ae853SAndroid Build Coastguard Worker isvcd_intra_resample_ctxt_free(ps_svcd_ctxt);
1472*495ae853SAndroid Build Coastguard Worker isvcd_residual_resample_ctxt_free(ps_svcd_ctxt);
1473*495ae853SAndroid Build Coastguard Worker isvcd_mode_mv_resample_ctxt_free(ps_svcd_ctxt);
1474*495ae853SAndroid Build Coastguard Worker isvcd_nal_parse_ctxt_free(ps_svcd_ctxt);
1475*495ae853SAndroid Build Coastguard Worker
1476*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
1477*495ae853SAndroid Build Coastguard Worker {
1478*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
1479*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
1480*495ae853SAndroid Build Coastguard Worker pf_aligned_free = ps_dec->pf_aligned_free;
1481*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_dec->pv_mem_ctxt;
1482*495ae853SAndroid Build Coastguard Worker
1483*495ae853SAndroid Build Coastguard Worker #ifdef KEEP_THREADS_ACTIVE
1484*495ae853SAndroid Build Coastguard Worker /* Wait for threads */
1485*495ae853SAndroid Build Coastguard Worker ps_dec->i4_break_threads = 1;
1486*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_dec_thread_created)
1487*495ae853SAndroid Build Coastguard Worker {
1488*495ae853SAndroid Build Coastguard Worker ithread_mutex_lock(ps_dec->apv_proc_start_mutex[0]);
1489*495ae853SAndroid Build Coastguard Worker
1490*495ae853SAndroid Build Coastguard Worker ps_dec->ai4_process_start[0] = PROC_START;
1491*495ae853SAndroid Build Coastguard Worker
1492*495ae853SAndroid Build Coastguard Worker ithread_cond_signal(ps_dec->apv_proc_start_condition[0]);
1493*495ae853SAndroid Build Coastguard Worker
1494*495ae853SAndroid Build Coastguard Worker ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[0]);
1495*495ae853SAndroid Build Coastguard Worker
1496*495ae853SAndroid Build Coastguard Worker ithread_join(ps_dec->pv_dec_thread_handle, NULL);
1497*495ae853SAndroid Build Coastguard Worker
1498*495ae853SAndroid Build Coastguard Worker ps_dec->u4_dec_thread_created = 0;
1499*495ae853SAndroid Build Coastguard Worker }
1500*495ae853SAndroid Build Coastguard Worker
1501*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_bs_deblk_thread_created)
1502*495ae853SAndroid Build Coastguard Worker {
1503*495ae853SAndroid Build Coastguard Worker ithread_mutex_lock(ps_dec->apv_proc_start_mutex[1]);
1504*495ae853SAndroid Build Coastguard Worker
1505*495ae853SAndroid Build Coastguard Worker ps_dec->ai4_process_start[1] = PROC_START;
1506*495ae853SAndroid Build Coastguard Worker
1507*495ae853SAndroid Build Coastguard Worker ithread_cond_signal(ps_dec->apv_proc_start_condition[1]);
1508*495ae853SAndroid Build Coastguard Worker
1509*495ae853SAndroid Build Coastguard Worker ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[1]);
1510*495ae853SAndroid Build Coastguard Worker
1511*495ae853SAndroid Build Coastguard Worker ithread_join(ps_dec->pv_bs_deblk_thread_handle, NULL);
1512*495ae853SAndroid Build Coastguard Worker
1513*495ae853SAndroid Build Coastguard Worker ps_dec->u4_bs_deblk_thread_created = 0;
1514*495ae853SAndroid Build Coastguard Worker }
1515*495ae853SAndroid Build Coastguard Worker
1516*495ae853SAndroid Build Coastguard Worker // destroy mutex and condition variable for both the threads
1517*495ae853SAndroid Build Coastguard Worker // 1. ih264d_decode_picture_thread
1518*495ae853SAndroid Build Coastguard Worker // 2. ih264d_recon_deblk_thread
1519*495ae853SAndroid Build Coastguard Worker {
1520*495ae853SAndroid Build Coastguard Worker UWORD32 i;
1521*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 2; i++)
1522*495ae853SAndroid Build Coastguard Worker {
1523*495ae853SAndroid Build Coastguard Worker ithread_cond_destroy(ps_dec->apv_proc_start_condition[i]);
1524*495ae853SAndroid Build Coastguard Worker ithread_cond_destroy(ps_dec->apv_proc_done_condition[i]);
1525*495ae853SAndroid Build Coastguard Worker
1526*495ae853SAndroid Build Coastguard Worker ithread_mutex_destroy(ps_dec->apv_proc_start_mutex[i]);
1527*495ae853SAndroid Build Coastguard Worker ithread_mutex_destroy(ps_dec->apv_proc_done_mutex[i]);
1528*495ae853SAndroid Build Coastguard Worker }
1529*495ae853SAndroid Build Coastguard Worker }
1530*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->apv_proc_start_mutex[0]);
1531*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->apv_proc_start_condition[0]);
1532*495ae853SAndroid Build Coastguard Worker #endif
1533*495ae853SAndroid Build Coastguard Worker if(0 == u1_layer_id)
1534*495ae853SAndroid Build Coastguard Worker {
1535*495ae853SAndroid Build Coastguard Worker UWORD8 u1_sps_ctr;
1536*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_sps);
1537*495ae853SAndroid Build Coastguard Worker for(u1_sps_ctr = 0; u1_sps_ctr < (2 * MAX_NUM_SEQ_PARAMS); u1_sps_ctr++)
1538*495ae853SAndroid Build Coastguard Worker {
1539*495ae853SAndroid Build Coastguard Worker if(NULL != ps_svcd_ctxt->ps_subset_sps[u1_sps_ctr].s_sps_svc_ext.ps_svc_vui_ext)
1540*495ae853SAndroid Build Coastguard Worker {
1541*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(
1542*495ae853SAndroid Build Coastguard Worker ps_dec,
1543*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_subset_sps[u1_sps_ctr].s_sps_svc_ext.ps_svc_vui_ext);
1544*495ae853SAndroid Build Coastguard Worker }
1545*495ae853SAndroid Build Coastguard Worker }
1546*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_svc_lyr_dec->ps_subset_sps);
1547*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_pps);
1548*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_sei);
1549*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_sei_parse);
1550*495ae853SAndroid Build Coastguard Worker }
1551*495ae853SAndroid Build Coastguard Worker
1552*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pv_dec_thread_handle);
1553*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pv_bs_deblk_thread_handle);
1554*495ae853SAndroid Build Coastguard Worker
1555*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_dpb_mgr);
1556*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_pred);
1557*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pv_disp_buf_mgr);
1558*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_pic_buf_base);
1559*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_dec_err_status);
1560*495ae853SAndroid Build Coastguard Worker
1561*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_dpb_cmds);
1562*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_bitstrm);
1563*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_svc_lyr_dec->ps_nal_svc_ext);
1564*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_cur_slice);
1565*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pv_scratch_sps_pps);
1566*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_svc_lyr_dec->pv_scratch_subset_sps);
1567*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pu1_bits_buf_static);
1568*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ppv_map_ref_idx_to_poc_base);
1569*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->p_cabac_ctxt_table_t);
1570*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_left_mb_ctxt_info);
1571*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pu1_ref_buff_base);
1572*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pi2_pred1);
1573*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pu1_temp_mc_buffer);
1574*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pu1_init_dpb_base);
1575*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pu4_mbaff_wt_mat);
1576*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pu4_wts_ofsts_mat);
1577*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_left_mvpred_addr);
1578*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_col_mv_base);
1579*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_svc_lyr_dec->pu1_ii_resamp_buffer_luma);
1580*495ae853SAndroid Build Coastguard Worker
1581*495ae853SAndroid Build Coastguard Worker if(NULL != ps_dec->pv_pic_buf_mgr)
1582*495ae853SAndroid Build Coastguard Worker {
1583*495ae853SAndroid Build Coastguard Worker if(u1_layer_id < ps_svcd_ctxt->u1_prev_num_res_layers)
1584*495ae853SAndroid Build Coastguard Worker {
1585*495ae853SAndroid Build Coastguard Worker if(((buf_mgr_t *) ps_dec->pv_pic_buf_mgr)->pv_mutex != NULL)
1586*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free(ps_dec->pv_pic_buf_mgr);
1587*495ae853SAndroid Build Coastguard Worker }
1588*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pv_pic_buf_mgr);
1589*495ae853SAndroid Build Coastguard Worker }
1590*495ae853SAndroid Build Coastguard Worker if(NULL != ps_dec->pv_mv_buf_mgr)
1591*495ae853SAndroid Build Coastguard Worker {
1592*495ae853SAndroid Build Coastguard Worker if(u1_layer_id < ps_svcd_ctxt->u1_prev_num_res_layers)
1593*495ae853SAndroid Build Coastguard Worker {
1594*495ae853SAndroid Build Coastguard Worker if(((buf_mgr_t *) ps_dec->pv_mv_buf_mgr)->pv_mutex != NULL)
1595*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free(ps_dec->pv_mv_buf_mgr);
1596*495ae853SAndroid Build Coastguard Worker }
1597*495ae853SAndroid Build Coastguard Worker PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pv_mv_buf_mgr);
1598*495ae853SAndroid Build Coastguard Worker }
1599*495ae853SAndroid Build Coastguard Worker }
1600*495ae853SAndroid Build Coastguard Worker
1601*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, ps_svcd_ctxt->ps_svc_dec_lyr);
1602*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, dec_hdl->pv_codec_handle);
1603*495ae853SAndroid Build Coastguard Worker
1604*495ae853SAndroid Build Coastguard Worker if(dec_hdl)
1605*495ae853SAndroid Build Coastguard Worker {
1606*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, dec_hdl);
1607*495ae853SAndroid Build Coastguard Worker }
1608*495ae853SAndroid Build Coastguard Worker
1609*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
1610*495ae853SAndroid Build Coastguard Worker }
1611*495ae853SAndroid Build Coastguard Worker
1612*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1613*495ae853SAndroid Build Coastguard Worker /* */
1614*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_nal_parse_init */
1615*495ae853SAndroid Build Coastguard Worker /* */
1616*495ae853SAndroid Build Coastguard Worker /* Description : Initiaization of allocation of memory */
1617*495ae853SAndroid Build Coastguard Worker /* */
1618*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_mem_rec - Allocated memory records */
1619*495ae853SAndroid Build Coastguard Worker /* */
1620*495ae853SAndroid Build Coastguard Worker /* Globals : None */
1621*495ae853SAndroid Build Coastguard Worker /* */
1622*495ae853SAndroid Build Coastguard Worker /* Processing : None */
1623*495ae853SAndroid Build Coastguard Worker /* */
1624*495ae853SAndroid Build Coastguard Worker /* Outputs : None */
1625*495ae853SAndroid Build Coastguard Worker /* */
1626*495ae853SAndroid Build Coastguard Worker /* Returns : Module's handle */
1627*495ae853SAndroid Build Coastguard Worker /* */
1628*495ae853SAndroid Build Coastguard Worker /* Issues : None */
1629*495ae853SAndroid Build Coastguard Worker /* */
1630*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1631*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes */
1632*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Vijay Draft */
1633*495ae853SAndroid Build Coastguard Worker /* */
1634*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_nal_parse_ctxt_create(svc_dec_ctxt_t * ps_svcd_ctxt,void * pv_api_ip,void * pv_api_op)1635*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_nal_parse_ctxt_create(svc_dec_ctxt_t *ps_svcd_ctxt, void *pv_api_ip, void *pv_api_op)
1636*495ae853SAndroid Build Coastguard Worker {
1637*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t *ps_create_ip;
1638*495ae853SAndroid Build Coastguard Worker void *pv_buf;
1639*495ae853SAndroid Build Coastguard Worker void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
1640*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
1641*495ae853SAndroid Build Coastguard Worker WORD32 size;
1642*495ae853SAndroid Build Coastguard Worker nal_parse_ctxt_t *ps_nal_parse_ctxt;
1643*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_ptr;
1644*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_op);
1645*495ae853SAndroid Build Coastguard Worker
1646*495ae853SAndroid Build Coastguard Worker ps_create_ip = (isvcd_create_ip_t *) pv_api_ip;
1647*495ae853SAndroid Build Coastguard Worker
1648*495ae853SAndroid Build Coastguard Worker pf_aligned_alloc = ps_create_ip->s_ivd_create_ip_t.pf_aligned_alloc;
1649*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
1650*495ae853SAndroid Build Coastguard Worker
1651*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1652*495ae853SAndroid Build Coastguard Worker /* Handle */
1653*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1654*495ae853SAndroid Build Coastguard Worker size = sizeof(nal_parse_ctxt_t);
1655*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1656*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1657*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1658*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt = pv_buf;
1659*495ae853SAndroid Build Coastguard Worker
1660*495ae853SAndroid Build Coastguard Worker /* set the lowest dqid to -1 */
1661*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt->i4_prev_dq_id = -1;
1662*495ae853SAndroid Build Coastguard Worker
1663*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1664*495ae853SAndroid Build Coastguard Worker /* DQID list buffer and initialization of vcl node buffer context */
1665*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1666*495ae853SAndroid Build Coastguard Worker {
1667*495ae853SAndroid Build Coastguard Worker WORD32 i4_lyr_idx;
1668*495ae853SAndroid Build Coastguard Worker WORD32 i4_max_num_lyrs;
1669*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_vcl_node;
1670*495ae853SAndroid Build Coastguard Worker dqid_node_t *ps_dqid_node;
1671*495ae853SAndroid Build Coastguard Worker dqid_ctxt_t *ps_dqid_ctxt;
1672*495ae853SAndroid Build Coastguard Worker
1673*495ae853SAndroid Build Coastguard Worker size = sizeof(vcl_node_t);
1674*495ae853SAndroid Build Coastguard Worker size += sizeof(dqid_node_t);
1675*495ae853SAndroid Build Coastguard Worker size *= MAX_NUM_RES_LYRS;
1676*495ae853SAndroid Build Coastguard Worker
1677*495ae853SAndroid Build Coastguard Worker ps_dqid_ctxt = &ps_nal_parse_ctxt->s_dqid_ctxt;
1678*495ae853SAndroid Build Coastguard Worker
1679*495ae853SAndroid Build Coastguard Worker ps_dqid_ctxt->i4_max_num_lyrs = MAX_NUM_RES_LYRS;
1680*495ae853SAndroid Build Coastguard Worker
1681*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1682*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1683*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1684*495ae853SAndroid Build Coastguard Worker
1685*495ae853SAndroid Build Coastguard Worker ps_dqid_ctxt->ps_dqid_node = pv_buf;
1686*495ae853SAndroid Build Coastguard Worker ps_dqid_node = ps_dqid_ctxt->ps_dqid_node;
1687*495ae853SAndroid Build Coastguard Worker
1688*495ae853SAndroid Build Coastguard Worker i4_max_num_lyrs = ps_dqid_ctxt->i4_max_num_lyrs;
1689*495ae853SAndroid Build Coastguard Worker
1690*495ae853SAndroid Build Coastguard Worker pu1_ptr = pv_buf;
1691*495ae853SAndroid Build Coastguard Worker pu1_ptr += sizeof(dqid_node_t) * i4_max_num_lyrs;
1692*495ae853SAndroid Build Coastguard Worker ps_vcl_node = (vcl_node_t *) pu1_ptr;
1693*495ae853SAndroid Build Coastguard Worker
1694*495ae853SAndroid Build Coastguard Worker for(i4_lyr_idx = 0; i4_lyr_idx < i4_max_num_lyrs; i4_lyr_idx++)
1695*495ae853SAndroid Build Coastguard Worker {
1696*495ae853SAndroid Build Coastguard Worker ps_dqid_node->ps_vcl_node = ps_vcl_node;
1697*495ae853SAndroid Build Coastguard Worker
1698*495ae853SAndroid Build Coastguard Worker /* Loop updates */
1699*495ae853SAndroid Build Coastguard Worker ps_vcl_node += 1;
1700*495ae853SAndroid Build Coastguard Worker ps_dqid_node += 1;
1701*495ae853SAndroid Build Coastguard Worker } /* Loop over all the layers */
1702*495ae853SAndroid Build Coastguard Worker }
1703*495ae853SAndroid Build Coastguard Worker
1704*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1705*495ae853SAndroid Build Coastguard Worker /* Common memory */
1706*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1707*495ae853SAndroid Build Coastguard Worker size = UP_ALIGN_8(HEADER_BUFFER_LEN_BEFORE_EP);
1708*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1709*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1710*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1711*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt->pv_nal_header_buf = (void *) pv_buf;
1712*495ae853SAndroid Build Coastguard Worker
1713*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1714*495ae853SAndroid Build Coastguard Worker /* Layer params memory */
1715*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1716*495ae853SAndroid Build Coastguard Worker size = sizeof(nal_unit_t);
1717*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1718*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1719*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1720*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt->pv_nal_unit = pv_buf;
1721*495ae853SAndroid Build Coastguard Worker
1722*495ae853SAndroid Build Coastguard Worker size = MAX_VCL_NAL_BUFF_SIZE * sizeof(UWORD8);
1723*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1724*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1725*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1726*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_vcl_nal_buff = pv_buf;
1727*495ae853SAndroid Build Coastguard Worker
1728*495ae853SAndroid Build Coastguard Worker size = MAX_NON_VCL_NAL_BUFF_SIZE * sizeof(UWORD8);
1729*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1730*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1731*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1732*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_non_vcl_nal_buff = pv_buf;
1733*495ae853SAndroid Build Coastguard Worker
1734*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1735*495ae853SAndroid Build Coastguard Worker /* Registering the seq and pic prms buffer pointers */
1736*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
1737*495ae853SAndroid Build Coastguard Worker if(NULL == ps_svcd_ctxt->ps_sps || NULL == ps_svcd_ctxt->ps_pps)
1738*495ae853SAndroid Build Coastguard Worker {
1739*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1740*495ae853SAndroid Build Coastguard Worker }
1741*495ae853SAndroid Build Coastguard Worker
1742*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_nal_parse_ctxt = ps_nal_parse_ctxt;
1743*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt->pv_seq_prms = ps_svcd_ctxt->ps_sps;
1744*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt->pv_pic_prms = ps_svcd_ctxt->ps_pps;
1745*495ae853SAndroid Build Coastguard Worker
1746*495ae853SAndroid Build Coastguard Worker /* register VCL and NON VCL buffer pointers */
1747*495ae853SAndroid Build Coastguard Worker if(NULL == ps_svcd_ctxt->pv_vcl_nal_buff || NULL == ps_svcd_ctxt->pv_non_vcl_nal_buff)
1748*495ae853SAndroid Build Coastguard Worker {
1749*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
1750*495ae853SAndroid Build Coastguard Worker }
1751*495ae853SAndroid Build Coastguard Worker
1752*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt->pv_vcl_nal_buf = (UWORD8 *) ps_svcd_ctxt->pv_vcl_nal_buff;
1753*495ae853SAndroid Build Coastguard Worker ps_nal_parse_ctxt->pv_non_vcl_nal_buf = (UWORD8 *) ps_svcd_ctxt->pv_non_vcl_nal_buff;
1754*495ae853SAndroid Build Coastguard Worker isvcd_nal_parse_reset_ctxt(ANNEX_B, PARTIAL_INPUT_MODE, ps_nal_parse_ctxt);
1755*495ae853SAndroid Build Coastguard Worker
1756*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
1757*495ae853SAndroid Build Coastguard Worker }
1758*495ae853SAndroid Build Coastguard Worker
1759*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1760*495ae853SAndroid Build Coastguard Worker /* */
1761*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_intra_resample_ctxt_create */
1762*495ae853SAndroid Build Coastguard Worker /* */
1763*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to create intra_resamp context */
1764*495ae853SAndroid Build Coastguard Worker /* Inputs : */
1765*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1766*495ae853SAndroid Build Coastguard Worker /* Processing : */
1767*495ae853SAndroid Build Coastguard Worker /* */
1768*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1769*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1770*495ae853SAndroid Build Coastguard Worker /* */
1771*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1772*495ae853SAndroid Build Coastguard Worker /* */
1773*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1774*495ae853SAndroid Build Coastguard Worker /* */
1775*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1776*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 Kishore creation */
1777*495ae853SAndroid Build Coastguard Worker /* */
1778*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_intra_resample_ctxt_create(svc_dec_ctxt_t * ps_svcd_ctxt,void * pv_api_ip,void * pv_api_op)1779*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_intra_resample_ctxt_create(svc_dec_ctxt_t *ps_svcd_ctxt, void *pv_api_ip,
1780*495ae853SAndroid Build Coastguard Worker void *pv_api_op)
1781*495ae853SAndroid Build Coastguard Worker {
1782*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t *ps_create_ip;
1783*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
1784*495ae853SAndroid Build Coastguard Worker void *pv_buf;
1785*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
1786*495ae853SAndroid Build Coastguard Worker void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
1787*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
1788*495ae853SAndroid Build Coastguard Worker WORD32 size;
1789*495ae853SAndroid Build Coastguard Worker intra_inter_pred_ctxt_t *ps_ii_pred_ctxt;
1790*495ae853SAndroid Build Coastguard Worker
1791*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt;
1792*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_op);
1793*495ae853SAndroid Build Coastguard Worker ps_create_ip = (isvcd_create_ip_t *) pv_api_ip;
1794*495ae853SAndroid Build Coastguard Worker
1795*495ae853SAndroid Build Coastguard Worker pf_aligned_alloc = ps_create_ip->s_ivd_create_ip_t.pf_aligned_alloc;
1796*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
1797*495ae853SAndroid Build Coastguard Worker
1798*495ae853SAndroid Build Coastguard Worker {
1799*495ae853SAndroid Build Coastguard Worker intra_samp_lyr_ctxt *ps_lyr_ctxt;
1800*495ae853SAndroid Build Coastguard Worker
1801*495ae853SAndroid Build Coastguard Worker /* allocate context structure */
1802*495ae853SAndroid Build Coastguard Worker size = ((sizeof(intra_sampling_ctxt_t) + 127) >> 7) << 7;
1803*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1804*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1805*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1806*495ae853SAndroid Build Coastguard Worker ps_ctxt = pv_buf;
1807*495ae853SAndroid Build Coastguard Worker
1808*495ae853SAndroid Build Coastguard Worker /* luma reference array buffer */
1809*495ae853SAndroid Build Coastguard Worker size = REF_ARRAY_WIDTH * REF_ARRAY_HEIGHT * sizeof(UWORD8);
1810*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1811*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1812*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1813*495ae853SAndroid Build Coastguard Worker ps_ctxt->pu1_refarray_buffer = pv_buf;
1814*495ae853SAndroid Build Coastguard Worker
1815*495ae853SAndroid Build Coastguard Worker /* cb reference array buffer */
1816*495ae853SAndroid Build Coastguard Worker size = REF_ARRAY_WIDTH * REF_ARRAY_HEIGHT * sizeof(UWORD8);
1817*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1818*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1819*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1820*495ae853SAndroid Build Coastguard Worker ps_ctxt->pu1_refarray_cb = pv_buf;
1821*495ae853SAndroid Build Coastguard Worker
1822*495ae853SAndroid Build Coastguard Worker /* cr reference array buffer */
1823*495ae853SAndroid Build Coastguard Worker size = ((DYADIC_REF_W_C + 2) * (DYADIC_REF_H_C + 2) * sizeof(UWORD8));
1824*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1825*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1826*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1827*495ae853SAndroid Build Coastguard Worker ps_ctxt->pu1_refarray_cr = pv_buf;
1828*495ae853SAndroid Build Coastguard Worker
1829*495ae853SAndroid Build Coastguard Worker /* Temp Intermediate Buffer */
1830*495ae853SAndroid Build Coastguard Worker size = INTERMEDIATE_BUFF_WIDTH * INTERMEDIATE_BUFF_HEIGHT * sizeof(WORD32);
1831*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1832*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1833*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1834*495ae853SAndroid Build Coastguard Worker ps_ctxt->pi4_temp_interpolation_buffer = pv_buf;
1835*495ae853SAndroid Build Coastguard Worker
1836*495ae853SAndroid Build Coastguard Worker /****************** projected locations buffers ******************/
1837*495ae853SAndroid Build Coastguard Worker {
1838*495ae853SAndroid Build Coastguard Worker intra_samp_map_ctxt_t *ps_luma_map;
1839*495ae853SAndroid Build Coastguard Worker intra_samp_map_ctxt_t *ps_chroma_map;
1840*495ae853SAndroid Build Coastguard Worker WORD32 i4_lyr_id;
1841*495ae853SAndroid Build Coastguard Worker ref_mb_map_t *ps_off_len_map;
1842*495ae853SAndroid Build Coastguard Worker ref_pixel_map_t *ps_pos_phase_map;
1843*495ae853SAndroid Build Coastguard Worker ref_min_max_map_t *ps_min_max;
1844*495ae853SAndroid Build Coastguard Worker WORD16 *pi2_mem;
1845*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_mem;
1846*495ae853SAndroid Build Coastguard Worker seg_lookup_desc_t *ps_seg_lookup;
1847*495ae853SAndroid Build Coastguard Worker
1848*495ae853SAndroid Build Coastguard Worker /****************** Horz offset length ******************/
1849*495ae853SAndroid Build Coastguard Worker
1850*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_WIDTH >> 4) * MAX_NUM_RES_LYRS * 2 * sizeof(ref_mb_map_t);
1851*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1852*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1853*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1854*495ae853SAndroid Build Coastguard Worker ps_off_len_map = pv_buf;
1855*495ae853SAndroid Build Coastguard Worker
1856*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
1857*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
1858*495ae853SAndroid Build Coastguard Worker {
1859*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
1860*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
1861*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
1862*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
1863*495ae853SAndroid Build Coastguard Worker
1864*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
1865*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_x_offset_length = ps_off_len_map;
1866*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_WIDTH >> 4);
1867*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_x_offset_length = ps_off_len_map;
1868*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_WIDTH >> 4);
1869*495ae853SAndroid Build Coastguard Worker
1870*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
1871*495ae853SAndroid Build Coastguard Worker
1872*495ae853SAndroid Build Coastguard Worker /****************** Vert offset length ******************/
1873*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_HEIGHT >> 4) * MAX_NUM_RES_LYRS * 2 * sizeof(ref_mb_map_t);
1874*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1875*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1876*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1877*495ae853SAndroid Build Coastguard Worker ps_off_len_map = pv_buf;
1878*495ae853SAndroid Build Coastguard Worker
1879*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
1880*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
1881*495ae853SAndroid Build Coastguard Worker {
1882*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
1883*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
1884*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
1885*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
1886*495ae853SAndroid Build Coastguard Worker
1887*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
1888*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_y_offset_length = ps_off_len_map;
1889*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_HEIGHT >> 4);
1890*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_y_offset_length = ps_off_len_map;
1891*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_HEIGHT >> 4);
1892*495ae853SAndroid Build Coastguard Worker
1893*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
1894*495ae853SAndroid Build Coastguard Worker
1895*495ae853SAndroid Build Coastguard Worker /****************** Horz Min Max Pos ******************/
1896*495ae853SAndroid Build Coastguard Worker
1897*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_WIDTH >> 4) * MAX_NUM_RES_LYRS * 2 * sizeof(ref_mb_map_t);
1898*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1899*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1900*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1901*495ae853SAndroid Build Coastguard Worker ps_min_max = pv_buf;
1902*495ae853SAndroid Build Coastguard Worker
1903*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
1904*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
1905*495ae853SAndroid Build Coastguard Worker {
1906*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
1907*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
1908*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
1909*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
1910*495ae853SAndroid Build Coastguard Worker
1911*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
1912*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_x_min_max = ps_min_max;
1913*495ae853SAndroid Build Coastguard Worker ps_min_max += (H264_MAX_FRAME_WIDTH >> 4);
1914*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_x_min_max = ps_min_max;
1915*495ae853SAndroid Build Coastguard Worker ps_min_max += (H264_MAX_FRAME_WIDTH >> 4);
1916*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
1917*495ae853SAndroid Build Coastguard Worker
1918*495ae853SAndroid Build Coastguard Worker /****************** Vert Min Max Pos ******************/
1919*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_HEIGHT >> 4) * MAX_NUM_RES_LYRS * 2 * sizeof(ref_mb_map_t);
1920*495ae853SAndroid Build Coastguard Worker
1921*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1922*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1923*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1924*495ae853SAndroid Build Coastguard Worker ps_min_max = pv_buf;
1925*495ae853SAndroid Build Coastguard Worker
1926*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
1927*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
1928*495ae853SAndroid Build Coastguard Worker {
1929*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
1930*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
1931*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
1932*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
1933*495ae853SAndroid Build Coastguard Worker
1934*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
1935*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_y_min_max = ps_min_max;
1936*495ae853SAndroid Build Coastguard Worker ps_min_max += (H264_MAX_FRAME_HEIGHT >> 4);
1937*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_y_min_max = ps_min_max;
1938*495ae853SAndroid Build Coastguard Worker ps_min_max += (H264_MAX_FRAME_HEIGHT >> 4);
1939*495ae853SAndroid Build Coastguard Worker
1940*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
1941*495ae853SAndroid Build Coastguard Worker
1942*495ae853SAndroid Build Coastguard Worker /****************** Horz position phase ******************/
1943*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_WIDTH) *MAX_NUM_RES_LYRS * 2 * sizeof(ref_pixel_map_t);
1944*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1945*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1946*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1947*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map = pv_buf;
1948*495ae853SAndroid Build Coastguard Worker
1949*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
1950*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
1951*495ae853SAndroid Build Coastguard Worker {
1952*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
1953*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
1954*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
1955*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
1956*495ae853SAndroid Build Coastguard Worker
1957*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
1958*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_x_pos_phase = ps_pos_phase_map;
1959*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += (H264_MAX_FRAME_WIDTH);
1960*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_x_pos_phase = ps_pos_phase_map;
1961*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += (H264_MAX_FRAME_WIDTH);
1962*495ae853SAndroid Build Coastguard Worker
1963*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
1964*495ae853SAndroid Build Coastguard Worker
1965*495ae853SAndroid Build Coastguard Worker /****************** Vert position phase ******************/
1966*495ae853SAndroid Build Coastguard Worker
1967*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_HEIGHT) *MAX_NUM_RES_LYRS * 2 * sizeof(ref_pixel_map_t);
1968*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1969*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1970*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1971*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map = pv_buf;
1972*495ae853SAndroid Build Coastguard Worker
1973*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
1974*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
1975*495ae853SAndroid Build Coastguard Worker {
1976*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
1977*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
1978*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
1979*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
1980*495ae853SAndroid Build Coastguard Worker
1981*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
1982*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_y_pos_phase = ps_pos_phase_map;
1983*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += (H264_MAX_FRAME_HEIGHT);
1984*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_y_pos_phase = ps_pos_phase_map;
1985*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += (H264_MAX_FRAME_HEIGHT);
1986*495ae853SAndroid Build Coastguard Worker
1987*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
1988*495ae853SAndroid Build Coastguard Worker
1989*495ae853SAndroid Build Coastguard Worker /**************** XD Index ******************************/
1990*495ae853SAndroid Build Coastguard Worker size = (MB_WIDTH) *MAX_NUM_RES_LYRS * 2 * sizeof(WORD16);
1991*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
1992*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
1993*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
1994*495ae853SAndroid Build Coastguard Worker pi2_mem = pv_buf;
1995*495ae853SAndroid Build Coastguard Worker
1996*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
1997*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
1998*495ae853SAndroid Build Coastguard Worker {
1999*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2000*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2001*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2002*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2003*495ae853SAndroid Build Coastguard Worker
2004*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2005*495ae853SAndroid Build Coastguard Worker ps_luma_map->pi2_xd_index = pi2_mem;
2006*495ae853SAndroid Build Coastguard Worker pi2_mem += MB_WIDTH;
2007*495ae853SAndroid Build Coastguard Worker ps_chroma_map->pi2_xd_index = pi2_mem;
2008*495ae853SAndroid Build Coastguard Worker pi2_mem += MB_WIDTH;
2009*495ae853SAndroid Build Coastguard Worker
2010*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2011*495ae853SAndroid Build Coastguard Worker
2012*495ae853SAndroid Build Coastguard Worker /**************** YD Index ******************************/
2013*495ae853SAndroid Build Coastguard Worker size = (MB_HEIGHT) *MAX_NUM_RES_LYRS * 2 * sizeof(WORD16);
2014*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2015*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2016*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2017*495ae853SAndroid Build Coastguard Worker pi2_mem = pv_buf;
2018*495ae853SAndroid Build Coastguard Worker
2019*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2020*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2021*495ae853SAndroid Build Coastguard Worker {
2022*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2023*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2024*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2025*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2026*495ae853SAndroid Build Coastguard Worker
2027*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2028*495ae853SAndroid Build Coastguard Worker ps_luma_map->pi2_yd_index = pi2_mem;
2029*495ae853SAndroid Build Coastguard Worker pi2_mem += MB_HEIGHT;
2030*495ae853SAndroid Build Coastguard Worker ps_chroma_map->pi2_yd_index = pi2_mem;
2031*495ae853SAndroid Build Coastguard Worker pi2_mem += MB_HEIGHT;
2032*495ae853SAndroid Build Coastguard Worker
2033*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2034*495ae853SAndroid Build Coastguard Worker
2035*495ae853SAndroid Build Coastguard Worker /**************** YA Index ******************************/
2036*495ae853SAndroid Build Coastguard Worker size = MB_HEIGHT * MAX_NUM_RES_LYRS * 2 * sizeof(WORD16);
2037*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2038*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2039*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2040*495ae853SAndroid Build Coastguard Worker pi2_mem = pv_buf;
2041*495ae853SAndroid Build Coastguard Worker
2042*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2043*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2044*495ae853SAndroid Build Coastguard Worker {
2045*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2046*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2047*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2048*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2049*495ae853SAndroid Build Coastguard Worker
2050*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2051*495ae853SAndroid Build Coastguard Worker ps_luma_map->pi2_ya_index = pi2_mem;
2052*495ae853SAndroid Build Coastguard Worker pi2_mem += MB_HEIGHT;
2053*495ae853SAndroid Build Coastguard Worker ps_chroma_map->pi2_ya_index = pi2_mem;
2054*495ae853SAndroid Build Coastguard Worker pi2_mem += MB_HEIGHT;
2055*495ae853SAndroid Build Coastguard Worker
2056*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2057*495ae853SAndroid Build Coastguard Worker
2058*495ae853SAndroid Build Coastguard Worker /**************** Horizontal segment lookup **************************/
2059*495ae853SAndroid Build Coastguard Worker /* (MB_WIDTH x seg_lookup_desc_t) x (num layers - 1) (for luma )*/
2060*495ae853SAndroid Build Coastguard Worker /* (BLOCK_WIDTH x seg_lookup_desc_t) x (num layers - 1) (for chroma )*/
2061*495ae853SAndroid Build Coastguard Worker size = (MB_WIDTH * sizeof(seg_lookup_desc_t)) * MAX_NUM_RES_LYRS;
2062*495ae853SAndroid Build Coastguard Worker
2063*495ae853SAndroid Build Coastguard Worker size += (BLOCK_WIDTH * sizeof(seg_lookup_desc_t)) * MAX_NUM_RES_LYRS;
2064*495ae853SAndroid Build Coastguard Worker
2065*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2066*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2067*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2068*495ae853SAndroid Build Coastguard Worker ps_seg_lookup = pv_buf;
2069*495ae853SAndroid Build Coastguard Worker
2070*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2071*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2072*495ae853SAndroid Build Coastguard Worker {
2073*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2074*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2075*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2076*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2077*495ae853SAndroid Build Coastguard Worker
2078*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2079*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_seg_lookup_horz = ps_seg_lookup;
2080*495ae853SAndroid Build Coastguard Worker ps_seg_lookup += MB_WIDTH;
2081*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_seg_lookup_horz = ps_seg_lookup;
2082*495ae853SAndroid Build Coastguard Worker ps_seg_lookup += BLOCK_WIDTH;
2083*495ae853SAndroid Build Coastguard Worker
2084*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2085*495ae853SAndroid Build Coastguard Worker
2086*495ae853SAndroid Build Coastguard Worker /**************** Vertical segment lookup ****************************/
2087*495ae853SAndroid Build Coastguard Worker /* (MB_HEIGHT x seg_lookup_desc_t) x (num layers - 1) (for luma )*/
2088*495ae853SAndroid Build Coastguard Worker /* (BLOCK_HEIGHT x seg_lookup_desc_t) x (num layers - 1) (for chroma)*/
2089*495ae853SAndroid Build Coastguard Worker size = (MB_HEIGHT * sizeof(seg_lookup_desc_t)) * MAX_NUM_RES_LYRS;
2090*495ae853SAndroid Build Coastguard Worker
2091*495ae853SAndroid Build Coastguard Worker size += (BLOCK_HEIGHT * sizeof(seg_lookup_desc_t)) * MAX_NUM_RES_LYRS;
2092*495ae853SAndroid Build Coastguard Worker
2093*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2094*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2095*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2096*495ae853SAndroid Build Coastguard Worker ps_seg_lookup = pv_buf;
2097*495ae853SAndroid Build Coastguard Worker
2098*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2099*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2100*495ae853SAndroid Build Coastguard Worker {
2101*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2102*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2103*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2104*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2105*495ae853SAndroid Build Coastguard Worker
2106*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2107*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_seg_lookup_vert = ps_seg_lookup;
2108*495ae853SAndroid Build Coastguard Worker ps_seg_lookup += MB_HEIGHT;
2109*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_seg_lookup_vert = ps_seg_lookup;
2110*495ae853SAndroid Build Coastguard Worker ps_seg_lookup += BLOCK_HEIGHT;
2111*495ae853SAndroid Build Coastguard Worker
2112*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2113*495ae853SAndroid Build Coastguard Worker
2114*495ae853SAndroid Build Coastguard Worker /**************** X and Y Reference Array Index lookup ***************/
2115*495ae853SAndroid Build Coastguard Worker /* (MAX_REF_IDX_ARRAY) x (num layers - 1) (for luma x-index) */
2116*495ae853SAndroid Build Coastguard Worker /* (MAX_REF_IDX_ARRAY) x (num layers - 1) (for luma y-index) */
2117*495ae853SAndroid Build Coastguard Worker /* (MAX_REF_IDX_ARRAY) x (num layers - 1) (for chroma x-index) */
2118*495ae853SAndroid Build Coastguard Worker /* (MAX_REF_IDX_ARRAY) x (num layers - 1) (for chroma y-index) */
2119*495ae853SAndroid Build Coastguard Worker /*********************************************************************/
2120*495ae853SAndroid Build Coastguard Worker size = (MAX_REF_IDX_ARRAY * MAX_NUM_RES_LYRS * 4);
2121*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2122*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2123*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2124*495ae853SAndroid Build Coastguard Worker pu1_mem = pv_buf;
2125*495ae853SAndroid Build Coastguard Worker
2126*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2127*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2128*495ae853SAndroid Build Coastguard Worker {
2129*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2130*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2131*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2132*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2133*495ae853SAndroid Build Coastguard Worker
2134*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2135*495ae853SAndroid Build Coastguard Worker ps_luma_map->pu1_refarray_x_idx = pu1_mem;
2136*495ae853SAndroid Build Coastguard Worker pu1_mem += MAX_REF_IDX_ARRAY;
2137*495ae853SAndroid Build Coastguard Worker
2138*495ae853SAndroid Build Coastguard Worker ps_luma_map->pu1_refarray_y_idx = pu1_mem;
2139*495ae853SAndroid Build Coastguard Worker pu1_mem += MAX_REF_IDX_ARRAY;
2140*495ae853SAndroid Build Coastguard Worker
2141*495ae853SAndroid Build Coastguard Worker ps_chroma_map->pu1_refarray_x_idx = pu1_mem;
2142*495ae853SAndroid Build Coastguard Worker pu1_mem += MAX_REF_IDX_ARRAY;
2143*495ae853SAndroid Build Coastguard Worker
2144*495ae853SAndroid Build Coastguard Worker ps_chroma_map->pu1_refarray_y_idx = pu1_mem;
2145*495ae853SAndroid Build Coastguard Worker pu1_mem += MAX_REF_IDX_ARRAY;
2146*495ae853SAndroid Build Coastguard Worker
2147*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2148*495ae853SAndroid Build Coastguard Worker }
2149*495ae853SAndroid Build Coastguard Worker
2150*495ae853SAndroid Build Coastguard Worker size = ((sizeof(intra_inter_pred_ctxt_t) + 127) >> 7) << 7;
2151*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2152*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2153*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2154*495ae853SAndroid Build Coastguard Worker ps_ii_pred_ctxt = pv_buf;
2155*495ae853SAndroid Build Coastguard Worker }
2156*495ae853SAndroid Build Coastguard Worker
2157*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_intra_sample_ctxt = ps_ctxt;
2158*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_ii_pred_ctxt = ps_ii_pred_ctxt;
2159*495ae853SAndroid Build Coastguard Worker
2160*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
2161*495ae853SAndroid Build Coastguard Worker {
2162*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
2163*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pv_intra_sample_ctxt = ps_svcd_ctxt->pv_intra_sample_ctxt;
2164*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pv_ii_pred_ctxt = ps_svcd_ctxt->pv_ii_pred_ctxt;
2165*495ae853SAndroid Build Coastguard Worker }
2166*495ae853SAndroid Build Coastguard Worker
2167*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
2168*495ae853SAndroid Build Coastguard Worker }
2169*495ae853SAndroid Build Coastguard Worker
2170*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2171*495ae853SAndroid Build Coastguard Worker /* */
2172*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_residual_resample_ctxt_create */
2173*495ae853SAndroid Build Coastguard Worker /* */
2174*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to create resd_resamp context */
2175*495ae853SAndroid Build Coastguard Worker /* Inputs : */
2176*495ae853SAndroid Build Coastguard Worker /* Globals : none */
2177*495ae853SAndroid Build Coastguard Worker /* Processing : */
2178*495ae853SAndroid Build Coastguard Worker /* */
2179*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
2180*495ae853SAndroid Build Coastguard Worker /* Returns : none */
2181*495ae853SAndroid Build Coastguard Worker /* */
2182*495ae853SAndroid Build Coastguard Worker /* Issues : none */
2183*495ae853SAndroid Build Coastguard Worker /* */
2184*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2185*495ae853SAndroid Build Coastguard Worker /* */
2186*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2187*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 ittiam creation */
2188*495ae853SAndroid Build Coastguard Worker /* */
2189*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_residual_resample_ctxt_create(svc_dec_ctxt_t * ps_svcd_ctxt,void * pv_api_ip,void * pv_api_op)2190*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_residual_resample_ctxt_create(svc_dec_ctxt_t *ps_svcd_ctxt, void *pv_api_ip,
2191*495ae853SAndroid Build Coastguard Worker void *pv_api_op)
2192*495ae853SAndroid Build Coastguard Worker {
2193*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t *ps_create_ip;
2194*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
2195*495ae853SAndroid Build Coastguard Worker void *pv_buf;
2196*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
2197*495ae853SAndroid Build Coastguard Worker void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
2198*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
2199*495ae853SAndroid Build Coastguard Worker WORD32 size;
2200*495ae853SAndroid Build Coastguard Worker
2201*495ae853SAndroid Build Coastguard Worker residual_sampling_ctxt_t *ps_ctxt;
2202*495ae853SAndroid Build Coastguard Worker res_lyr_ctxt *ps_lyr_ctxt;
2203*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_op);
2204*495ae853SAndroid Build Coastguard Worker ps_create_ip = (isvcd_create_ip_t *) pv_api_ip;
2205*495ae853SAndroid Build Coastguard Worker
2206*495ae853SAndroid Build Coastguard Worker pf_aligned_alloc = ps_create_ip->s_ivd_create_ip_t.pf_aligned_alloc;
2207*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
2208*495ae853SAndroid Build Coastguard Worker
2209*495ae853SAndroid Build Coastguard Worker /* allocate context structure */
2210*495ae853SAndroid Build Coastguard Worker size = ((sizeof(residual_sampling_ctxt_t) + 127) >> 7) << 7;
2211*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2212*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2213*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2214*495ae853SAndroid Build Coastguard Worker ps_ctxt = pv_buf;
2215*495ae853SAndroid Build Coastguard Worker
2216*495ae853SAndroid Build Coastguard Worker /* reference array buffer */
2217*495ae853SAndroid Build Coastguard Worker size = REF_ARRAY_WIDTH_RES_SAMP * REF_ARRAY_HEIGHT_RES_SAMP * sizeof(WORD16);
2218*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2219*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2220*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2221*495ae853SAndroid Build Coastguard Worker ps_ctxt->pi2_refarray_buffer = pv_buf;
2222*495ae853SAndroid Build Coastguard Worker
2223*495ae853SAndroid Build Coastguard Worker /* reference array pointer increment buffer */
2224*495ae853SAndroid Build Coastguard Worker {
2225*495ae853SAndroid Build Coastguard Worker WORD32 i4_size;
2226*495ae853SAndroid Build Coastguard Worker
2227*495ae853SAndroid Build Coastguard Worker i4_size = REF_ARRAY_WIDTH_RES_SAMP * REF_ARRAY_HEIGHT_RES_SAMP * sizeof(UWORD8);
2228*495ae853SAndroid Build Coastguard Worker size = REF_ARRAY_WIDTH_RES_SAMP * REF_ARRAY_HEIGHT_RES_SAMP * 2 * sizeof(UWORD8);
2229*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2230*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2231*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2232*495ae853SAndroid Build Coastguard Worker ps_ctxt->pu1_ref_x_ptr_incr = pv_buf;
2233*495ae853SAndroid Build Coastguard Worker ps_ctxt->pu1_ref_y_ptr_incr = ps_ctxt->pu1_ref_x_ptr_incr + i4_size;
2234*495ae853SAndroid Build Coastguard Worker }
2235*495ae853SAndroid Build Coastguard Worker
2236*495ae853SAndroid Build Coastguard Worker /****************** projected locations buffers ******************/
2237*495ae853SAndroid Build Coastguard Worker {
2238*495ae853SAndroid Build Coastguard Worker residual_samp_map_ctxt_t *ps_luma_map;
2239*495ae853SAndroid Build Coastguard Worker residual_samp_map_ctxt_t *ps_chroma_map;
2240*495ae853SAndroid Build Coastguard Worker WORD32 i4_lyr_id;
2241*495ae853SAndroid Build Coastguard Worker ref_mb_map_t *ps_off_len_map;
2242*495ae853SAndroid Build Coastguard Worker ref_pixel_map_t *ps_pos_phase_map;
2243*495ae853SAndroid Build Coastguard Worker
2244*495ae853SAndroid Build Coastguard Worker /****************** Horz offset length ******************/
2245*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_WIDTH >> 4) * MAX_NUM_RES_LYRS * 2 * sizeof(ref_mb_map_t);
2246*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2247*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2248*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2249*495ae853SAndroid Build Coastguard Worker ps_off_len_map = pv_buf;
2250*495ae853SAndroid Build Coastguard Worker
2251*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2252*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2253*495ae853SAndroid Build Coastguard Worker {
2254*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2255*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2256*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2257*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2258*495ae853SAndroid Build Coastguard Worker
2259*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2260*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_x_offset_length = ps_off_len_map;
2261*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_WIDTH >> 4);
2262*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_x_offset_length = ps_off_len_map;
2263*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_WIDTH >> 4);
2264*495ae853SAndroid Build Coastguard Worker
2265*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2266*495ae853SAndroid Build Coastguard Worker
2267*495ae853SAndroid Build Coastguard Worker /****************** Vert offset length ******************/
2268*495ae853SAndroid Build Coastguard Worker size = (H264_MAX_FRAME_HEIGHT >> 4) * MAX_NUM_RES_LYRS * 2 * sizeof(ref_mb_map_t);
2269*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2270*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2271*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2272*495ae853SAndroid Build Coastguard Worker ps_off_len_map = pv_buf;
2273*495ae853SAndroid Build Coastguard Worker
2274*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2275*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2276*495ae853SAndroid Build Coastguard Worker {
2277*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2278*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2279*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2280*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2281*495ae853SAndroid Build Coastguard Worker
2282*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2283*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_y_offset_length = ps_off_len_map;
2284*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_HEIGHT >> 4);
2285*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_y_offset_length = ps_off_len_map;
2286*495ae853SAndroid Build Coastguard Worker ps_off_len_map += (H264_MAX_FRAME_HEIGHT >> 4);
2287*495ae853SAndroid Build Coastguard Worker
2288*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2289*495ae853SAndroid Build Coastguard Worker
2290*495ae853SAndroid Build Coastguard Worker /****************** Horz position phase ******************/
2291*495ae853SAndroid Build Coastguard Worker size = H264_MAX_FRAME_WIDTH * MAX_NUM_RES_LYRS * 2 * sizeof(ref_pixel_map_t);
2292*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2293*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2294*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2295*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map = pv_buf;
2296*495ae853SAndroid Build Coastguard Worker
2297*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2298*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2299*495ae853SAndroid Build Coastguard Worker {
2300*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2301*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2302*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2303*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2304*495ae853SAndroid Build Coastguard Worker
2305*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2306*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_x_pos_phase = ps_pos_phase_map;
2307*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += H264_MAX_FRAME_WIDTH;
2308*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_x_pos_phase = ps_pos_phase_map;
2309*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += H264_MAX_FRAME_WIDTH;
2310*495ae853SAndroid Build Coastguard Worker
2311*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2312*495ae853SAndroid Build Coastguard Worker
2313*495ae853SAndroid Build Coastguard Worker /****************** Vert position phase ******************/
2314*495ae853SAndroid Build Coastguard Worker
2315*495ae853SAndroid Build Coastguard Worker size = H264_MAX_FRAME_HEIGHT * MAX_NUM_RES_LYRS * 2 * sizeof(ref_pixel_map_t);
2316*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2317*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2318*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2319*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map = pv_buf;
2320*495ae853SAndroid Build Coastguard Worker
2321*495ae853SAndroid Build Coastguard Worker /* loop over num layers -1 */
2322*495ae853SAndroid Build Coastguard Worker for(i4_lyr_id = 0; i4_lyr_id < MAX_NUM_RES_LYRS; i4_lyr_id++)
2323*495ae853SAndroid Build Coastguard Worker {
2324*495ae853SAndroid Build Coastguard Worker /* derive the layer map ctxt */
2325*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[i4_lyr_id];
2326*495ae853SAndroid Build Coastguard Worker ps_luma_map = &ps_lyr_ctxt->s_luma_map_ctxt;
2327*495ae853SAndroid Build Coastguard Worker ps_chroma_map = &ps_lyr_ctxt->s_chroma_map_ctxt;
2328*495ae853SAndroid Build Coastguard Worker
2329*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2330*495ae853SAndroid Build Coastguard Worker ps_luma_map->ps_y_pos_phase = ps_pos_phase_map;
2331*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += H264_MAX_FRAME_HEIGHT;
2332*495ae853SAndroid Build Coastguard Worker ps_chroma_map->ps_y_pos_phase = ps_pos_phase_map;
2333*495ae853SAndroid Build Coastguard Worker ps_pos_phase_map += H264_MAX_FRAME_HEIGHT;
2334*495ae853SAndroid Build Coastguard Worker
2335*495ae853SAndroid Build Coastguard Worker } /* end of loop over resolution layers */
2336*495ae853SAndroid Build Coastguard Worker }
2337*495ae853SAndroid Build Coastguard Worker
2338*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_residual_sample_ctxt = ps_ctxt;
2339*495ae853SAndroid Build Coastguard Worker
2340*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
2341*495ae853SAndroid Build Coastguard Worker {
2342*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
2343*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pv_residual_sample_ctxt = ps_svcd_ctxt->pv_residual_sample_ctxt;
2344*495ae853SAndroid Build Coastguard Worker }
2345*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
2346*495ae853SAndroid Build Coastguard Worker }
2347*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2348*495ae853SAndroid Build Coastguard Worker /* */
2349*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_mode_mv_resample_ctxt_create */
2350*495ae853SAndroid Build Coastguard Worker /* */
2351*495ae853SAndroid Build Coastguard Worker /* Description :this function is used to create mv_resamp context */
2352*495ae853SAndroid Build Coastguard Worker /* Inputs : */
2353*495ae853SAndroid Build Coastguard Worker /* Globals : none */
2354*495ae853SAndroid Build Coastguard Worker /* Processing : */
2355*495ae853SAndroid Build Coastguard Worker /* */
2356*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
2357*495ae853SAndroid Build Coastguard Worker /* Returns : none */
2358*495ae853SAndroid Build Coastguard Worker /* */
2359*495ae853SAndroid Build Coastguard Worker /* Issues : none */
2360*495ae853SAndroid Build Coastguard Worker /* */
2361*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2362*495ae853SAndroid Build Coastguard Worker /* */
2363*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2364*495ae853SAndroid Build Coastguard Worker /* 25 11 2021 Kishore creation */
2365*495ae853SAndroid Build Coastguard Worker /* */
2366*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_mode_mv_resample_ctxt_create(svc_dec_ctxt_t * ps_svcd_ctxt,void * pv_api_ip,void * pv_api_op)2367*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_mode_mv_resample_ctxt_create(svc_dec_ctxt_t *ps_svcd_ctxt, void *pv_api_ip,
2368*495ae853SAndroid Build Coastguard Worker void *pv_api_op)
2369*495ae853SAndroid Build Coastguard Worker {
2370*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t *ps_create_ip;
2371*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
2372*495ae853SAndroid Build Coastguard Worker void *pv_buf;
2373*495ae853SAndroid Build Coastguard Worker WORD16 *pi2_mem;
2374*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
2375*495ae853SAndroid Build Coastguard Worker void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
2376*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
2377*495ae853SAndroid Build Coastguard Worker WORD32 size, i4_res_id;
2378*495ae853SAndroid Build Coastguard Worker ref_lyr_scaled_offset_t *ps_ref_pic_offsets;
2379*495ae853SAndroid Build Coastguard Worker mode_motion_ctxt_t *ps_mode_motion;
2380*495ae853SAndroid Build Coastguard Worker mode_motion_lyr_ctxt *ps_lyr_mem;
2381*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_op);
2382*495ae853SAndroid Build Coastguard Worker ps_create_ip = (isvcd_create_ip_t *) pv_api_ip;
2383*495ae853SAndroid Build Coastguard Worker
2384*495ae853SAndroid Build Coastguard Worker pf_aligned_alloc = ps_create_ip->s_ivd_create_ip_t.pf_aligned_alloc;
2385*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
2386*495ae853SAndroid Build Coastguard Worker
2387*495ae853SAndroid Build Coastguard Worker size = ((sizeof(mode_motion_ctxt_t) + 127) >> 7) << 7;
2388*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2389*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2390*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2391*495ae853SAndroid Build Coastguard Worker ps_mode_motion = pv_buf;
2392*495ae853SAndroid Build Coastguard Worker
2393*495ae853SAndroid Build Coastguard Worker /* motion pred structure */
2394*495ae853SAndroid Build Coastguard Worker size = 2 * NUM_MB_PARTS * NUM_SUB_MB_PARTS * sizeof(mv_pred_t);
2395*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2396*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2397*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2398*495ae853SAndroid Build Coastguard Worker ps_mode_motion->ps_motion_pred_struct = (mv_pred_t *) pv_buf;
2399*495ae853SAndroid Build Coastguard Worker
2400*495ae853SAndroid Build Coastguard Worker /* projected locations X */
2401*495ae853SAndroid Build Coastguard Worker size = H264_MAX_FRAME_WIDTH * MAX_NUM_RES_LYRS * sizeof(WORD16);
2402*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2403*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2404*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2405*495ae853SAndroid Build Coastguard Worker pi2_mem = (WORD16 *) pv_buf;
2406*495ae853SAndroid Build Coastguard Worker
2407*495ae853SAndroid Build Coastguard Worker /* loop over NUM resolution layers */
2408*495ae853SAndroid Build Coastguard Worker for(i4_res_id = 0; i4_res_id < MAX_NUM_RES_LYRS; i4_res_id++)
2409*495ae853SAndroid Build Coastguard Worker {
2410*495ae853SAndroid Build Coastguard Worker ps_lyr_mem = &ps_mode_motion->as_res_lyr_mem[i4_res_id];
2411*495ae853SAndroid Build Coastguard Worker
2412*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2413*495ae853SAndroid Build Coastguard Worker ps_lyr_mem->pi2_ref_loc_x = pi2_mem;
2414*495ae853SAndroid Build Coastguard Worker
2415*495ae853SAndroid Build Coastguard Worker /* increment the buffer pointer */
2416*495ae853SAndroid Build Coastguard Worker pi2_mem += H264_MAX_FRAME_WIDTH;
2417*495ae853SAndroid Build Coastguard Worker
2418*495ae853SAndroid Build Coastguard Worker } /* end of loop over num resolution layers */
2419*495ae853SAndroid Build Coastguard Worker
2420*495ae853SAndroid Build Coastguard Worker /* projected locations Y */
2421*495ae853SAndroid Build Coastguard Worker size = H264_MAX_FRAME_HEIGHT * MAX_NUM_RES_LYRS * sizeof(WORD16);
2422*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2423*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2424*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2425*495ae853SAndroid Build Coastguard Worker pi2_mem = (WORD16 *) pv_buf;
2426*495ae853SAndroid Build Coastguard Worker /* loop over NUM resolution layers */
2427*495ae853SAndroid Build Coastguard Worker for(i4_res_id = 0; i4_res_id < MAX_NUM_RES_LYRS; i4_res_id++)
2428*495ae853SAndroid Build Coastguard Worker {
2429*495ae853SAndroid Build Coastguard Worker ps_lyr_mem = &ps_mode_motion->as_res_lyr_mem[i4_res_id];
2430*495ae853SAndroid Build Coastguard Worker
2431*495ae853SAndroid Build Coastguard Worker /* initialise the pointers */
2432*495ae853SAndroid Build Coastguard Worker ps_lyr_mem->pi2_ref_loc_y = pi2_mem;
2433*495ae853SAndroid Build Coastguard Worker /* increment the buffer pointer */
2434*495ae853SAndroid Build Coastguard Worker pi2_mem += H264_MAX_FRAME_HEIGHT;
2435*495ae853SAndroid Build Coastguard Worker
2436*495ae853SAndroid Build Coastguard Worker } /* end of loop over num resolution layers */
2437*495ae853SAndroid Build Coastguard Worker
2438*495ae853SAndroid Build Coastguard Worker size = sizeof(ref_lyr_scaled_offset_t) * MAX_NUM_RES_LYRS * MAX_NUM_PIC_BUFS;
2439*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2440*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2441*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2442*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_ref_lyr_offset = pv_buf;
2443*495ae853SAndroid Build Coastguard Worker
2444*495ae853SAndroid Build Coastguard Worker /* loop over NUM resolution layers */
2445*495ae853SAndroid Build Coastguard Worker ps_ref_pic_offsets = (ref_lyr_scaled_offset_t *) ps_svcd_ctxt->pv_ref_lyr_offset;
2446*495ae853SAndroid Build Coastguard Worker
2447*495ae853SAndroid Build Coastguard Worker for(i4_res_id = 0; i4_res_id < MAX_NUM_RES_LYRS; i4_res_id++)
2448*495ae853SAndroid Build Coastguard Worker {
2449*495ae853SAndroid Build Coastguard Worker ps_lyr_mem = &ps_mode_motion->as_res_lyr_mem[i4_res_id];
2450*495ae853SAndroid Build Coastguard Worker
2451*495ae853SAndroid Build Coastguard Worker /* store the current resolution layer pic offset start pointer */
2452*495ae853SAndroid Build Coastguard Worker ps_lyr_mem->ps_ref_pic_lyr_offsets = ps_ref_pic_offsets + (i4_res_id * MAX_NUM_PIC_BUFS);
2453*495ae853SAndroid Build Coastguard Worker
2454*495ae853SAndroid Build Coastguard Worker } /* end of loop over num resolution layers */
2455*495ae853SAndroid Build Coastguard Worker
2456*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_mode_mv_sample_ctxt = ps_mode_motion;
2457*495ae853SAndroid Build Coastguard Worker
2458*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
2459*495ae853SAndroid Build Coastguard Worker {
2460*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
2461*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pv_mode_mv_sample_ctxt = ps_svcd_ctxt->pv_mode_mv_sample_ctxt;
2462*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pv_ref_lyr_offset = ps_svcd_ctxt->pv_ref_lyr_offset;
2463*495ae853SAndroid Build Coastguard Worker }
2464*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
2465*495ae853SAndroid Build Coastguard Worker }
2466*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2467*495ae853SAndroid Build Coastguard Worker /* */
2468*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_allocate_static_bufs */
2469*495ae853SAndroid Build Coastguard Worker /* */
2470*495ae853SAndroid Build Coastguard Worker /* Description : allocates static buffers */
2471*495ae853SAndroid Build Coastguard Worker /* */
2472*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
2473*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
2474*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
2475*495ae853SAndroid Build Coastguard Worker /* Outputs : */
2476*495ae853SAndroid Build Coastguard Worker /* Returns : void */
2477*495ae853SAndroid Build Coastguard Worker /* */
2478*495ae853SAndroid Build Coastguard Worker /* Issues : none */
2479*495ae853SAndroid Build Coastguard Worker /* */
2480*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2481*495ae853SAndroid Build Coastguard Worker /* */
2482*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2483*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
2484*495ae853SAndroid Build Coastguard Worker /* */
2485*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_allocate_static_bufs(iv_obj_t ** dec_hdl,void * pv_api_ip,void * pv_api_op)2486*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_allocate_static_bufs(iv_obj_t **dec_hdl, void *pv_api_ip, void *pv_api_op)
2487*495ae853SAndroid Build Coastguard Worker {
2488*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t *ps_create_ip;
2489*495ae853SAndroid Build Coastguard Worker isvcd_create_op_t *ps_create_op;
2490*495ae853SAndroid Build Coastguard Worker void *pv_buf;
2491*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf;
2492*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
2493*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
2494*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
2495*495ae853SAndroid Build Coastguard Worker void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
2496*495ae853SAndroid Build Coastguard Worker void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
2497*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
2498*495ae853SAndroid Build Coastguard Worker WORD32 size;
2499*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id, u1_sps_ctr;
2500*495ae853SAndroid Build Coastguard Worker UWORD8 u1_chroma_format;
2501*495ae853SAndroid Build Coastguard Worker WORD32 ret;
2502*495ae853SAndroid Build Coastguard Worker
2503*495ae853SAndroid Build Coastguard Worker ps_create_ip = (isvcd_create_ip_t *) pv_api_ip;
2504*495ae853SAndroid Build Coastguard Worker ps_create_op = (isvcd_create_op_t *) pv_api_op;
2505*495ae853SAndroid Build Coastguard Worker
2506*495ae853SAndroid Build Coastguard Worker ps_create_op->s_ivd_create_op_t.u4_error_code = 0;
2507*495ae853SAndroid Build Coastguard Worker pf_aligned_alloc = ps_create_ip->s_ivd_create_ip_t.pf_aligned_alloc;
2508*495ae853SAndroid Build Coastguard Worker pf_aligned_free = ps_create_ip->s_ivd_create_ip_t.pf_aligned_free;
2509*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
2510*495ae853SAndroid Build Coastguard Worker u1_chroma_format = (UWORD8) (ps_create_ip->s_ivd_create_ip_t.e_output_format);
2511*495ae853SAndroid Build Coastguard Worker
2512*495ae853SAndroid Build Coastguard Worker if((u1_chroma_format != IV_YUV_420P) && (u1_chroma_format != IV_YUV_420SP_UV) &&
2513*495ae853SAndroid Build Coastguard Worker (u1_chroma_format != IV_YUV_420SP_VU))
2514*495ae853SAndroid Build Coastguard Worker {
2515*495ae853SAndroid Build Coastguard Worker ps_create_op->s_ivd_create_op_t.pv_handle = NULL;
2516*495ae853SAndroid Build Coastguard Worker
2517*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
2518*495ae853SAndroid Build Coastguard Worker }
2519*495ae853SAndroid Build Coastguard Worker
2520*495ae853SAndroid Build Coastguard Worker /* Initialize return handle to NULL */
2521*495ae853SAndroid Build Coastguard Worker ps_create_op->s_ivd_create_op_t.pv_handle = NULL;
2522*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, sizeof(iv_obj_t));
2523*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2524*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, sizeof(iv_obj_t));
2525*495ae853SAndroid Build Coastguard Worker *dec_hdl = (iv_obj_t *) pv_buf;
2526*495ae853SAndroid Build Coastguard Worker ps_create_op->s_ivd_create_op_t.pv_handle = *dec_hdl;
2527*495ae853SAndroid Build Coastguard Worker
2528*495ae853SAndroid Build Coastguard Worker (*dec_hdl)->pv_codec_handle = NULL;
2529*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, sizeof(svc_dec_ctxt_t));
2530*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2531*495ae853SAndroid Build Coastguard Worker (*dec_hdl)->pv_codec_handle = (svc_dec_ctxt_t *) pv_buf;
2532*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) pv_buf;
2533*495ae853SAndroid Build Coastguard Worker
2534*495ae853SAndroid Build Coastguard Worker memset(ps_svcd_ctxt, 0, sizeof(svc_dec_ctxt_t));
2535*495ae853SAndroid Build Coastguard Worker
2536*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_prev_num_res_layers = UINT8_MAX;
2537*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_pre_parse_in_flush = 1;
2538*495ae853SAndroid Build Coastguard Worker /* set default to maximum values supported */
2539*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_dep_id = MAX_DEPENDENCY_ID;
2540*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_quality_id = MAX_QUALITY_ID;
2541*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_temp_id = MAX_TEMPORAL_ID;
2542*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_priority_id = MAX_PRIORITY_ID;
2543*495ae853SAndroid Build Coastguard Worker
2544*495ae853SAndroid Build Coastguard Worker /* two sets of MAX_NUM_SEQ_PARAMS are created one for sps-base layer; one for
2545*495ae853SAndroid Build Coastguard Worker * subset_sps- enhancement*/
2546*495ae853SAndroid Build Coastguard Worker size = ((sizeof(dec_seq_params_t)) * MAX_NUM_SEQ_PARAMS * 2);
2547*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2548*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2549*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2550*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_sps = pv_buf;
2551*495ae853SAndroid Build Coastguard Worker
2552*495ae853SAndroid Build Coastguard Worker /* two sets of MAX_NUM_SEQ_PARAMS are created one for sps-base layer; one for
2553*495ae853SAndroid Build Coastguard Worker * subset_sps- enhancement*/
2554*495ae853SAndroid Build Coastguard Worker size = ((sizeof(dec_svc_seq_params_t)) * MAX_NUM_SEQ_PARAMS * 2);
2555*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2556*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2557*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2558*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_subset_sps = pv_buf;
2559*495ae853SAndroid Build Coastguard Worker
2560*495ae853SAndroid Build Coastguard Worker for(u1_sps_ctr = 0; u1_sps_ctr < (2 * MAX_NUM_SEQ_PARAMS); u1_sps_ctr++)
2561*495ae853SAndroid Build Coastguard Worker {
2562*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_subset_sps[u1_sps_ctr].ps_seq = &ps_svcd_ctxt->ps_sps[u1_sps_ctr];
2563*495ae853SAndroid Build Coastguard Worker }
2564*495ae853SAndroid Build Coastguard Worker
2565*495ae853SAndroid Build Coastguard Worker size = sizeof(sei);
2566*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2567*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2568*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2569*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_sei = (sei *) pv_buf;
2570*495ae853SAndroid Build Coastguard Worker
2571*495ae853SAndroid Build Coastguard Worker size = sizeof(sei);
2572*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2573*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2574*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2575*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_sei_parse = (sei *) pv_buf;
2576*495ae853SAndroid Build Coastguard Worker
2577*495ae853SAndroid Build Coastguard Worker size = (sizeof(dec_pic_params_t)) * MAX_NUM_PIC_PARAMS;
2578*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2579*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2580*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2581*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_pps = pv_buf;
2582*495ae853SAndroid Build Coastguard Worker
2583*495ae853SAndroid Build Coastguard Worker size = (sizeof(svc_dec_lyr_struct_t)) * MAX_NUM_RES_LYRS;
2584*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2585*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2586*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2587*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_svc_dec_lyr = pv_buf;
2588*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_target_layer_id = 0;
2589*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_cur_layer_id = 0;
2590*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->i4_eos_flag = 0;
2591*495ae853SAndroid Build Coastguard Worker
2592*495ae853SAndroid Build Coastguard Worker ret = isvcd_mode_mv_resample_ctxt_create(ps_svcd_ctxt, pv_api_ip, pv_api_op);
2593*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2594*495ae853SAndroid Build Coastguard Worker {
2595*495ae853SAndroid Build Coastguard Worker return ret;
2596*495ae853SAndroid Build Coastguard Worker }
2597*495ae853SAndroid Build Coastguard Worker ret = isvcd_intra_resample_ctxt_create(ps_svcd_ctxt, pv_api_ip, pv_api_op);
2598*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2599*495ae853SAndroid Build Coastguard Worker {
2600*495ae853SAndroid Build Coastguard Worker return ret;
2601*495ae853SAndroid Build Coastguard Worker }
2602*495ae853SAndroid Build Coastguard Worker ret = isvcd_residual_resample_ctxt_create(ps_svcd_ctxt, pv_api_ip, pv_api_op);
2603*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2604*495ae853SAndroid Build Coastguard Worker {
2605*495ae853SAndroid Build Coastguard Worker return ret;
2606*495ae853SAndroid Build Coastguard Worker }
2607*495ae853SAndroid Build Coastguard Worker ret = isvcd_nal_parse_ctxt_create(ps_svcd_ctxt, pv_api_ip, pv_api_op);
2608*495ae853SAndroid Build Coastguard Worker if(ret != IV_SUCCESS)
2609*495ae853SAndroid Build Coastguard Worker {
2610*495ae853SAndroid Build Coastguard Worker return ret;
2611*495ae853SAndroid Build Coastguard Worker }
2612*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
2613*495ae853SAndroid Build Coastguard Worker {
2614*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
2615*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
2616*495ae853SAndroid Build Coastguard Worker
2617*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_svcd_ctxt = ps_svcd_ctxt;
2618*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_layer_id = u1_layer_id;
2619*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_dyadic_flag = 1;
2620*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_restricted_res_change_flag = 1;
2621*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_base_res_flag = 1;
2622*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_ref_layer_id = u1_layer_id - 1;
2623*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_dec_svc_ref_layer =
2624*495ae853SAndroid Build Coastguard Worker &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svc_lyr_dec->u1_ref_layer_id];
2625*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u4_pps_id_for_layer = UINT32_MAX;
2626*495ae853SAndroid Build Coastguard Worker
2627*495ae853SAndroid Build Coastguard Worker #ifndef LOGO_EN
2628*495ae853SAndroid Build Coastguard Worker ps_dec->u4_share_disp_buf = ps_create_ip->s_ivd_create_ip_t.u4_share_disp_buf;
2629*495ae853SAndroid Build Coastguard Worker #else
2630*495ae853SAndroid Build Coastguard Worker ps_dec->u4_share_disp_buf = 0;
2631*495ae853SAndroid Build Coastguard Worker #endif
2632*495ae853SAndroid Build Coastguard Worker
2633*495ae853SAndroid Build Coastguard Worker ps_dec->u1_chroma_format = (UWORD8) (ps_create_ip->s_ivd_create_ip_t.e_output_format);
2634*495ae853SAndroid Build Coastguard Worker
2635*495ae853SAndroid Build Coastguard Worker if((ps_dec->u1_chroma_format != IV_YUV_420P) &&
2636*495ae853SAndroid Build Coastguard Worker (ps_dec->u1_chroma_format != IV_YUV_420SP_UV) &&
2637*495ae853SAndroid Build Coastguard Worker (ps_dec->u1_chroma_format != IV_YUV_420SP_VU))
2638*495ae853SAndroid Build Coastguard Worker {
2639*495ae853SAndroid Build Coastguard Worker ps_dec->u4_share_disp_buf = 0;
2640*495ae853SAndroid Build Coastguard Worker }
2641*495ae853SAndroid Build Coastguard Worker
2642*495ae853SAndroid Build Coastguard Worker ps_dec->u1_enable_mb_info = ps_create_ip->u4_enable_frame_info;
2643*495ae853SAndroid Build Coastguard Worker ps_dec->pf_aligned_alloc = pf_aligned_alloc;
2644*495ae853SAndroid Build Coastguard Worker ps_dec->pf_aligned_free = pf_aligned_free;
2645*495ae853SAndroid Build Coastguard Worker ps_dec->pv_mem_ctxt = pv_mem_ctxt;
2646*495ae853SAndroid Build Coastguard Worker
2647*495ae853SAndroid Build Coastguard Worker ps_dec->ps_sps = ps_svcd_ctxt->ps_sps;
2648*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_subset_sps = ps_svcd_ctxt->ps_subset_sps;
2649*495ae853SAndroid Build Coastguard Worker ps_dec->ps_pps = ps_svcd_ctxt->ps_pps;
2650*495ae853SAndroid Build Coastguard Worker ps_dec->ps_sei = ps_svcd_ctxt->ps_sei;
2651*495ae853SAndroid Build Coastguard Worker ps_dec->ps_sei_parse = ps_svcd_ctxt->ps_sei_parse;
2652*495ae853SAndroid Build Coastguard Worker
2653*495ae853SAndroid Build Coastguard Worker size = ithread_get_handle_size();
2654*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2655*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2656*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2657*495ae853SAndroid Build Coastguard Worker ps_dec->pv_dec_thread_handle = pv_buf;
2658*495ae853SAndroid Build Coastguard Worker
2659*495ae853SAndroid Build Coastguard Worker size = ithread_get_handle_size();
2660*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2661*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2662*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2663*495ae853SAndroid Build Coastguard Worker ps_dec->pv_bs_deblk_thread_handle = pv_buf;
2664*495ae853SAndroid Build Coastguard Worker
2665*495ae853SAndroid Build Coastguard Worker #ifdef KEEP_THREADS_ACTIVE
2666*495ae853SAndroid Build Coastguard Worker {
2667*495ae853SAndroid Build Coastguard Worker UWORD32 i;
2668*495ae853SAndroid Build Coastguard Worker /* Request memory to hold mutex (start/done) for both threads */
2669*495ae853SAndroid Build Coastguard Worker size = ithread_get_mutex_lock_size() << 2;
2670*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 8, size);
2671*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2672*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2673*495ae853SAndroid Build Coastguard Worker
2674*495ae853SAndroid Build Coastguard Worker // init mutex variable for both the threads
2675*495ae853SAndroid Build Coastguard Worker // 1. ih264d_decode_picture_thread
2676*495ae853SAndroid Build Coastguard Worker // 2. ih264d_recon_deblk_thread
2677*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 2; i++)
2678*495ae853SAndroid Build Coastguard Worker {
2679*495ae853SAndroid Build Coastguard Worker WORD32 ret;
2680*495ae853SAndroid Build Coastguard Worker WORD32 mutex_size = ithread_get_mutex_lock_size();
2681*495ae853SAndroid Build Coastguard Worker
2682*495ae853SAndroid Build Coastguard Worker ps_dec->apv_proc_start_mutex[i] = (UWORD8 *) pv_buf + (2 * i * mutex_size);
2683*495ae853SAndroid Build Coastguard Worker ps_dec->apv_proc_done_mutex[i] = (UWORD8 *) pv_buf + ((2 * i + 1) * mutex_size);
2684*495ae853SAndroid Build Coastguard Worker
2685*495ae853SAndroid Build Coastguard Worker ret = ithread_mutex_init(ps_dec->apv_proc_start_mutex[0]);
2686*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IV_SUCCESS), ret);
2687*495ae853SAndroid Build Coastguard Worker
2688*495ae853SAndroid Build Coastguard Worker ret = ithread_mutex_init(ps_dec->apv_proc_done_mutex[i]);
2689*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IV_SUCCESS), ret);
2690*495ae853SAndroid Build Coastguard Worker }
2691*495ae853SAndroid Build Coastguard Worker
2692*495ae853SAndroid Build Coastguard Worker size = ithread_get_cond_struct_size() << 2;
2693*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 8, size);
2694*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2695*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2696*495ae853SAndroid Build Coastguard Worker
2697*495ae853SAndroid Build Coastguard Worker // init condition variable for both the threads
2698*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 2; i++)
2699*495ae853SAndroid Build Coastguard Worker {
2700*495ae853SAndroid Build Coastguard Worker WORD32 ret;
2701*495ae853SAndroid Build Coastguard Worker WORD32 cond_size = ithread_get_cond_struct_size();
2702*495ae853SAndroid Build Coastguard Worker ps_dec->apv_proc_start_condition[i] = (UWORD8 *) pv_buf + (2 * i * cond_size);
2703*495ae853SAndroid Build Coastguard Worker ps_dec->apv_proc_done_condition[i] = (UWORD8 *) pv_buf + ((2 * i + 1) * cond_size);
2704*495ae853SAndroid Build Coastguard Worker
2705*495ae853SAndroid Build Coastguard Worker ret = ithread_cond_init(ps_dec->apv_proc_start_condition[i]);
2706*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IV_SUCCESS), ret);
2707*495ae853SAndroid Build Coastguard Worker
2708*495ae853SAndroid Build Coastguard Worker ret = ithread_cond_init(ps_dec->apv_proc_done_condition[i]);
2709*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IV_SUCCESS), ret);
2710*495ae853SAndroid Build Coastguard Worker }
2711*495ae853SAndroid Build Coastguard Worker }
2712*495ae853SAndroid Build Coastguard Worker #endif
2713*495ae853SAndroid Build Coastguard Worker size = sizeof(dpb_manager_t);
2714*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2715*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2716*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2717*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr = pv_buf;
2718*495ae853SAndroid Build Coastguard Worker
2719*495ae853SAndroid Build Coastguard Worker size = sizeof(pred_info_t) * 2 * 32;
2720*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2721*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2722*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2723*495ae853SAndroid Build Coastguard Worker ps_dec->ps_pred = pv_buf;
2724*495ae853SAndroid Build Coastguard Worker
2725*495ae853SAndroid Build Coastguard Worker size = sizeof(disp_mgr_t);
2726*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2727*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2728*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2729*495ae853SAndroid Build Coastguard Worker ps_dec->pv_disp_buf_mgr = pv_buf;
2730*495ae853SAndroid Build Coastguard Worker
2731*495ae853SAndroid Build Coastguard Worker size = ih264_buf_mgr_size();
2732*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2733*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2734*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2735*495ae853SAndroid Build Coastguard Worker ps_dec->pv_pic_buf_mgr = pv_buf;
2736*495ae853SAndroid Build Coastguard Worker
2737*495ae853SAndroid Build Coastguard Worker size = sizeof(struct pic_buffer_t) * (H264_MAX_REF_PICS * 2);
2738*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2739*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2740*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2741*495ae853SAndroid Build Coastguard Worker ps_dec->ps_pic_buf_base = pv_buf;
2742*495ae853SAndroid Build Coastguard Worker
2743*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_err_status_t);
2744*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2745*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2746*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2747*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dec_err_status = (dec_err_status_t *) pv_buf;
2748*495ae853SAndroid Build Coastguard Worker
2749*495ae853SAndroid Build Coastguard Worker size = sizeof(dpb_commands_t);
2750*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2751*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2752*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2753*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_cmds = (dpb_commands_t *) pv_buf;
2754*495ae853SAndroid Build Coastguard Worker
2755*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_bit_stream_t);
2756*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2757*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2758*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2759*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm = (dec_bit_stream_t *) pv_buf;
2760*495ae853SAndroid Build Coastguard Worker
2761*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_nal_unit_svc_ext_params_t);
2762*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2763*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2764*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2765*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext = (dec_nal_unit_svc_ext_params_t *) pv_buf;
2766*495ae853SAndroid Build Coastguard Worker
2767*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_slice_params_t);
2768*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2769*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2770*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2771*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_slice = (dec_slice_params_t *) pv_buf;
2772*495ae853SAndroid Build Coastguard Worker
2773*495ae853SAndroid Build Coastguard Worker size = MAX(sizeof(dec_seq_params_t), sizeof(dec_pic_params_t));
2774*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2775*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2776*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2777*495ae853SAndroid Build Coastguard Worker ps_dec->pv_scratch_sps_pps = pv_buf;
2778*495ae853SAndroid Build Coastguard Worker
2779*495ae853SAndroid Build Coastguard Worker size = sizeof(dec_svc_seq_params_t);
2780*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2781*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2782*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2783*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pv_scratch_subset_sps = pv_buf;
2784*495ae853SAndroid Build Coastguard Worker
2785*495ae853SAndroid Build Coastguard Worker ps_dec->u4_static_bits_buf_size = 256000;
2786*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, ps_dec->u4_static_bits_buf_size);
2787*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2788*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, ps_dec->u4_static_bits_buf_size);
2789*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_bits_buf_static = pv_buf;
2790*495ae853SAndroid Build Coastguard Worker
2791*495ae853SAndroid Build Coastguard Worker size = ((TOTAL_LIST_ENTRIES + PAD_MAP_IDX_POC) * sizeof(void *));
2792*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2793*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2794*495ae853SAndroid Build Coastguard Worker ps_dec->ppv_map_ref_idx_to_poc_base = pv_buf;
2795*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ppv_map_ref_idx_to_poc_base, 0, size);
2796*495ae853SAndroid Build Coastguard Worker
2797*495ae853SAndroid Build Coastguard Worker ps_dec->ppv_map_ref_idx_to_poc = ps_dec->ppv_map_ref_idx_to_poc_base + OFFSET_MAP_IDX_POC;
2798*495ae853SAndroid Build Coastguard Worker
2799*495ae853SAndroid Build Coastguard Worker size = (sizeof(bin_ctxt_model_t) * NUM_CABAC_CTXTS_SVC);
2800*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2801*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2802*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2803*495ae853SAndroid Build Coastguard Worker ps_dec->p_cabac_ctxt_table_t = pv_buf;
2804*495ae853SAndroid Build Coastguard Worker
2805*495ae853SAndroid Build Coastguard Worker size = sizeof(ctxt_inc_mb_info_t);
2806*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2807*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2808*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2809*495ae853SAndroid Build Coastguard Worker ps_dec->ps_left_mb_ctxt_info = pv_buf;
2810*495ae853SAndroid Build Coastguard Worker
2811*495ae853SAndroid Build Coastguard Worker size = MAX_REF_BUF_SIZE * 2;
2812*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2813*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2814*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2815*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_ref_buff_base = pv_buf;
2816*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_ref_buff = ps_dec->pu1_ref_buff_base + MAX_REF_BUF_SIZE;
2817*495ae853SAndroid Build Coastguard Worker
2818*495ae853SAndroid Build Coastguard Worker size = ((sizeof(WORD16)) * PRED_BUFFER_WIDTH * PRED_BUFFER_HEIGHT * 2);
2819*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2820*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2821*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2822*495ae853SAndroid Build Coastguard Worker ps_dec->pi2_pred1 = pv_buf;
2823*495ae853SAndroid Build Coastguard Worker
2824*495ae853SAndroid Build Coastguard Worker size = sizeof(UWORD8) * (MB_LUM_SIZE);
2825*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2826*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2827*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2828*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_temp_mc_buffer = pv_buf;
2829*495ae853SAndroid Build Coastguard Worker
2830*495ae853SAndroid Build Coastguard Worker size = 8 * MAX_REF_BUFS * sizeof(struct pic_buffer_t);
2831*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2832*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2833*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2834*495ae853SAndroid Build Coastguard Worker
2835*495ae853SAndroid Build Coastguard Worker ps_dec->pu1_init_dpb_base = pv_buf;
2836*495ae853SAndroid Build Coastguard Worker pu1_buf = pv_buf;
2837*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->ps_init_dpb[0][0] = (struct pic_buffer_t *) pu1_buf;
2838*495ae853SAndroid Build Coastguard Worker
2839*495ae853SAndroid Build Coastguard Worker pu1_buf += size / 2;
2840*495ae853SAndroid Build Coastguard Worker ps_dec->ps_dpb_mgr->ps_init_dpb[1][0] = (struct pic_buffer_t *) pu1_buf;
2841*495ae853SAndroid Build Coastguard Worker
2842*495ae853SAndroid Build Coastguard Worker size = (sizeof(UWORD32) * 2 * 3 * ((MAX_FRAMES << 1) * (MAX_FRAMES << 1)) * 2);
2843*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2844*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2845*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2846*495ae853SAndroid Build Coastguard Worker ps_dec->pu4_mbaff_wt_mat = pv_buf;
2847*495ae853SAndroid Build Coastguard Worker
2848*495ae853SAndroid Build Coastguard Worker size = sizeof(UWORD32) * 2 * 3 * ((MAX_FRAMES << 1) * (MAX_FRAMES << 1));
2849*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2850*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2851*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2852*495ae853SAndroid Build Coastguard Worker ps_dec->pu4_wts_ofsts_mat = pv_buf;
2853*495ae853SAndroid Build Coastguard Worker
2854*495ae853SAndroid Build Coastguard Worker size = (sizeof(neighbouradd_t) << 2);
2855*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2856*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2857*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2858*495ae853SAndroid Build Coastguard Worker ps_dec->ps_left_mvpred_addr = pv_buf;
2859*495ae853SAndroid Build Coastguard Worker
2860*495ae853SAndroid Build Coastguard Worker size = ih264_buf_mgr_size();
2861*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2862*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2863*495ae853SAndroid Build Coastguard Worker memset(pv_buf, 0, size);
2864*495ae853SAndroid Build Coastguard Worker ps_dec->pv_mv_buf_mgr = pv_buf;
2865*495ae853SAndroid Build Coastguard Worker
2866*495ae853SAndroid Build Coastguard Worker size = sizeof(col_mv_buf_t) * (H264_MAX_REF_PICS * 2);
2867*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2868*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2869*495ae853SAndroid Build Coastguard Worker ps_dec->ps_col_mv_base = pv_buf;
2870*495ae853SAndroid Build Coastguard Worker memset(ps_dec->ps_col_mv_base, 0, size);
2871*495ae853SAndroid Build Coastguard Worker
2872*495ae853SAndroid Build Coastguard Worker size = ((MB_SIZE * MB_SIZE * 3) >> 1) + MB_SIZE;
2873*495ae853SAndroid Build Coastguard Worker pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
2874*495ae853SAndroid Build Coastguard Worker RETURN_IF((NULL == pv_buf), IV_FAIL);
2875*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pu1_ii_resamp_buffer_luma = pv_buf;
2876*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pu1_ii_resamp_buffer_chroma =
2877*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->pu1_ii_resamp_buffer_luma + (MB_SIZE * MB_SIZE);
2878*495ae853SAndroid Build Coastguard Worker memset(ps_svc_lyr_dec->pu1_ii_resamp_buffer_luma, 0, size);
2879*495ae853SAndroid Build Coastguard Worker
2880*495ae853SAndroid Build Coastguard Worker isvcd_init_decoder(ps_svc_lyr_dec);
2881*495ae853SAndroid Build Coastguard Worker }
2882*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
2883*495ae853SAndroid Build Coastguard Worker }
2884*495ae853SAndroid Build Coastguard Worker
2885*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2886*495ae853SAndroid Build Coastguard Worker /* */
2887*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_create */
2888*495ae853SAndroid Build Coastguard Worker /* */
2889*495ae853SAndroid Build Coastguard Worker /* Description : creates decoder */
2890*495ae853SAndroid Build Coastguard Worker /* */
2891*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
2892*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
2893*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
2894*495ae853SAndroid Build Coastguard Worker /* Outputs : */
2895*495ae853SAndroid Build Coastguard Worker /* Returns : void */
2896*495ae853SAndroid Build Coastguard Worker /* */
2897*495ae853SAndroid Build Coastguard Worker /* Issues : none */
2898*495ae853SAndroid Build Coastguard Worker /* */
2899*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2900*495ae853SAndroid Build Coastguard Worker /* */
2901*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2902*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore */
2903*495ae853SAndroid Build Coastguard Worker /* */
2904*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_create(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)2905*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_create(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
2906*495ae853SAndroid Build Coastguard Worker {
2907*495ae853SAndroid Build Coastguard Worker isvcd_create_ip_t *ps_create_ip;
2908*495ae853SAndroid Build Coastguard Worker isvcd_create_op_t *ps_create_op;
2909*495ae853SAndroid Build Coastguard Worker WORD32 ret;
2910*495ae853SAndroid Build Coastguard Worker
2911*495ae853SAndroid Build Coastguard Worker ps_create_ip = (isvcd_create_ip_t *) pv_api_ip;
2912*495ae853SAndroid Build Coastguard Worker ps_create_op = (isvcd_create_op_t *) pv_api_op;
2913*495ae853SAndroid Build Coastguard Worker
2914*495ae853SAndroid Build Coastguard Worker ps_create_op->s_ivd_create_op_t.u4_error_code = 0;
2915*495ae853SAndroid Build Coastguard Worker dec_hdl = NULL;
2916*495ae853SAndroid Build Coastguard Worker ret = isvcd_allocate_static_bufs(&dec_hdl, pv_api_ip, pv_api_op);
2917*495ae853SAndroid Build Coastguard Worker
2918*495ae853SAndroid Build Coastguard Worker /* If allocation of some buffer fails, then free buffers allocated till then */
2919*495ae853SAndroid Build Coastguard Worker if(IV_FAIL == ret)
2920*495ae853SAndroid Build Coastguard Worker {
2921*495ae853SAndroid Build Coastguard Worker if(dec_hdl)
2922*495ae853SAndroid Build Coastguard Worker {
2923*495ae853SAndroid Build Coastguard Worker if(dec_hdl->pv_codec_handle)
2924*495ae853SAndroid Build Coastguard Worker {
2925*495ae853SAndroid Build Coastguard Worker isvcd_free_static_bufs(dec_hdl);
2926*495ae853SAndroid Build Coastguard Worker }
2927*495ae853SAndroid Build Coastguard Worker else
2928*495ae853SAndroid Build Coastguard Worker {
2929*495ae853SAndroid Build Coastguard Worker void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
2930*495ae853SAndroid Build Coastguard Worker void *pv_mem_ctxt;
2931*495ae853SAndroid Build Coastguard Worker
2932*495ae853SAndroid Build Coastguard Worker pf_aligned_free = ps_create_ip->s_ivd_create_ip_t.pf_aligned_free;
2933*495ae853SAndroid Build Coastguard Worker pv_mem_ctxt = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
2934*495ae853SAndroid Build Coastguard Worker pf_aligned_free(pv_mem_ctxt, dec_hdl);
2935*495ae853SAndroid Build Coastguard Worker }
2936*495ae853SAndroid Build Coastguard Worker }
2937*495ae853SAndroid Build Coastguard Worker ps_create_op->s_ivd_create_op_t.u4_error_code = IVD_MEM_ALLOC_FAILED;
2938*495ae853SAndroid Build Coastguard Worker ps_create_op->s_ivd_create_op_t.u4_error_code |= 1 << IVD_FATALERROR;
2939*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
2940*495ae853SAndroid Build Coastguard Worker }
2941*495ae853SAndroid Build Coastguard Worker
2942*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
2943*495ae853SAndroid Build Coastguard Worker }
2944*495ae853SAndroid Build Coastguard Worker
2945*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2946*495ae853SAndroid Build Coastguard Worker /* */
2947*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_update_dqid */
2948*495ae853SAndroid Build Coastguard Worker /* */
2949*495ae853SAndroid Build Coastguard Worker /* Description : Updates the DQID list based on reference layer DQID */
2950*495ae853SAndroid Build Coastguard Worker /* */
2951*495ae853SAndroid Build Coastguard Worker /* */
2952*495ae853SAndroid Build Coastguard Worker /* Inputs : 1. Reference layer DQID */
2953*495ae853SAndroid Build Coastguard Worker /* 2. current layer's vcl node structure */
2954*495ae853SAndroid Build Coastguard Worker /* 3. pointer to store the bottom layer VCL node */
2955*495ae853SAndroid Build Coastguard Worker /* Globals : None */
2956*495ae853SAndroid Build Coastguard Worker /* Processing : 1. Searches for a layer with reference layer DQID */
2957*495ae853SAndroid Build Coastguard Worker /* 2. Updates the bottom and top nodes of current layer and */
2958*495ae853SAndroid Build Coastguard Worker /* reference layer vcl nodes respectively */
2959*495ae853SAndroid Build Coastguard Worker /* */
2960*495ae853SAndroid Build Coastguard Worker /* Outputs : Updates top and bottom node field of vcl nodes of current*/
2961*495ae853SAndroid Build Coastguard Worker /* layer and reference layer respectively */
2962*495ae853SAndroid Build Coastguard Worker /* Returns : status */
2963*495ae853SAndroid Build Coastguard Worker /* */
2964*495ae853SAndroid Build Coastguard Worker /* Issues : None */
2965*495ae853SAndroid Build Coastguard Worker /* */
2966*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2967*495ae853SAndroid Build Coastguard Worker /* */
2968*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2969*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Vijay Draft */
2970*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_update_dqid(WORD32 i4_ref_lyr_dqid,vcl_node_t * ps_cur_lyr_node,vcl_node_t ** pps_bot_lyr_node)2971*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_update_dqid(WORD32 i4_ref_lyr_dqid, vcl_node_t *ps_cur_lyr_node,
2972*495ae853SAndroid Build Coastguard Worker vcl_node_t **pps_bot_lyr_node)
2973*495ae853SAndroid Build Coastguard Worker {
2974*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_vcl_node;
2975*495ae853SAndroid Build Coastguard Worker
2976*495ae853SAndroid Build Coastguard Worker /* sanity checks */
2977*495ae853SAndroid Build Coastguard Worker if((NULL == ps_cur_lyr_node) || (NULL == pps_bot_lyr_node))
2978*495ae853SAndroid Build Coastguard Worker {
2979*495ae853SAndroid Build Coastguard Worker return NOT_OK;
2980*495ae853SAndroid Build Coastguard Worker }
2981*495ae853SAndroid Build Coastguard Worker
2982*495ae853SAndroid Build Coastguard Worker ps_vcl_node = ps_cur_lyr_node->ps_bot_node;
2983*495ae853SAndroid Build Coastguard Worker while(NULL != ps_vcl_node)
2984*495ae853SAndroid Build Coastguard Worker {
2985*495ae853SAndroid Build Coastguard Worker WORD32 i4_dqid;
2986*495ae853SAndroid Build Coastguard Worker
2987*495ae853SAndroid Build Coastguard Worker i4_dqid = (ps_vcl_node->i4_dependency_id << 4) + ps_vcl_node->i4_quality_id;
2988*495ae853SAndroid Build Coastguard Worker
2989*495ae853SAndroid Build Coastguard Worker /* if reference layer DQ ID matches */
2990*495ae853SAndroid Build Coastguard Worker /* or reference layer is a layer below reference dq id layer */
2991*495ae853SAndroid Build Coastguard Worker if((i4_dqid == i4_ref_lyr_dqid) ||
2992*495ae853SAndroid Build Coastguard Worker (ps_vcl_node->i4_quality_id < (i4_ref_lyr_dqid & 0x0F)) ||
2993*495ae853SAndroid Build Coastguard Worker (ps_vcl_node->i4_dependency_id < (i4_ref_lyr_dqid >> 4)))
2994*495ae853SAndroid Build Coastguard Worker {
2995*495ae853SAndroid Build Coastguard Worker break;
2996*495ae853SAndroid Build Coastguard Worker }
2997*495ae853SAndroid Build Coastguard Worker ps_vcl_node = ps_vcl_node->ps_bot_node;
2998*495ae853SAndroid Build Coastguard Worker }
2999*495ae853SAndroid Build Coastguard Worker
3000*495ae853SAndroid Build Coastguard Worker /* Update the top and bottom node of ref layer and current layer nodes */
3001*495ae853SAndroid Build Coastguard Worker
3002*495ae853SAndroid Build Coastguard Worker if(NULL != ps_vcl_node)
3003*495ae853SAndroid Build Coastguard Worker {
3004*495ae853SAndroid Build Coastguard Worker ps_cur_lyr_node->ps_bot_node = ps_vcl_node;
3005*495ae853SAndroid Build Coastguard Worker ps_vcl_node->ps_top_node = ps_cur_lyr_node;
3006*495ae853SAndroid Build Coastguard Worker }
3007*495ae853SAndroid Build Coastguard Worker
3008*495ae853SAndroid Build Coastguard Worker /* Update pointer to bottom VCL node */
3009*495ae853SAndroid Build Coastguard Worker *pps_bot_lyr_node = ps_vcl_node;
3010*495ae853SAndroid Build Coastguard Worker return (OK);
3011*495ae853SAndroid Build Coastguard Worker }
3012*495ae853SAndroid Build Coastguard Worker
3013*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3014*495ae853SAndroid Build Coastguard Worker /* */
3015*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_detect_res_change */
3016*495ae853SAndroid Build Coastguard Worker /* */
3017*495ae853SAndroid Build Coastguard Worker /* Description : This function detects the resolution change */
3018*495ae853SAndroid Build Coastguard Worker /* */
3019*495ae853SAndroid Build Coastguard Worker /* */
3020*495ae853SAndroid Build Coastguard Worker /* Inputs : 1. Pointer to Current SPS */
3021*495ae853SAndroid Build Coastguard Worker /* 2. Pointer to prevoius SPS */
3022*495ae853SAndroid Build Coastguard Worker /* Globals : None */
3023*495ae853SAndroid Build Coastguard Worker /* Processing : */
3024*495ae853SAndroid Build Coastguard Worker /* */
3025*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
3026*495ae853SAndroid Build Coastguard Worker /* Returns : SVCD_TRUE if different resolution else SVCD_FALSE */
3027*495ae853SAndroid Build Coastguard Worker /* */
3028*495ae853SAndroid Build Coastguard Worker /* Issues : none */
3029*495ae853SAndroid Build Coastguard Worker /* */
3030*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3031*495ae853SAndroid Build Coastguard Worker /* */
3032*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3033*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Vijayakumar Draft */
3034*495ae853SAndroid Build Coastguard Worker /* */
3035*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_detect_res_change(dec_seq_params_t * ps_curr_sps,dec_seq_params_t * ps_prev_sps,dec_svc_seq_params_t * ps_curr_subset_sps,dec_svc_seq_params_t * ps_prev_subset_sps)3036*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_detect_res_change(dec_seq_params_t *ps_curr_sps, dec_seq_params_t *ps_prev_sps,
3037*495ae853SAndroid Build Coastguard Worker dec_svc_seq_params_t *ps_curr_subset_sps,
3038*495ae853SAndroid Build Coastguard Worker dec_svc_seq_params_t *ps_prev_subset_sps)
3039*495ae853SAndroid Build Coastguard Worker {
3040*495ae853SAndroid Build Coastguard Worker UWORD16 u2_scaled_ref_width_sps;
3041*495ae853SAndroid Build Coastguard Worker UWORD16 u2_scaled_ref_ht_sps;
3042*495ae853SAndroid Build Coastguard Worker UNUSED(ps_prev_subset_sps);
3043*495ae853SAndroid Build Coastguard Worker
3044*495ae853SAndroid Build Coastguard Worker if(NULL == ps_prev_sps)
3045*495ae853SAndroid Build Coastguard Worker {
3046*495ae853SAndroid Build Coastguard Worker /* indicates bottom most layer in Access unit */
3047*495ae853SAndroid Build Coastguard Worker return (SVCD_FALSE);
3048*495ae853SAndroid Build Coastguard Worker }
3049*495ae853SAndroid Build Coastguard Worker /* Check for the ESS idc */
3050*495ae853SAndroid Build Coastguard Worker if(2 == ps_curr_subset_sps->s_sps_svc_ext.u1_extended_spatial_scalability_idc)
3051*495ae853SAndroid Build Coastguard Worker {
3052*495ae853SAndroid Build Coastguard Worker return (SVCD_TRUE);
3053*495ae853SAndroid Build Coastguard Worker }
3054*495ae853SAndroid Build Coastguard Worker
3055*495ae853SAndroid Build Coastguard Worker /* Calculate the scaled reference width and height */
3056*495ae853SAndroid Build Coastguard Worker u2_scaled_ref_width_sps = (ps_curr_sps->u2_frm_wd_in_mbs << 4);
3057*495ae853SAndroid Build Coastguard Worker u2_scaled_ref_width_sps -=
3058*495ae853SAndroid Build Coastguard Worker (ps_curr_subset_sps->s_sps_svc_ext.i4_seq_scaled_ref_layer_left_offset +
3059*495ae853SAndroid Build Coastguard Worker ps_curr_subset_sps->s_sps_svc_ext.i4_seq_scaled_ref_layer_right_offset);
3060*495ae853SAndroid Build Coastguard Worker
3061*495ae853SAndroid Build Coastguard Worker u2_scaled_ref_ht_sps = (ps_curr_sps->u2_frm_ht_in_mbs << 4);
3062*495ae853SAndroid Build Coastguard Worker u2_scaled_ref_ht_sps -=
3063*495ae853SAndroid Build Coastguard Worker (ps_curr_subset_sps->s_sps_svc_ext.i4_seq_scaled_ref_layer_top_offset +
3064*495ae853SAndroid Build Coastguard Worker ps_curr_subset_sps->s_sps_svc_ext.i4_seq_scaled_ref_layer_bottom_offset);
3065*495ae853SAndroid Build Coastguard Worker
3066*495ae853SAndroid Build Coastguard Worker /* Check for frame width being different */
3067*495ae853SAndroid Build Coastguard Worker if(u2_scaled_ref_width_sps != (ps_prev_sps->u2_frm_wd_in_mbs << 4))
3068*495ae853SAndroid Build Coastguard Worker {
3069*495ae853SAndroid Build Coastguard Worker return (SVCD_TRUE);
3070*495ae853SAndroid Build Coastguard Worker }
3071*495ae853SAndroid Build Coastguard Worker
3072*495ae853SAndroid Build Coastguard Worker /* Check for frame height being different */
3073*495ae853SAndroid Build Coastguard Worker if(u2_scaled_ref_ht_sps != (ps_prev_sps->u2_frm_ht_in_mbs << 4))
3074*495ae853SAndroid Build Coastguard Worker {
3075*495ae853SAndroid Build Coastguard Worker return (SVCD_TRUE);
3076*495ae853SAndroid Build Coastguard Worker }
3077*495ae853SAndroid Build Coastguard Worker
3078*495ae853SAndroid Build Coastguard Worker /* check for crop offset not MB aligned */
3079*495ae853SAndroid Build Coastguard Worker if((0 != (ps_curr_subset_sps->s_sps_svc_ext.i4_seq_scaled_ref_layer_left_offset & 15)) ||
3080*495ae853SAndroid Build Coastguard Worker (0 != (ps_curr_subset_sps->s_sps_svc_ext.i4_seq_scaled_ref_layer_top_offset & 15)))
3081*495ae853SAndroid Build Coastguard Worker {
3082*495ae853SAndroid Build Coastguard Worker return (SVCD_TRUE);
3083*495ae853SAndroid Build Coastguard Worker }
3084*495ae853SAndroid Build Coastguard Worker
3085*495ae853SAndroid Build Coastguard Worker /* check for chroma Phase Y being different */
3086*495ae853SAndroid Build Coastguard Worker if(ps_curr_subset_sps->s_sps_svc_ext.u1_chroma_phase_x_plus1_flag !=
3087*495ae853SAndroid Build Coastguard Worker ps_curr_subset_sps->s_sps_svc_ext.u1_seq_ref_layer_chroma_phase_x_plus1_flag)
3088*495ae853SAndroid Build Coastguard Worker {
3089*495ae853SAndroid Build Coastguard Worker return (SVCD_TRUE);
3090*495ae853SAndroid Build Coastguard Worker }
3091*495ae853SAndroid Build Coastguard Worker
3092*495ae853SAndroid Build Coastguard Worker /* check for chroma Phase Y being different */
3093*495ae853SAndroid Build Coastguard Worker if(ps_curr_subset_sps->s_sps_svc_ext.u1_chroma_phase_y_plus1 !=
3094*495ae853SAndroid Build Coastguard Worker ps_curr_subset_sps->s_sps_svc_ext.u1_seq_ref_layer_chroma_phase_y_plus1)
3095*495ae853SAndroid Build Coastguard Worker {
3096*495ae853SAndroid Build Coastguard Worker return (SVCD_TRUE);
3097*495ae853SAndroid Build Coastguard Worker }
3098*495ae853SAndroid Build Coastguard Worker
3099*495ae853SAndroid Build Coastguard Worker /* If none of the above are true then there is no resolution change */
3100*495ae853SAndroid Build Coastguard Worker return (SVCD_FALSE);
3101*495ae853SAndroid Build Coastguard Worker }
3102*495ae853SAndroid Build Coastguard Worker
3103*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3104*495ae853SAndroid Build Coastguard Worker /* */
3105*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_parse_ref_pic_list_modify */
3106*495ae853SAndroid Build Coastguard Worker /* */
3107*495ae853SAndroid Build Coastguard Worker /* Description : Parses the reference picture modification related */
3108*495ae853SAndroid Build Coastguard Worker /* syntax elements */
3109*495ae853SAndroid Build Coastguard Worker /* */
3110*495ae853SAndroid Build Coastguard Worker /* Inputs : 1. stream context structure */
3111*495ae853SAndroid Build Coastguard Worker /* 2. slice prms structure */
3112*495ae853SAndroid Build Coastguard Worker /* Globals : None */
3113*495ae853SAndroid Build Coastguard Worker /* Processing : Parses the syntax elements */
3114*495ae853SAndroid Build Coastguard Worker /* */
3115*495ae853SAndroid Build Coastguard Worker /* Outputs : Updated stream buffer context */
3116*495ae853SAndroid Build Coastguard Worker /* Returns : status */
3117*495ae853SAndroid Build Coastguard Worker /* */
3118*495ae853SAndroid Build Coastguard Worker /* Issues : None */
3119*495ae853SAndroid Build Coastguard Worker /* */
3120*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3121*495ae853SAndroid Build Coastguard Worker /* */
3122*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3123*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Vijay Draft */
3124*495ae853SAndroid Build Coastguard Worker /* */
3125*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_parse_ref_pic_list_modify(dec_bit_stream_t * ps_bitstrm,dec_slice_params_t * ps_slice_prms,dec_seq_params_t * ps_curr_sps)3126*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_parse_ref_pic_list_modify(dec_bit_stream_t *ps_bitstrm,
3127*495ae853SAndroid Build Coastguard Worker dec_slice_params_t *ps_slice_prms,
3128*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_curr_sps)
3129*495ae853SAndroid Build Coastguard Worker {
3130*495ae853SAndroid Build Coastguard Worker WORD32 i4_mod_flag;
3131*495ae853SAndroid Build Coastguard Worker UWORD16 ui_nextUev;
3132*495ae853SAndroid Build Coastguard Worker WORD32 i4_num_sets_ctr = 0;
3133*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
3134*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
3135*495ae853SAndroid Build Coastguard Worker
3136*495ae853SAndroid Build Coastguard Worker if(I_SLICE != ps_slice_prms->u1_slice_type)
3137*495ae853SAndroid Build Coastguard Worker {
3138*495ae853SAndroid Build Coastguard Worker /* ref_pic_list_modification_flag_l0 */
3139*495ae853SAndroid Build Coastguard Worker i4_mod_flag = ih264d_get_bit_h264(ps_bitstrm);
3140*495ae853SAndroid Build Coastguard Worker
3141*495ae853SAndroid Build Coastguard Worker if(0 != i4_mod_flag)
3142*495ae853SAndroid Build Coastguard Worker {
3143*495ae853SAndroid Build Coastguard Worker WORD32 i4_mod_pic_num_idc;
3144*495ae853SAndroid Build Coastguard Worker
3145*495ae853SAndroid Build Coastguard Worker i4_num_sets_ctr = 0;
3146*495ae853SAndroid Build Coastguard Worker do
3147*495ae853SAndroid Build Coastguard Worker {
3148*495ae853SAndroid Build Coastguard Worker /* modification_of_pic_nums_idc */
3149*495ae853SAndroid Build Coastguard Worker i4_mod_pic_num_idc = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3150*495ae853SAndroid Build Coastguard Worker
3151*495ae853SAndroid Build Coastguard Worker if((i4_mod_pic_num_idc > 3) || (i4_mod_pic_num_idc < 0))
3152*495ae853SAndroid Build Coastguard Worker {
3153*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3154*495ae853SAndroid Build Coastguard Worker }
3155*495ae853SAndroid Build Coastguard Worker if(3 != i4_mod_pic_num_idc)
3156*495ae853SAndroid Build Coastguard Worker {
3157*495ae853SAndroid Build Coastguard Worker /* i4_mod_pic_num_idc = 0,1 ==> abs_diff_pic_num_minus1 */
3158*495ae853SAndroid Build Coastguard Worker /* i4_mod_pic_num_idc = 2 ==> long_term_pic_num */
3159*495ae853SAndroid Build Coastguard Worker
3160*495ae853SAndroid Build Coastguard Worker ui_nextUev = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3161*495ae853SAndroid Build Coastguard Worker if(ui_nextUev > (ps_curr_sps->u2_u4_max_pic_num_minus1 + 1))
3162*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3163*495ae853SAndroid Build Coastguard Worker }
3164*495ae853SAndroid Build Coastguard Worker
3165*495ae853SAndroid Build Coastguard Worker i4_num_sets_ctr++;
3166*495ae853SAndroid Build Coastguard Worker
3167*495ae853SAndroid Build Coastguard Worker /* if the number of commands recieved exceeds max limit */
3168*495ae853SAndroid Build Coastguard Worker if((H264_MAX_REF_PICS) == i4_num_sets_ctr) break;
3169*495ae853SAndroid Build Coastguard Worker
3170*495ae853SAndroid Build Coastguard Worker } while(3 != i4_mod_pic_num_idc);
3171*495ae853SAndroid Build Coastguard Worker }
3172*495ae853SAndroid Build Coastguard Worker
3173*495ae853SAndroid Build Coastguard Worker /*********** if (I_SLICE != u1_slice_type) ***************************/
3174*495ae853SAndroid Build Coastguard Worker }
3175*495ae853SAndroid Build Coastguard Worker
3176*495ae853SAndroid Build Coastguard Worker if(B_SLICE != ps_slice_prms->u1_slice_type)
3177*495ae853SAndroid Build Coastguard Worker {
3178*495ae853SAndroid Build Coastguard Worker return (OK);
3179*495ae853SAndroid Build Coastguard Worker }
3180*495ae853SAndroid Build Coastguard Worker
3181*495ae853SAndroid Build Coastguard Worker /* ref_pic_list_modification_flag_l1 */
3182*495ae853SAndroid Build Coastguard Worker i4_mod_flag = ih264d_get_bit_h264(ps_bitstrm);
3183*495ae853SAndroid Build Coastguard Worker
3184*495ae853SAndroid Build Coastguard Worker if(0 != i4_mod_flag)
3185*495ae853SAndroid Build Coastguard Worker {
3186*495ae853SAndroid Build Coastguard Worker WORD32 i4_mod_pic_num_idc;
3187*495ae853SAndroid Build Coastguard Worker
3188*495ae853SAndroid Build Coastguard Worker do
3189*495ae853SAndroid Build Coastguard Worker {
3190*495ae853SAndroid Build Coastguard Worker /* modification_of_pic_nums_idc */
3191*495ae853SAndroid Build Coastguard Worker i4_mod_pic_num_idc = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3192*495ae853SAndroid Build Coastguard Worker
3193*495ae853SAndroid Build Coastguard Worker if((i4_mod_pic_num_idc > 3) || (i4_mod_pic_num_idc < 0))
3194*495ae853SAndroid Build Coastguard Worker {
3195*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3196*495ae853SAndroid Build Coastguard Worker }
3197*495ae853SAndroid Build Coastguard Worker if(3 != i4_mod_pic_num_idc)
3198*495ae853SAndroid Build Coastguard Worker {
3199*495ae853SAndroid Build Coastguard Worker /* i4_mod_pic_num_idc = 0,1 ==> abs_diff_pic_num_minus1 */
3200*495ae853SAndroid Build Coastguard Worker /* i4_mod_pic_num_idc = 2 ==> long_term_pic_num */
3201*495ae853SAndroid Build Coastguard Worker
3202*495ae853SAndroid Build Coastguard Worker ui_nextUev = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3203*495ae853SAndroid Build Coastguard Worker if(ui_nextUev > (ps_curr_sps->u2_u4_max_pic_num_minus1 + 1))
3204*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3205*495ae853SAndroid Build Coastguard Worker }
3206*495ae853SAndroid Build Coastguard Worker
3207*495ae853SAndroid Build Coastguard Worker i4_num_sets_ctr++;
3208*495ae853SAndroid Build Coastguard Worker
3209*495ae853SAndroid Build Coastguard Worker /* if the number of commands recieved exceeds max limit */
3210*495ae853SAndroid Build Coastguard Worker if((H264_MAX_REF_PICS) == i4_num_sets_ctr) break;
3211*495ae853SAndroid Build Coastguard Worker
3212*495ae853SAndroid Build Coastguard Worker } while(3 != i4_mod_pic_num_idc);
3213*495ae853SAndroid Build Coastguard Worker }
3214*495ae853SAndroid Build Coastguard Worker
3215*495ae853SAndroid Build Coastguard Worker return (OK);
3216*495ae853SAndroid Build Coastguard Worker }
3217*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3218*495ae853SAndroid Build Coastguard Worker /* */
3219*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_parse_slice_hdr_refdq_id */
3220*495ae853SAndroid Build Coastguard Worker /* */
3221*495ae853SAndroid Build Coastguard Worker /* Description : this function decodes the slice until Inter layer deblk */
3222*495ae853SAndroid Build Coastguard Worker /* parameters are parsed */
3223*495ae853SAndroid Build Coastguard Worker /* */
3224*495ae853SAndroid Build Coastguard Worker /* Inputs : 1. pointer to VCL node of given layer */
3225*495ae853SAndroid Build Coastguard Worker /* 2. pointer toi slice params structure */
3226*495ae853SAndroid Build Coastguard Worker /* 3. pointer to layer params strcuture */
3227*495ae853SAndroid Build Coastguard Worker /* 4. pointer to stream context structure */
3228*495ae853SAndroid Build Coastguard Worker /* 5. pointer to store the reference DQID */
3229*495ae853SAndroid Build Coastguard Worker /* 6. pointer to array of SPS */
3230*495ae853SAndroid Build Coastguard Worker /* 7. pointer to array of PPS */
3231*495ae853SAndroid Build Coastguard Worker /* 8. no inter layer pred flag of current slice */
3232*495ae853SAndroid Build Coastguard Worker /* Globals : none */
3233*495ae853SAndroid Build Coastguard Worker /* Processing : prases syntax elements */
3234*495ae853SAndroid Build Coastguard Worker /* */
3235*495ae853SAndroid Build Coastguard Worker /* Outputs : reference layer DQ ID */
3236*495ae853SAndroid Build Coastguard Worker /* Returns : Error code */
3237*495ae853SAndroid Build Coastguard Worker /* */
3238*495ae853SAndroid Build Coastguard Worker /* Issues : none */
3239*495ae853SAndroid Build Coastguard Worker /* */
3240*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3241*495ae853SAndroid Build Coastguard Worker /* */
3242*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3243*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 vijayakumar creation */
3244*495ae853SAndroid Build Coastguard Worker /* */
3245*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_parse_slice_hdr_refdq_id(vcl_node_t * ps_vcl_node,dec_slice_params_t * ps_slice_prms,dec_bit_stream_t * ps_bitstrm,WORD32 * pi4_ref_dq_id,dec_seq_params_t * ps_sps,dec_pic_params_t * ps_pps,WORD32 i4_no_int_lyr_pred,svc_dec_ctxt_t * ps_svcd_ctxt)3246*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_parse_slice_hdr_refdq_id(vcl_node_t *ps_vcl_node, dec_slice_params_t *ps_slice_prms,
3247*495ae853SAndroid Build Coastguard Worker dec_bit_stream_t *ps_bitstrm, WORD32 *pi4_ref_dq_id,
3248*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_sps, dec_pic_params_t *ps_pps,
3249*495ae853SAndroid Build Coastguard Worker WORD32 i4_no_int_lyr_pred, svc_dec_ctxt_t *ps_svcd_ctxt)
3250*495ae853SAndroid Build Coastguard Worker {
3251*495ae853SAndroid Build Coastguard Worker UWORD8 u1_pps_id;
3252*495ae853SAndroid Build Coastguard Worker WORD32 i_temp;
3253*495ae853SAndroid Build Coastguard Worker UWORD32 u4_temp;
3254*495ae853SAndroid Build Coastguard Worker WORD32 i4_nal_unit_type;
3255*495ae853SAndroid Build Coastguard Worker WORD32 i4_nal_ref_idc, i4_quality_id;
3256*495ae853SAndroid Build Coastguard Worker WORD32 i4_use_ref_base, i4_idr_pic_flag;
3257*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
3258*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
3259*495ae853SAndroid Build Coastguard Worker dec_svc_seq_params_t *ps_subset_sps = NULL;
3260*495ae853SAndroid Build Coastguard Worker WORD32 ret = OK;
3261*495ae853SAndroid Build Coastguard Worker
3262*495ae853SAndroid Build Coastguard Worker i4_nal_unit_type = ps_vcl_node->i4_nal_unit_type;
3263*495ae853SAndroid Build Coastguard Worker i4_nal_ref_idc = ps_vcl_node->i4_nal_ref_idc;
3264*495ae853SAndroid Build Coastguard Worker i4_quality_id = ps_vcl_node->i4_quality_id;
3265*495ae853SAndroid Build Coastguard Worker i4_use_ref_base = ps_vcl_node->i4_use_ref_base;
3266*495ae853SAndroid Build Coastguard Worker i4_idr_pic_flag = ps_vcl_node->i4_idr_pic_flag;
3267*495ae853SAndroid Build Coastguard Worker
3268*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3269*495ae853SAndroid Build Coastguard Worker /*--------------------- first mb in slice -------------------------------*/
3270*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3271*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u2_first_mb_in_slice = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3272*495ae853SAndroid Build Coastguard Worker
3273*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3274*495ae853SAndroid Build Coastguard Worker /*---------------------------- slice type -------------------------------*/
3275*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3276*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_slice_type = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3277*495ae853SAndroid Build Coastguard Worker if(ps_slice_prms->u1_slice_type > 4)
3278*495ae853SAndroid Build Coastguard Worker {
3279*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_slice_type -= 5;
3280*495ae853SAndroid Build Coastguard Worker }
3281*495ae853SAndroid Build Coastguard Worker
3282*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3283*495ae853SAndroid Build Coastguard Worker /*----------------------------- PPS id ----------------------------------*/
3284*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3285*495ae853SAndroid Build Coastguard Worker u1_pps_id = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3286*495ae853SAndroid Build Coastguard Worker
3287*495ae853SAndroid Build Coastguard Worker /* set correspoding sps and pps id also */
3288*495ae853SAndroid Build Coastguard Worker ps_pps += u1_pps_id;
3289*495ae853SAndroid Build Coastguard Worker if(FALSE == ps_pps->u1_is_valid)
3290*495ae853SAndroid Build Coastguard Worker {
3291*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3292*495ae853SAndroid Build Coastguard Worker }
3293*495ae853SAndroid Build Coastguard Worker ps_sps = ps_pps->ps_sps;
3294*495ae853SAndroid Build Coastguard Worker ps_subset_sps = &ps_svcd_ctxt->ps_subset_sps[ps_sps->u1_seq_parameter_set_id];
3295*495ae853SAndroid Build Coastguard Worker if(CODED_SLICE_EXTENSION_NAL == i4_nal_unit_type)
3296*495ae853SAndroid Build Coastguard Worker {
3297*495ae853SAndroid Build Coastguard Worker ps_sps += MAX_NUM_SEQ_PARAMS;
3298*495ae853SAndroid Build Coastguard Worker ps_subset_sps =
3299*495ae853SAndroid Build Coastguard Worker &ps_svcd_ctxt->ps_subset_sps[MAX_NUM_SEQ_PARAMS + ps_sps->u1_seq_parameter_set_id];
3300*495ae853SAndroid Build Coastguard Worker }
3301*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3302*495ae853SAndroid Build Coastguard Worker /*--------------------------- frm num -----------------------------------*/
3303*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3304*495ae853SAndroid Build Coastguard Worker if(!ps_sps) return ERROR_INV_SLICE_HDR_T;
3305*495ae853SAndroid Build Coastguard Worker if(FALSE == ps_sps->u1_is_valid) return ERROR_INV_SLICE_HDR_T;
3306*495ae853SAndroid Build Coastguard Worker
3307*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u2_frame_num = ih264d_get_bits_h264(ps_bitstrm, ps_sps->u1_bits_in_frm_num);
3308*495ae853SAndroid Build Coastguard Worker
3309*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3310*495ae853SAndroid Build Coastguard Worker /*------------------ field pic flag and bottom field flag ---------------*/
3311*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3312*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE != ps_sps->u1_frame_mbs_only_flag)
3313*495ae853SAndroid Build Coastguard Worker {
3314*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3315*495ae853SAndroid Build Coastguard Worker }
3316*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3317*495ae853SAndroid Build Coastguard Worker /*--------------------------- IDR pic id --------------------------------*/
3318*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3319*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_idr_pic_flag)
3320*495ae853SAndroid Build Coastguard Worker {
3321*495ae853SAndroid Build Coastguard Worker UWORD32 u4_idr_pic_id = 0;
3322*495ae853SAndroid Build Coastguard Worker u4_idr_pic_id = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3323*495ae853SAndroid Build Coastguard Worker if(u4_idr_pic_id > 65535) return ERROR_INV_SLICE_HDR_T;
3324*495ae853SAndroid Build Coastguard Worker }
3325*495ae853SAndroid Build Coastguard Worker
3326*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3327*495ae853SAndroid Build Coastguard Worker /*----------------- poc lsb and delts_poc_bottom ------------------------*/
3328*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3329*495ae853SAndroid Build Coastguard Worker if(0 == ps_sps->u1_pic_order_cnt_type)
3330*495ae853SAndroid Build Coastguard Worker {
3331*495ae853SAndroid Build Coastguard Worker i_temp = ih264d_get_bits_h264(ps_bitstrm, ps_sps->u1_log2_max_pic_order_cnt_lsb_minus);
3332*495ae853SAndroid Build Coastguard Worker
3333*495ae853SAndroid Build Coastguard Worker if(i_temp < 0 || i_temp >= ps_sps->i4_max_pic_order_cntLsb) return ERROR_INV_SLICE_HDR_T;
3334*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == ps_pps->u1_pic_order_present_flag)
3335*495ae853SAndroid Build Coastguard Worker {
3336*495ae853SAndroid Build Coastguard Worker i_temp = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3337*495ae853SAndroid Build Coastguard Worker }
3338*495ae853SAndroid Build Coastguard Worker }
3339*495ae853SAndroid Build Coastguard Worker
3340*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3341*495ae853SAndroid Build Coastguard Worker /*---------------- delta_poc_count[0] and [1] ---------------------------*/
3342*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3343*495ae853SAndroid Build Coastguard Worker if((1 == ps_sps->u1_pic_order_cnt_type) && (!ps_sps->u1_delta_pic_order_always_zero_flag))
3344*495ae853SAndroid Build Coastguard Worker {
3345*495ae853SAndroid Build Coastguard Worker i_temp = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3346*495ae853SAndroid Build Coastguard Worker
3347*495ae853SAndroid Build Coastguard Worker if(ps_pps->u1_pic_order_present_flag)
3348*495ae853SAndroid Build Coastguard Worker {
3349*495ae853SAndroid Build Coastguard Worker i_temp = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3350*495ae853SAndroid Build Coastguard Worker }
3351*495ae853SAndroid Build Coastguard Worker }
3352*495ae853SAndroid Build Coastguard Worker
3353*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3354*495ae853SAndroid Build Coastguard Worker /*---------------------- redundant pic cnt ------------------------------*/
3355*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3356*495ae853SAndroid Build Coastguard Worker if(ps_pps->u1_redundant_pic_cnt_present_flag)
3357*495ae853SAndroid Build Coastguard Worker {
3358*495ae853SAndroid Build Coastguard Worker u4_temp = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3359*495ae853SAndroid Build Coastguard Worker if(u4_temp > MAX_REDUNDANT_PIC_CNT) return ERROR_INV_SLICE_HDR_T;
3360*495ae853SAndroid Build Coastguard Worker }
3361*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3362*495ae853SAndroid Build Coastguard Worker /*-----------------Direct_spatial_mv_pred_flag --------------------------*/
3363*495ae853SAndroid Build Coastguard Worker /*-----------------num ref active override flag -------------------------*/
3364*495ae853SAndroid Build Coastguard Worker /*-----------------num_ref_idx_active_l0&1 ------------------------------*/
3365*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3366*495ae853SAndroid Build Coastguard Worker if(0 == i4_quality_id)
3367*495ae853SAndroid Build Coastguard Worker {
3368*495ae853SAndroid Build Coastguard Worker if(B_SLICE == ps_slice_prms->u1_slice_type)
3369*495ae853SAndroid Build Coastguard Worker {
3370*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_direct_spatial_mv_pred_flag = ih264d_get_bit_h264(ps_bitstrm);
3371*495ae853SAndroid Build Coastguard Worker }
3372*495ae853SAndroid Build Coastguard Worker
3373*495ae853SAndroid Build Coastguard Worker if((P_SLICE == ps_slice_prms->u1_slice_type) || (B_SLICE == ps_slice_prms->u1_slice_type))
3374*495ae853SAndroid Build Coastguard Worker {
3375*495ae853SAndroid Build Coastguard Worker WORD8 i1_over_ride_flag;
3376*495ae853SAndroid Build Coastguard Worker i1_over_ride_flag = ih264d_get_bit_h264(ps_bitstrm);
3377*495ae853SAndroid Build Coastguard Worker
3378*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_num_ref_idx_active_override_flag = i1_over_ride_flag;
3379*495ae853SAndroid Build Coastguard Worker
3380*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i1_over_ride_flag)
3381*495ae853SAndroid Build Coastguard Worker {
3382*495ae853SAndroid Build Coastguard Worker UWORD8 u8_ref_idx_l0;
3383*495ae853SAndroid Build Coastguard Worker u8_ref_idx_l0 = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3384*495ae853SAndroid Build Coastguard Worker if(u8_ref_idx_l0 > H264_MAX_REF_PICS)
3385*495ae853SAndroid Build Coastguard Worker {
3386*495ae853SAndroid Build Coastguard Worker return ERROR_NUM_REF;
3387*495ae853SAndroid Build Coastguard Worker }
3388*495ae853SAndroid Build Coastguard Worker if(B_SLICE == ps_slice_prms->u1_slice_type)
3389*495ae853SAndroid Build Coastguard Worker {
3390*495ae853SAndroid Build Coastguard Worker UWORD8 u8_ref_idx_l1;
3391*495ae853SAndroid Build Coastguard Worker u8_ref_idx_l1 = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3392*495ae853SAndroid Build Coastguard Worker if(u8_ref_idx_l1 > H264_MAX_REF_PICS)
3393*495ae853SAndroid Build Coastguard Worker {
3394*495ae853SAndroid Build Coastguard Worker return ERROR_NUM_REF;
3395*495ae853SAndroid Build Coastguard Worker }
3396*495ae853SAndroid Build Coastguard Worker }
3397*495ae853SAndroid Build Coastguard Worker }
3398*495ae853SAndroid Build Coastguard Worker }
3399*495ae853SAndroid Build Coastguard Worker
3400*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3401*495ae853SAndroid Build Coastguard Worker /*---------------------- ref pic list modification ----------------------*/
3402*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3403*495ae853SAndroid Build Coastguard Worker {
3404*495ae853SAndroid Build Coastguard Worker ret = isvcd_parse_ref_pic_list_modify(ps_bitstrm, ps_slice_prms, ps_sps);
3405*495ae853SAndroid Build Coastguard Worker if(OK != ret) return ret;
3406*495ae853SAndroid Build Coastguard Worker }
3407*495ae853SAndroid Build Coastguard Worker
3408*495ae853SAndroid Build Coastguard Worker if(((1 == ps_pps->u1_wted_pred_flag) && (P_SLICE == ps_slice_prms->u1_slice_type)) ||
3409*495ae853SAndroid Build Coastguard Worker ((B_SLICE == ps_slice_prms->u1_slice_type) && (1 == ps_pps->u1_wted_bipred_idc)))
3410*495ae853SAndroid Build Coastguard Worker {
3411*495ae853SAndroid Build Coastguard Worker if((ps_slice_prms->u1_num_ref_idx_lx_active[0] >= H264_MAX_REF_IDX) ||
3412*495ae853SAndroid Build Coastguard Worker (ps_slice_prms->u1_num_ref_idx_lx_active[1] >= H264_MAX_REF_IDX))
3413*495ae853SAndroid Build Coastguard Worker {
3414*495ae853SAndroid Build Coastguard Worker return ERROR_NUM_REF;
3415*495ae853SAndroid Build Coastguard Worker }
3416*495ae853SAndroid Build Coastguard Worker /*-------------------------------------------------------------------*/
3417*495ae853SAndroid Build Coastguard Worker /*------------------------- Pred weight table -----------------------*/
3418*495ae853SAndroid Build Coastguard Worker /*-------------------------------------------------------------------*/
3419*495ae853SAndroid Build Coastguard Worker if(CODED_SLICE_EXTENSION_NAL == i4_nal_unit_type)
3420*495ae853SAndroid Build Coastguard Worker {
3421*495ae853SAndroid Build Coastguard Worker WORD32 i4_base_pred_wt_tbl_flag = 1;
3422*495ae853SAndroid Build Coastguard Worker
3423*495ae853SAndroid Build Coastguard Worker /* base_pred_weight_table_flag */
3424*495ae853SAndroid Build Coastguard Worker if(0 == i4_no_int_lyr_pred)
3425*495ae853SAndroid Build Coastguard Worker {
3426*495ae853SAndroid Build Coastguard Worker i4_base_pred_wt_tbl_flag = ih264d_get_bit_h264(ps_bitstrm);
3427*495ae853SAndroid Build Coastguard Worker }
3428*495ae853SAndroid Build Coastguard Worker
3429*495ae853SAndroid Build Coastguard Worker if((1 == i4_no_int_lyr_pred) || (0 == i4_base_pred_wt_tbl_flag))
3430*495ae853SAndroid Build Coastguard Worker {
3431*495ae853SAndroid Build Coastguard Worker ret = ih264d_parse_pred_weight_table(ps_slice_prms, ps_bitstrm);
3432*495ae853SAndroid Build Coastguard Worker if(ret != OK) return ret;
3433*495ae853SAndroid Build Coastguard Worker }
3434*495ae853SAndroid Build Coastguard Worker }
3435*495ae853SAndroid Build Coastguard Worker else
3436*495ae853SAndroid Build Coastguard Worker {
3437*495ae853SAndroid Build Coastguard Worker ret = ih264d_parse_pred_weight_table(ps_slice_prms, ps_bitstrm);
3438*495ae853SAndroid Build Coastguard Worker if(ret != OK) return ret;
3439*495ae853SAndroid Build Coastguard Worker }
3440*495ae853SAndroid Build Coastguard Worker }
3441*495ae853SAndroid Build Coastguard Worker
3442*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3443*495ae853SAndroid Build Coastguard Worker /*------------------------- ref pic marking -----------------------------*/
3444*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3445*495ae853SAndroid Build Coastguard Worker if(0 != i4_nal_ref_idc)
3446*495ae853SAndroid Build Coastguard Worker {
3447*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
3448*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
3449*495ae853SAndroid Build Coastguard Worker UWORD8 u1_store_ref_base_pic;
3450*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr;
3451*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
3452*495ae853SAndroid Build Coastguard Worker {
3453*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_sps_tmp = ps_pps->ps_sps;
3454*495ae853SAndroid Build Coastguard Worker
3455*495ae853SAndroid Build Coastguard Worker ps_dec->u1_nal_unit_type = i4_nal_unit_type;
3456*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_idr_flag = i4_idr_pic_flag;
3457*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_sps = ps_sps;
3458*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_pps = ps_pps;
3459*495ae853SAndroid Build Coastguard Worker ps_pps->ps_sps = ps_sps;
3460*495ae853SAndroid Build Coastguard Worker
3461*495ae853SAndroid Build Coastguard Worker if(ps_svc_lyr_dec->ps_nal_svc_ext->u1_idr_flag)
3462*495ae853SAndroid Build Coastguard Worker ps_dec->u1_nal_unit_type = IDR_SLICE_NAL;
3463*495ae853SAndroid Build Coastguard Worker
3464*495ae853SAndroid Build Coastguard Worker i_temp = ih264d_read_mmco_commands(ps_dec);
3465*495ae853SAndroid Build Coastguard Worker ps_pps->ps_sps = ps_sps_tmp;
3466*495ae853SAndroid Build Coastguard Worker ps_dec->u1_nal_unit_type = i4_nal_unit_type;
3467*495ae853SAndroid Build Coastguard Worker if(i_temp < 0)
3468*495ae853SAndroid Build Coastguard Worker {
3469*495ae853SAndroid Build Coastguard Worker return ERROR_DBP_MANAGER_T;
3470*495ae853SAndroid Build Coastguard Worker }
3471*495ae853SAndroid Build Coastguard Worker ps_dec->u4_bitoffset = i_temp;
3472*495ae853SAndroid Build Coastguard Worker }
3473*495ae853SAndroid Build Coastguard Worker
3474*495ae853SAndroid Build Coastguard Worker if(0 == ps_subset_sps->s_sps_svc_ext.u1_slice_header_restriction_flag)
3475*495ae853SAndroid Build Coastguard Worker {
3476*495ae853SAndroid Build Coastguard Worker /* store_ref_base_pic_flag */
3477*495ae853SAndroid Build Coastguard Worker u1_store_ref_base_pic = ih264d_get_bit_h264(ps_bitstrm);
3478*495ae853SAndroid Build Coastguard Worker if(0 != u1_store_ref_base_pic)
3479*495ae853SAndroid Build Coastguard Worker {
3480*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3481*495ae853SAndroid Build Coastguard Worker }
3482*495ae853SAndroid Build Coastguard Worker
3483*495ae853SAndroid Build Coastguard Worker if(((1 == i4_use_ref_base) || (1 == u1_store_ref_base_pic)) &&
3484*495ae853SAndroid Build Coastguard Worker (SVCD_FALSE == i4_idr_pic_flag))
3485*495ae853SAndroid Build Coastguard Worker {
3486*495ae853SAndroid Build Coastguard Worker i_temp = isvcd_dec_ref_base_pic_marking(
3487*495ae853SAndroid Build Coastguard Worker &ps_svc_lyr_dec->s_svc_slice_params.s_ref_base_pic_marking_svc_ext,
3488*495ae853SAndroid Build Coastguard Worker ps_bitstrm);
3489*495ae853SAndroid Build Coastguard Worker if(i_temp != OK)
3490*495ae853SAndroid Build Coastguard Worker {
3491*495ae853SAndroid Build Coastguard Worker return i_temp;
3492*495ae853SAndroid Build Coastguard Worker }
3493*495ae853SAndroid Build Coastguard Worker }
3494*495ae853SAndroid Build Coastguard Worker /******* End of if (SVC_VCL_NAL == i4_nal_unit_type) *********/
3495*495ae853SAndroid Build Coastguard Worker }
3496*495ae853SAndroid Build Coastguard Worker /******** End of if(0 != i4_nal_ref_idc) *************************/
3497*495ae853SAndroid Build Coastguard Worker }
3498*495ae853SAndroid Build Coastguard Worker /************* End of if(0 == i4_quality_id) *************************/
3499*495ae853SAndroid Build Coastguard Worker }
3500*495ae853SAndroid Build Coastguard Worker
3501*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3502*495ae853SAndroid Build Coastguard Worker /*--------------------------- cabac int idc -----------------------------*/
3503*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3504*495ae853SAndroid Build Coastguard Worker if((ps_pps->u1_entropy_coding_mode == CABAC) && (I_SLICE != ps_slice_prms->u1_slice_type))
3505*495ae853SAndroid Build Coastguard Worker {
3506*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_cabac_init_idc = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3507*495ae853SAndroid Build Coastguard Worker if(ps_slice_prms->u1_cabac_init_idc > MAX_CABAC_INIT_IDC)
3508*495ae853SAndroid Build Coastguard Worker {
3509*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3510*495ae853SAndroid Build Coastguard Worker }
3511*495ae853SAndroid Build Coastguard Worker }
3512*495ae853SAndroid Build Coastguard Worker
3513*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3514*495ae853SAndroid Build Coastguard Worker /*--------------------------- slice qp delta ----------------------------*/
3515*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3516*495ae853SAndroid Build Coastguard Worker {
3517*495ae853SAndroid Build Coastguard Worker WORD8 i1_slice_qp_delta;
3518*495ae853SAndroid Build Coastguard Worker i1_slice_qp_delta = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3519*495ae853SAndroid Build Coastguard Worker i1_slice_qp_delta += ps_pps->u1_pic_init_qp;
3520*495ae853SAndroid Build Coastguard Worker if((i1_slice_qp_delta < MIN_H264_QP) || (i1_slice_qp_delta > MAX_H264_QP))
3521*495ae853SAndroid Build Coastguard Worker {
3522*495ae853SAndroid Build Coastguard Worker return ERROR_INV_RANGE_QP_T;
3523*495ae853SAndroid Build Coastguard Worker }
3524*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_slice_qp = (UWORD8) i1_slice_qp_delta;
3525*495ae853SAndroid Build Coastguard Worker }
3526*495ae853SAndroid Build Coastguard Worker
3527*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3528*495ae853SAndroid Build Coastguard Worker /*--------------------------- disable dblk filter idc -------------------*/
3529*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3530*495ae853SAndroid Build Coastguard Worker /* Set to default value */
3531*495ae853SAndroid Build Coastguard Worker
3532*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_disable_dblk_filter_idc = 0;
3533*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == ps_pps->u1_deblocking_filter_parameters_present_flag)
3534*495ae853SAndroid Build Coastguard Worker {
3535*495ae853SAndroid Build Coastguard Worker ps_slice_prms->u1_disable_dblk_filter_idc = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3536*495ae853SAndroid Build Coastguard Worker
3537*495ae853SAndroid Build Coastguard Worker if(ps_slice_prms->u1_disable_dblk_filter_idc > SLICE_BOUNDARY_DBLK_DISABLED)
3538*495ae853SAndroid Build Coastguard Worker {
3539*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3540*495ae853SAndroid Build Coastguard Worker }
3541*495ae853SAndroid Build Coastguard Worker /*-------------------------------------------------------------------*/
3542*495ae853SAndroid Build Coastguard Worker /*--------------------------- slice_alpha_c0_offset_div2 ------------*/
3543*495ae853SAndroid Build Coastguard Worker /*--------------------------- slice_beta_offset_div2 ----------------*/
3544*495ae853SAndroid Build Coastguard Worker /*-------------------------------------------------------------------*/
3545*495ae853SAndroid Build Coastguard Worker if(1 != ps_slice_prms->u1_disable_dblk_filter_idc)
3546*495ae853SAndroid Build Coastguard Worker {
3547*495ae853SAndroid Build Coastguard Worker /* slice_alpha_c0_offset_div2 */
3548*495ae853SAndroid Build Coastguard Worker ps_slice_prms->i1_slice_alpha_c0_offset = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3549*495ae853SAndroid Build Coastguard Worker if((MIN_DBLK_FIL_OFF > ps_slice_prms->i1_slice_alpha_c0_offset) ||
3550*495ae853SAndroid Build Coastguard Worker (ps_slice_prms->i1_slice_alpha_c0_offset > MAX_DBLK_FIL_OFF))
3551*495ae853SAndroid Build Coastguard Worker {
3552*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3553*495ae853SAndroid Build Coastguard Worker }
3554*495ae853SAndroid Build Coastguard Worker ps_slice_prms->i1_slice_beta_offset = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3555*495ae853SAndroid Build Coastguard Worker if((MIN_DBLK_FIL_OFF > ps_slice_prms->i1_slice_beta_offset) ||
3556*495ae853SAndroid Build Coastguard Worker (ps_slice_prms->i1_slice_beta_offset > MAX_DBLK_FIL_OFF))
3557*495ae853SAndroid Build Coastguard Worker {
3558*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3559*495ae853SAndroid Build Coastguard Worker }
3560*495ae853SAndroid Build Coastguard Worker }
3561*495ae853SAndroid Build Coastguard Worker }
3562*495ae853SAndroid Build Coastguard Worker
3563*495ae853SAndroid Build Coastguard Worker *pi4_ref_dq_id = -1;
3564*495ae853SAndroid Build Coastguard Worker
3565*495ae853SAndroid Build Coastguard Worker if((0 == i4_no_int_lyr_pred) && (0 == i4_quality_id))
3566*495ae853SAndroid Build Coastguard Worker {
3567*495ae853SAndroid Build Coastguard Worker WORD32 i4_inter_lyr_dblk_idc;
3568*495ae853SAndroid Build Coastguard Worker WORD32 i4_inter_lyr_alpha_c0_offset;
3569*495ae853SAndroid Build Coastguard Worker WORD32 i4_inter_lyr_beta_offset;
3570*495ae853SAndroid Build Coastguard Worker
3571*495ae853SAndroid Build Coastguard Worker /*-------------------------------------------------------------------*/
3572*495ae853SAndroid Build Coastguard Worker /*--------------------------- ref_layer_dq_id -----------------------*/
3573*495ae853SAndroid Build Coastguard Worker /*-------------------------------------------------------------------*/
3574*495ae853SAndroid Build Coastguard Worker *pi4_ref_dq_id = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3575*495ae853SAndroid Build Coastguard Worker
3576*495ae853SAndroid Build Coastguard Worker if(*pi4_ref_dq_id > MAX_REF_DEP_ID)
3577*495ae853SAndroid Build Coastguard Worker {
3578*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3579*495ae853SAndroid Build Coastguard Worker }
3580*495ae853SAndroid Build Coastguard Worker /* ------------------------------------------- */
3581*495ae853SAndroid Build Coastguard Worker /* ---- Inter layer de-blocking parameters ---- */
3582*495ae853SAndroid Build Coastguard Worker /* ------------------------------------------- */
3583*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_dblk_idc = 0;
3584*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_alpha_c0_offset = 0;
3585*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_beta_offset = 0;
3586*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE ==
3587*495ae853SAndroid Build Coastguard Worker ps_subset_sps->s_sps_svc_ext.u1_inter_layer_deblocking_filter_control_present_flag)
3588*495ae853SAndroid Build Coastguard Worker {
3589*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_dblk_idc = ih264d_uev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3590*495ae853SAndroid Build Coastguard Worker
3591*495ae853SAndroid Build Coastguard Worker if(i4_inter_lyr_dblk_idc > 6)
3592*495ae853SAndroid Build Coastguard Worker {
3593*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3594*495ae853SAndroid Build Coastguard Worker }
3595*495ae853SAndroid Build Coastguard Worker if(1 != i4_inter_lyr_dblk_idc)
3596*495ae853SAndroid Build Coastguard Worker {
3597*495ae853SAndroid Build Coastguard Worker /* Alpha Offset */
3598*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_alpha_c0_offset = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3599*495ae853SAndroid Build Coastguard Worker if(i4_inter_lyr_alpha_c0_offset > 6 || i4_inter_lyr_alpha_c0_offset < -6)
3600*495ae853SAndroid Build Coastguard Worker {
3601*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3602*495ae853SAndroid Build Coastguard Worker }
3603*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_alpha_c0_offset <<= 1;
3604*495ae853SAndroid Build Coastguard Worker
3605*495ae853SAndroid Build Coastguard Worker /* Beta Offset */
3606*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_beta_offset = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf);
3607*495ae853SAndroid Build Coastguard Worker if(i4_inter_lyr_beta_offset > 6 || i4_inter_lyr_beta_offset < -6)
3608*495ae853SAndroid Build Coastguard Worker {
3609*495ae853SAndroid Build Coastguard Worker return ERROR_INV_SLICE_HDR_T;
3610*495ae853SAndroid Build Coastguard Worker }
3611*495ae853SAndroid Build Coastguard Worker i4_inter_lyr_beta_offset <<= 1;
3612*495ae853SAndroid Build Coastguard Worker }
3613*495ae853SAndroid Build Coastguard Worker }
3614*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_inter_lyr_dblk_idc = i4_inter_lyr_dblk_idc;
3615*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_inter_lyr_beta_offset = i4_inter_lyr_beta_offset;
3616*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_inter_lyr_alpha_c0_offset = i4_inter_lyr_alpha_c0_offset;
3617*495ae853SAndroid Build Coastguard Worker }
3618*495ae853SAndroid Build Coastguard Worker
3619*495ae853SAndroid Build Coastguard Worker return (0);
3620*495ae853SAndroid Build Coastguard Worker }
3621*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3622*495ae853SAndroid Build Coastguard Worker /* */
3623*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_ref_lyr_dqid */
3624*495ae853SAndroid Build Coastguard Worker /* */
3625*495ae853SAndroid Build Coastguard Worker /* Description : Parses the slice header till ref lyr dqid. */
3626*495ae853SAndroid Build Coastguard Worker /* */
3627*495ae853SAndroid Build Coastguard Worker /* */
3628*495ae853SAndroid Build Coastguard Worker /* Inputs : 1. vcl node */
3629*495ae853SAndroid Build Coastguard Worker /* 2. sequence prms set base buffer pointer */
3630*495ae853SAndroid Build Coastguard Worker /* 3. picture prms set base buffer pointer */
3631*495ae853SAndroid Build Coastguard Worker /* 4. Target layer flag */
3632*495ae853SAndroid Build Coastguard Worker /* 5. DPB command context structure */
3633*495ae853SAndroid Build Coastguard Worker /* 6. Reference layer DQID */
3634*495ae853SAndroid Build Coastguard Worker /* Globals : None */
3635*495ae853SAndroid Build Coastguard Worker /* Processing : 1. Parses the slice header till ref lyr DQID */
3636*495ae853SAndroid Build Coastguard Worker /* 2. If current layer is target layer then it calculates */
3637*495ae853SAndroid Build Coastguard Worker /* poc and gaps in frame number */
3638*495ae853SAndroid Build Coastguard Worker /* */
3639*495ae853SAndroid Build Coastguard Worker /* Outputs : Updates 1) ref dqid variable 2) dpb command context */
3640*495ae853SAndroid Build Coastguard Worker /* Returns : status */
3641*495ae853SAndroid Build Coastguard Worker /* */
3642*495ae853SAndroid Build Coastguard Worker /* Issues : None */
3643*495ae853SAndroid Build Coastguard Worker /* */
3644*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3645*495ae853SAndroid Build Coastguard Worker /* */
3646*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3647*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Vijay Draft */
3648*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_get_ref_lyr_dqid(vcl_node_t * ps_vcl_node,dec_seq_params_t * ps_sps,dec_pic_params_t * ps_pps,WORD32 * pi4_ref_lyr_dqid,WORD32 i4_prev_au_dqid,WORD32 * pi4_err_code,svc_dec_ctxt_t * ps_svcd_ctxt)3649*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_ref_lyr_dqid(vcl_node_t *ps_vcl_node, dec_seq_params_t *ps_sps,
3650*495ae853SAndroid Build Coastguard Worker dec_pic_params_t *ps_pps, WORD32 *pi4_ref_lyr_dqid,
3651*495ae853SAndroid Build Coastguard Worker WORD32 i4_prev_au_dqid, WORD32 *pi4_err_code,
3652*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt)
3653*495ae853SAndroid Build Coastguard Worker {
3654*495ae853SAndroid Build Coastguard Worker WORD32 i4_status;
3655*495ae853SAndroid Build Coastguard Worker WORD32 ai4_ref_dq_id[2] = {0};
3656*495ae853SAndroid Build Coastguard Worker WORD32 i4_num_slc_dec;
3657*495ae853SAndroid Build Coastguard Worker
3658*495ae853SAndroid Build Coastguard Worker /* local structures */
3659*495ae853SAndroid Build Coastguard Worker dec_slice_params_t s_slice_prms = {0};
3660*495ae853SAndroid Build Coastguard Worker
3661*495ae853SAndroid Build Coastguard Worker /* vcl buffer */
3662*495ae853SAndroid Build Coastguard Worker vcl_buf_hdr_t *ps_vcl_buf;
3663*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
3664*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr;
3665*495ae853SAndroid Build Coastguard Worker UNUSED(i4_prev_au_dqid);
3666*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
3667*495ae853SAndroid Build Coastguard Worker /* Sanity checks */
3668*495ae853SAndroid Build Coastguard Worker if((NULL == ps_vcl_node) || (NULL == ps_sps) || (NULL == ps_pps) || (NULL == pi4_ref_lyr_dqid))
3669*495ae853SAndroid Build Coastguard Worker {
3670*495ae853SAndroid Build Coastguard Worker return NOT_OK;
3671*495ae853SAndroid Build Coastguard Worker }
3672*495ae853SAndroid Build Coastguard Worker
3673*495ae853SAndroid Build Coastguard Worker i4_num_slc_dec = 0;
3674*495ae853SAndroid Build Coastguard Worker ps_vcl_buf = ps_vcl_node->ps_first_vcl_nal;
3675*495ae853SAndroid Build Coastguard Worker i4_status = NOT_OK;
3676*495ae853SAndroid Build Coastguard Worker
3677*495ae853SAndroid Build Coastguard Worker while(NULL != ps_vcl_buf)
3678*495ae853SAndroid Build Coastguard Worker {
3679*495ae853SAndroid Build Coastguard Worker WORD32 i4_error;
3680*495ae853SAndroid Build Coastguard Worker
3681*495ae853SAndroid Build Coastguard Worker /* Fill the stream context structure */
3682*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->u4_ofst = 0;
3683*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->pu4_buffer =
3684*495ae853SAndroid Build Coastguard Worker (UWORD32 *) ((UWORD8 *) ps_vcl_buf + ps_vcl_buf->i4_buf_offset +
3685*495ae853SAndroid Build Coastguard Worker ps_vcl_buf->i4_slice_offset);
3686*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->u4_max_ofst = ps_vcl_buf->u4_max_bits;
3687*495ae853SAndroid Build Coastguard Worker
3688*495ae853SAndroid Build Coastguard Worker /* call the function which decodes the slice header */
3689*495ae853SAndroid Build Coastguard Worker i4_error = isvcd_parse_slice_hdr_refdq_id(ps_vcl_node, &s_slice_prms, ps_dec->ps_bitstrm,
3690*495ae853SAndroid Build Coastguard Worker &ai4_ref_dq_id[i4_num_slc_dec], ps_sps, ps_pps,
3691*495ae853SAndroid Build Coastguard Worker ps_vcl_buf->i4_no_int_lyr_pred, ps_svcd_ctxt);
3692*495ae853SAndroid Build Coastguard Worker
3693*495ae853SAndroid Build Coastguard Worker /* store the first error encountered */
3694*495ae853SAndroid Build Coastguard Worker if(0 == *pi4_err_code)
3695*495ae853SAndroid Build Coastguard Worker {
3696*495ae853SAndroid Build Coastguard Worker *pi4_err_code = i4_error;
3697*495ae853SAndroid Build Coastguard Worker }
3698*495ae853SAndroid Build Coastguard Worker if(i4_error != 0)
3699*495ae853SAndroid Build Coastguard Worker {
3700*495ae853SAndroid Build Coastguard Worker /* check on the Error returned */
3701*495ae853SAndroid Build Coastguard Worker return NOT_OK;
3702*495ae853SAndroid Build Coastguard Worker }
3703*495ae853SAndroid Build Coastguard Worker
3704*495ae853SAndroid Build Coastguard Worker /* set the return status */
3705*495ae853SAndroid Build Coastguard Worker i4_status = OK;
3706*495ae853SAndroid Build Coastguard Worker break;
3707*495ae853SAndroid Build Coastguard Worker
3708*495ae853SAndroid Build Coastguard Worker /* go to the next slice header */
3709*495ae853SAndroid Build Coastguard Worker ps_vcl_buf = ps_vcl_buf->ps_next;
3710*495ae853SAndroid Build Coastguard Worker }
3711*495ae853SAndroid Build Coastguard Worker
3712*495ae853SAndroid Build Coastguard Worker /* set the appropriate reference dqid of the first slice */
3713*495ae853SAndroid Build Coastguard Worker *pi4_ref_lyr_dqid = ai4_ref_dq_id[0];
3714*495ae853SAndroid Build Coastguard Worker
3715*495ae853SAndroid Build Coastguard Worker return (i4_status);
3716*495ae853SAndroid Build Coastguard Worker }
3717*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3718*495ae853SAndroid Build Coastguard Worker /* */
3719*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_conceal_node_params */
3720*495ae853SAndroid Build Coastguard Worker /* */
3721*495ae853SAndroid Build Coastguard Worker /* Description : This function detects the resolution change */
3722*495ae853SAndroid Build Coastguard Worker /* */
3723*495ae853SAndroid Build Coastguard Worker /* */
3724*495ae853SAndroid Build Coastguard Worker /* Inputs : 1. Pointer to Current SPS */
3725*495ae853SAndroid Build Coastguard Worker /* 2. Pointer to prevoius SPS */
3726*495ae853SAndroid Build Coastguard Worker /* Globals : None */
3727*495ae853SAndroid Build Coastguard Worker /* Processing : */
3728*495ae853SAndroid Build Coastguard Worker /* */
3729*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
3730*495ae853SAndroid Build Coastguard Worker /* Returns : SVCD_TRUE if different resolution else SVCD_FALSE */
3731*495ae853SAndroid Build Coastguard Worker /* */
3732*495ae853SAndroid Build Coastguard Worker /* Issues : none */
3733*495ae853SAndroid Build Coastguard Worker /* */
3734*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3735*495ae853SAndroid Build Coastguard Worker /* */
3736*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3737*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Vijayakumar Draft */
3738*495ae853SAndroid Build Coastguard Worker /* */
3739*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_conceal_node_params(vcl_nal_t * ps_vcl_nal,prev_au_prms_t * ps_prev_au_prms)3740*495ae853SAndroid Build Coastguard Worker void isvcd_conceal_node_params(vcl_nal_t *ps_vcl_nal, prev_au_prms_t *ps_prev_au_prms)
3741*495ae853SAndroid Build Coastguard Worker {
3742*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_node;
3743*495ae853SAndroid Build Coastguard Worker WORD32 i4_conceal_lyrs;
3744*495ae853SAndroid Build Coastguard Worker WORD32 i4_no_gaps_flag;
3745*495ae853SAndroid Build Coastguard Worker
3746*495ae853SAndroid Build Coastguard Worker /* get the bottom node */
3747*495ae853SAndroid Build Coastguard Worker ps_node = ps_vcl_nal->ps_bot_node;
3748*495ae853SAndroid Build Coastguard Worker i4_conceal_lyrs = SVCD_FALSE;
3749*495ae853SAndroid Build Coastguard Worker i4_no_gaps_flag = SVCD_FALSE;
3750*495ae853SAndroid Build Coastguard Worker
3751*495ae853SAndroid Build Coastguard Worker /* loop over all nodes present in the current AU */
3752*495ae853SAndroid Build Coastguard Worker while(NULL != ps_node)
3753*495ae853SAndroid Build Coastguard Worker {
3754*495ae853SAndroid Build Coastguard Worker WORD32 i4_dep_id = 0;
3755*495ae853SAndroid Build Coastguard Worker WORD32 i4_qua_id = 0;
3756*495ae853SAndroid Build Coastguard Worker UWORD16 u2_frm_num_dep = 0;
3757*495ae853SAndroid Build Coastguard Worker WORD32 i4_idr_pic_flag = 0;
3758*495ae853SAndroid Build Coastguard Worker WORD32 i4_idr_pic_num = 0;
3759*495ae853SAndroid Build Coastguard Worker WORD32 i4_nal_ref_idc = 0;
3760*495ae853SAndroid Build Coastguard Worker WORD32 i4_poc_syntax = 0;
3761*495ae853SAndroid Build Coastguard Worker WORD32 i4_qua_zero_lyr_sts = 0;
3762*495ae853SAndroid Build Coastguard Worker
3763*495ae853SAndroid Build Coastguard Worker i4_dep_id = ps_node->i4_dependency_id;
3764*495ae853SAndroid Build Coastguard Worker i4_qua_id = ps_node->i4_quality_id;
3765*495ae853SAndroid Build Coastguard Worker
3766*495ae853SAndroid Build Coastguard Worker /* reset the quality 0 layer updated status */
3767*495ae853SAndroid Build Coastguard Worker if(0 == i4_qua_id)
3768*495ae853SAndroid Build Coastguard Worker {
3769*495ae853SAndroid Build Coastguard Worker i4_qua_zero_lyr_sts = SVCD_FALSE;
3770*495ae853SAndroid Build Coastguard Worker }
3771*495ae853SAndroid Build Coastguard Worker
3772*495ae853SAndroid Build Coastguard Worker /* process the quality id 0 layers */
3773*495ae853SAndroid Build Coastguard Worker if((0 == i4_qua_id) && (NULL != ps_node->ps_first_vcl_nal))
3774*495ae853SAndroid Build Coastguard Worker {
3775*495ae853SAndroid Build Coastguard Worker /* if current and previous are reference pictures */
3776*495ae853SAndroid Build Coastguard Worker if((0 != ps_prev_au_prms[i4_dep_id].i4_nal_ref_id) && (0 != ps_node->i4_nal_ref_idc))
3777*495ae853SAndroid Build Coastguard Worker {
3778*495ae853SAndroid Build Coastguard Worker if(ps_prev_au_prms[i4_dep_id].u2_frm_num == ps_node->u2_frm_num)
3779*495ae853SAndroid Build Coastguard Worker {
3780*495ae853SAndroid Build Coastguard Worker /* frame number is concealed */
3781*495ae853SAndroid Build Coastguard Worker ps_node->u2_frm_num++;
3782*495ae853SAndroid Build Coastguard Worker i4_conceal_lyrs = SVCD_TRUE;
3783*495ae853SAndroid Build Coastguard Worker }
3784*495ae853SAndroid Build Coastguard Worker else if((SVCD_TRUE == i4_conceal_lyrs) || (SVCD_TRUE == i4_no_gaps_flag))
3785*495ae853SAndroid Build Coastguard Worker {
3786*495ae853SAndroid Build Coastguard Worker /* if the current au frm_num is less than prev */
3787*495ae853SAndroid Build Coastguard Worker /* or the difference is greater than 1 */
3788*495ae853SAndroid Build Coastguard Worker if((ps_prev_au_prms[i4_dep_id].u2_frm_num > ps_node->u2_frm_num) ||
3789*495ae853SAndroid Build Coastguard Worker ((ps_node->u2_frm_num - ps_prev_au_prms[i4_dep_id].u2_frm_num) > 1))
3790*495ae853SAndroid Build Coastguard Worker {
3791*495ae853SAndroid Build Coastguard Worker /* frame number is concealed */
3792*495ae853SAndroid Build Coastguard Worker ps_node->u2_frm_num = ps_prev_au_prms[i4_dep_id].u2_frm_num + 1;
3793*495ae853SAndroid Build Coastguard Worker }
3794*495ae853SAndroid Build Coastguard Worker }
3795*495ae853SAndroid Build Coastguard Worker
3796*495ae853SAndroid Build Coastguard Worker /* set the no gaps flag */
3797*495ae853SAndroid Build Coastguard Worker if(1 == (ps_node->u2_frm_num - ps_prev_au_prms[i4_dep_id].u2_frm_num))
3798*495ae853SAndroid Build Coastguard Worker {
3799*495ae853SAndroid Build Coastguard Worker i4_no_gaps_flag = SVCD_TRUE;
3800*495ae853SAndroid Build Coastguard Worker }
3801*495ae853SAndroid Build Coastguard Worker }
3802*495ae853SAndroid Build Coastguard Worker
3803*495ae853SAndroid Build Coastguard Worker /* store the final frame number */
3804*495ae853SAndroid Build Coastguard Worker u2_frm_num_dep = ps_node->u2_frm_num;
3805*495ae853SAndroid Build Coastguard Worker i4_idr_pic_flag = ps_node->i4_idr_pic_flag;
3806*495ae853SAndroid Build Coastguard Worker i4_idr_pic_num = ps_node->i4_idr_pic_num;
3807*495ae853SAndroid Build Coastguard Worker i4_nal_ref_idc = ps_node->i4_nal_ref_idc;
3808*495ae853SAndroid Build Coastguard Worker i4_poc_syntax = ps_node->i4_poc_syntax;
3809*495ae853SAndroid Build Coastguard Worker i4_qua_zero_lyr_sts = SVCD_TRUE;
3810*495ae853SAndroid Build Coastguard Worker }
3811*495ae853SAndroid Build Coastguard Worker else
3812*495ae853SAndroid Build Coastguard Worker {
3813*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_qua_zero_lyr_sts)
3814*495ae853SAndroid Build Coastguard Worker {
3815*495ae853SAndroid Build Coastguard Worker /* for higher quality layers store the same value */
3816*495ae853SAndroid Build Coastguard Worker /* present in the quality id 0 layer */
3817*495ae853SAndroid Build Coastguard Worker ps_node->u2_frm_num = u2_frm_num_dep;
3818*495ae853SAndroid Build Coastguard Worker ps_node->i4_idr_pic_flag = i4_idr_pic_flag;
3819*495ae853SAndroid Build Coastguard Worker ps_node->i4_idr_pic_num = i4_idr_pic_num;
3820*495ae853SAndroid Build Coastguard Worker ps_node->i4_nal_ref_idc = i4_nal_ref_idc;
3821*495ae853SAndroid Build Coastguard Worker ps_node->i4_poc_syntax = i4_poc_syntax;
3822*495ae853SAndroid Build Coastguard Worker }
3823*495ae853SAndroid Build Coastguard Worker }
3824*495ae853SAndroid Build Coastguard Worker
3825*495ae853SAndroid Build Coastguard Worker /* get the upper node pointer */
3826*495ae853SAndroid Build Coastguard Worker ps_node = ps_node->ps_top_node;
3827*495ae853SAndroid Build Coastguard Worker }
3828*495ae853SAndroid Build Coastguard Worker }
3829*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3830*495ae853SAndroid Build Coastguard Worker /* */
3831*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_refine_dep_list */
3832*495ae853SAndroid Build Coastguard Worker /* */
3833*495ae853SAndroid Build Coastguard Worker /* Description : Refines the DQID list based on reference layer DQID */
3834*495ae853SAndroid Build Coastguard Worker /* */
3835*495ae853SAndroid Build Coastguard Worker /* */
3836*495ae853SAndroid Build Coastguard Worker /* Inputs : 1. vcl nal structure (input and output) */
3837*495ae853SAndroid Build Coastguard Worker /* 2. sps prms base buffer pointer */
3838*495ae853SAndroid Build Coastguard Worker /* 3. pps prms base buffer pointer */
3839*495ae853SAndroid Build Coastguard Worker /* 4. pointer to array in which the dep id should be stored */
3840*495ae853SAndroid Build Coastguard Worker /* 5. pointer to array having prev AU ref dq id */
3841*495ae853SAndroid Build Coastguard Worker /* 6. pointer to init params structure */
3842*495ae853SAndroid Build Coastguard Worker /* 7. pointer to store the Error code */
3843*495ae853SAndroid Build Coastguard Worker /* Globals : None */
3844*495ae853SAndroid Build Coastguard Worker /* Processing : */
3845*495ae853SAndroid Build Coastguard Worker /* */
3846*495ae853SAndroid Build Coastguard Worker /* Outputs : Updates the vcl nal structure */
3847*495ae853SAndroid Build Coastguard Worker /* Also determines frm_num and poc */
3848*495ae853SAndroid Build Coastguard Worker /* Returns : status */
3849*495ae853SAndroid Build Coastguard Worker /* */
3850*495ae853SAndroid Build Coastguard Worker /* Issues : None */
3851*495ae853SAndroid Build Coastguard Worker /* */
3852*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3853*495ae853SAndroid Build Coastguard Worker /* */
3854*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3855*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Vijay Draft */
3856*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_refine_dep_list(void * pv_out_vcl_ctxt,dec_seq_params_t * ps_sps,dec_svc_seq_params_t * ps_subset_sps,dec_pic_params_t * ps_pps,WORD32 * pi4_dep_id_map,prev_au_prms_t * ps_prev_au_prms,prev_au_sps_pps_t * ps_pps_sps_prev,WORD32 * pi4_err_code,svc_dec_ctxt_t * ps_svcd_ctxt)3857*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_refine_dep_list(void *pv_out_vcl_ctxt, dec_seq_params_t *ps_sps,
3858*495ae853SAndroid Build Coastguard Worker dec_svc_seq_params_t *ps_subset_sps, dec_pic_params_t *ps_pps,
3859*495ae853SAndroid Build Coastguard Worker WORD32 *pi4_dep_id_map, prev_au_prms_t *ps_prev_au_prms,
3860*495ae853SAndroid Build Coastguard Worker prev_au_sps_pps_t *ps_pps_sps_prev, WORD32 *pi4_err_code,
3861*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt)
3862*495ae853SAndroid Build Coastguard Worker {
3863*495ae853SAndroid Build Coastguard Worker vcl_nal_t *ps_vcl_nal;
3864*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_vcl_node;
3865*495ae853SAndroid Build Coastguard Worker WORD32 i4_idr_pic_flag;
3866*495ae853SAndroid Build Coastguard Worker WORD32 i4_nal_ref_idc;
3867*495ae853SAndroid Build Coastguard Worker WORD32 i4_idr_pic_num;
3868*495ae853SAndroid Build Coastguard Worker WORD32 i4_num_res_lyrs_bup;
3869*495ae853SAndroid Build Coastguard Worker WORD32 i4_restore_prms_flag;
3870*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_node_bup;
3871*495ae853SAndroid Build Coastguard Worker WORD32 ai4_dep_id[MAX_NUM_RES_LYRS] = {0};
3872*495ae853SAndroid Build Coastguard Worker
3873*495ae853SAndroid Build Coastguard Worker /* used for checking the init prms */
3874*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_sps_tgt_minus1_lyr = NULL;
3875*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_sps_tgt_minus2_lyr = NULL;
3876*495ae853SAndroid Build Coastguard Worker UNUSED(pi4_err_code);
3877*495ae853SAndroid Build Coastguard Worker /* sanity checks */
3878*495ae853SAndroid Build Coastguard Worker if((NULL == pv_out_vcl_ctxt) || (NULL == ps_sps) || (NULL == ps_pps))
3879*495ae853SAndroid Build Coastguard Worker {
3880*495ae853SAndroid Build Coastguard Worker return NOT_OK;
3881*495ae853SAndroid Build Coastguard Worker }
3882*495ae853SAndroid Build Coastguard Worker
3883*495ae853SAndroid Build Coastguard Worker ps_vcl_nal = (vcl_nal_t *) pv_out_vcl_ctxt;
3884*495ae853SAndroid Build Coastguard Worker
3885*495ae853SAndroid Build Coastguard Worker /* no node is present */
3886*495ae853SAndroid Build Coastguard Worker if(NULL == ps_vcl_nal->ps_bot_node)
3887*495ae853SAndroid Build Coastguard Worker {
3888*495ae853SAndroid Build Coastguard Worker return (NOT_OK);
3889*495ae853SAndroid Build Coastguard Worker }
3890*495ae853SAndroid Build Coastguard Worker
3891*495ae853SAndroid Build Coastguard Worker /* set the single layer flag if top node and bottom node are same */
3892*495ae853SAndroid Build Coastguard Worker if((ps_vcl_nal->ps_bot_node == ps_vcl_nal->ps_top_node) &&
3893*495ae853SAndroid Build Coastguard Worker (0 == ps_vcl_nal->ps_bot_node->i4_dependency_id))
3894*495ae853SAndroid Build Coastguard Worker {
3895*495ae853SAndroid Build Coastguard Worker }
3896*495ae853SAndroid Build Coastguard Worker else
3897*495ae853SAndroid Build Coastguard Worker {
3898*495ae853SAndroid Build Coastguard Worker /* call the function which corrects the frame number of each node */
3899*495ae853SAndroid Build Coastguard Worker /* based on previous access unit frame number */
3900*495ae853SAndroid Build Coastguard Worker isvcd_conceal_node_params(ps_vcl_nal, ps_prev_au_prms);
3901*495ae853SAndroid Build Coastguard Worker }
3902*495ae853SAndroid Build Coastguard Worker /* get the top most node */
3903*495ae853SAndroid Build Coastguard Worker ps_vcl_node = ps_vcl_nal->ps_top_node;
3904*495ae853SAndroid Build Coastguard Worker
3905*495ae853SAndroid Build Coastguard Worker /* get the IDR picture flag for top most layer in current AU */
3906*495ae853SAndroid Build Coastguard Worker /* if not valid then set the value present in the first valid node */
3907*495ae853SAndroid Build Coastguard Worker {
3908*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_node;
3909*495ae853SAndroid Build Coastguard Worker WORD32 i4_node_present_flag;
3910*495ae853SAndroid Build Coastguard Worker
3911*495ae853SAndroid Build Coastguard Worker ps_node = ps_vcl_node;
3912*495ae853SAndroid Build Coastguard Worker i4_node_present_flag = SVCD_FALSE;
3913*495ae853SAndroid Build Coastguard Worker
3914*495ae853SAndroid Build Coastguard Worker /* store default values */
3915*495ae853SAndroid Build Coastguard Worker i4_idr_pic_flag = SVCD_FALSE;
3916*495ae853SAndroid Build Coastguard Worker i4_nal_ref_idc = 0;
3917*495ae853SAndroid Build Coastguard Worker i4_idr_pic_num = 0;
3918*495ae853SAndroid Build Coastguard Worker
3919*495ae853SAndroid Build Coastguard Worker /* loop until valid node */
3920*495ae853SAndroid Build Coastguard Worker while(NULL != ps_node)
3921*495ae853SAndroid Build Coastguard Worker {
3922*495ae853SAndroid Build Coastguard Worker if(NULL != ps_node->ps_first_vcl_nal)
3923*495ae853SAndroid Build Coastguard Worker {
3924*495ae853SAndroid Build Coastguard Worker i4_idr_pic_flag = ps_node->i4_idr_pic_flag;
3925*495ae853SAndroid Build Coastguard Worker i4_nal_ref_idc = ps_node->i4_nal_ref_idc;
3926*495ae853SAndroid Build Coastguard Worker i4_idr_pic_num = ps_node->i4_idr_pic_num;
3927*495ae853SAndroid Build Coastguard Worker i4_node_present_flag = SVCD_TRUE;
3928*495ae853SAndroid Build Coastguard Worker break;
3929*495ae853SAndroid Build Coastguard Worker }
3930*495ae853SAndroid Build Coastguard Worker else if(SVCD_TRUE == ps_node->i4_idr_pic_flag)
3931*495ae853SAndroid Build Coastguard Worker {
3932*495ae853SAndroid Build Coastguard Worker i4_idr_pic_flag = ps_node->i4_idr_pic_flag;
3933*495ae853SAndroid Build Coastguard Worker i4_nal_ref_idc = ps_node->i4_nal_ref_idc;
3934*495ae853SAndroid Build Coastguard Worker i4_idr_pic_num = ps_node->i4_idr_pic_num;
3935*495ae853SAndroid Build Coastguard Worker i4_node_present_flag = SVCD_TRUE;
3936*495ae853SAndroid Build Coastguard Worker break;
3937*495ae853SAndroid Build Coastguard Worker }
3938*495ae853SAndroid Build Coastguard Worker /* point to next node */
3939*495ae853SAndroid Build Coastguard Worker ps_node = ps_node->ps_bot_node;
3940*495ae853SAndroid Build Coastguard Worker }
3941*495ae853SAndroid Build Coastguard Worker
3942*495ae853SAndroid Build Coastguard Worker /* alteast one node should be present */
3943*495ae853SAndroid Build Coastguard Worker if(SVCD_FALSE == i4_node_present_flag)
3944*495ae853SAndroid Build Coastguard Worker {
3945*495ae853SAndroid Build Coastguard Worker return (NOT_OK);
3946*495ae853SAndroid Build Coastguard Worker }
3947*495ae853SAndroid Build Coastguard Worker }
3948*495ae853SAndroid Build Coastguard Worker
3949*495ae853SAndroid Build Coastguard Worker /* initially the access unit is considered to have a single resolution */
3950*495ae853SAndroid Build Coastguard Worker ai4_dep_id[0] = 0;
3951*495ae853SAndroid Build Coastguard Worker ps_vcl_nal->i4_num_res_lyrs = 1;
3952*495ae853SAndroid Build Coastguard Worker i4_restore_prms_flag = SVCD_FALSE;
3953*495ae853SAndroid Build Coastguard Worker
3954*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3955*495ae853SAndroid Build Coastguard Worker /* loop until all the nodes are processed */
3956*495ae853SAndroid Build Coastguard Worker /*-----------------------------------------------------------------------*/
3957*495ae853SAndroid Build Coastguard Worker while(NULL != ps_vcl_node)
3958*495ae853SAndroid Build Coastguard Worker {
3959*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_lyr_dqid, i4_status;
3960*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_bot_vcl_node;
3961*495ae853SAndroid Build Coastguard Worker WORD32 i4_res_chnge_flag = SVCD_FALSE;
3962*495ae853SAndroid Build Coastguard Worker WORD32 i4_dep_id, i4_qua_id;
3963*495ae853SAndroid Build Coastguard Worker WORD32 i4_prev_sps_pps_valid;
3964*495ae853SAndroid Build Coastguard Worker WORD32 i4_prev_au_prms_valid;
3965*495ae853SAndroid Build Coastguard Worker
3966*495ae853SAndroid Build Coastguard Worker /* set the reference layer DQID to -1 */
3967*495ae853SAndroid Build Coastguard Worker i4_ref_lyr_dqid = -1;
3968*495ae853SAndroid Build Coastguard Worker
3969*495ae853SAndroid Build Coastguard Worker /* get the current layer dependency and quality id */
3970*495ae853SAndroid Build Coastguard Worker i4_dep_id = ps_vcl_node->i4_dependency_id;
3971*495ae853SAndroid Build Coastguard Worker i4_qua_id = ps_vcl_node->i4_quality_id;
3972*495ae853SAndroid Build Coastguard Worker
3973*495ae853SAndroid Build Coastguard Worker /* get the valid status of prev access unit params */
3974*495ae853SAndroid Build Coastguard Worker i4_prev_au_prms_valid = ps_prev_au_prms[i4_dep_id].i4_updated_sts;
3975*495ae853SAndroid Build Coastguard Worker i4_prev_sps_pps_valid = ps_pps_sps_prev[(i4_dep_id << 4) + i4_qua_id].i4_updated_sts;
3976*495ae853SAndroid Build Coastguard Worker
3977*495ae853SAndroid Build Coastguard Worker /* missing layer handling */
3978*495ae853SAndroid Build Coastguard Worker if(NULL == ps_vcl_node->ps_first_vcl_nal)
3979*495ae853SAndroid Build Coastguard Worker {
3980*495ae853SAndroid Build Coastguard Worker /* store the params appropriately */
3981*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_idr_pic_flag = i4_idr_pic_flag;
3982*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_nal_ref_idc = i4_nal_ref_idc;
3983*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_idr_pic_num = i4_idr_pic_num;
3984*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_num_slices = 0;
3985*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_use_ref_base = 0;
3986*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_temporal_id = 0;
3987*495ae853SAndroid Build Coastguard Worker
3988*495ae853SAndroid Build Coastguard Worker if((0 != i4_dep_id) || (0 != i4_qua_id))
3989*495ae853SAndroid Build Coastguard Worker {
3990*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_nal_unit_type = CODED_SLICE_EXTENSION_NAL;
3991*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u1_acc_no_int_pred = 0;
3992*495ae853SAndroid Build Coastguard Worker }
3993*495ae853SAndroid Build Coastguard Worker else if(SVCD_TRUE == i4_idr_pic_flag)
3994*495ae853SAndroid Build Coastguard Worker {
3995*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_nal_unit_type = IDR_SLICE_NAL;
3996*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u1_acc_no_int_pred = 1;
3997*495ae853SAndroid Build Coastguard Worker }
3998*495ae853SAndroid Build Coastguard Worker else
3999*495ae853SAndroid Build Coastguard Worker {
4000*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_nal_unit_type = SLICE_NAL;
4001*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u1_acc_no_int_pred = 1;
4002*495ae853SAndroid Build Coastguard Worker }
4003*495ae853SAndroid Build Coastguard Worker
4004*495ae853SAndroid Build Coastguard Worker if(SVCD_FALSE == i4_idr_pic_flag)
4005*495ae853SAndroid Build Coastguard Worker {
4006*495ae853SAndroid Build Coastguard Worker /* pick the other params form previous access unit */
4007*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_prev_sps_pps_valid)
4008*495ae853SAndroid Build Coastguard Worker {
4009*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u1_pps_id =
4010*495ae853SAndroid Build Coastguard Worker ps_pps_sps_prev[(i4_dep_id << 4) + i4_qua_id].u1_pps_id;
4011*495ae853SAndroid Build Coastguard Worker
4012*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u1_sps_id =
4013*495ae853SAndroid Build Coastguard Worker ps_pps_sps_prev[(i4_dep_id << 4) + i4_qua_id].u1_sps_id;
4014*495ae853SAndroid Build Coastguard Worker }
4015*495ae853SAndroid Build Coastguard Worker
4016*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_prev_au_prms_valid)
4017*495ae853SAndroid Build Coastguard Worker {
4018*495ae853SAndroid Build Coastguard Worker if(0 == ps_vcl_node->i4_nal_ref_idc)
4019*495ae853SAndroid Build Coastguard Worker {
4020*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u2_frm_num = ps_prev_au_prms[i4_dep_id].u2_frm_num;
4021*495ae853SAndroid Build Coastguard Worker }
4022*495ae853SAndroid Build Coastguard Worker else
4023*495ae853SAndroid Build Coastguard Worker {
4024*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u2_frm_num = ps_prev_au_prms[i4_dep_id].u2_frm_num + 1;
4025*495ae853SAndroid Build Coastguard Worker }
4026*495ae853SAndroid Build Coastguard Worker }
4027*495ae853SAndroid Build Coastguard Worker }
4028*495ae853SAndroid Build Coastguard Worker }
4029*495ae853SAndroid Build Coastguard Worker
4030*495ae853SAndroid Build Coastguard Worker /* SPS id cannot change unless its an IDR pic */
4031*495ae853SAndroid Build Coastguard Worker if(SVCD_FALSE == ps_vcl_node->i4_idr_pic_flag)
4032*495ae853SAndroid Build Coastguard Worker {
4033*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_prev_sps_pps_valid)
4034*495ae853SAndroid Build Coastguard Worker {
4035*495ae853SAndroid Build Coastguard Worker /* store the SPS id of the current layer */
4036*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u1_sps_id = ps_pps_sps_prev[(i4_dep_id << 4) + i4_qua_id].u1_sps_id;
4037*495ae853SAndroid Build Coastguard Worker }
4038*495ae853SAndroid Build Coastguard Worker }
4039*495ae853SAndroid Build Coastguard Worker
4040*495ae853SAndroid Build Coastguard Worker /* store the PPS id and SPS id of the current layer */
4041*495ae853SAndroid Build Coastguard Worker ps_pps_sps_prev[(i4_dep_id << 4) + i4_qua_id].u1_pps_id = ps_vcl_node->u1_pps_id;
4042*495ae853SAndroid Build Coastguard Worker ps_pps_sps_prev[(i4_dep_id << 4) + i4_qua_id].u1_sps_id = ps_vcl_node->u1_sps_id;
4043*495ae853SAndroid Build Coastguard Worker ps_pps_sps_prev[(i4_dep_id << 4) + i4_qua_id].i4_updated_sts = SVCD_TRUE;
4044*495ae853SAndroid Build Coastguard Worker
4045*495ae853SAndroid Build Coastguard Worker /* handling of no_inter_layer_pred_flag 1 cases */
4046*495ae853SAndroid Build Coastguard Worker if((1 == ps_vcl_node->u1_acc_no_int_pred) && (NULL != ps_vcl_node->ps_bot_node))
4047*495ae853SAndroid Build Coastguard Worker {
4048*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_idr_pic_flag)
4049*495ae853SAndroid Build Coastguard Worker {
4050*495ae853SAndroid Build Coastguard Worker /* take a back up of the parameters till the current node. */
4051*495ae853SAndroid Build Coastguard Worker /* these parameters will be restored at the end of loop */
4052*495ae853SAndroid Build Coastguard Worker
4053*495ae853SAndroid Build Coastguard Worker if(SVCD_FALSE == i4_restore_prms_flag)
4054*495ae853SAndroid Build Coastguard Worker {
4055*495ae853SAndroid Build Coastguard Worker /* get the number of resolution detected so far */
4056*495ae853SAndroid Build Coastguard Worker i4_num_res_lyrs_bup = ps_vcl_nal->i4_num_res_lyrs;
4057*495ae853SAndroid Build Coastguard Worker
4058*495ae853SAndroid Build Coastguard Worker ps_node_bup = ps_vcl_node;
4059*495ae853SAndroid Build Coastguard Worker
4060*495ae853SAndroid Build Coastguard Worker /* set the restore params flag */
4061*495ae853SAndroid Build Coastguard Worker i4_restore_prms_flag = SVCD_TRUE;
4062*495ae853SAndroid Build Coastguard Worker }
4063*495ae853SAndroid Build Coastguard Worker }
4064*495ae853SAndroid Build Coastguard Worker else
4065*495ae853SAndroid Build Coastguard Worker {
4066*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_ref_dq_id = -1;
4067*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_res_change_flag = i4_res_chnge_flag;
4068*495ae853SAndroid Build Coastguard Worker
4069*495ae853SAndroid Build Coastguard Worker /* store the reference DQID for current dependency */
4070*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].i4_ref_dq_id = -1;
4071*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].u2_frm_num = ps_vcl_node->u2_frm_num;
4072*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].i4_nal_ref_id = ps_vcl_node->i4_nal_ref_idc;
4073*495ae853SAndroid Build Coastguard Worker
4074*495ae853SAndroid Build Coastguard Worker /* the bottom node is set to NULL */
4075*495ae853SAndroid Build Coastguard Worker ps_vcl_node->ps_bot_node = NULL;
4076*495ae853SAndroid Build Coastguard Worker break;
4077*495ae853SAndroid Build Coastguard Worker }
4078*495ae853SAndroid Build Coastguard Worker }
4079*495ae853SAndroid Build Coastguard Worker
4080*495ae853SAndroid Build Coastguard Worker /* derive the reference layer DQID for quality id equal to 0 */
4081*495ae853SAndroid Build Coastguard Worker if(0 == i4_qua_id)
4082*495ae853SAndroid Build Coastguard Worker {
4083*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_curr_sps;
4084*495ae853SAndroid Build Coastguard Worker dec_svc_seq_params_t *ps_curr_subset_sps;
4085*495ae853SAndroid Build Coastguard Worker
4086*495ae853SAndroid Build Coastguard Worker /* derive current SPS */
4087*495ae853SAndroid Build Coastguard Worker ps_curr_sps = ps_sps + ps_vcl_node->u1_sps_id;
4088*495ae853SAndroid Build Coastguard Worker ps_curr_subset_sps = ps_subset_sps + ps_vcl_node->u1_sps_id;
4089*495ae853SAndroid Build Coastguard Worker
4090*495ae853SAndroid Build Coastguard Worker {
4091*495ae853SAndroid Build Coastguard Worker WORD32 i4_max_frm_num;
4092*495ae853SAndroid Build Coastguard Worker
4093*495ae853SAndroid Build Coastguard Worker /* get the maximum value of frame number */
4094*495ae853SAndroid Build Coastguard Worker i4_max_frm_num = (1 << (ps_curr_sps->u1_bits_in_frm_num + 1));
4095*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u2_frm_num = ps_vcl_node->u2_frm_num % i4_max_frm_num;
4096*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == ps_vcl_node->i4_idr_pic_flag)
4097*495ae853SAndroid Build Coastguard Worker {
4098*495ae853SAndroid Build Coastguard Worker /* if idr then frm num should be 0 */
4099*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u2_frm_num = 0;
4100*495ae853SAndroid Build Coastguard Worker }
4101*495ae853SAndroid Build Coastguard Worker }
4102*495ae853SAndroid Build Coastguard Worker
4103*495ae853SAndroid Build Coastguard Worker /* store default params to inter layer deblocking params */
4104*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_inter_lyr_dblk_idc = 0;
4105*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_inter_lyr_beta_offset = 0;
4106*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_inter_lyr_alpha_c0_offset = 0;
4107*495ae853SAndroid Build Coastguard Worker /* No SEI support for scalability info*/
4108*495ae853SAndroid Build Coastguard Worker i4_status = NOT_OK;
4109*495ae853SAndroid Build Coastguard Worker
4110*495ae853SAndroid Build Coastguard Worker /* if no inter layer pred flag is present set the */
4111*495ae853SAndroid Build Coastguard Worker /* status to fail since the slices will not contain */
4112*495ae853SAndroid Build Coastguard Worker /* reference layer Dqid */
4113*495ae853SAndroid Build Coastguard Worker if(1 == ps_vcl_node->u1_acc_no_int_pred)
4114*495ae853SAndroid Build Coastguard Worker {
4115*495ae853SAndroid Build Coastguard Worker i4_status = NOT_OK;
4116*495ae853SAndroid Build Coastguard Worker }
4117*495ae853SAndroid Build Coastguard Worker else
4118*495ae853SAndroid Build Coastguard Worker {
4119*495ae853SAndroid Build Coastguard Worker WORD32 *pi4_ref_dq_id;
4120*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_dq_id_temp;
4121*495ae853SAndroid Build Coastguard Worker
4122*495ae853SAndroid Build Coastguard Worker /* check if the SEI message has given the ref_dq_id */
4123*495ae853SAndroid Build Coastguard Worker if(NOT_OK == i4_status)
4124*495ae853SAndroid Build Coastguard Worker {
4125*495ae853SAndroid Build Coastguard Worker pi4_ref_dq_id = &i4_ref_lyr_dqid;
4126*495ae853SAndroid Build Coastguard Worker }
4127*495ae853SAndroid Build Coastguard Worker else
4128*495ae853SAndroid Build Coastguard Worker {
4129*495ae853SAndroid Build Coastguard Worker pi4_ref_dq_id = &i4_ref_dq_id_temp;
4130*495ae853SAndroid Build Coastguard Worker }
4131*495ae853SAndroid Build Coastguard Worker
4132*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_get_ref_lyr_dqid(ps_vcl_node, ps_sps, ps_pps, pi4_ref_dq_id,
4133*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].i4_ref_dq_id,
4134*495ae853SAndroid Build Coastguard Worker &ps_svcd_ctxt->i4_error_code, ps_svcd_ctxt);
4135*495ae853SAndroid Build Coastguard Worker }
4136*495ae853SAndroid Build Coastguard Worker
4137*495ae853SAndroid Build Coastguard Worker /* no slice in the layer has been successfully decoded */
4138*495ae853SAndroid Build Coastguard Worker if(NOT_OK == i4_status)
4139*495ae853SAndroid Build Coastguard Worker {
4140*495ae853SAndroid Build Coastguard Worker /* check for IDR picture */
4141*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_idr_pic_flag)
4142*495ae853SAndroid Build Coastguard Worker {
4143*495ae853SAndroid Build Coastguard Worker /* set the next lower layer as the reference layer */
4144*495ae853SAndroid Build Coastguard Worker if(NULL != ps_vcl_node->ps_bot_node)
4145*495ae853SAndroid Build Coastguard Worker {
4146*495ae853SAndroid Build Coastguard Worker i4_ref_lyr_dqid = ps_vcl_node->ps_bot_node->i4_dependency_id << 4;
4147*495ae853SAndroid Build Coastguard Worker
4148*495ae853SAndroid Build Coastguard Worker i4_ref_lyr_dqid += ps_vcl_node->ps_bot_node->i4_quality_id;
4149*495ae853SAndroid Build Coastguard Worker }
4150*495ae853SAndroid Build Coastguard Worker else
4151*495ae853SAndroid Build Coastguard Worker {
4152*495ae853SAndroid Build Coastguard Worker i4_ref_lyr_dqid = -1;
4153*495ae853SAndroid Build Coastguard Worker }
4154*495ae853SAndroid Build Coastguard Worker }
4155*495ae853SAndroid Build Coastguard Worker else
4156*495ae853SAndroid Build Coastguard Worker {
4157*495ae853SAndroid Build Coastguard Worker /* take the reference dq id from previous access unit */
4158*495ae853SAndroid Build Coastguard Worker i4_ref_lyr_dqid = ps_prev_au_prms[i4_dep_id].i4_ref_dq_id;
4159*495ae853SAndroid Build Coastguard Worker }
4160*495ae853SAndroid Build Coastguard Worker }
4161*495ae853SAndroid Build Coastguard Worker
4162*495ae853SAndroid Build Coastguard Worker /* Update the DQID list based on ref DQID. */
4163*495ae853SAndroid Build Coastguard Worker /* This routine also updates the ref_dq_id */
4164*495ae853SAndroid Build Coastguard Worker /* in case the actual layer is completely lost */
4165*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_update_dqid(i4_ref_lyr_dqid, ps_vcl_node, &ps_bot_vcl_node);
4166*495ae853SAndroid Build Coastguard Worker
4167*495ae853SAndroid Build Coastguard Worker if(!(OK == i4_status))
4168*495ae853SAndroid Build Coastguard Worker {
4169*495ae853SAndroid Build Coastguard Worker return i4_status;
4170*495ae853SAndroid Build Coastguard Worker }
4171*495ae853SAndroid Build Coastguard Worker
4172*495ae853SAndroid Build Coastguard Worker /* store the reference DQID for current depedency and */
4173*495ae853SAndroid Build Coastguard Worker /* quality id 0 layer */
4174*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].i4_ref_dq_id = i4_ref_lyr_dqid;
4175*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].i4_nal_ref_id = ps_vcl_node->i4_nal_ref_idc;
4176*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].u2_frm_num = ps_vcl_node->u2_frm_num;
4177*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[i4_dep_id].i4_updated_sts = SVCD_TRUE;
4178*495ae853SAndroid Build Coastguard Worker
4179*495ae853SAndroid Build Coastguard Worker /* ------- Detect Resolution Change ---------------- */
4180*495ae853SAndroid Build Coastguard Worker {
4181*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_lower_sps = NULL;
4182*495ae853SAndroid Build Coastguard Worker dec_svc_seq_params_t *ps_lower_subset_sps = NULL;
4183*495ae853SAndroid Build Coastguard Worker
4184*495ae853SAndroid Build Coastguard Worker if(NULL != ps_bot_vcl_node)
4185*495ae853SAndroid Build Coastguard Worker {
4186*495ae853SAndroid Build Coastguard Worker if((NULL != ps_bot_vcl_node->ps_first_vcl_nal) ||
4187*495ae853SAndroid Build Coastguard Worker (SVCD_TRUE == i4_idr_pic_flag))
4188*495ae853SAndroid Build Coastguard Worker {
4189*495ae853SAndroid Build Coastguard Worker /* get the SPS of layer */
4190*495ae853SAndroid Build Coastguard Worker ps_lower_sps = ps_sps + ps_bot_vcl_node->u1_sps_id;
4191*495ae853SAndroid Build Coastguard Worker ps_lower_subset_sps = ps_subset_sps + ps_bot_vcl_node->u1_sps_id;
4192*495ae853SAndroid Build Coastguard Worker }
4193*495ae853SAndroid Build Coastguard Worker else
4194*495ae853SAndroid Build Coastguard Worker {
4195*495ae853SAndroid Build Coastguard Worker /* if the bottom layer is completely missed */
4196*495ae853SAndroid Build Coastguard Worker WORD32 i4_bot_dep_id, i4_bot_qua_id;
4197*495ae853SAndroid Build Coastguard Worker UWORD8 u1_sps_id = 0;
4198*495ae853SAndroid Build Coastguard Worker
4199*495ae853SAndroid Build Coastguard Worker /* sps id is picked from previous access unit */
4200*495ae853SAndroid Build Coastguard Worker i4_bot_dep_id = ps_bot_vcl_node->i4_dependency_id;
4201*495ae853SAndroid Build Coastguard Worker i4_bot_qua_id = ps_bot_vcl_node->i4_quality_id;
4202*495ae853SAndroid Build Coastguard Worker
4203*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE ==
4204*495ae853SAndroid Build Coastguard Worker ps_pps_sps_prev[(i4_bot_dep_id << 4) + i4_bot_qua_id].i4_updated_sts)
4205*495ae853SAndroid Build Coastguard Worker {
4206*495ae853SAndroid Build Coastguard Worker u1_sps_id =
4207*495ae853SAndroid Build Coastguard Worker ps_pps_sps_prev[(i4_bot_dep_id << 4) + i4_bot_qua_id].u1_sps_id;
4208*495ae853SAndroid Build Coastguard Worker }
4209*495ae853SAndroid Build Coastguard Worker else
4210*495ae853SAndroid Build Coastguard Worker {
4211*495ae853SAndroid Build Coastguard Worker /* should not enter here */
4212*495ae853SAndroid Build Coastguard Worker return NOT_OK;
4213*495ae853SAndroid Build Coastguard Worker }
4214*495ae853SAndroid Build Coastguard Worker
4215*495ae853SAndroid Build Coastguard Worker /* get the SPS of lower layer */
4216*495ae853SAndroid Build Coastguard Worker ps_lower_sps = ps_sps + u1_sps_id;
4217*495ae853SAndroid Build Coastguard Worker ps_lower_subset_sps = ps_subset_sps + u1_sps_id;
4218*495ae853SAndroid Build Coastguard Worker }
4219*495ae853SAndroid Build Coastguard Worker }
4220*495ae853SAndroid Build Coastguard Worker
4221*495ae853SAndroid Build Coastguard Worker /* call the function which detects resolution change */
4222*495ae853SAndroid Build Coastguard Worker i4_res_chnge_flag = isvcd_detect_res_change(
4223*495ae853SAndroid Build Coastguard Worker ps_curr_sps, ps_lower_sps, ps_curr_subset_sps, ps_lower_subset_sps);
4224*495ae853SAndroid Build Coastguard Worker
4225*495ae853SAndroid Build Coastguard Worker /* if a resolution exists below current resolution */
4226*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_res_chnge_flag)
4227*495ae853SAndroid Build Coastguard Worker {
4228*495ae853SAndroid Build Coastguard Worker /* if current picture id IDR */
4229*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_idr_pic_flag)
4230*495ae853SAndroid Build Coastguard Worker {
4231*495ae853SAndroid Build Coastguard Worker /* store the depedency id of bottom most layer in current resolution */
4232*495ae853SAndroid Build Coastguard Worker ai4_dep_id[ps_vcl_nal->i4_num_res_lyrs - 1] = i4_dep_id;
4233*495ae853SAndroid Build Coastguard Worker }
4234*495ae853SAndroid Build Coastguard Worker
4235*495ae853SAndroid Build Coastguard Worker /* increment the num resolution layer counter */
4236*495ae853SAndroid Build Coastguard Worker ps_vcl_nal->i4_num_res_lyrs++;
4237*495ae853SAndroid Build Coastguard Worker
4238*495ae853SAndroid Build Coastguard Worker /* store the SPS of target -1 and -2 resolution layers */
4239*495ae853SAndroid Build Coastguard Worker if(2 == ps_vcl_nal->i4_num_res_lyrs)
4240*495ae853SAndroid Build Coastguard Worker {
4241*495ae853SAndroid Build Coastguard Worker ps_sps_tgt_minus1_lyr = ps_curr_sps;
4242*495ae853SAndroid Build Coastguard Worker }
4243*495ae853SAndroid Build Coastguard Worker else if(3 == ps_vcl_nal->i4_num_res_lyrs)
4244*495ae853SAndroid Build Coastguard Worker {
4245*495ae853SAndroid Build Coastguard Worker ps_sps_tgt_minus2_lyr = ps_curr_sps;
4246*495ae853SAndroid Build Coastguard Worker }
4247*495ae853SAndroid Build Coastguard Worker else if(ps_vcl_nal->i4_num_res_lyrs > MAX_NUM_RES_LYRS)
4248*495ae853SAndroid Build Coastguard Worker {
4249*495ae853SAndroid Build Coastguard Worker return NOT_OK;
4250*495ae853SAndroid Build Coastguard Worker }
4251*495ae853SAndroid Build Coastguard Worker }
4252*495ae853SAndroid Build Coastguard Worker }
4253*495ae853SAndroid Build Coastguard Worker
4254*495ae853SAndroid Build Coastguard Worker /* -------- end of resolution change detection -------- */
4255*495ae853SAndroid Build Coastguard Worker }
4256*495ae853SAndroid Build Coastguard Worker else
4257*495ae853SAndroid Build Coastguard Worker {
4258*495ae853SAndroid Build Coastguard Worker i4_ref_lyr_dqid = (i4_dep_id << 4);
4259*495ae853SAndroid Build Coastguard Worker i4_ref_lyr_dqid += (i4_qua_id - 1);
4260*495ae853SAndroid Build Coastguard Worker
4261*495ae853SAndroid Build Coastguard Worker /* Update the DQID list based on ref DQID. */
4262*495ae853SAndroid Build Coastguard Worker /* This routine also updates the ref_dq_id */
4263*495ae853SAndroid Build Coastguard Worker /* in case the actual layer is completely lost */
4264*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_update_dqid(i4_ref_lyr_dqid, ps_vcl_node, &ps_bot_vcl_node);
4265*495ae853SAndroid Build Coastguard Worker
4266*495ae853SAndroid Build Coastguard Worker if(!(OK == i4_status))
4267*495ae853SAndroid Build Coastguard Worker {
4268*495ae853SAndroid Build Coastguard Worker return i4_status;
4269*495ae853SAndroid Build Coastguard Worker }
4270*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == ps_vcl_node->i4_idr_pic_flag)
4271*495ae853SAndroid Build Coastguard Worker {
4272*495ae853SAndroid Build Coastguard Worker /* if idr then frm num should be 0 */
4273*495ae853SAndroid Build Coastguard Worker ps_vcl_node->u2_frm_num = 0;
4274*495ae853SAndroid Build Coastguard Worker }
4275*495ae853SAndroid Build Coastguard Worker }
4276*495ae853SAndroid Build Coastguard Worker
4277*495ae853SAndroid Build Coastguard Worker /* Update resolution change flag inside VCL */
4278*495ae853SAndroid Build Coastguard Worker /* node structure. This parameter is later used*/
4279*495ae853SAndroid Build Coastguard Worker /* in detecting the top most layer in the */
4280*495ae853SAndroid Build Coastguard Worker /* resolution currently being decoded */
4281*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_res_change_flag = i4_res_chnge_flag;
4282*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_ref_dq_id = i4_ref_lyr_dqid;
4283*495ae853SAndroid Build Coastguard Worker
4284*495ae853SAndroid Build Coastguard Worker /* go to the next node */
4285*495ae853SAndroid Build Coastguard Worker ps_vcl_node = ps_bot_vcl_node;
4286*495ae853SAndroid Build Coastguard Worker }
4287*495ae853SAndroid Build Coastguard Worker
4288*495ae853SAndroid Build Coastguard Worker /* update the Dependency array for each resolution */
4289*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_idr_pic_flag)
4290*495ae853SAndroid Build Coastguard Worker {
4291*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx;
4292*495ae853SAndroid Build Coastguard Worker
4293*495ae853SAndroid Build Coastguard Worker ai4_dep_id[ps_vcl_nal->i4_num_res_lyrs - 1] = 0;
4294*495ae853SAndroid Build Coastguard Worker
4295*495ae853SAndroid Build Coastguard Worker /* loop over number of resolutions detected */
4296*495ae853SAndroid Build Coastguard Worker for(i4_idx = 0; i4_idx < ps_vcl_nal->i4_num_res_lyrs; i4_idx++)
4297*495ae853SAndroid Build Coastguard Worker {
4298*495ae853SAndroid Build Coastguard Worker pi4_dep_id_map[i4_idx] = ai4_dep_id[ps_vcl_nal->i4_num_res_lyrs - 1 - i4_idx];
4299*495ae853SAndroid Build Coastguard Worker }
4300*495ae853SAndroid Build Coastguard Worker }
4301*495ae853SAndroid Build Coastguard Worker
4302*495ae853SAndroid Build Coastguard Worker if(SVCD_TRUE == i4_restore_prms_flag)
4303*495ae853SAndroid Build Coastguard Worker {
4304*495ae853SAndroid Build Coastguard Worker /* restore the number of resolutions */
4305*495ae853SAndroid Build Coastguard Worker ps_vcl_nal->i4_num_res_lyrs = i4_num_res_lyrs_bup;
4306*495ae853SAndroid Build Coastguard Worker
4307*495ae853SAndroid Build Coastguard Worker ps_vcl_node = ps_node_bup;
4308*495ae853SAndroid Build Coastguard Worker
4309*495ae853SAndroid Build Coastguard Worker /* set the bottom node to NULL */
4310*495ae853SAndroid Build Coastguard Worker ps_vcl_node->ps_bot_node = NULL;
4311*495ae853SAndroid Build Coastguard Worker
4312*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_ref_dq_id = -1;
4313*495ae853SAndroid Build Coastguard Worker ps_vcl_node->i4_res_change_flag = SVCD_FALSE;
4314*495ae853SAndroid Build Coastguard Worker
4315*495ae853SAndroid Build Coastguard Worker /* store the reference DQID for current dependency */
4316*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[ps_vcl_node->i4_dependency_id].i4_ref_dq_id = -1;
4317*495ae853SAndroid Build Coastguard Worker
4318*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[ps_vcl_node->i4_dependency_id].u2_frm_num = ps_vcl_node->u2_frm_num;
4319*495ae853SAndroid Build Coastguard Worker
4320*495ae853SAndroid Build Coastguard Worker ps_prev_au_prms[ps_vcl_node->i4_dependency_id].i4_nal_ref_id = ps_vcl_node->i4_nal_ref_idc;
4321*495ae853SAndroid Build Coastguard Worker }
4322*495ae853SAndroid Build Coastguard Worker
4323*495ae853SAndroid Build Coastguard Worker /* Finally update the bottom most node in the current access unit */
4324*495ae853SAndroid Build Coastguard Worker ps_vcl_node = ps_vcl_nal->ps_top_node;
4325*495ae853SAndroid Build Coastguard Worker
4326*495ae853SAndroid Build Coastguard Worker while(NULL != ps_vcl_node->ps_bot_node)
4327*495ae853SAndroid Build Coastguard Worker {
4328*495ae853SAndroid Build Coastguard Worker ps_vcl_node = ps_vcl_node->ps_bot_node;
4329*495ae853SAndroid Build Coastguard Worker }
4330*495ae853SAndroid Build Coastguard Worker
4331*495ae853SAndroid Build Coastguard Worker ps_vcl_nal->ps_bot_node = ps_vcl_node;
4332*495ae853SAndroid Build Coastguard Worker
4333*495ae853SAndroid Build Coastguard Worker /* check on validity of Target Layer -1 and -2 dimensions */
4334*495ae853SAndroid Build Coastguard Worker if((NULL != ps_sps_tgt_minus1_lyr) && (0 == ps_sps_tgt_minus1_lyr->u1_is_valid))
4335*495ae853SAndroid Build Coastguard Worker {
4336*495ae853SAndroid Build Coastguard Worker if((H264_MAX_FRAME_WIDTH < (WORD32) (ps_sps_tgt_minus1_lyr->u2_frm_wd_in_mbs << 4)) ||
4337*495ae853SAndroid Build Coastguard Worker (H264_MAX_FRAME_HEIGHT < (WORD32) (ps_sps_tgt_minus1_lyr->u2_frm_ht_in_mbs << 4)))
4338*495ae853SAndroid Build Coastguard Worker {
4339*495ae853SAndroid Build Coastguard Worker return NOT_OK;
4340*495ae853SAndroid Build Coastguard Worker }
4341*495ae853SAndroid Build Coastguard Worker }
4342*495ae853SAndroid Build Coastguard Worker
4343*495ae853SAndroid Build Coastguard Worker if((NULL != ps_sps_tgt_minus2_lyr) && (0 == ps_sps_tgt_minus2_lyr->u1_is_valid))
4344*495ae853SAndroid Build Coastguard Worker {
4345*495ae853SAndroid Build Coastguard Worker if((H264_MAX_FRAME_WIDTH < (WORD32) (ps_sps_tgt_minus2_lyr->u2_frm_wd_in_mbs << 4)) ||
4346*495ae853SAndroid Build Coastguard Worker (H264_MAX_FRAME_HEIGHT < (WORD32) (ps_sps_tgt_minus2_lyr->u2_frm_ht_in_mbs << 4)))
4347*495ae853SAndroid Build Coastguard Worker {
4348*495ae853SAndroid Build Coastguard Worker return NOT_OK;
4349*495ae853SAndroid Build Coastguard Worker }
4350*495ae853SAndroid Build Coastguard Worker }
4351*495ae853SAndroid Build Coastguard Worker
4352*495ae853SAndroid Build Coastguard Worker return (OK);
4353*495ae853SAndroid Build Coastguard Worker }
4354*495ae853SAndroid Build Coastguard Worker
4355*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
4356*495ae853SAndroid Build Coastguard Worker /* */
4357*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_dec_non_vcl */
4358*495ae853SAndroid Build Coastguard Worker /* */
4359*495ae853SAndroid Build Coastguard Worker /* Description : this function decodes the NON VCL NAL units */
4360*495ae853SAndroid Build Coastguard Worker /* */
4361*495ae853SAndroid Build Coastguard Worker /* */
4362*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_out_non_vcl : pointer to the structure containing */
4363*495ae853SAndroid Build Coastguard Worker /* NON VCL NAL units */
4364*495ae853SAndroid Build Coastguard Worker /* ps_seq_params : pointer to array of SPS structures */
4365*495ae853SAndroid Build Coastguard Worker /* ps_pic_params : pointer to array of PPS structures */
4366*495ae853SAndroid Build Coastguard Worker /* ps_sei_ctxt : pointer to array of SEI structures */
4367*495ae853SAndroid Build Coastguard Worker /* Globals : none */
4368*495ae853SAndroid Build Coastguard Worker /* Processing : it decodes the units unitl all the units are */
4369*495ae853SAndroid Build Coastguard Worker /* decoded */
4370*495ae853SAndroid Build Coastguard Worker /* Outputs : decoded parameters in appropriate structures */
4371*495ae853SAndroid Build Coastguard Worker /* Returns : Success or Faliure */
4372*495ae853SAndroid Build Coastguard Worker /* */
4373*495ae853SAndroid Build Coastguard Worker /* Issues : */
4374*495ae853SAndroid Build Coastguard Worker /* */
4375*495ae853SAndroid Build Coastguard Worker /* Revision History: */
4376*495ae853SAndroid Build Coastguard Worker /* */
4377*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
4378*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 vijayakumar creation */
4379*495ae853SAndroid Build Coastguard Worker /* */
4380*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_dec_non_vcl(void * pv_out_non_vcl,void * pv_seq_params,void * pv_pic_params,svc_dec_ctxt_t * ps_svcd_ctxt)4381*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_dec_non_vcl(void *pv_out_non_vcl, void *pv_seq_params, void *pv_pic_params,
4382*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt)
4383*495ae853SAndroid Build Coastguard Worker {
4384*495ae853SAndroid Build Coastguard Worker /* local varibles */
4385*495ae853SAndroid Build Coastguard Worker non_vcl_nal_t *ps_non_vcl;
4386*495ae853SAndroid Build Coastguard Worker WORD32 i4_unit_indx;
4387*495ae853SAndroid Build Coastguard Worker non_vcl_buf_hdr_t *ps_non_vcl_buf;
4388*495ae853SAndroid Build Coastguard Worker WORD32 i_status = OK;
4389*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
4390*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
4391*495ae853SAndroid Build Coastguard Worker dec_bit_stream_t *ps_bitstrm;
4392*495ae853SAndroid Build Coastguard Worker
4393*495ae853SAndroid Build Coastguard Worker if((NULL == pv_out_non_vcl) || (NULL == pv_seq_params) || (NULL == pv_pic_params))
4394*495ae853SAndroid Build Coastguard Worker {
4395*495ae853SAndroid Build Coastguard Worker return NOT_OK;
4396*495ae853SAndroid Build Coastguard Worker }
4397*495ae853SAndroid Build Coastguard Worker UNUSED(pv_seq_params);
4398*495ae853SAndroid Build Coastguard Worker UNUSED(pv_pic_params);
4399*495ae853SAndroid Build Coastguard Worker
4400*495ae853SAndroid Build Coastguard Worker /* currently SEI decoding is not supported */
4401*495ae853SAndroid Build Coastguard Worker /* derive the local variables */
4402*495ae853SAndroid Build Coastguard Worker ps_non_vcl = (non_vcl_nal_t *) pv_out_non_vcl;
4403*495ae853SAndroid Build Coastguard Worker ps_non_vcl_buf = ps_non_vcl->ps_first_non_vcl_nal;
4404*495ae853SAndroid Build Coastguard Worker if(NULL == ps_non_vcl_buf) return (NOT_OK);
4405*495ae853SAndroid Build Coastguard Worker
4406*495ae853SAndroid Build Coastguard Worker /* loop until all NON VCL NAL are decoded */
4407*495ae853SAndroid Build Coastguard Worker for(i4_unit_indx = 0; i4_unit_indx < ps_non_vcl->i4_num_non_vcl_nals; i4_unit_indx++)
4408*495ae853SAndroid Build Coastguard Worker {
4409*495ae853SAndroid Build Coastguard Worker UWORD32 u4_nal_unit_type;
4410*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr;
4411*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
4412*495ae853SAndroid Build Coastguard Worker if(NULL == ps_non_vcl_buf) return (NOT_OK);
4413*495ae853SAndroid Build Coastguard Worker /* get the current NAL unit type */
4414*495ae853SAndroid Build Coastguard Worker u4_nal_unit_type = (UWORD32) ps_non_vcl_buf->i4_nal_unit_type;
4415*495ae853SAndroid Build Coastguard Worker if(u4_nal_unit_type > MAX_SVC_NAL_UNIT_TYPE) return (NOT_OK);
4416*495ae853SAndroid Build Coastguard Worker ps_dec->u1_nal_unit_type = u4_nal_unit_type;
4417*495ae853SAndroid Build Coastguard Worker
4418*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->pu4_buffer =
4419*495ae853SAndroid Build Coastguard Worker (UWORD32 *) ((UWORD8 *) ps_non_vcl_buf + ps_non_vcl_buf->i4_buf_offset);
4420*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->u4_ofst = 0;
4421*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->u4_max_ofst = isvcd_nal_rbsp_to_sodb(
4422*495ae853SAndroid Build Coastguard Worker (UWORD8 *) ps_dec->ps_bitstrm->pu4_buffer, ps_non_vcl_buf->i4_buf_size, 0);
4423*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_bitstrm->u4_max_ofst <= 0) return (NOT_OK);
4424*495ae853SAndroid Build Coastguard Worker
4425*495ae853SAndroid Build Coastguard Worker ps_bitstrm = ps_dec->ps_bitstrm;
4426*495ae853SAndroid Build Coastguard Worker
4427*495ae853SAndroid Build Coastguard Worker /* call the processing module based on nal unit type */
4428*495ae853SAndroid Build Coastguard Worker switch(u4_nal_unit_type)
4429*495ae853SAndroid Build Coastguard Worker {
4430*495ae853SAndroid Build Coastguard Worker case SEQ_PARAM_NAL:
4431*495ae853SAndroid Build Coastguard Worker
4432*495ae853SAndroid Build Coastguard Worker i_status = isvcd_parse_sps(ps_svc_lyr_dec, ps_bitstrm);
4433*495ae853SAndroid Build Coastguard Worker
4434*495ae853SAndroid Build Coastguard Worker if(!i_status)
4435*495ae853SAndroid Build Coastguard Worker {
4436*495ae853SAndroid Build Coastguard Worker ps_dec->i4_header_decoded |= 0x1;
4437*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u4_num_sps_ctr++;
4438*495ae853SAndroid Build Coastguard Worker
4439*495ae853SAndroid Build Coastguard Worker if(ps_svcd_ctxt->pic_width < ps_svc_lyr_dec->pic_width)
4440*495ae853SAndroid Build Coastguard Worker {
4441*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pic_width = ps_svc_lyr_dec->pic_width;
4442*495ae853SAndroid Build Coastguard Worker }
4443*495ae853SAndroid Build Coastguard Worker if(ps_svcd_ctxt->pic_height < ps_svc_lyr_dec->pic_height)
4444*495ae853SAndroid Build Coastguard Worker {
4445*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pic_height = ps_svc_lyr_dec->pic_height;
4446*495ae853SAndroid Build Coastguard Worker }
4447*495ae853SAndroid Build Coastguard Worker }
4448*495ae853SAndroid Build Coastguard Worker
4449*495ae853SAndroid Build Coastguard Worker if(i_status) return i_status;
4450*495ae853SAndroid Build Coastguard Worker
4451*495ae853SAndroid Build Coastguard Worker break;
4452*495ae853SAndroid Build Coastguard Worker case SUBSET_SPS_NAL:
4453*495ae853SAndroid Build Coastguard Worker
4454*495ae853SAndroid Build Coastguard Worker i_status = isvcd_parse_subset_sps(ps_svc_lyr_dec, ps_bitstrm);
4455*495ae853SAndroid Build Coastguard Worker
4456*495ae853SAndroid Build Coastguard Worker if(!i_status)
4457*495ae853SAndroid Build Coastguard Worker {
4458*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u4_num_sps_ctr++;
4459*495ae853SAndroid Build Coastguard Worker ps_dec->i4_header_decoded |= 0x1;
4460*495ae853SAndroid Build Coastguard Worker
4461*495ae853SAndroid Build Coastguard Worker if(ps_svcd_ctxt->pic_width < ps_svc_lyr_dec->pic_width)
4462*495ae853SAndroid Build Coastguard Worker {
4463*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pic_width = ps_svc_lyr_dec->pic_width;
4464*495ae853SAndroid Build Coastguard Worker }
4465*495ae853SAndroid Build Coastguard Worker if(ps_svcd_ctxt->pic_height < ps_svc_lyr_dec->pic_height)
4466*495ae853SAndroid Build Coastguard Worker {
4467*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pic_height = ps_svc_lyr_dec->pic_height;
4468*495ae853SAndroid Build Coastguard Worker }
4469*495ae853SAndroid Build Coastguard Worker }
4470*495ae853SAndroid Build Coastguard Worker if(i_status) return i_status;
4471*495ae853SAndroid Build Coastguard Worker
4472*495ae853SAndroid Build Coastguard Worker break;
4473*495ae853SAndroid Build Coastguard Worker
4474*495ae853SAndroid Build Coastguard Worker case PIC_PARAM_NAL:
4475*495ae853SAndroid Build Coastguard Worker
4476*495ae853SAndroid Build Coastguard Worker i_status = isvcd_parse_pps(ps_svc_lyr_dec, ps_bitstrm);
4477*495ae853SAndroid Build Coastguard Worker if(!i_status)
4478*495ae853SAndroid Build Coastguard Worker {
4479*495ae853SAndroid Build Coastguard Worker ps_dec->i4_header_decoded |= 0x2;
4480*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u4_num_pps_ctr++;
4481*495ae853SAndroid Build Coastguard Worker }
4482*495ae853SAndroid Build Coastguard Worker if(i_status) return i_status;
4483*495ae853SAndroid Build Coastguard Worker break;
4484*495ae853SAndroid Build Coastguard Worker case SEI_NAL:
4485*495ae853SAndroid Build Coastguard Worker {
4486*495ae853SAndroid Build Coastguard Worker i_status = ih264d_parse_sei_message(ps_dec, ps_bitstrm);
4487*495ae853SAndroid Build Coastguard Worker if(i_status) return i_status;
4488*495ae853SAndroid Build Coastguard Worker ih264d_parse_sei(ps_dec, ps_bitstrm);
4489*495ae853SAndroid Build Coastguard Worker }
4490*495ae853SAndroid Build Coastguard Worker break;
4491*495ae853SAndroid Build Coastguard Worker default:
4492*495ae853SAndroid Build Coastguard Worker /* no other NON VCL UNIT is supported */
4493*495ae853SAndroid Build Coastguard Worker break;
4494*495ae853SAndroid Build Coastguard Worker }
4495*495ae853SAndroid Build Coastguard Worker
4496*495ae853SAndroid Build Coastguard Worker /* get the next non vcl bufffer */
4497*495ae853SAndroid Build Coastguard Worker ps_non_vcl_buf = ps_non_vcl_buf->ps_next;
4498*495ae853SAndroid Build Coastguard Worker
4499*495ae853SAndroid Build Coastguard Worker } /* end of loop over all NAL units */
4500*495ae853SAndroid Build Coastguard Worker
4501*495ae853SAndroid Build Coastguard Worker return (OK);
4502*495ae853SAndroid Build Coastguard Worker }
4503*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
4504*495ae853SAndroid Build Coastguard Worker /* */
4505*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_seq_hdr_dec */
4506*495ae853SAndroid Build Coastguard Worker /* */
4507*495ae853SAndroid Build Coastguard Worker /* Description : This function decodes sequence header, which includes */
4508*495ae853SAndroid Build Coastguard Worker /* non VCL NAL before the first VCL unit */
4509*495ae853SAndroid Build Coastguard Worker /* Inputs : Decoder context, inbufs, place holder for number of bytes*/
4510*495ae853SAndroid Build Coastguard Worker /* consumed and number of packets consumed */
4511*495ae853SAndroid Build Coastguard Worker /* Globals : None */
4512*495ae853SAndroid Build Coastguard Worker /* Processing : 1. Parse non VCL units before first VCL unit */
4513*495ae853SAndroid Build Coastguard Worker /* 2. Decode parsed non VCL units */
4514*495ae853SAndroid Build Coastguard Worker /* Outputs : Decoded header */
4515*495ae853SAndroid Build Coastguard Worker /* Returns : OK or NOT_OK */
4516*495ae853SAndroid Build Coastguard Worker /* */
4517*495ae853SAndroid Build Coastguard Worker /* Issues : no known issues */
4518*495ae853SAndroid Build Coastguard Worker /* */
4519*495ae853SAndroid Build Coastguard Worker /* Revision History: */
4520*495ae853SAndroid Build Coastguard Worker /* */
4521*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
4522*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Creation */
4523*495ae853SAndroid Build Coastguard Worker /* */
4524*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_seq_hdr_dec(svc_dec_ctxt_t * ps_svcd_ctxt,ivd_video_decode_ip_t * ps_in_bufs,UWORD32 * pu4_bytes_consumed)4525*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_seq_hdr_dec(svc_dec_ctxt_t *ps_svcd_ctxt, ivd_video_decode_ip_t *ps_in_bufs,
4526*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bytes_consumed)
4527*495ae853SAndroid Build Coastguard Worker {
4528*495ae853SAndroid Build Coastguard Worker WORD32 i4_status;
4529*495ae853SAndroid Build Coastguard Worker
4530*495ae853SAndroid Build Coastguard Worker /* Decode all non VCL NAL till first VCL NAL is encountered */
4531*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->s_non_vcl_nal.i4_num_non_vcl_nals = 0;
4532*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_nal_parse_non_vcl_nal(
4533*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_nal_parse_ctxt, ps_in_bufs->pv_stream_buffer, &ps_svcd_ctxt->s_non_vcl_nal,
4534*495ae853SAndroid Build Coastguard Worker pu4_bytes_consumed, &ps_in_bufs->u4_num_Bytes);
4535*495ae853SAndroid Build Coastguard Worker
4536*495ae853SAndroid Build Coastguard Worker /* Note: The bitstream extraction module expects updated */
4537*495ae853SAndroid Build Coastguard Worker /* pointer whenever a new call to this module has been */
4538*495ae853SAndroid Build Coastguard Worker /* made. Hence the buffer pointer has to be incremented */
4539*495ae853SAndroid Build Coastguard Worker /* by bytes consumed */
4540*495ae853SAndroid Build Coastguard Worker ps_in_bufs->u4_num_Bytes -= *pu4_bytes_consumed;
4541*495ae853SAndroid Build Coastguard Worker
4542*495ae853SAndroid Build Coastguard Worker /* ------------------------------------------------------ */
4543*495ae853SAndroid Build Coastguard Worker /* Decoding of non VCL data. As current implementation it */
4544*495ae853SAndroid Build Coastguard Worker /* decodes the followings: */
4545*495ae853SAndroid Build Coastguard Worker /* 1. Sequence parameter set */
4546*495ae853SAndroid Build Coastguard Worker /* 2. Picture parameter set */
4547*495ae853SAndroid Build Coastguard Worker /* 3. SEI message */
4548*495ae853SAndroid Build Coastguard Worker /* ------------------------------------------------------ */
4549*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_dec_non_vcl(&ps_svcd_ctxt->s_non_vcl_nal, ps_svcd_ctxt->ps_sps, ps_svcd_ctxt->ps_pps,
4550*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt);
4551*495ae853SAndroid Build Coastguard Worker
4552*495ae853SAndroid Build Coastguard Worker return (i4_status);
4553*495ae853SAndroid Build Coastguard Worker }
4554*495ae853SAndroid Build Coastguard Worker
4555*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
4556*495ae853SAndroid Build Coastguard Worker /* */
4557*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_pre_parse_refine_au */
4558*495ae853SAndroid Build Coastguard Worker /* */
4559*495ae853SAndroid Build Coastguard Worker /* Description : This function process a decode call */
4560*495ae853SAndroid Build Coastguard Worker /* Inputs : ps_dec_ctxt : decoder context structure */
4561*495ae853SAndroid Build Coastguard Worker /* ps_in_bufs : input buffer descriptor */
4562*495ae853SAndroid Build Coastguard Worker /* pu4_bytes_consumed : pointer to store the bytes consumed */
4563*495ae853SAndroid Build Coastguard Worker /* pi4_packets_consumed : pointer to store the packets */
4564*495ae853SAndroid Build Coastguard Worker /* consumed */
4565*495ae853SAndroid Build Coastguard Worker /* Globals : None */
4566*495ae853SAndroid Build Coastguard Worker /* Processing : It calls the NAL parse module to parse the input stream */
4567*495ae853SAndroid Build Coastguard Worker /* if a picture boundary is detected it calls the */
4568*495ae853SAndroid Build Coastguard Worker /* Dependency list refiniment and Picture Decode routines */
4569*495ae853SAndroid Build Coastguard Worker /* Outputs : Decoded picture */
4570*495ae853SAndroid Build Coastguard Worker /* Returns : OK or NOT_OK */
4571*495ae853SAndroid Build Coastguard Worker /* */
4572*495ae853SAndroid Build Coastguard Worker /* Issues : None */
4573*495ae853SAndroid Build Coastguard Worker /* */
4574*495ae853SAndroid Build Coastguard Worker /* Revision History: */
4575*495ae853SAndroid Build Coastguard Worker /* */
4576*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
4577*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Creation */
4578*495ae853SAndroid Build Coastguard Worker /* */
4579*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_pre_parse_refine_au(svc_dec_ctxt_t * ps_svcd_ctxt,ivd_video_decode_ip_t * ps_in_bufs,UWORD32 * pu4_bytes_consumed)4580*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_pre_parse_refine_au(svc_dec_ctxt_t *ps_svcd_ctxt, ivd_video_decode_ip_t *ps_in_bufs,
4581*495ae853SAndroid Build Coastguard Worker UWORD32 *pu4_bytes_consumed)
4582*495ae853SAndroid Build Coastguard Worker {
4583*495ae853SAndroid Build Coastguard Worker WORD32 i4_status = 0, i4_non_vcl_status;
4584*495ae853SAndroid Build Coastguard Worker UWORD32 u4_bytes_consumed = 0;
4585*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
4586*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
4587*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr;
4588*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
4589*495ae853SAndroid Build Coastguard Worker
4590*495ae853SAndroid Build Coastguard Worker /* Sequence header decode: */
4591*495ae853SAndroid Build Coastguard Worker /* If sequence header is not decoded then decode the seq */
4592*495ae853SAndroid Build Coastguard Worker /* uence header */
4593*495ae853SAndroid Build Coastguard Worker
4594*495ae853SAndroid Build Coastguard Worker if(SVCD_FALSE == ps_dec->i4_header_decoded)
4595*495ae853SAndroid Build Coastguard Worker {
4596*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_seq_hdr_dec(ps_svcd_ctxt, ps_in_bufs, &u4_bytes_consumed);
4597*495ae853SAndroid Build Coastguard Worker
4598*495ae853SAndroid Build Coastguard Worker if((VCL_NAL_FOUND_TRUE == i4_status) && (ps_svcd_ctxt->u4_num_sps_ctr != 0) &&
4599*495ae853SAndroid Build Coastguard Worker (ps_svcd_ctxt->u4_num_pps_ctr != 0))
4600*495ae853SAndroid Build Coastguard Worker {
4601*495ae853SAndroid Build Coastguard Worker /* set the header decoded flag */
4602*495ae853SAndroid Build Coastguard Worker ps_dec->i4_header_decoded = 3;
4603*495ae853SAndroid Build Coastguard Worker }
4604*495ae853SAndroid Build Coastguard Worker }
4605*495ae853SAndroid Build Coastguard Worker *pu4_bytes_consumed = u4_bytes_consumed;
4606*495ae853SAndroid Build Coastguard Worker if (i4_status)
4607*495ae853SAndroid Build Coastguard Worker {
4608*495ae853SAndroid Build Coastguard Worker return NOT_OK;
4609*495ae853SAndroid Build Coastguard Worker }
4610*495ae853SAndroid Build Coastguard Worker if(1 == ps_dec->i4_decode_header)
4611*495ae853SAndroid Build Coastguard Worker {
4612*495ae853SAndroid Build Coastguard Worker return OK;
4613*495ae853SAndroid Build Coastguard Worker }
4614*495ae853SAndroid Build Coastguard Worker /* Bit-stream Parsing. It performs following tasks: */
4615*495ae853SAndroid Build Coastguard Worker /* 1. NAL hader decoder */
4616*495ae853SAndroid Build Coastguard Worker /* 2. Emulation prevention and byte swap */
4617*495ae853SAndroid Build Coastguard Worker /* (During this process data to moved to output*/
4618*495ae853SAndroid Build Coastguard Worker /* buffer) */
4619*495ae853SAndroid Build Coastguard Worker /* 3. Dependency list creation based on NAL header*/
4620*495ae853SAndroid Build Coastguard Worker /* 4. Detection of picture boundary */
4621*495ae853SAndroid Build Coastguard Worker /* NOTE1: */
4622*495ae853SAndroid Build Coastguard Worker /* Output buffers for VCL and non VCL data are */
4623*495ae853SAndroid Build Coastguard Worker /* different. VCL data can be retrieved through */
4624*495ae853SAndroid Build Coastguard Worker /* dependency list. Whereas non VCL data is stored in*/
4625*495ae853SAndroid Build Coastguard Worker /* one single buffer, which is accessed through NON */
4626*495ae853SAndroid Build Coastguard Worker /* VCL structure */
4627*495ae853SAndroid Build Coastguard Worker /* NOTE2:Partial input case for nal parsing requires a */
4628*495ae853SAndroid Build Coastguard Worker /* flush API to be called when end of bitstream */
4629*495ae853SAndroid Build Coastguard Worker /* occurs */
4630*495ae853SAndroid Build Coastguard Worker
4631*495ae853SAndroid Build Coastguard Worker if(SVCD_FALSE == ps_svcd_ctxt->i4_eos_flag)
4632*495ae853SAndroid Build Coastguard Worker {
4633*495ae853SAndroid Build Coastguard Worker if(ps_dec->i4_header_decoded == 3)
4634*495ae853SAndroid Build Coastguard Worker {
4635*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_nal_parse_vcl_nal_partial(
4636*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_nal_parse_ctxt, ps_in_bufs->pv_stream_buffer,
4637*495ae853SAndroid Build Coastguard Worker &ps_svcd_ctxt->s_non_vcl_nal, &ps_svcd_ctxt->s_vcl_nal, &u4_bytes_consumed,
4638*495ae853SAndroid Build Coastguard Worker &ps_in_bufs->u4_num_Bytes);
4639*495ae853SAndroid Build Coastguard Worker }
4640*495ae853SAndroid Build Coastguard Worker else
4641*495ae853SAndroid Build Coastguard Worker {
4642*495ae853SAndroid Build Coastguard Worker return NOT_OK;
4643*495ae853SAndroid Build Coastguard Worker }
4644*495ae853SAndroid Build Coastguard Worker }
4645*495ae853SAndroid Build Coastguard Worker else
4646*495ae853SAndroid Build Coastguard Worker {
4647*495ae853SAndroid Build Coastguard Worker void *pv_nal_parse_ctxt;
4648*495ae853SAndroid Build Coastguard Worker pv_nal_parse_ctxt = ps_svcd_ctxt->pv_nal_parse_ctxt;
4649*495ae853SAndroid Build Coastguard Worker
4650*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_nal_parse_partial_signal_eos(pv_nal_parse_ctxt, &ps_svcd_ctxt->s_vcl_nal,
4651*495ae853SAndroid Build Coastguard Worker &ps_svcd_ctxt->s_non_vcl_nal);
4652*495ae853SAndroid Build Coastguard Worker
4653*495ae853SAndroid Build Coastguard Worker u4_bytes_consumed = 0;
4654*495ae853SAndroid Build Coastguard Worker }
4655*495ae853SAndroid Build Coastguard Worker
4656*495ae853SAndroid Build Coastguard Worker *pu4_bytes_consumed += u4_bytes_consumed;
4657*495ae853SAndroid Build Coastguard Worker
4658*495ae853SAndroid Build Coastguard Worker /* Picture Boundary detected: Go ahead and do the decoding */
4659*495ae853SAndroid Build Coastguard Worker /* Picture boundary not detected: Otherwsie retrun from this*/
4660*495ae853SAndroid Build Coastguard Worker /* function and update the bytes consumed variable. This */
4661*495ae853SAndroid Build Coastguard Worker /* should be repeated till we get a picture boundary */
4662*495ae853SAndroid Build Coastguard Worker
4663*495ae853SAndroid Build Coastguard Worker if(PIC_BOUNDARY_FALSE == i4_status)
4664*495ae853SAndroid Build Coastguard Worker {
4665*495ae853SAndroid Build Coastguard Worker return (NOT_OK);
4666*495ae853SAndroid Build Coastguard Worker }
4667*495ae853SAndroid Build Coastguard Worker
4668*495ae853SAndroid Build Coastguard Worker else if(FLUSH_DECODED_PICTURE == i4_status)
4669*495ae853SAndroid Build Coastguard Worker {
4670*495ae853SAndroid Build Coastguard Worker /* No more data is expected to come. Pictures decoded */
4671*495ae853SAndroid Build Coastguard Worker /* so far needs to be sent for display */
4672*495ae853SAndroid Build Coastguard Worker return (FLUSH);
4673*495ae853SAndroid Build Coastguard Worker }
4674*495ae853SAndroid Build Coastguard Worker
4675*495ae853SAndroid Build Coastguard Worker if(PIC_BOUNDARY_TRUE != i4_status)
4676*495ae853SAndroid Build Coastguard Worker {
4677*495ae853SAndroid Build Coastguard Worker return (NOT_OK);
4678*495ae853SAndroid Build Coastguard Worker }
4679*495ae853SAndroid Build Coastguard Worker
4680*495ae853SAndroid Build Coastguard Worker /* check if the application has set any of the skip modes */
4681*495ae853SAndroid Build Coastguard Worker /* add the support for P and B skip modes */
4682*495ae853SAndroid Build Coastguard Worker /* if(ps_dec_ctxt->s_dyn_prms.u1_frame_skip_mode) */
4683*495ae853SAndroid Build Coastguard Worker
4684*495ae853SAndroid Build Coastguard Worker /* Parse slice header to decode reference layer dQId and refine */
4685*495ae853SAndroid Build Coastguard Worker /* the dependency list */
4686*495ae853SAndroid Build Coastguard Worker /* NOTE: Yes, this processing could be moved into NAL parsing */
4687*495ae853SAndroid Build Coastguard Worker /* routine to avoid unneccessary emulation prevention and */
4688*495ae853SAndroid Build Coastguard Worker /* byte swapping over discardable data. This Optimization */
4689*495ae853SAndroid Build Coastguard Worker /* has been deferred for some time. In future if we found */
4690*495ae853SAndroid Build Coastguard Worker /* that there are many such streams which doesn't set */
4691*495ae853SAndroid Build Coastguard Worker /* 'discard_flag' correctly in NAL header, we will take a */
4692*495ae853SAndroid Build Coastguard Worker /* hit to optimize it. */
4693*495ae853SAndroid Build Coastguard Worker
4694*495ae853SAndroid Build Coastguard Worker /* At present this routine also performs the following */
4695*495ae853SAndroid Build Coastguard Worker /* 1. Refine DQID list based on reference layer DQID */
4696*495ae853SAndroid Build Coastguard Worker /* 2. Calculates the POC for the target layer */
4697*495ae853SAndroid Build Coastguard Worker
4698*495ae853SAndroid Build Coastguard Worker {
4699*495ae853SAndroid Build Coastguard Worker i4_status = isvcd_refine_dep_list(
4700*495ae853SAndroid Build Coastguard Worker &ps_svcd_ctxt->s_vcl_nal, ps_svcd_ctxt->ps_sps, ps_svcd_ctxt->ps_subset_sps,
4701*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_pps, &ps_svcd_ctxt->ai4_dq_id_map[0], &ps_svcd_ctxt->as_au_prms_dep[0],
4702*495ae853SAndroid Build Coastguard Worker &ps_svcd_ctxt->as_pps_sps_prev_au[0], &ps_svcd_ctxt->i4_error_code, ps_svcd_ctxt);
4703*495ae853SAndroid Build Coastguard Worker }
4704*495ae853SAndroid Build Coastguard Worker
4705*495ae853SAndroid Build Coastguard Worker if(0 != ps_svcd_ctxt->s_non_vcl_nal.i4_num_non_vcl_nals)
4706*495ae853SAndroid Build Coastguard Worker {
4707*495ae853SAndroid Build Coastguard Worker /* Decoding of non VCL data. In current implementation it */
4708*495ae853SAndroid Build Coastguard Worker /* decodes the followings: */
4709*495ae853SAndroid Build Coastguard Worker /* 1. Sequence parameter set */
4710*495ae853SAndroid Build Coastguard Worker /* 2. Picture parameter set */
4711*495ae853SAndroid Build Coastguard Worker /* 3. SEI message */
4712*495ae853SAndroid Build Coastguard Worker i4_non_vcl_status = isvcd_dec_non_vcl(&ps_svcd_ctxt->s_non_vcl_nal, ps_svcd_ctxt->ps_sps,
4713*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->ps_pps, ps_svcd_ctxt);
4714*495ae853SAndroid Build Coastguard Worker
4715*495ae853SAndroid Build Coastguard Worker if(OK != i4_non_vcl_status) return i4_non_vcl_status;
4716*495ae853SAndroid Build Coastguard Worker }
4717*495ae853SAndroid Build Coastguard Worker if(OK != i4_status) return (i4_status);
4718*495ae853SAndroid Build Coastguard Worker return (OK);
4719*495ae853SAndroid Build Coastguard Worker }
4720*495ae853SAndroid Build Coastguard Worker
4721*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
4722*495ae853SAndroid Build Coastguard Worker /* */
4723*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_video_decode */
4724*495ae853SAndroid Build Coastguard Worker /* */
4725*495ae853SAndroid Build Coastguard Worker /* Description : handle video decode API command */
4726*495ae853SAndroid Build Coastguard Worker /* */
4727*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
4728*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
4729*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
4730*495ae853SAndroid Build Coastguard Worker /* Outputs : */
4731*495ae853SAndroid Build Coastguard Worker /* Returns : void */
4732*495ae853SAndroid Build Coastguard Worker /* */
4733*495ae853SAndroid Build Coastguard Worker /* Issues : none */
4734*495ae853SAndroid Build Coastguard Worker /* */
4735*495ae853SAndroid Build Coastguard Worker /* Revision History: */
4736*495ae853SAndroid Build Coastguard Worker /* */
4737*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
4738*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
4739*495ae853SAndroid Build Coastguard Worker /* */
4740*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
4741*495ae853SAndroid Build Coastguard Worker
isvcd_video_decode(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)4742*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
4743*495ae853SAndroid Build Coastguard Worker {
4744*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
4745*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec_zero_lyr;
4746*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
4747*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_zero_dec;
4748*495ae853SAndroid Build Coastguard Worker
4749*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
4750*495ae853SAndroid Build Coastguard Worker WORD32 i4_err_status = 0;
4751*495ae853SAndroid Build Coastguard Worker
4752*495ae853SAndroid Build Coastguard Worker UWORD32 bytes_consumed = 0;
4753*495ae853SAndroid Build Coastguard Worker WORD32 ret = 0, api_ret_value = IV_SUCCESS;
4754*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_ip_t *ps_h264d_dec_ip;
4755*495ae853SAndroid Build Coastguard Worker isvcd_video_decode_op_t *ps_h264d_dec_op;
4756*495ae853SAndroid Build Coastguard Worker ivd_video_decode_ip_t *ps_dec_ip;
4757*495ae853SAndroid Build Coastguard Worker ivd_video_decode_op_t *ps_dec_op;
4758*495ae853SAndroid Build Coastguard Worker UWORD8 u1_res_id;
4759*495ae853SAndroid Build Coastguard Worker
4760*495ae853SAndroid Build Coastguard Worker ithread_set_name((void *) "Parse_thread");
4761*495ae853SAndroid Build Coastguard Worker
4762*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) (dec_hdl->pv_codec_handle);
4763*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[0];
4764*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
4765*495ae853SAndroid Build Coastguard Worker
4766*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_ip = (isvcd_video_decode_ip_t *) pv_api_ip;
4767*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op = (isvcd_video_decode_op_t *) pv_api_op;
4768*495ae853SAndroid Build Coastguard Worker ps_dec_ip = &ps_h264d_dec_ip->s_ivd_video_decode_ip_t;
4769*495ae853SAndroid Build Coastguard Worker ps_dec_op = &ps_h264d_dec_op->s_ivd_video_decode_op_t;
4770*495ae853SAndroid Build Coastguard Worker
4771*495ae853SAndroid Build Coastguard Worker {
4772*495ae853SAndroid Build Coastguard Worker UWORD32 u4_size;
4773*495ae853SAndroid Build Coastguard Worker u4_size = ps_dec_op->u4_size;
4774*495ae853SAndroid Build Coastguard Worker memset(ps_h264d_dec_op, 0, sizeof(isvcd_video_decode_op_t));
4775*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_size = u4_size;
4776*495ae853SAndroid Build Coastguard Worker }
4777*495ae853SAndroid Build Coastguard Worker
4778*495ae853SAndroid Build Coastguard Worker ps_dec->pv_dec_out = ps_dec_op;
4779*495ae853SAndroid Build Coastguard Worker if(ps_dec->init_done != 1)
4780*495ae853SAndroid Build Coastguard Worker {
4781*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4782*495ae853SAndroid Build Coastguard Worker }
4783*495ae853SAndroid Build Coastguard Worker
4784*495ae853SAndroid Build Coastguard Worker /*Data memory barries instruction,so that bitstream write by the application
4785*495ae853SAndroid Build Coastguard Worker * is complete*/
4786*495ae853SAndroid Build Coastguard Worker DATA_SYNC();
4787*495ae853SAndroid Build Coastguard Worker
4788*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u1_flushfrm)
4789*495ae853SAndroid Build Coastguard Worker {
4790*495ae853SAndroid Build Coastguard Worker if(ps_dec_ip->pv_stream_buffer == NULL)
4791*495ae853SAndroid Build Coastguard Worker {
4792*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
4793*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= IVD_DEC_FRM_BS_BUF_NULL;
4794*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4795*495ae853SAndroid Build Coastguard Worker }
4796*495ae853SAndroid Build Coastguard Worker if(ps_dec_ip->u4_num_Bytes <= 16)
4797*495ae853SAndroid Build Coastguard Worker {
4798*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
4799*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= IVD_DEC_NUMBYTES_INV;
4800*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4801*495ae853SAndroid Build Coastguard Worker }
4802*495ae853SAndroid Build Coastguard Worker }
4803*495ae853SAndroid Build Coastguard Worker #ifdef KEEP_THREADS_ACTIVE
4804*495ae853SAndroid Build Coastguard Worker {
4805*495ae853SAndroid Build Coastguard Worker UWORD32 i;
4806*495ae853SAndroid Build Coastguard Worker ps_dec->i4_break_threads = 0;
4807*495ae853SAndroid Build Coastguard Worker for(i = 0; i < 2; i++)
4808*495ae853SAndroid Build Coastguard Worker {
4809*495ae853SAndroid Build Coastguard Worker ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[i]);
4810*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IV_SUCCESS), ret);
4811*495ae853SAndroid Build Coastguard Worker
4812*495ae853SAndroid Build Coastguard Worker ps_dec->ai4_process_start[i] = PROC_INIT;
4813*495ae853SAndroid Build Coastguard Worker
4814*495ae853SAndroid Build Coastguard Worker ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[i]);
4815*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IV_SUCCESS), ret);
4816*495ae853SAndroid Build Coastguard Worker }
4817*495ae853SAndroid Build Coastguard Worker }
4818*495ae853SAndroid Build Coastguard Worker #else
4819*495ae853SAndroid Build Coastguard Worker ps_dec->u4_dec_thread_created = 0;
4820*495ae853SAndroid Build Coastguard Worker ps_dec->u4_bs_deblk_thread_created = 0;
4821*495ae853SAndroid Build Coastguard Worker #endif
4822*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_num_bytes_consumed = 0;
4823*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_reorder_depth = -1;
4824*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_display_index = DEFAULT_POC;
4825*495ae853SAndroid Build Coastguard Worker
4826*495ae853SAndroid Build Coastguard Worker ps_dec->ps_out_buffer = NULL;
4827*495ae853SAndroid Build Coastguard Worker if(ps_dec_ip->u4_size >= offsetof(ivd_video_decode_ip_t, s_out_buffer))
4828*495ae853SAndroid Build Coastguard Worker ps_dec->ps_out_buffer = &ps_dec_ip->s_out_buffer;
4829*495ae853SAndroid Build Coastguard Worker
4830*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf && ps_dec->i4_decode_header == 0)
4831*495ae853SAndroid Build Coastguard Worker {
4832*495ae853SAndroid Build Coastguard Worker UWORD32 i;
4833*495ae853SAndroid Build Coastguard Worker if((ps_dec->ps_out_buffer->u4_num_bufs == 0) ||
4834*495ae853SAndroid Build Coastguard Worker (ps_dec->ps_out_buffer->u4_num_bufs > IVD_VIDDEC_MAX_IO_BUFFERS))
4835*495ae853SAndroid Build Coastguard Worker {
4836*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
4837*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUFS;
4838*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4839*495ae853SAndroid Build Coastguard Worker }
4840*495ae853SAndroid Build Coastguard Worker
4841*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_dec->ps_out_buffer->u4_num_bufs; i++)
4842*495ae853SAndroid Build Coastguard Worker {
4843*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_out_buffer->pu1_bufs[i] == NULL)
4844*495ae853SAndroid Build Coastguard Worker {
4845*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
4846*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= IVD_DISP_FRM_OP_BUF_NULL;
4847*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4848*495ae853SAndroid Build Coastguard Worker }
4849*495ae853SAndroid Build Coastguard Worker
4850*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_out_buffer->u4_min_out_buf_size[i] == 0)
4851*495ae853SAndroid Build Coastguard Worker {
4852*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
4853*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUF_SIZE;
4854*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4855*495ae853SAndroid Build Coastguard Worker }
4856*495ae853SAndroid Build Coastguard Worker }
4857*495ae853SAndroid Build Coastguard Worker }
4858*495ae853SAndroid Build Coastguard Worker
4859*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_total_frames_decoded >= NUM_FRAMES_LIMIT)
4860*495ae853SAndroid Build Coastguard Worker {
4861*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = ERROR_FRAME_LIMIT_OVER;
4862*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4863*495ae853SAndroid Build Coastguard Worker }
4864*495ae853SAndroid Build Coastguard Worker
4865*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = 0;
4866*495ae853SAndroid Build Coastguard Worker ps_dec_op->e_pic_type = IV_NA_FRAME;
4867*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_output_present = 0;
4868*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_frame_decoded_flag = 0;
4869*495ae853SAndroid Build Coastguard Worker
4870*495ae853SAndroid Build Coastguard Worker /* In case the decoder is not in flush mode(in shared mode),
4871*495ae853SAndroid Build Coastguard Worker then decoder has to pick up a buffer to write current frame.
4872*495ae853SAndroid Build Coastguard Worker Check if a frame is available in such cases */
4873*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_init_dec_flag == 1 && ps_dec->u4_share_disp_buf == 1 && ps_dec->u1_flushfrm == 0)
4874*495ae853SAndroid Build Coastguard Worker {
4875*495ae853SAndroid Build Coastguard Worker UWORD32 i;
4876*495ae853SAndroid Build Coastguard Worker WORD32 disp_avail = 0, free_id;
4877*495ae853SAndroid Build Coastguard Worker
4878*495ae853SAndroid Build Coastguard Worker /* Check if at least one buffer is available with the codec */
4879*495ae853SAndroid Build Coastguard Worker /* If not then return to application with error */
4880*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_dec->u1_pic_bufs; i++)
4881*495ae853SAndroid Build Coastguard Worker {
4882*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_disp_buf_mapping[i] || 1 == ps_dec->u4_disp_buf_to_be_freed[i])
4883*495ae853SAndroid Build Coastguard Worker {
4884*495ae853SAndroid Build Coastguard Worker disp_avail = 1;
4885*495ae853SAndroid Build Coastguard Worker break;
4886*495ae853SAndroid Build Coastguard Worker }
4887*495ae853SAndroid Build Coastguard Worker }
4888*495ae853SAndroid Build Coastguard Worker
4889*495ae853SAndroid Build Coastguard Worker if(0 == disp_avail)
4890*495ae853SAndroid Build Coastguard Worker {
4891*495ae853SAndroid Build Coastguard Worker /* If something is queued for display wait for that buffer to be returned
4892*495ae853SAndroid Build Coastguard Worker */
4893*495ae853SAndroid Build Coastguard Worker
4894*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = IVD_DEC_REF_BUF_NULL;
4895*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM);
4896*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
4897*495ae853SAndroid Build Coastguard Worker }
4898*495ae853SAndroid Build Coastguard Worker
4899*495ae853SAndroid Build Coastguard Worker while(1)
4900*495ae853SAndroid Build Coastguard Worker {
4901*495ae853SAndroid Build Coastguard Worker pic_buffer_t *ps_pic_buf;
4902*495ae853SAndroid Build Coastguard Worker ps_pic_buf = (pic_buffer_t *) ih264_buf_mgr_get_next_free(
4903*495ae853SAndroid Build Coastguard Worker (buf_mgr_t *) ps_dec->pv_pic_buf_mgr, &free_id);
4904*495ae853SAndroid Build Coastguard Worker
4905*495ae853SAndroid Build Coastguard Worker if(ps_pic_buf == NULL)
4906*495ae853SAndroid Build Coastguard Worker {
4907*495ae853SAndroid Build Coastguard Worker UWORD32 display_queued = 0;
4908*495ae853SAndroid Build Coastguard Worker
4909*495ae853SAndroid Build Coastguard Worker /* check if any buffer was given for display which is not returned yet */
4910*495ae853SAndroid Build Coastguard Worker for(i = 0; i < (MAX_DISP_BUFS_NEW); i++)
4911*495ae853SAndroid Build Coastguard Worker {
4912*495ae853SAndroid Build Coastguard Worker if(0 != ps_dec->u4_disp_buf_mapping[i])
4913*495ae853SAndroid Build Coastguard Worker {
4914*495ae853SAndroid Build Coastguard Worker display_queued = 1;
4915*495ae853SAndroid Build Coastguard Worker break;
4916*495ae853SAndroid Build Coastguard Worker }
4917*495ae853SAndroid Build Coastguard Worker }
4918*495ae853SAndroid Build Coastguard Worker /* If some buffer is queued for display, then codec has to singal an
4919*495ae853SAndroid Build Coastguard Worker error and wait for that buffer to be returned. If nothing is queued for
4920*495ae853SAndroid Build Coastguard Worker display then codec has ownership of all display buffers and it can
4921*495ae853SAndroid Build Coastguard Worker reuse any of the existing buffers and continue decoding */
4922*495ae853SAndroid Build Coastguard Worker
4923*495ae853SAndroid Build Coastguard Worker if(1 == display_queued)
4924*495ae853SAndroid Build Coastguard Worker {
4925*495ae853SAndroid Build Coastguard Worker /* If something is queued for display wait for that buffer to be
4926*495ae853SAndroid Build Coastguard Worker * returned */
4927*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = IVD_DEC_REF_BUF_NULL;
4928*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM);
4929*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
4930*495ae853SAndroid Build Coastguard Worker }
4931*495ae853SAndroid Build Coastguard Worker }
4932*495ae853SAndroid Build Coastguard Worker else
4933*495ae853SAndroid Build Coastguard Worker {
4934*495ae853SAndroid Build Coastguard Worker /* If the buffer is with display, then mark it as in use and then look
4935*495ae853SAndroid Build Coastguard Worker * for a buffer again */
4936*495ae853SAndroid Build Coastguard Worker if(1 == ps_dec->u4_disp_buf_mapping[free_id])
4937*495ae853SAndroid Build Coastguard Worker {
4938*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_set_status((buf_mgr_t *) ps_dec->pv_pic_buf_mgr, free_id,
4939*495ae853SAndroid Build Coastguard Worker BUF_MGR_IO);
4940*495ae853SAndroid Build Coastguard Worker }
4941*495ae853SAndroid Build Coastguard Worker else
4942*495ae853SAndroid Build Coastguard Worker {
4943*495ae853SAndroid Build Coastguard Worker /**
4944*495ae853SAndroid Build Coastguard Worker * Found a free buffer for present call. Release it now.
4945*495ae853SAndroid Build Coastguard Worker * Will be again obtained later.
4946*495ae853SAndroid Build Coastguard Worker */
4947*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_release((buf_mgr_t *) ps_dec->pv_pic_buf_mgr, free_id,
4948*495ae853SAndroid Build Coastguard Worker BUF_MGR_IO);
4949*495ae853SAndroid Build Coastguard Worker break;
4950*495ae853SAndroid Build Coastguard Worker }
4951*495ae853SAndroid Build Coastguard Worker }
4952*495ae853SAndroid Build Coastguard Worker }
4953*495ae853SAndroid Build Coastguard Worker }
4954*495ae853SAndroid Build Coastguard Worker
4955*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_enable_mb_info && (ps_dec->i4_header_decoded & DECODED_SPS_MASK))
4956*495ae853SAndroid Build Coastguard Worker {
4957*495ae853SAndroid Build Coastguard Worker UWORD32 blk_qp_map_size = ps_h264d_dec_ip->u4_8x8_blk_qp_map_size;
4958*495ae853SAndroid Build Coastguard Worker UWORD32 blk_type_map_size = ps_h264d_dec_ip->u4_8x8_blk_type_map_size;
4959*495ae853SAndroid Build Coastguard Worker UWORD32 blk_8x8_map_size = ps_dec->u4_total_mbs << 2;
4960*495ae853SAndroid Build Coastguard Worker if((ps_h264d_dec_ip->pu1_8x8_blk_qp_map && blk_qp_map_size < blk_8x8_map_size) ||
4961*495ae853SAndroid Build Coastguard Worker (ps_h264d_dec_ip->pu1_8x8_blk_type_map && blk_type_map_size < blk_8x8_map_size))
4962*495ae853SAndroid Build Coastguard Worker {
4963*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
4964*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= IH264D_INSUFFICIENT_METADATA_BUFFER;
4965*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
4966*495ae853SAndroid Build Coastguard Worker }
4967*495ae853SAndroid Build Coastguard Worker }
4968*495ae853SAndroid Build Coastguard Worker
4969*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_flushfrm && (1 == ps_svcd_ctxt->u1_pre_parse_in_flush))
4970*495ae853SAndroid Build Coastguard Worker {
4971*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_init_dec_flag == 0)
4972*495ae853SAndroid Build Coastguard Worker {
4973*495ae853SAndroid Build Coastguard Worker ps_dec->u1_flushfrm = 0;
4974*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
4975*495ae853SAndroid Build Coastguard Worker }
4976*495ae853SAndroid Build Coastguard Worker
4977*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->s_vcl_nal.i4_num_res_lyrs - 1];
4978*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
4979*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row = 0;
4980*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present = 0;
4981*495ae853SAndroid Build Coastguard Worker ps_dec->s_disp_op.u4_error_code = 1;
4982*495ae853SAndroid Build Coastguard Worker
4983*495ae853SAndroid Build Coastguard Worker ps_dec->ps_out_buffer = NULL;
4984*495ae853SAndroid Build Coastguard Worker if(ps_dec_ip->u4_size >= offsetof(ivd_video_decode_ip_t, s_out_buffer))
4985*495ae853SAndroid Build Coastguard Worker {
4986*495ae853SAndroid Build Coastguard Worker ps_dec->ps_out_buffer = &ps_dec_ip->s_out_buffer;
4987*495ae853SAndroid Build Coastguard Worker }
4988*495ae853SAndroid Build Coastguard Worker ih264d_get_next_display_field(ps_dec, ps_dec->ps_out_buffer, &(ps_dec->s_disp_op));
4989*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_disp_op.u4_error_code)
4990*495ae853SAndroid Build Coastguard Worker {
4991*495ae853SAndroid Build Coastguard Worker /* check output buffer size given by the application */
4992*495ae853SAndroid Build Coastguard Worker if(check_app_out_buf_size(ps_dec) != IV_SUCCESS)
4993*495ae853SAndroid Build Coastguard Worker {
4994*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = IVD_DISP_FRM_ZERO_OP_BUF_SIZE;
4995*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
4996*495ae853SAndroid Build Coastguard Worker }
4997*495ae853SAndroid Build Coastguard Worker
4998*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row = 0;
4999*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_num_rows = ps_dec->s_disp_frame_info.u4_y_ht;
5000*495ae853SAndroid Build Coastguard Worker ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op), ps_dec->u4_fmt_conv_cur_row,
5001*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_num_rows);
5002*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
5003*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present = 1;
5004*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_enable_mb_info)
5005*495ae853SAndroid Build Coastguard Worker {
5006*495ae853SAndroid Build Coastguard Worker UWORD32 disp_buf_id = ps_dec->s_disp_op.u4_disp_buf_id;
5007*495ae853SAndroid Build Coastguard Worker if(ps_h264d_dec_ip->pu1_8x8_blk_qp_map)
5008*495ae853SAndroid Build Coastguard Worker {
5009*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->pu1_8x8_blk_qp_map = ps_h264d_dec_ip->pu1_8x8_blk_qp_map;
5010*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->u4_8x8_blk_qp_map_size = ps_dec->u4_total_mbs << 2;
5011*495ae853SAndroid Build Coastguard Worker ih264_memcpy(ps_h264d_dec_op->pu1_8x8_blk_qp_map,
5012*495ae853SAndroid Build Coastguard Worker ps_dec->as_buf_id_info_map[disp_buf_id].pu1_qp_map,
5013*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_mbs << 2);
5014*495ae853SAndroid Build Coastguard Worker }
5015*495ae853SAndroid Build Coastguard Worker if(ps_h264d_dec_ip->pu1_8x8_blk_type_map)
5016*495ae853SAndroid Build Coastguard Worker {
5017*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->pu1_8x8_blk_type_map = ps_h264d_dec_ip->pu1_8x8_blk_type_map;
5018*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->u4_8x8_blk_type_map_size = ps_dec->u4_total_mbs << 2;
5019*495ae853SAndroid Build Coastguard Worker ih264_memcpy(ps_h264d_dec_op->pu1_8x8_blk_type_map,
5020*495ae853SAndroid Build Coastguard Worker ps_dec->as_buf_id_info_map[disp_buf_id].pu1_mb_type_map,
5021*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_mbs << 2);
5022*495ae853SAndroid Build Coastguard Worker }
5023*495ae853SAndroid Build Coastguard Worker }
5024*495ae853SAndroid Build Coastguard Worker }
5025*495ae853SAndroid Build Coastguard Worker ih264d_export_sei_params(&ps_dec_op->s_sei_decode_op, ps_dec);
5026*495ae853SAndroid Build Coastguard Worker
5027*495ae853SAndroid Build Coastguard Worker ih264d_release_display_field(ps_dec, &(ps_dec->s_disp_op));
5028*495ae853SAndroid Build Coastguard Worker
5029*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_wd = (UWORD32) ps_dec->u2_disp_width;
5030*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_ht = (UWORD32) ps_dec->u2_disp_height;
5031*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth;
5032*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_display_index = ps_dec->i4_display_index;
5033*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_new_seq = 0;
5034*495ae853SAndroid Build Coastguard Worker
5035*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_output_present = ps_dec->u4_output_present;
5036*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_progressive_frame_flag = ps_dec->s_disp_op.u4_progressive_frame_flag;
5037*495ae853SAndroid Build Coastguard Worker ps_dec_op->e_output_format = ps_dec->s_disp_op.e_output_format;
5038*495ae853SAndroid Build Coastguard Worker ps_dec_op->s_disp_frm_buf = ps_dec->s_disp_op.s_disp_frm_buf;
5039*495ae853SAndroid Build Coastguard Worker ps_dec_op->e4_fld_type = ps_dec->s_disp_op.e4_fld_type;
5040*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_ts = ps_dec->s_disp_op.u4_ts;
5041*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_disp_buf_id = ps_dec->s_disp_op.u4_disp_buf_id;
5042*495ae853SAndroid Build Coastguard Worker
5043*495ae853SAndroid Build Coastguard Worker /*In the case of flush ,since no frame is decoded set pic type as invalid*/
5044*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_is_ref_flag = UINT32_MAX;
5045*495ae853SAndroid Build Coastguard Worker ps_dec_op->e_pic_type = IV_NA_FRAME;
5046*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_frame_decoded_flag = 0;
5047*495ae853SAndroid Build Coastguard Worker
5048*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_disp_op.u4_error_code)
5049*495ae853SAndroid Build Coastguard Worker {
5050*495ae853SAndroid Build Coastguard Worker return (IV_SUCCESS);
5051*495ae853SAndroid Build Coastguard Worker }
5052*495ae853SAndroid Build Coastguard Worker else
5053*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
5054*495ae853SAndroid Build Coastguard Worker }
5055*495ae853SAndroid Build Coastguard Worker
5056*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_res_changed == 1)
5057*495ae853SAndroid Build Coastguard Worker {
5058*495ae853SAndroid Build Coastguard Worker /*if resolution has changed and all buffers have been flushed, reset
5059*495ae853SAndroid Build Coastguard Worker * decoder*/
5060*495ae853SAndroid Build Coastguard Worker if(((buf_mgr_t *) ps_dec->pv_pic_buf_mgr)->pv_mutex != NULL)
5061*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free(ps_dec->pv_pic_buf_mgr);
5062*495ae853SAndroid Build Coastguard Worker if(((buf_mgr_t *) ps_dec->pv_mv_buf_mgr)->pv_mutex != NULL)
5063*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free(ps_dec->pv_mv_buf_mgr);
5064*495ae853SAndroid Build Coastguard Worker
5065*495ae853SAndroid Build Coastguard Worker isvcd_init_decoder(ps_svc_lyr_dec);
5066*495ae853SAndroid Build Coastguard Worker }
5067*495ae853SAndroid Build Coastguard Worker
5068*495ae853SAndroid Build Coastguard Worker DEBUG_THREADS_PRINTF(" Starting process call\n");
5069*495ae853SAndroid Build Coastguard Worker
5070*495ae853SAndroid Build Coastguard Worker {
5071*495ae853SAndroid Build Coastguard Worker vcl_node_t *ps_cur_node;
5072*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_res_lyrs;
5073*495ae853SAndroid Build Coastguard Worker vcl_buf_hdr_t *ps_vcl_buf;
5074*495ae853SAndroid Build Coastguard Worker UWORD8 flush_decode = 1;
5075*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_pre_parse_in_flush = 0;
5076*495ae853SAndroid Build Coastguard Worker
5077*495ae853SAndroid Build Coastguard Worker ret = isvcd_pre_parse_refine_au(ps_svcd_ctxt, ps_dec_ip, &ps_dec_op->u4_num_bytes_consumed);
5078*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_pre_parse_in_flush = (ret == FLUSH);
5079*495ae853SAndroid Build Coastguard Worker
5080*495ae853SAndroid Build Coastguard Worker if(ret != OK)
5081*495ae853SAndroid Build Coastguard Worker {
5082*495ae853SAndroid Build Coastguard Worker UWORD32 error = ih264d_map_error((UWORD32) ret);
5083*495ae853SAndroid Build Coastguard Worker if(ret != NOT_OK)
5084*495ae853SAndroid Build Coastguard Worker {
5085*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = error | ret;
5086*495ae853SAndroid Build Coastguard Worker }
5087*495ae853SAndroid Build Coastguard Worker if((ps_dec_op->u4_error_code >> IVD_FATALERROR) & 1)
5088*495ae853SAndroid Build Coastguard Worker {
5089*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_exit_till_next_IDR = 1;
5090*495ae853SAndroid Build Coastguard Worker }
5091*495ae853SAndroid Build Coastguard Worker api_ret_value = IV_FAIL;
5092*495ae853SAndroid Build Coastguard Worker if((ret == IVD_RES_CHANGED) || (ret == IVD_MEM_ALLOC_FAILED) ||
5093*495ae853SAndroid Build Coastguard Worker (ret == ERROR_UNAVAIL_PICBUF_T) || (ret == ERROR_UNAVAIL_MVBUF_T) ||
5094*495ae853SAndroid Build Coastguard Worker (ret == ERROR_INV_SPS_PPS_T) || (ret == ERROR_FEATURE_UNAVAIL) ||
5095*495ae853SAndroid Build Coastguard Worker (ret == IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED) ||
5096*495ae853SAndroid Build Coastguard Worker (ret == IVD_DISP_FRM_ZERO_OP_BUF_SIZE))
5097*495ae853SAndroid Build Coastguard Worker {
5098*495ae853SAndroid Build Coastguard Worker ps_dec->u4_slice_start_code_found = 0;
5099*495ae853SAndroid Build Coastguard Worker }
5100*495ae853SAndroid Build Coastguard Worker if((ret == ERROR_INCOMPLETE_FRAME) || (ret == ERROR_DANGLING_FIELD_IN_PIC))
5101*495ae853SAndroid Build Coastguard Worker {
5102*495ae853SAndroid Build Coastguard Worker api_ret_value = IV_FAIL;
5103*495ae853SAndroid Build Coastguard Worker }
5104*495ae853SAndroid Build Coastguard Worker
5105*495ae853SAndroid Build Coastguard Worker if(ret == ERROR_IN_LAST_SLICE_OF_PIC)
5106*495ae853SAndroid Build Coastguard Worker {
5107*495ae853SAndroid Build Coastguard Worker api_ret_value = IV_FAIL;
5108*495ae853SAndroid Build Coastguard Worker }
5109*495ae853SAndroid Build Coastguard Worker }
5110*495ae853SAndroid Build Coastguard Worker
5111*495ae853SAndroid Build Coastguard Worker if(NOT_OK == ret)
5112*495ae853SAndroid Build Coastguard Worker {
5113*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_pic_buf_got == 0)
5114*495ae853SAndroid Build Coastguard Worker {
5115*495ae853SAndroid Build Coastguard Worker ps_dec->i4_error_code = ERROR_START_CODE_NOT_FOUND;
5116*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= 1 << IVD_INSUFFICIENTDATA;
5117*495ae853SAndroid Build Coastguard Worker
5118*495ae853SAndroid Build Coastguard Worker isvcd_fill_output_struct_from_context(ps_svc_lyr_dec, ps_dec_op);
5119*495ae853SAndroid Build Coastguard Worker
5120*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = ps_dec->i4_error_code;
5121*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_frame_decoded_flag = 0;
5122*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
5123*495ae853SAndroid Build Coastguard Worker }
5124*495ae853SAndroid Build Coastguard Worker return (IV_SUCCESS);
5125*495ae853SAndroid Build Coastguard Worker }
5126*495ae853SAndroid Build Coastguard Worker
5127*495ae853SAndroid Build Coastguard Worker u1_num_res_lyrs = ps_svcd_ctxt->s_vcl_nal.i4_num_res_lyrs;
5128*495ae853SAndroid Build Coastguard Worker
5129*495ae853SAndroid Build Coastguard Worker /* error concelment: exit till next IDR if any of Non Target layers are
5130*495ae853SAndroid Build Coastguard Worker * corrupted */
5131*495ae853SAndroid Build Coastguard Worker {
5132*495ae853SAndroid Build Coastguard Worker ps_cur_node = ps_svcd_ctxt->s_vcl_nal.ps_bot_node;
5133*495ae853SAndroid Build Coastguard Worker
5134*495ae853SAndroid Build Coastguard Worker if(NULL != ps_cur_node)
5135*495ae853SAndroid Build Coastguard Worker {
5136*495ae853SAndroid Build Coastguard Worker if(!ps_cur_node->i4_idr_pic_flag)
5137*495ae853SAndroid Build Coastguard Worker {
5138*495ae853SAndroid Build Coastguard Worker if(u1_num_res_lyrs != ps_svcd_ctxt->u1_prev_num_res_layers)
5139*495ae853SAndroid Build Coastguard Worker {
5140*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_exit_till_next_IDR = 1;
5141*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = ERROR_UNKNOWN_NAL;
5142*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5143*495ae853SAndroid Build Coastguard Worker }
5144*495ae853SAndroid Build Coastguard Worker }
5145*495ae853SAndroid Build Coastguard Worker else
5146*495ae853SAndroid Build Coastguard Worker {
5147*495ae853SAndroid Build Coastguard Worker if(u1_num_res_lyrs != ps_svcd_ctxt->u1_prev_num_res_layers)
5148*495ae853SAndroid Build Coastguard Worker {
5149*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_prev_num_res_layers = u1_num_res_lyrs;
5150*495ae853SAndroid Build Coastguard Worker }
5151*495ae853SAndroid Build Coastguard Worker }
5152*495ae853SAndroid Build Coastguard Worker }
5153*495ae853SAndroid Build Coastguard Worker }
5154*495ae853SAndroid Build Coastguard Worker if(ps_svcd_ctxt->u1_prev_num_res_layers != u1_num_res_lyrs && (u1_num_res_lyrs != 0))
5155*495ae853SAndroid Build Coastguard Worker {
5156*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr + u1_num_res_lyrs - 1;
5157*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5158*495ae853SAndroid Build Coastguard Worker
5159*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_init_dec_flag == 1)
5160*495ae853SAndroid Build Coastguard Worker {
5161*495ae853SAndroid Build Coastguard Worker ih264d_release_pics_in_dpb((void *) ps_dec, ps_dec->u1_pic_bufs);
5162*495ae853SAndroid Build Coastguard Worker ih264d_release_display_bufs(ps_dec);
5163*495ae853SAndroid Build Coastguard Worker ih264_disp_mgr_init((disp_mgr_t *) ps_dec->pv_disp_buf_mgr);
5164*495ae853SAndroid Build Coastguard Worker
5165*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_reset(ps_dec->pv_pic_buf_mgr);
5166*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_reset(ps_dec->pv_mv_buf_mgr);
5167*495ae853SAndroid Build Coastguard Worker ih264d_init_ref_bufs(ps_dec->ps_dpb_mgr);
5168*495ae853SAndroid Build Coastguard Worker }
5169*495ae853SAndroid Build Coastguard Worker
5170*495ae853SAndroid Build Coastguard Worker // ps_svcd_ctxt->u1_prev_num_res_layers = u1_num_res_lyrs;
5171*495ae853SAndroid Build Coastguard Worker }
5172*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_parse_nal_unit_error = 0;
5173*495ae853SAndroid Build Coastguard Worker
5174*495ae853SAndroid Build Coastguard Worker if((1 == ps_svcd_ctxt->u1_exit_till_next_IDR) &&
5175*495ae853SAndroid Build Coastguard Worker (ps_svcd_ctxt->s_vcl_nal.ps_bot_node != NULL))
5176*495ae853SAndroid Build Coastguard Worker {
5177*495ae853SAndroid Build Coastguard Worker if(1 == ps_svcd_ctxt->s_vcl_nal.ps_bot_node->i4_idr_pic_flag)
5178*495ae853SAndroid Build Coastguard Worker {
5179*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_exit_till_next_IDR = 0;
5180*495ae853SAndroid Build Coastguard Worker
5181*495ae853SAndroid Build Coastguard Worker for(u1_res_id = 0; u1_res_id < u1_num_res_lyrs; u1_res_id++)
5182*495ae853SAndroid Build Coastguard Worker {
5183*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr + u1_res_id;
5184*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5185*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_reset(ps_dec->pv_pic_buf_mgr);
5186*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_reset(ps_dec->pv_mv_buf_mgr);
5187*495ae853SAndroid Build Coastguard Worker }
5188*495ae853SAndroid Build Coastguard Worker }
5189*495ae853SAndroid Build Coastguard Worker else
5190*495ae853SAndroid Build Coastguard Worker {
5191*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = ERROR_UNKNOWN_NAL;
5192*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5193*495ae853SAndroid Build Coastguard Worker }
5194*495ae853SAndroid Build Coastguard Worker }
5195*495ae853SAndroid Build Coastguard Worker
5196*495ae853SAndroid Build Coastguard Worker if((0 == ps_dec->i4_decode_header) && (OK == ret))
5197*495ae853SAndroid Build Coastguard Worker {
5198*495ae853SAndroid Build Coastguard Worker flush_decode = 0;
5199*495ae853SAndroid Build Coastguard Worker ps_cur_node = ps_svcd_ctxt->s_vcl_nal.ps_bot_node;
5200*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_zero_dec = ps_svcd_ctxt->ps_svc_dec_lyr;
5201*495ae853SAndroid Build Coastguard Worker ps_dec_zero_lyr = &ps_svc_lyr_zero_dec->s_dec;
5202*495ae853SAndroid Build Coastguard Worker /* master loop */
5203*495ae853SAndroid Build Coastguard Worker
5204*495ae853SAndroid Build Coastguard Worker for(u1_res_id = 0; u1_res_id < u1_num_res_lyrs; u1_res_id++)
5205*495ae853SAndroid Build Coastguard Worker {
5206*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_nal_data_present = 0;
5207*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_cur_layer_id = u1_res_id;
5208*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr + u1_res_id;
5209*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_res_init_done = 0;
5210*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5211*495ae853SAndroid Build Coastguard Worker
5212*495ae853SAndroid Build Coastguard Worker ps_dec->i4_decode_header = ps_dec_zero_lyr->i4_decode_header;
5213*495ae853SAndroid Build Coastguard Worker ps_dec->i4_header_decoded = ps_dec_zero_lyr->i4_header_decoded;
5214*495ae853SAndroid Build Coastguard Worker ps_dec->u1_pic_decode_done = 0;
5215*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row = 0;
5216*495ae853SAndroid Build Coastguard Worker
5217*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present = 0;
5218*495ae853SAndroid Build Coastguard Worker ps_dec->s_disp_op.u4_error_code = 1;
5219*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_num_rows = FMT_CONV_NUM_ROWS;
5220*495ae853SAndroid Build Coastguard Worker ps_dec->u4_ts = ps_dec_ip->u4_ts;
5221*495ae853SAndroid Build Coastguard Worker ps_dec->i4_frametype = IV_NA_FRAME;
5222*495ae853SAndroid Build Coastguard Worker ps_dec->i4_content_type = IV_CONTENTTYPE_NA;
5223*495ae853SAndroid Build Coastguard Worker
5224*495ae853SAndroid Build Coastguard Worker ps_dec->u4_slice_start_code_found = 0;
5225*495ae853SAndroid Build Coastguard Worker ps_dec->u2_cur_mb_addr = 0;
5226*495ae853SAndroid Build Coastguard Worker ps_dec->u2_total_mbs_coded = 0;
5227*495ae853SAndroid Build Coastguard Worker ps_dec->u2_cur_slice_num = 0;
5228*495ae853SAndroid Build Coastguard Worker ps_dec->cur_dec_mb_num = 0;
5229*495ae853SAndroid Build Coastguard Worker ps_dec->cur_recon_mb_num = 0;
5230*495ae853SAndroid Build Coastguard Worker ps_dec->u4_first_slice_in_pic = 1;
5231*495ae853SAndroid Build Coastguard Worker ps_dec->u1_slice_header_done = 0;
5232*495ae853SAndroid Build Coastguard Worker ps_dec->u1_dangling_field = 0;
5233*495ae853SAndroid Build Coastguard Worker
5234*495ae853SAndroid Build Coastguard Worker ps_dec->u4_dec_thread_created = 0;
5235*495ae853SAndroid Build Coastguard Worker ps_dec->u4_bs_deblk_thread_created = 0;
5236*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_bs_mb_num = 0;
5237*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_deblk_mb_num = 0;
5238*495ae853SAndroid Build Coastguard Worker ps_dec->u4_start_recon_deblk = 0;
5239*495ae853SAndroid Build Coastguard Worker ps_dec->u4_sps_cnt_in_process = 0;
5240*495ae853SAndroid Build Coastguard Worker ps_dec->u4_pic_buf_got = 0;
5241*495ae853SAndroid Build Coastguard Worker ps_dec->pv_dec_out = ps_dec_op;
5242*495ae853SAndroid Build Coastguard Worker
5243*495ae853SAndroid Build Coastguard Worker if(ps_dec_ip->u4_size >= offsetof(ivd_video_decode_ip_t, s_out_buffer))
5244*495ae853SAndroid Build Coastguard Worker ps_dec->ps_out_buffer = &ps_dec_ip->s_out_buffer;
5245*495ae853SAndroid Build Coastguard Worker
5246*495ae853SAndroid Build Coastguard Worker ps_dec->u1_nal_unit_type = ps_cur_node->i4_nal_unit_type;
5247*495ae853SAndroid Build Coastguard Worker ps_dec->u1_separate_parse = 0;
5248*495ae853SAndroid Build Coastguard Worker if(u1_res_id == (u1_num_res_lyrs - 1))
5249*495ae853SAndroid Build Coastguard Worker {
5250*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_layer_identifier = TARGET_LAYER;
5251*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_num_cores >= 2)
5252*495ae853SAndroid Build Coastguard Worker {
5253*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_cores = 2;
5254*495ae853SAndroid Build Coastguard Worker ps_dec->u1_separate_parse = 1;
5255*495ae853SAndroid Build Coastguard Worker }
5256*495ae853SAndroid Build Coastguard Worker }
5257*495ae853SAndroid Build Coastguard Worker else if(u1_res_id == 0)
5258*495ae853SAndroid Build Coastguard Worker {
5259*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_layer_identifier = BASE_LAYER;
5260*495ae853SAndroid Build Coastguard Worker ps_dec->u1_separate_parse = 0;
5261*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_cores = 1;
5262*495ae853SAndroid Build Coastguard Worker }
5263*495ae853SAndroid Build Coastguard Worker else if(u1_res_id != 0)
5264*495ae853SAndroid Build Coastguard Worker {
5265*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_layer_identifier = MEDIAL_ENHANCEMENT_LAYER;
5266*495ae853SAndroid Build Coastguard Worker ps_dec->u1_separate_parse = 0;
5267*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_cores = 1;
5268*495ae853SAndroid Build Coastguard Worker }
5269*495ae853SAndroid Build Coastguard Worker else
5270*495ae853SAndroid Build Coastguard Worker {
5271*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5272*495ae853SAndroid Build Coastguard Worker }
5273*495ae853SAndroid Build Coastguard Worker
5274*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_base_res_flag = (0 == u1_res_id);
5275*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_idr_flag = ps_cur_node->i4_idr_pic_flag;
5276*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_dependency_id = ps_cur_node->i4_dependency_id;
5277*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_priority_id = ps_cur_node->i4_priority_id;
5278*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_no_inter_layer_pred_flag =
5279*495ae853SAndroid Build Coastguard Worker ps_cur_node->u1_acc_no_int_pred;
5280*495ae853SAndroid Build Coastguard Worker
5281*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_quality_id = ps_cur_node->i4_quality_id;
5282*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_temporal_id = ps_cur_node->i4_temporal_id;
5283*495ae853SAndroid Build Coastguard Worker
5284*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_use_ref_base_pic_flag =
5285*495ae853SAndroid Build Coastguard Worker ps_cur_node->i4_use_ref_base;
5286*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_discardable_flag = 0;
5287*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->ps_nal_svc_ext->u1_svc_ext_flag = (u1_res_id > 1);
5288*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u4_pps_id_for_layer = UINT32_MAX;
5289*495ae853SAndroid Build Coastguard Worker ps_vcl_buf = ps_cur_node->ps_first_vcl_nal;
5290*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_error_in_cur_frame = 0;
5291*495ae853SAndroid Build Coastguard Worker
5292*495ae853SAndroid Build Coastguard Worker /* Only for Non target Layers*/
5293*495ae853SAndroid Build Coastguard Worker if(NULL != ps_cur_node->ps_top_node)
5294*495ae853SAndroid Build Coastguard Worker {
5295*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->u1_inter_lyr_disable_dblk_filter_idc =
5296*495ae853SAndroid Build Coastguard Worker ps_cur_node->ps_top_node->i4_inter_lyr_dblk_idc;
5297*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->i1_inter_lyr_slice_alpha_c0_offset =
5298*495ae853SAndroid Build Coastguard Worker ps_cur_node->ps_top_node->i4_inter_lyr_alpha_c0_offset;
5299*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec->i1_inter_lyr_slice_beta_offset =
5300*495ae853SAndroid Build Coastguard Worker ps_cur_node->ps_top_node->i4_inter_lyr_beta_offset;
5301*495ae853SAndroid Build Coastguard Worker }
5302*495ae853SAndroid Build Coastguard Worker
5303*495ae853SAndroid Build Coastguard Worker while(NULL != ps_vcl_buf)
5304*495ae853SAndroid Build Coastguard Worker {
5305*495ae853SAndroid Build Coastguard Worker u1_layer_nal_data_present = 1;
5306*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->u4_ofst = 0;
5307*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->pu4_buffer =
5308*495ae853SAndroid Build Coastguard Worker (UWORD32 *) ((UWORD8 *) ps_vcl_buf + ps_vcl_buf->i4_buf_offset +
5309*495ae853SAndroid Build Coastguard Worker ps_vcl_buf->i4_slice_offset);
5310*495ae853SAndroid Build Coastguard Worker
5311*495ae853SAndroid Build Coastguard Worker ps_dec->ps_bitstrm->u4_max_ofst = ps_vcl_buf->u4_max_bits;
5312*495ae853SAndroid Build Coastguard Worker
5313*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_frame_decoded_flag = 0;
5314*495ae853SAndroid Build Coastguard Worker ret = isvcd_parse_nal_unit(ps_svc_lyr_dec, ps_cur_node->i4_nal_ref_idc);
5315*495ae853SAndroid Build Coastguard Worker if(ret != OK)
5316*495ae853SAndroid Build Coastguard Worker {
5317*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_parse_nal_unit_error = 1;
5318*495ae853SAndroid Build Coastguard Worker break;
5319*495ae853SAndroid Build Coastguard Worker }
5320*495ae853SAndroid Build Coastguard Worker
5321*495ae853SAndroid Build Coastguard Worker /* go to the next slice */
5322*495ae853SAndroid Build Coastguard Worker ps_vcl_buf = ps_vcl_buf->ps_next;
5323*495ae853SAndroid Build Coastguard Worker }
5324*495ae853SAndroid Build Coastguard Worker /* error concelment: exit till next IDR if a Layer data is missing */
5325*495ae853SAndroid Build Coastguard Worker if(0 == u1_layer_nal_data_present)
5326*495ae853SAndroid Build Coastguard Worker {
5327*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_exit_till_next_IDR = 1;
5328*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = ERROR_UNKNOWN_NAL;
5329*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5330*495ae853SAndroid Build Coastguard Worker }
5331*495ae853SAndroid Build Coastguard Worker /* error concelment: exit till next IDR if any of Non Target layers are
5332*495ae853SAndroid Build Coastguard Worker * corrupted */
5333*495ae853SAndroid Build Coastguard Worker if((ret != OK) && (u1_res_id != (u1_num_res_lyrs - 1)))
5334*495ae853SAndroid Build Coastguard Worker {
5335*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_exit_till_next_IDR = 1;
5336*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = ERROR_UNKNOWN_NAL;
5337*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5338*495ae853SAndroid Build Coastguard Worker }
5339*495ae853SAndroid Build Coastguard Worker
5340*495ae853SAndroid Build Coastguard Worker if((ret != OK) && (u1_res_id == (u1_num_res_lyrs - 1)))
5341*495ae853SAndroid Build Coastguard Worker {
5342*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr + u1_num_res_lyrs - 1;
5343*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5344*495ae853SAndroid Build Coastguard Worker
5345*495ae853SAndroid Build Coastguard Worker if((0 == ps_svcd_ctxt->u4_num_sps_ctr) || (0 == ps_svcd_ctxt->u4_num_pps_ctr) ||
5346*495ae853SAndroid Build Coastguard Worker (NULL == ps_dec->ps_cur_pps) || (ps_svc_lyr_dec->u1_res_init_done == 0))
5347*495ae853SAndroid Build Coastguard Worker {
5348*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_exit_till_next_IDR = 1;
5349*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = ERROR_UNKNOWN_NAL;
5350*495ae853SAndroid Build Coastguard Worker ih264d_signal_decode_thread(ps_dec);
5351*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5352*495ae853SAndroid Build Coastguard Worker }
5353*495ae853SAndroid Build Coastguard Worker }
5354*495ae853SAndroid Build Coastguard Worker ps_cur_node = ps_cur_node->ps_top_node;
5355*495ae853SAndroid Build Coastguard Worker
5356*495ae853SAndroid Build Coastguard Worker if((ps_dec->u4_pic_buf_got == 1) && (ret != IVD_MEM_ALLOC_FAILED) &&
5357*495ae853SAndroid Build Coastguard Worker ps_dec->u2_total_mbs_coded < ps_dec->u2_frm_ht_in_mbs * ps_dec->u2_frm_wd_in_mbs)
5358*495ae853SAndroid Build Coastguard Worker {
5359*495ae853SAndroid Build Coastguard Worker // last slice - missing/corruption
5360*495ae853SAndroid Build Coastguard Worker WORD32 num_mb_skipped;
5361*495ae853SAndroid Build Coastguard Worker WORD32 prev_slice_err;
5362*495ae853SAndroid Build Coastguard Worker pocstruct_t temp_poc;
5363*495ae853SAndroid Build Coastguard Worker WORD32 ret1;
5364*495ae853SAndroid Build Coastguard Worker WORD32 ht_in_mbs;
5365*495ae853SAndroid Build Coastguard Worker ht_in_mbs = ps_dec->u2_pic_ht >> (4 + ps_dec->ps_cur_slice->u1_field_pic_flag);
5366*495ae853SAndroid Build Coastguard Worker num_mb_skipped =
5367*495ae853SAndroid Build Coastguard Worker (ht_in_mbs * ps_dec->u2_frm_wd_in_mbs) - ps_dec->u2_total_mbs_coded;
5368*495ae853SAndroid Build Coastguard Worker
5369*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_first_slice_in_pic && (ps_dec->u4_pic_buf_got == 0))
5370*495ae853SAndroid Build Coastguard Worker prev_slice_err = 1;
5371*495ae853SAndroid Build Coastguard Worker else
5372*495ae853SAndroid Build Coastguard Worker prev_slice_err = 2;
5373*495ae853SAndroid Build Coastguard Worker
5374*495ae853SAndroid Build Coastguard Worker if(ps_dec->u2_total_mbs_coded == 0)
5375*495ae853SAndroid Build Coastguard Worker {
5376*495ae853SAndroid Build Coastguard Worker prev_slice_err = 1;
5377*495ae853SAndroid Build Coastguard Worker }
5378*495ae853SAndroid Build Coastguard Worker ret1 = isvcd_mark_err_slice_skip(
5379*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec, num_mb_skipped, ps_dec->u1_nal_unit_type == IDR_SLICE_NAL,
5380*495ae853SAndroid Build Coastguard Worker ps_dec->ps_cur_slice->u2_frame_num, &temp_poc, prev_slice_err);
5381*495ae853SAndroid Build Coastguard Worker
5382*495ae853SAndroid Build Coastguard Worker if((ret1 == ERROR_UNAVAIL_PICBUF_T) || (ret1 == ERROR_UNAVAIL_MVBUF_T) ||
5383*495ae853SAndroid Build Coastguard Worker (ret1 == ERROR_INV_SPS_PPS_T) || (ret1 == ERROR_CORRUPTED_SLICE) ||
5384*495ae853SAndroid Build Coastguard Worker (ret == NOT_OK))
5385*495ae853SAndroid Build Coastguard Worker {
5386*495ae853SAndroid Build Coastguard Worker ret = ret1;
5387*495ae853SAndroid Build Coastguard Worker }
5388*495ae853SAndroid Build Coastguard Worker }
5389*495ae853SAndroid Build Coastguard Worker
5390*495ae853SAndroid Build Coastguard Worker if((ret == IVD_RES_CHANGED) || (ret == IVD_MEM_ALLOC_FAILED) ||
5391*495ae853SAndroid Build Coastguard Worker (ret == ERROR_UNAVAIL_PICBUF_T) || (ret == ERROR_UNAVAIL_MVBUF_T) ||
5392*495ae853SAndroid Build Coastguard Worker (ret == ERROR_INV_SPS_PPS_T) || (ret == ERROR_CORRUPTED_SLICE) ||
5393*495ae853SAndroid Build Coastguard Worker (ret == IVD_DISP_FRM_ZERO_OP_BUF_SIZE) || (ret == NOT_OK))
5394*495ae853SAndroid Build Coastguard Worker {
5395*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_exit_till_next_IDR = 1;
5396*495ae853SAndroid Build Coastguard Worker /* signal the decode thread */
5397*495ae853SAndroid Build Coastguard Worker ih264d_signal_decode_thread(ps_dec);
5398*495ae853SAndroid Build Coastguard Worker /* dont consume bitstream for change in resolution case */
5399*495ae853SAndroid Build Coastguard Worker if(ret == IVD_RES_CHANGED)
5400*495ae853SAndroid Build Coastguard Worker {
5401*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_num_bytes_consumed -= bytes_consumed;
5402*495ae853SAndroid Build Coastguard Worker }
5403*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5404*495ae853SAndroid Build Coastguard Worker }
5405*495ae853SAndroid Build Coastguard Worker
5406*495ae853SAndroid Build Coastguard Worker /* Multi thread - for target Layer decoding*/
5407*495ae853SAndroid Build Coastguard Worker if((ps_dec->u1_separate_parse) &&
5408*495ae853SAndroid Build Coastguard Worker (ps_svc_lyr_dec->u1_layer_identifier == TARGET_LAYER) &&
5409*495ae853SAndroid Build Coastguard Worker (0 == ps_svc_lyr_dec->u1_error_in_cur_frame))
5410*495ae853SAndroid Build Coastguard Worker {
5411*495ae853SAndroid Build Coastguard Worker /* If Format conversion is not complete,
5412*495ae853SAndroid Build Coastguard Worker complete it here */
5413*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_num_cores == 2)
5414*495ae853SAndroid Build Coastguard Worker {
5415*495ae853SAndroid Build Coastguard Worker /*do deblocking of all mbs*/
5416*495ae853SAndroid Build Coastguard Worker if((ps_dec->u4_nmb_deblk == 0) && (ps_dec->u4_start_recon_deblk == 1) &&
5417*495ae853SAndroid Build Coastguard Worker (ps_dec->ps_cur_sps->u1_mb_aff_flag == 0))
5418*495ae853SAndroid Build Coastguard Worker {
5419*495ae853SAndroid Build Coastguard Worker UWORD8 u1_end_of_row = 0;
5420*495ae853SAndroid Build Coastguard Worker UWORD32 u4_max_addr;
5421*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t s_tfr_ctxt = {0};
5422*495ae853SAndroid Build Coastguard Worker tfr_ctxt_t *ps_tfr_cxt = &s_tfr_ctxt;
5423*495ae853SAndroid Build Coastguard Worker pad_mgr_t *ps_pad_mgr = &ps_dec->s_pad_mgr;
5424*495ae853SAndroid Build Coastguard Worker UWORD32 u4_slice_end = 0;
5425*495ae853SAndroid Build Coastguard Worker
5426*495ae853SAndroid Build Coastguard Worker /*BS is done for all mbs while parsing*/
5427*495ae853SAndroid Build Coastguard Worker u4_max_addr = (ps_dec->u2_frm_wd_in_mbs * ps_dec->u2_frm_ht_in_mbs) - 1;
5428*495ae853SAndroid Build Coastguard Worker /* BS is moved post recon gen in SVC ext*/
5429*495ae853SAndroid Build Coastguard Worker
5430*495ae853SAndroid Build Coastguard Worker ih264d_init_deblk_tfr_ctxt(ps_dec, ps_pad_mgr, ps_tfr_cxt,
5431*495ae853SAndroid Build Coastguard Worker ps_dec->u2_frm_wd_in_mbs, 0);
5432*495ae853SAndroid Build Coastguard Worker
5433*495ae853SAndroid Build Coastguard Worker {
5434*495ae853SAndroid Build Coastguard Worker while(u4_slice_end != 1)
5435*495ae853SAndroid Build Coastguard Worker {
5436*495ae853SAndroid Build Coastguard Worker dec_mb_info_t *p_cur_mb;
5437*495ae853SAndroid Build Coastguard Worker WORD32 i, bs_mb_grp;
5438*495ae853SAndroid Build Coastguard Worker bs_mb_grp = ps_dec->cur_dec_mb_num - ps_dec->u4_cur_bs_mb_num;
5439*495ae853SAndroid Build Coastguard Worker
5440*495ae853SAndroid Build Coastguard Worker for(i = 0; i < bs_mb_grp; i++)
5441*495ae853SAndroid Build Coastguard Worker {
5442*495ae853SAndroid Build Coastguard Worker p_cur_mb =
5443*495ae853SAndroid Build Coastguard Worker &ps_dec->ps_frm_mb_info[ps_dec->u4_cur_bs_mb_num];
5444*495ae853SAndroid Build Coastguard Worker
5445*495ae853SAndroid Build Coastguard Worker DEBUG_THREADS_PRINTF("ps_dec->u4_cur_bs_mb_num = %d\n",
5446*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_bs_mb_num);
5447*495ae853SAndroid Build Coastguard Worker isvcd_compute_bs_non_mbaff_thread(ps_svc_lyr_dec, p_cur_mb,
5448*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_bs_mb_num);
5449*495ae853SAndroid Build Coastguard Worker
5450*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_bs_mb_num++;
5451*495ae853SAndroid Build Coastguard Worker ps_dec->u4_bs_cur_slice_num_mbs++;
5452*495ae853SAndroid Build Coastguard Worker }
5453*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_cur_bs_mb_num > u4_max_addr)
5454*495ae853SAndroid Build Coastguard Worker {
5455*495ae853SAndroid Build Coastguard Worker u4_slice_end = 1;
5456*495ae853SAndroid Build Coastguard Worker u1_end_of_row = 1;
5457*495ae853SAndroid Build Coastguard Worker }
5458*495ae853SAndroid Build Coastguard Worker /*deblock MB group*/
5459*495ae853SAndroid Build Coastguard Worker {
5460*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_mbs;
5461*495ae853SAndroid Build Coastguard Worker
5462*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_cur_bs_mb_num > ps_dec->u4_cur_deblk_mb_num)
5463*495ae853SAndroid Build Coastguard Worker {
5464*495ae853SAndroid Build Coastguard Worker if(u1_end_of_row)
5465*495ae853SAndroid Build Coastguard Worker {
5466*495ae853SAndroid Build Coastguard Worker u4_num_mbs = ps_dec->u4_cur_bs_mb_num -
5467*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_deblk_mb_num;
5468*495ae853SAndroid Build Coastguard Worker }
5469*495ae853SAndroid Build Coastguard Worker else
5470*495ae853SAndroid Build Coastguard Worker {
5471*495ae853SAndroid Build Coastguard Worker u4_num_mbs = ps_dec->u4_cur_bs_mb_num -
5472*495ae853SAndroid Build Coastguard Worker ps_dec->u4_cur_deblk_mb_num - 1;
5473*495ae853SAndroid Build Coastguard Worker }
5474*495ae853SAndroid Build Coastguard Worker }
5475*495ae853SAndroid Build Coastguard Worker else
5476*495ae853SAndroid Build Coastguard Worker u4_num_mbs = 0;
5477*495ae853SAndroid Build Coastguard Worker
5478*495ae853SAndroid Build Coastguard Worker ih264d_check_mb_map_deblk(ps_dec, u4_num_mbs, ps_tfr_cxt,
5479*495ae853SAndroid Build Coastguard Worker 0);
5480*495ae853SAndroid Build Coastguard Worker }
5481*495ae853SAndroid Build Coastguard Worker }
5482*495ae853SAndroid Build Coastguard Worker }
5483*495ae853SAndroid Build Coastguard Worker }
5484*495ae853SAndroid Build Coastguard Worker }
5485*495ae853SAndroid Build Coastguard Worker
5486*495ae853SAndroid Build Coastguard Worker /*signal the decode thread*/
5487*495ae853SAndroid Build Coastguard Worker ih264d_signal_decode_thread(ps_dec);
5488*495ae853SAndroid Build Coastguard Worker }
5489*495ae853SAndroid Build Coastguard Worker else if((ps_dec->u1_separate_parse) &&
5490*495ae853SAndroid Build Coastguard Worker (ps_svc_lyr_dec->u1_layer_identifier == TARGET_LAYER))
5491*495ae853SAndroid Build Coastguard Worker {
5492*495ae853SAndroid Build Coastguard Worker /*signal the decode thread*/
5493*495ae853SAndroid Build Coastguard Worker ih264d_signal_decode_thread(ps_dec);
5494*495ae853SAndroid Build Coastguard Worker }
5495*495ae853SAndroid Build Coastguard Worker
5496*495ae853SAndroid Build Coastguard Worker DATA_SYNC();
5497*495ae853SAndroid Build Coastguard Worker
5498*495ae853SAndroid Build Coastguard Worker if((ps_dec_op->u4_error_code & 0xff) != ERROR_DYNAMIC_RESOLUTION_NOT_SUPPORTED)
5499*495ae853SAndroid Build Coastguard Worker {
5500*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_wd = (UWORD32) ps_dec->u2_disp_width;
5501*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_ht = (UWORD32) ps_dec->u2_disp_height;
5502*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth;
5503*495ae853SAndroid Build Coastguard Worker }
5504*495ae853SAndroid Build Coastguard Worker
5505*495ae853SAndroid Build Coastguard Worker // Report if header (sps and pps) has not been decoded yet
5506*495ae853SAndroid Build Coastguard Worker if(ps_dec->i4_decode_header == 1 && ps_dec->i4_header_decoded != 3)
5507*495ae853SAndroid Build Coastguard Worker {
5508*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code |= (1 << IVD_INSUFFICIENTDATA);
5509*495ae853SAndroid Build Coastguard Worker api_ret_value = IV_FAIL;
5510*495ae853SAndroid Build Coastguard Worker }
5511*495ae853SAndroid Build Coastguard Worker
5512*495ae853SAndroid Build Coastguard Worker if((ps_dec->u4_pic_buf_got == 1) && (ERROR_DANGLING_FIELD_IN_PIC != i4_err_status))
5513*495ae853SAndroid Build Coastguard Worker {
5514*495ae853SAndroid Build Coastguard Worker /* For field pictures, set bottom and top picture decoded u4_flag correctly */
5515*495ae853SAndroid Build Coastguard Worker
5516*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_cur_slice->u1_field_pic_flag)
5517*495ae853SAndroid Build Coastguard Worker {
5518*495ae853SAndroid Build Coastguard Worker if(1 == ps_dec->ps_cur_slice->u1_bottom_field_flag)
5519*495ae853SAndroid Build Coastguard Worker {
5520*495ae853SAndroid Build Coastguard Worker ps_dec->u1_top_bottom_decoded |= BOT_FIELD_ONLY;
5521*495ae853SAndroid Build Coastguard Worker }
5522*495ae853SAndroid Build Coastguard Worker else
5523*495ae853SAndroid Build Coastguard Worker {
5524*495ae853SAndroid Build Coastguard Worker ps_dec->u1_top_bottom_decoded |= TOP_FIELD_ONLY;
5525*495ae853SAndroid Build Coastguard Worker }
5526*495ae853SAndroid Build Coastguard Worker }
5527*495ae853SAndroid Build Coastguard Worker else
5528*495ae853SAndroid Build Coastguard Worker {
5529*495ae853SAndroid Build Coastguard Worker ps_dec->u1_top_bottom_decoded = TOP_FIELD_ONLY | BOT_FIELD_ONLY;
5530*495ae853SAndroid Build Coastguard Worker }
5531*495ae853SAndroid Build Coastguard Worker
5532*495ae853SAndroid Build Coastguard Worker /* if new frame in not found (if we are still getting slices from
5533*495ae853SAndroid Build Coastguard Worker * previous frame) ih264d_deblock_display is not called. Such frames
5534*495ae853SAndroid Build Coastguard Worker * will not be added to reference /display
5535*495ae853SAndroid Build Coastguard Worker */
5536*495ae853SAndroid Build Coastguard Worker if((ps_dec->ps_dec_err_status->u1_err_flag & REJECT_CUR_PIC) == 0)
5537*495ae853SAndroid Build Coastguard Worker {
5538*495ae853SAndroid Build Coastguard Worker /* Calling Function to deblock Picture and Display */
5539*495ae853SAndroid Build Coastguard Worker ret = ih264d_deblock_display(ps_dec);
5540*495ae853SAndroid Build Coastguard Worker }
5541*495ae853SAndroid Build Coastguard Worker
5542*495ae853SAndroid Build Coastguard Worker /*set to complete ,as we dont support partial frame decode*/
5543*495ae853SAndroid Build Coastguard Worker if(ps_dec->i4_header_decoded == 3)
5544*495ae853SAndroid Build Coastguard Worker {
5545*495ae853SAndroid Build Coastguard Worker ps_dec->u2_total_mbs_coded = ps_dec->ps_cur_sps->u2_max_mb_addr + 1;
5546*495ae853SAndroid Build Coastguard Worker }
5547*495ae853SAndroid Build Coastguard Worker
5548*495ae853SAndroid Build Coastguard Worker /*Update the i4_frametype at the end of picture*/
5549*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_cur_slice->u1_nal_unit_type == IDR_SLICE_NAL)
5550*495ae853SAndroid Build Coastguard Worker {
5551*495ae853SAndroid Build Coastguard Worker ps_dec->i4_frametype = IV_IDR_FRAME;
5552*495ae853SAndroid Build Coastguard Worker }
5553*495ae853SAndroid Build Coastguard Worker else if(ps_dec->i4_pic_type == B_SLICE)
5554*495ae853SAndroid Build Coastguard Worker {
5555*495ae853SAndroid Build Coastguard Worker ps_dec->i4_frametype = IV_B_FRAME;
5556*495ae853SAndroid Build Coastguard Worker }
5557*495ae853SAndroid Build Coastguard Worker else if(ps_dec->i4_pic_type == P_SLICE)
5558*495ae853SAndroid Build Coastguard Worker {
5559*495ae853SAndroid Build Coastguard Worker ps_dec->i4_frametype = IV_P_FRAME;
5560*495ae853SAndroid Build Coastguard Worker }
5561*495ae853SAndroid Build Coastguard Worker else if(ps_dec->i4_pic_type == I_SLICE)
5562*495ae853SAndroid Build Coastguard Worker {
5563*495ae853SAndroid Build Coastguard Worker ps_dec->i4_frametype = IV_I_FRAME;
5564*495ae853SAndroid Build Coastguard Worker }
5565*495ae853SAndroid Build Coastguard Worker else
5566*495ae853SAndroid Build Coastguard Worker {
5567*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("Shouldn't come here\n");
5568*495ae853SAndroid Build Coastguard Worker }
5569*495ae853SAndroid Build Coastguard Worker
5570*495ae853SAndroid Build Coastguard Worker // Update the content type
5571*495ae853SAndroid Build Coastguard Worker ps_dec->i4_content_type = ps_dec->ps_cur_slice->u1_field_pic_flag;
5572*495ae853SAndroid Build Coastguard Worker
5573*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_frames_decoded = ps_dec->u4_total_frames_decoded + 2;
5574*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_frames_decoded =
5575*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_frames_decoded - ps_dec->ps_cur_slice->u1_field_pic_flag;
5576*495ae853SAndroid Build Coastguard Worker }
5577*495ae853SAndroid Build Coastguard Worker
5578*495ae853SAndroid Build Coastguard Worker /* In case the decoder is configured to run in low delay mode,
5579*495ae853SAndroid Build Coastguard Worker * then get display buffer and then format convert.
5580*495ae853SAndroid Build Coastguard Worker * Note in this mode, format conversion does not run paralelly in a
5581*495ae853SAndroid Build Coastguard Worker * thread and adds to the codec cycles
5582*495ae853SAndroid Build Coastguard Worker */
5583*495ae853SAndroid Build Coastguard Worker if((IVD_DECODE_FRAME_OUT == ps_dec->e_frm_out_mode) && ps_dec->u1_init_dec_flag)
5584*495ae853SAndroid Build Coastguard Worker {
5585*495ae853SAndroid Build Coastguard Worker ih264d_get_next_display_field(ps_dec, ps_dec->ps_out_buffer,
5586*495ae853SAndroid Build Coastguard Worker &(ps_dec->s_disp_op));
5587*495ae853SAndroid Build Coastguard Worker
5588*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_disp_op.u4_error_code)
5589*495ae853SAndroid Build Coastguard Worker {
5590*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row = 0;
5591*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present = 1;
5592*495ae853SAndroid Build Coastguard Worker }
5593*495ae853SAndroid Build Coastguard Worker else
5594*495ae853SAndroid Build Coastguard Worker {
5595*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present = 0;
5596*495ae853SAndroid Build Coastguard Worker }
5597*495ae853SAndroid Build Coastguard Worker }
5598*495ae853SAndroid Build Coastguard Worker
5599*495ae853SAndroid Build Coastguard Worker isvcd_fill_output_struct_from_context(ps_svc_lyr_dec, ps_dec_op);
5600*495ae853SAndroid Build Coastguard Worker
5601*495ae853SAndroid Build Coastguard Worker /* If Format conversion is not complete,
5602*495ae853SAndroid Build Coastguard Worker complete it here */
5603*495ae853SAndroid Build Coastguard Worker /* For Non -target Layers , Buffers are retrived but not displayed*/
5604*495ae853SAndroid Build Coastguard Worker
5605*495ae853SAndroid Build Coastguard Worker if((ps_svc_lyr_dec->u1_layer_identifier == TARGET_LAYER) &&
5606*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present &&
5607*495ae853SAndroid Build Coastguard Worker (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
5608*495ae853SAndroid Build Coastguard Worker {
5609*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_num_rows =
5610*495ae853SAndroid Build Coastguard Worker ps_dec->s_disp_frame_info.u4_y_ht - ps_dec->u4_fmt_conv_cur_row;
5611*495ae853SAndroid Build Coastguard Worker ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op), ps_dec->u4_fmt_conv_cur_row,
5612*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_num_rows);
5613*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
5614*495ae853SAndroid Build Coastguard Worker }
5615*495ae853SAndroid Build Coastguard Worker
5616*495ae853SAndroid Build Coastguard Worker ih264d_release_display_field(ps_dec, &(ps_dec->s_disp_op));
5617*495ae853SAndroid Build Coastguard Worker
5618*495ae853SAndroid Build Coastguard Worker if(ps_dec->i4_decode_header == 1 && (ps_dec->i4_header_decoded & 1) == 1)
5619*495ae853SAndroid Build Coastguard Worker {
5620*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_progressive_frame_flag = 1;
5621*495ae853SAndroid Build Coastguard Worker if((NULL != ps_dec->ps_cur_sps) && (1 == (ps_dec->ps_cur_sps->u1_is_valid)))
5622*495ae853SAndroid Build Coastguard Worker {
5623*495ae853SAndroid Build Coastguard Worker if((0 == ps_dec->ps_sps->u1_frame_mbs_only_flag) &&
5624*495ae853SAndroid Build Coastguard Worker (0 == ps_dec->ps_sps->u1_mb_aff_flag))
5625*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_progressive_frame_flag = 0;
5626*495ae853SAndroid Build Coastguard Worker }
5627*495ae853SAndroid Build Coastguard Worker }
5628*495ae853SAndroid Build Coastguard Worker
5629*495ae853SAndroid Build Coastguard Worker if((TOP_FIELD_ONLY | BOT_FIELD_ONLY) == ps_dec->u1_top_bottom_decoded)
5630*495ae853SAndroid Build Coastguard Worker {
5631*495ae853SAndroid Build Coastguard Worker ps_dec->u1_top_bottom_decoded = 0;
5632*495ae853SAndroid Build Coastguard Worker }
5633*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
5634*495ae853SAndroid Build Coastguard Worker /* Do End of Pic processing. */
5635*495ae853SAndroid Build Coastguard Worker /* Should be called only if frame was decoded in previous process call*/
5636*495ae853SAndroid Build Coastguard Worker /*--------------------------------------------------------------------*/
5637*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_pic_buf_got == 1)
5638*495ae853SAndroid Build Coastguard Worker {
5639*495ae853SAndroid Build Coastguard Worker if(1 == ps_dec->u1_last_pic_not_decoded)
5640*495ae853SAndroid Build Coastguard Worker {
5641*495ae853SAndroid Build Coastguard Worker ret = ih264d_end_of_pic_dispbuf_mgr(ps_dec);
5642*495ae853SAndroid Build Coastguard Worker
5643*495ae853SAndroid Build Coastguard Worker if(ret != OK) return ret;
5644*495ae853SAndroid Build Coastguard Worker
5645*495ae853SAndroid Build Coastguard Worker ret = ih264d_end_of_pic(ps_dec);
5646*495ae853SAndroid Build Coastguard Worker if(ret != OK) return ret;
5647*495ae853SAndroid Build Coastguard Worker }
5648*495ae853SAndroid Build Coastguard Worker else
5649*495ae853SAndroid Build Coastguard Worker {
5650*495ae853SAndroid Build Coastguard Worker ret = ih264d_end_of_pic(ps_dec);
5651*495ae853SAndroid Build Coastguard Worker if(ret != OK) return ret;
5652*495ae853SAndroid Build Coastguard Worker }
5653*495ae853SAndroid Build Coastguard Worker }
5654*495ae853SAndroid Build Coastguard Worker
5655*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_enable_mb_info && ps_dec->u4_output_present)
5656*495ae853SAndroid Build Coastguard Worker {
5657*495ae853SAndroid Build Coastguard Worker UWORD32 disp_buf_id = ps_dec->s_disp_op.u4_disp_buf_id;
5658*495ae853SAndroid Build Coastguard Worker if(ps_h264d_dec_ip->pu1_8x8_blk_qp_map)
5659*495ae853SAndroid Build Coastguard Worker {
5660*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->pu1_8x8_blk_qp_map = ps_h264d_dec_ip->pu1_8x8_blk_qp_map;
5661*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->u4_8x8_blk_qp_map_size = ps_dec->u4_total_mbs << 2;
5662*495ae853SAndroid Build Coastguard Worker ih264_memcpy(ps_h264d_dec_op->pu1_8x8_blk_qp_map,
5663*495ae853SAndroid Build Coastguard Worker ps_dec->as_buf_id_info_map[disp_buf_id].pu1_qp_map,
5664*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_mbs << 2);
5665*495ae853SAndroid Build Coastguard Worker }
5666*495ae853SAndroid Build Coastguard Worker if(ps_h264d_dec_ip->pu1_8x8_blk_type_map)
5667*495ae853SAndroid Build Coastguard Worker {
5668*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->pu1_8x8_blk_type_map =
5669*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_ip->pu1_8x8_blk_type_map;
5670*495ae853SAndroid Build Coastguard Worker ps_h264d_dec_op->u4_8x8_blk_type_map_size = ps_dec->u4_total_mbs << 2;
5671*495ae853SAndroid Build Coastguard Worker ih264_memcpy(ps_h264d_dec_op->pu1_8x8_blk_type_map,
5672*495ae853SAndroid Build Coastguard Worker ps_dec->as_buf_id_info_map[disp_buf_id].pu1_mb_type_map,
5673*495ae853SAndroid Build Coastguard Worker ps_dec->u4_total_mbs << 2);
5674*495ae853SAndroid Build Coastguard Worker }
5675*495ae853SAndroid Build Coastguard Worker }
5676*495ae853SAndroid Build Coastguard Worker /*Data memory barrier instruction,so that yuv write by the library is
5677*495ae853SAndroid Build Coastguard Worker * complete*/
5678*495ae853SAndroid Build Coastguard Worker DATA_SYNC();
5679*495ae853SAndroid Build Coastguard Worker
5680*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("The num bytes consumed: %d\n",
5681*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_num_bytes_consumed);
5682*495ae853SAndroid Build Coastguard Worker }
5683*495ae853SAndroid Build Coastguard Worker }
5684*495ae853SAndroid Build Coastguard Worker /* highest layer for flush validation */
5685*495ae853SAndroid Build Coastguard Worker
5686*495ae853SAndroid Build Coastguard Worker if((ps_dec->u1_flushfrm) && (1 == flush_decode))
5687*495ae853SAndroid Build Coastguard Worker {
5688*495ae853SAndroid Build Coastguard Worker u1_res_id = u1_num_res_lyrs - 1;
5689*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr + u1_res_id;
5690*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5691*495ae853SAndroid Build Coastguard Worker
5692*495ae853SAndroid Build Coastguard Worker ih264d_get_next_display_field(ps_dec, ps_dec->ps_out_buffer, &(ps_dec->s_disp_op));
5693*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_disp_op.u4_error_code)
5694*495ae853SAndroid Build Coastguard Worker {
5695*495ae853SAndroid Build Coastguard Worker /* check output buffer size given by the application */
5696*495ae853SAndroid Build Coastguard Worker if(check_app_out_buf_size(ps_dec) != IV_SUCCESS)
5697*495ae853SAndroid Build Coastguard Worker {
5698*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_error_code = IVD_DISP_FRM_ZERO_OP_BUF_SIZE;
5699*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
5700*495ae853SAndroid Build Coastguard Worker }
5701*495ae853SAndroid Build Coastguard Worker
5702*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row = 0;
5703*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_num_rows = ps_dec->s_disp_frame_info.u4_y_ht;
5704*495ae853SAndroid Build Coastguard Worker ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op), ps_dec->u4_fmt_conv_cur_row,
5705*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_num_rows);
5706*495ae853SAndroid Build Coastguard Worker ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
5707*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present = 1;
5708*495ae853SAndroid Build Coastguard Worker }
5709*495ae853SAndroid Build Coastguard Worker else
5710*495ae853SAndroid Build Coastguard Worker {
5711*495ae853SAndroid Build Coastguard Worker ps_dec->u4_output_present = 0;
5712*495ae853SAndroid Build Coastguard Worker }
5713*495ae853SAndroid Build Coastguard Worker ih264d_export_sei_params(&ps_dec_op->s_sei_decode_op, ps_dec);
5714*495ae853SAndroid Build Coastguard Worker
5715*495ae853SAndroid Build Coastguard Worker ih264d_release_display_field(ps_dec, &(ps_dec->s_disp_op));
5716*495ae853SAndroid Build Coastguard Worker
5717*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_wd = (UWORD32) ps_dec->u2_disp_width;
5718*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_ht = (UWORD32) ps_dec->u2_disp_height;
5719*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth;
5720*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_display_index = ps_dec->i4_display_index;
5721*495ae853SAndroid Build Coastguard Worker
5722*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_new_seq = 0;
5723*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_output_present = (ps_svc_lyr_dec->u1_layer_identifier == TARGET_LAYER)
5724*495ae853SAndroid Build Coastguard Worker ? ps_dec->u4_output_present
5725*495ae853SAndroid Build Coastguard Worker : 0;
5726*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_progressive_frame_flag = ps_dec->s_disp_op.u4_progressive_frame_flag;
5727*495ae853SAndroid Build Coastguard Worker ps_dec_op->e_output_format = ps_dec->s_disp_op.e_output_format;
5728*495ae853SAndroid Build Coastguard Worker ps_dec_op->s_disp_frm_buf = ps_dec->s_disp_op.s_disp_frm_buf;
5729*495ae853SAndroid Build Coastguard Worker ps_dec_op->e4_fld_type = ps_dec->s_disp_op.e4_fld_type;
5730*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_ts = ps_dec->s_disp_op.u4_ts;
5731*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_disp_buf_id = ps_dec->s_disp_op.u4_disp_buf_id;
5732*495ae853SAndroid Build Coastguard Worker
5733*495ae853SAndroid Build Coastguard Worker /*In the case of flush ,since no frame is decoded set pic type as invalid*/
5734*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_is_ref_flag = UINT32_MAX;
5735*495ae853SAndroid Build Coastguard Worker ps_dec_op->e_pic_type = IV_NA_FRAME;
5736*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_frame_decoded_flag = 0;
5737*495ae853SAndroid Build Coastguard Worker
5738*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_disp_op.u4_error_code)
5739*495ae853SAndroid Build Coastguard Worker {
5740*495ae853SAndroid Build Coastguard Worker return (IV_SUCCESS);
5741*495ae853SAndroid Build Coastguard Worker }
5742*495ae853SAndroid Build Coastguard Worker else
5743*495ae853SAndroid Build Coastguard Worker return (IV_FAIL);
5744*495ae853SAndroid Build Coastguard Worker }
5745*495ae853SAndroid Build Coastguard Worker }
5746*495ae853SAndroid Build Coastguard Worker
5747*495ae853SAndroid Build Coastguard Worker if((ps_dec_op->u4_error_code & 0xff) != ERROR_DYNAMIC_RESOLUTION_NOT_SUPPORTED)
5748*495ae853SAndroid Build Coastguard Worker {
5749*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_wd = (UWORD32) ps_dec->u2_disp_width;
5750*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_ht = (UWORD32) ps_dec->u2_disp_height;
5751*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth;
5752*495ae853SAndroid Build Coastguard Worker }
5753*495ae853SAndroid Build Coastguard Worker return api_ret_value;
5754*495ae853SAndroid Build Coastguard Worker }
5755*495ae853SAndroid Build Coastguard Worker
5756*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
5757*495ae853SAndroid Build Coastguard Worker /* */
5758*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_set_display_frame */
5759*495ae853SAndroid Build Coastguard Worker /* */
5760*495ae853SAndroid Build Coastguard Worker /* Description : */
5761*495ae853SAndroid Build Coastguard Worker /* */
5762*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
5763*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
5764*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
5765*495ae853SAndroid Build Coastguard Worker /* Outputs : */
5766*495ae853SAndroid Build Coastguard Worker /* Returns : void */
5767*495ae853SAndroid Build Coastguard Worker /* */
5768*495ae853SAndroid Build Coastguard Worker /* Issues : none */
5769*495ae853SAndroid Build Coastguard Worker /* */
5770*495ae853SAndroid Build Coastguard Worker /* Revision History: */
5771*495ae853SAndroid Build Coastguard Worker /* */
5772*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
5773*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
5774*495ae853SAndroid Build Coastguard Worker /* */
5775*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_set_display_frame(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)5776*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_display_frame(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
5777*495ae853SAndroid Build Coastguard Worker {
5778*495ae853SAndroid Build Coastguard Worker UWORD32 u4_disp_buf_size[3] = {0};
5779*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_disp_bufs;
5780*495ae853SAndroid Build Coastguard Worker ivd_set_display_frame_ip_t *dec_disp_ip;
5781*495ae853SAndroid Build Coastguard Worker ivd_set_display_frame_op_t *dec_disp_op;
5782*495ae853SAndroid Build Coastguard Worker UWORD32 i;
5783*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
5784*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
5785*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
5786*495ae853SAndroid Build Coastguard Worker
5787*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
5788*495ae853SAndroid Build Coastguard Worker
5789*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
5790*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5791*495ae853SAndroid Build Coastguard Worker
5792*495ae853SAndroid Build Coastguard Worker dec_disp_ip = (ivd_set_display_frame_ip_t *) pv_api_ip;
5793*495ae853SAndroid Build Coastguard Worker dec_disp_op = (ivd_set_display_frame_op_t *) pv_api_op;
5794*495ae853SAndroid Build Coastguard Worker dec_disp_op->u4_error_code = 0;
5795*495ae853SAndroid Build Coastguard Worker
5796*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_disp_bufs = 0;
5797*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_share_disp_buf)
5798*495ae853SAndroid Build Coastguard Worker {
5799*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_bufs = dec_disp_ip->num_disp_bufs;
5800*495ae853SAndroid Build Coastguard Worker
5801*495ae853SAndroid Build Coastguard Worker u4_num_bufs = MIN(u4_num_bufs, MAX_DISP_BUFS_NEW);
5802*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_disp_bufs = u4_num_bufs;
5803*495ae853SAndroid Build Coastguard Worker
5804*495ae853SAndroid Build Coastguard Worker /* Get the number and sizes of the first buffer. Compare this with the
5805*495ae853SAndroid Build Coastguard Worker * rest to make sure all the buffers are of the same size.
5806*495ae853SAndroid Build Coastguard Worker */
5807*495ae853SAndroid Build Coastguard Worker u4_num_disp_bufs = dec_disp_ip->s_disp_buffer[0].u4_num_bufs;
5808*495ae853SAndroid Build Coastguard Worker
5809*495ae853SAndroid Build Coastguard Worker u4_disp_buf_size[0] = dec_disp_ip->s_disp_buffer[0].u4_min_out_buf_size[0];
5810*495ae853SAndroid Build Coastguard Worker u4_disp_buf_size[1] = dec_disp_ip->s_disp_buffer[0].u4_min_out_buf_size[1];
5811*495ae853SAndroid Build Coastguard Worker u4_disp_buf_size[2] = dec_disp_ip->s_disp_buffer[0].u4_min_out_buf_size[2];
5812*495ae853SAndroid Build Coastguard Worker
5813*495ae853SAndroid Build Coastguard Worker for(i = 0; i < u4_num_bufs; i++)
5814*495ae853SAndroid Build Coastguard Worker {
5815*495ae853SAndroid Build Coastguard Worker if(dec_disp_ip->s_disp_buffer[i].u4_num_bufs != u4_num_disp_bufs)
5816*495ae853SAndroid Build Coastguard Worker {
5817*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5818*495ae853SAndroid Build Coastguard Worker }
5819*495ae853SAndroid Build Coastguard Worker
5820*495ae853SAndroid Build Coastguard Worker if((dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[0] != u4_disp_buf_size[0]) ||
5821*495ae853SAndroid Build Coastguard Worker (dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[1] != u4_disp_buf_size[1]) ||
5822*495ae853SAndroid Build Coastguard Worker (dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[2] != u4_disp_buf_size[2]))
5823*495ae853SAndroid Build Coastguard Worker {
5824*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
5825*495ae853SAndroid Build Coastguard Worker }
5826*495ae853SAndroid Build Coastguard Worker
5827*495ae853SAndroid Build Coastguard Worker ps_dec->disp_bufs[i].u4_num_bufs = dec_disp_ip->s_disp_buffer[i].u4_num_bufs;
5828*495ae853SAndroid Build Coastguard Worker
5829*495ae853SAndroid Build Coastguard Worker ps_dec->disp_bufs[i].buf[0] = dec_disp_ip->s_disp_buffer[i].pu1_bufs[0];
5830*495ae853SAndroid Build Coastguard Worker ps_dec->disp_bufs[i].buf[1] = dec_disp_ip->s_disp_buffer[i].pu1_bufs[1];
5831*495ae853SAndroid Build Coastguard Worker ps_dec->disp_bufs[i].buf[2] = dec_disp_ip->s_disp_buffer[i].pu1_bufs[2];
5832*495ae853SAndroid Build Coastguard Worker
5833*495ae853SAndroid Build Coastguard Worker ps_dec->disp_bufs[i].u4_bufsize[0] =
5834*495ae853SAndroid Build Coastguard Worker dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[0];
5835*495ae853SAndroid Build Coastguard Worker ps_dec->disp_bufs[i].u4_bufsize[1] =
5836*495ae853SAndroid Build Coastguard Worker dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[1];
5837*495ae853SAndroid Build Coastguard Worker ps_dec->disp_bufs[i].u4_bufsize[2] =
5838*495ae853SAndroid Build Coastguard Worker dec_disp_ip->s_disp_buffer[i].u4_min_out_buf_size[2];
5839*495ae853SAndroid Build Coastguard Worker }
5840*495ae853SAndroid Build Coastguard Worker }
5841*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5842*495ae853SAndroid Build Coastguard Worker }
5843*495ae853SAndroid Build Coastguard Worker
5844*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
5845*495ae853SAndroid Build Coastguard Worker /* */
5846*495ae853SAndroid Build Coastguard Worker /* Function Name : ih264d_set_flush_mode_svt_ext */
5847*495ae853SAndroid Build Coastguard Worker /* */
5848*495ae853SAndroid Build Coastguard Worker /* Description : */
5849*495ae853SAndroid Build Coastguard Worker /* */
5850*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
5851*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
5852*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
5853*495ae853SAndroid Build Coastguard Worker /* Globals : <Does it use any global variables?> */
5854*495ae853SAndroid Build Coastguard Worker /* Outputs : */
5855*495ae853SAndroid Build Coastguard Worker /* Returns : void */
5856*495ae853SAndroid Build Coastguard Worker /* */
5857*495ae853SAndroid Build Coastguard Worker /* Issues : none */
5858*495ae853SAndroid Build Coastguard Worker /* */
5859*495ae853SAndroid Build Coastguard Worker /* Revision History: */
5860*495ae853SAndroid Build Coastguard Worker /* */
5861*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
5862*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
5863*495ae853SAndroid Build Coastguard Worker /* */
5864*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_set_flush_mode(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)5865*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_flush_mode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
5866*495ae853SAndroid Build Coastguard Worker {
5867*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
5868*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
5869*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
5870*495ae853SAndroid Build Coastguard Worker ivd_ctl_flush_op_t *ps_ctl_op = (ivd_ctl_flush_op_t *) pv_api_op;
5871*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
5872*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
5873*495ae853SAndroid Build Coastguard Worker
5874*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
5875*495ae853SAndroid Build Coastguard Worker
5876*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[0];
5877*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5878*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->i4_decode_header)
5879*495ae853SAndroid Build Coastguard Worker {
5880*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->i4_eos_flag = 1;
5881*495ae853SAndroid Build Coastguard Worker }
5882*495ae853SAndroid Build Coastguard Worker
5883*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
5884*495ae853SAndroid Build Coastguard Worker {
5885*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
5886*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5887*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
5888*495ae853SAndroid Build Coastguard Worker
5889*495ae853SAndroid Build Coastguard Worker /* Signal flush frame control call */
5890*495ae853SAndroid Build Coastguard Worker ps_dec->u1_flushfrm = 1;
5891*495ae853SAndroid Build Coastguard Worker
5892*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_init_dec_flag == 1)
5893*495ae853SAndroid Build Coastguard Worker {
5894*495ae853SAndroid Build Coastguard Worker ih264d_release_pics_in_dpb((void *) ps_dec, ps_dec->u1_pic_bufs);
5895*495ae853SAndroid Build Coastguard Worker ih264d_release_display_bufs(ps_dec);
5896*495ae853SAndroid Build Coastguard Worker }
5897*495ae853SAndroid Build Coastguard Worker
5898*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
5899*495ae853SAndroid Build Coastguard Worker
5900*495ae853SAndroid Build Coastguard Worker /* Ignore dangling fields during flush */
5901*495ae853SAndroid Build Coastguard Worker ps_dec->u1_top_bottom_decoded = 0;
5902*495ae853SAndroid Build Coastguard Worker }
5903*495ae853SAndroid Build Coastguard Worker
5904*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
5905*495ae853SAndroid Build Coastguard Worker }
5906*495ae853SAndroid Build Coastguard Worker
5907*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
5908*495ae853SAndroid Build Coastguard Worker /* */
5909*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_status */
5910*495ae853SAndroid Build Coastguard Worker /* */
5911*495ae853SAndroid Build Coastguard Worker /* Description : */
5912*495ae853SAndroid Build Coastguard Worker /* */
5913*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
5914*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
5915*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
5916*495ae853SAndroid Build Coastguard Worker /* Globals : <Does it use any global variables?> */
5917*495ae853SAndroid Build Coastguard Worker /* Outputs : */
5918*495ae853SAndroid Build Coastguard Worker /* Returns : void */
5919*495ae853SAndroid Build Coastguard Worker /* */
5920*495ae853SAndroid Build Coastguard Worker /* Issues : none */
5921*495ae853SAndroid Build Coastguard Worker /* */
5922*495ae853SAndroid Build Coastguard Worker /* Revision History: */
5923*495ae853SAndroid Build Coastguard Worker /* */
5924*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
5925*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
5926*495ae853SAndroid Build Coastguard Worker /* */
5927*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
5928*495ae853SAndroid Build Coastguard Worker
isvcd_get_status(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)5929*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_status(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
5930*495ae853SAndroid Build Coastguard Worker {
5931*495ae853SAndroid Build Coastguard Worker UWORD32 i;
5932*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
5933*495ae853SAndroid Build Coastguard Worker UWORD32 pic_wd, pic_ht;
5934*495ae853SAndroid Build Coastguard Worker ivd_ctl_getstatus_op_t *ps_ctl_op = (ivd_ctl_getstatus_op_t *) pv_api_op;
5935*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
5936*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
5937*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
5938*495ae853SAndroid Build Coastguard Worker
5939*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
5940*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
5941*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
5942*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
5943*495ae853SAndroid Build Coastguard Worker
5944*495ae853SAndroid Build Coastguard Worker if((NULL != ps_dec->ps_cur_sps) && (1 == (ps_dec->ps_cur_sps->u1_is_valid)))
5945*495ae853SAndroid Build Coastguard Worker {
5946*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_pic_ht = ps_dec->u2_disp_height;
5947*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_pic_wd = ps_dec->u2_disp_width;
5948*495ae853SAndroid Build Coastguard Worker
5949*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf)
5950*495ae853SAndroid Build Coastguard Worker {
5951*495ae853SAndroid Build Coastguard Worker pic_wd = ps_dec->u2_disp_width;
5952*495ae853SAndroid Build Coastguard Worker pic_ht = ps_dec->u2_disp_height;
5953*495ae853SAndroid Build Coastguard Worker }
5954*495ae853SAndroid Build Coastguard Worker else
5955*495ae853SAndroid Build Coastguard Worker {
5956*495ae853SAndroid Build Coastguard Worker pic_wd = ps_dec->u2_frm_wd_y;
5957*495ae853SAndroid Build Coastguard Worker pic_ht = ps_dec->u2_frm_ht_y;
5958*495ae853SAndroid Build Coastguard Worker }
5959*495ae853SAndroid Build Coastguard Worker }
5960*495ae853SAndroid Build Coastguard Worker else
5961*495ae853SAndroid Build Coastguard Worker {
5962*495ae853SAndroid Build Coastguard Worker pic_wd = 0;
5963*495ae853SAndroid Build Coastguard Worker pic_ht = 0;
5964*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_pic_ht = pic_wd;
5965*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_pic_wd = pic_ht;
5966*495ae853SAndroid Build Coastguard Worker
5967*495ae853SAndroid Build Coastguard Worker if(1 == ps_dec->u4_share_disp_buf)
5968*495ae853SAndroid Build Coastguard Worker {
5969*495ae853SAndroid Build Coastguard Worker pic_wd += (PAD_LEN_Y_H << 1);
5970*495ae853SAndroid Build Coastguard Worker pic_ht += (PAD_LEN_Y_V << 2);
5971*495ae853SAndroid Build Coastguard Worker }
5972*495ae853SAndroid Build Coastguard Worker }
5973*495ae853SAndroid Build Coastguard Worker
5974*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_app_disp_width > pic_wd) pic_wd = ps_dec->u4_app_disp_width;
5975*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf)
5976*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = 1;
5977*495ae853SAndroid Build Coastguard Worker else
5978*495ae853SAndroid Build Coastguard Worker {
5979*495ae853SAndroid Build Coastguard Worker if((NULL != ps_dec->ps_cur_sps) && (1 == (ps_dec->ps_cur_sps->u1_is_valid)))
5980*495ae853SAndroid Build Coastguard Worker {
5981*495ae853SAndroid Build Coastguard Worker if((ps_dec->ps_cur_sps->u1_vui_parameters_present_flag == 1) &&
5982*495ae853SAndroid Build Coastguard Worker (1 == ps_dec->ps_cur_sps->s_vui.u1_bitstream_restriction_flag))
5983*495ae853SAndroid Build Coastguard Worker {
5984*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = ps_dec->ps_cur_sps->s_vui.u4_num_reorder_frames + 1;
5985*495ae853SAndroid Build Coastguard Worker }
5986*495ae853SAndroid Build Coastguard Worker else
5987*495ae853SAndroid Build Coastguard Worker {
5988*495ae853SAndroid Build Coastguard Worker /*if VUI is not present assume maximum possible refrence frames for the
5989*495ae853SAndroid Build Coastguard Worker * level, as max reorder frames*/
5990*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = ih264d_get_dpb_size(ps_dec->ps_cur_sps);
5991*495ae853SAndroid Build Coastguard Worker }
5992*495ae853SAndroid Build Coastguard Worker
5993*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs += ps_dec->ps_cur_sps->u1_num_ref_frames + 1;
5994*495ae853SAndroid Build Coastguard Worker }
5995*495ae853SAndroid Build Coastguard Worker else
5996*495ae853SAndroid Build Coastguard Worker {
5997*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = 32;
5998*495ae853SAndroid Build Coastguard Worker }
5999*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = MAX(ps_ctl_op->u4_num_disp_bufs, 6);
6000*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = MIN(ps_ctl_op->u4_num_disp_bufs, 32);
6001*495ae853SAndroid Build Coastguard Worker }
6002*495ae853SAndroid Build Coastguard Worker
6003*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = ps_dec->i4_error_code;
6004*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_frame_rate = 0;
6005*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_bit_rate = 0;
6006*495ae853SAndroid Build Coastguard Worker ps_ctl_op->e_content_type = ps_dec->i4_content_type;
6007*495ae853SAndroid Build Coastguard Worker ps_ctl_op->e_output_chroma_format = ps_dec->u1_chroma_format;
6008*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_num_in_bufs = MIN_IN_BUFS;
6009*495ae853SAndroid Build Coastguard Worker
6010*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_chroma_format == IV_YUV_420P)
6011*495ae853SAndroid Build Coastguard Worker {
6012*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420;
6013*495ae853SAndroid Build Coastguard Worker }
6014*495ae853SAndroid Build Coastguard Worker else if(ps_dec->u1_chroma_format == IV_YUV_422ILE)
6015*495ae853SAndroid Build Coastguard Worker {
6016*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_422ILE;
6017*495ae853SAndroid Build Coastguard Worker }
6018*495ae853SAndroid Build Coastguard Worker else if(ps_dec->u1_chroma_format == IV_RGB_565)
6019*495ae853SAndroid Build Coastguard Worker {
6020*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_RGB565;
6021*495ae853SAndroid Build Coastguard Worker }
6022*495ae853SAndroid Build Coastguard Worker else if((ps_dec->u1_chroma_format == IV_YUV_420SP_UV) ||
6023*495ae853SAndroid Build Coastguard Worker (ps_dec->u1_chroma_format == IV_YUV_420SP_VU))
6024*495ae853SAndroid Build Coastguard Worker {
6025*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420SP;
6026*495ae853SAndroid Build Coastguard Worker }
6027*495ae853SAndroid Build Coastguard Worker else
6028*495ae853SAndroid Build Coastguard Worker {
6029*495ae853SAndroid Build Coastguard Worker // Invalid chroma format; Error code may be updated, verify in testing if needed
6030*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = ERROR_FEATURE_UNAVAIL;
6031*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
6032*495ae853SAndroid Build Coastguard Worker }
6033*495ae853SAndroid Build Coastguard Worker
6034*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_ctl_op->u4_min_num_in_bufs; i++)
6035*495ae853SAndroid Build Coastguard Worker {
6036*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_in_buf_size[i] = MAX(256000, pic_wd * pic_ht * 3 / 2);
6037*495ae853SAndroid Build Coastguard Worker }
6038*495ae853SAndroid Build Coastguard Worker
6039*495ae853SAndroid Build Coastguard Worker if(ps_dec->u1_chroma_format == IV_YUV_420P)
6040*495ae853SAndroid Build Coastguard Worker {
6041*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[0] = (pic_wd * pic_ht);
6042*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[1] = (pic_wd * pic_ht) >> 2;
6043*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[2] = (pic_wd * pic_ht) >> 2;
6044*495ae853SAndroid Build Coastguard Worker }
6045*495ae853SAndroid Build Coastguard Worker else if(ps_dec->u1_chroma_format == IV_YUV_422ILE)
6046*495ae853SAndroid Build Coastguard Worker {
6047*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[0] = (pic_wd * pic_ht) * 2;
6048*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[1] = ps_ctl_op->u4_min_out_buf_size[2] = 0;
6049*495ae853SAndroid Build Coastguard Worker }
6050*495ae853SAndroid Build Coastguard Worker else if(ps_dec->u1_chroma_format == IV_RGB_565)
6051*495ae853SAndroid Build Coastguard Worker {
6052*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[0] = (pic_wd * pic_ht) * 2;
6053*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[1] = ps_ctl_op->u4_min_out_buf_size[2] = 0;
6054*495ae853SAndroid Build Coastguard Worker }
6055*495ae853SAndroid Build Coastguard Worker else if((ps_dec->u1_chroma_format == IV_YUV_420SP_UV) ||
6056*495ae853SAndroid Build Coastguard Worker (ps_dec->u1_chroma_format == IV_YUV_420SP_VU))
6057*495ae853SAndroid Build Coastguard Worker {
6058*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[0] = (pic_wd * pic_ht);
6059*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[1] = (pic_wd * pic_ht) >> 1;
6060*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[2] = 0;
6061*495ae853SAndroid Build Coastguard Worker }
6062*495ae853SAndroid Build Coastguard Worker
6063*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_disp_bufs_requested = ps_ctl_op->u4_num_disp_bufs;
6064*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6065*495ae853SAndroid Build Coastguard Worker }
6066*495ae853SAndroid Build Coastguard Worker
6067*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6068*495ae853SAndroid Build Coastguard Worker /* */
6069*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_buf_info */
6070*495ae853SAndroid Build Coastguard Worker /* */
6071*495ae853SAndroid Build Coastguard Worker /* Description : */
6072*495ae853SAndroid Build Coastguard Worker /* */
6073*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6074*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6075*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6076*495ae853SAndroid Build Coastguard Worker /* Globals : <Does it use any global variables?> */
6077*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6078*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6079*495ae853SAndroid Build Coastguard Worker /* */
6080*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6081*495ae853SAndroid Build Coastguard Worker /* */
6082*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6083*495ae853SAndroid Build Coastguard Worker /* */
6084*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6085*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6086*495ae853SAndroid Build Coastguard Worker /* */
6087*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_get_buf_info(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6088*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_buf_info(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6089*495ae853SAndroid Build Coastguard Worker {
6090*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6091*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6092*495ae853SAndroid Build Coastguard Worker UWORD8 i = 0; // Default for 420P format
6093*495ae853SAndroid Build Coastguard Worker UWORD16 pic_wd, pic_ht;
6094*495ae853SAndroid Build Coastguard Worker ivd_ctl_getbufinfo_op_t *ps_ctl_op = (ivd_ctl_getbufinfo_op_t *) pv_api_op;
6095*495ae853SAndroid Build Coastguard Worker UWORD32 au4_min_out_buf_size[IVD_VIDDEC_MAX_IO_BUFFERS] = {0};
6096*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6097*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6098*495ae853SAndroid Build Coastguard Worker
6099*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
6100*495ae853SAndroid Build Coastguard Worker
6101*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
6102*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6103*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
6104*495ae853SAndroid Build Coastguard Worker
6105*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_num_in_bufs = MIN_IN_BUFS;
6106*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = 1;
6107*495ae853SAndroid Build Coastguard Worker pic_wd = 0;
6108*495ae853SAndroid Build Coastguard Worker pic_ht = 0;
6109*495ae853SAndroid Build Coastguard Worker
6110*495ae853SAndroid Build Coastguard Worker if(ps_dec->i4_header_decoded == 3)
6111*495ae853SAndroid Build Coastguard Worker {
6112*495ae853SAndroid Build Coastguard Worker pic_wd = ps_svcd_ctxt->pic_width;
6113*495ae853SAndroid Build Coastguard Worker pic_ht = ps_svcd_ctxt->pic_height;
6114*495ae853SAndroid Build Coastguard Worker }
6115*495ae853SAndroid Build Coastguard Worker
6116*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_ctl_op->u4_min_num_in_bufs; i++)
6117*495ae853SAndroid Build Coastguard Worker {
6118*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_in_buf_size[i] = MAX(256000, pic_wd * pic_ht * 3 / 2);
6119*495ae853SAndroid Build Coastguard Worker }
6120*495ae853SAndroid Build Coastguard Worker if((WORD32) ps_dec->u4_app_disp_width > pic_wd) pic_wd = ps_dec->u4_app_disp_width;
6121*495ae853SAndroid Build Coastguard Worker
6122*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf)
6123*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = 1;
6124*495ae853SAndroid Build Coastguard Worker else
6125*495ae853SAndroid Build Coastguard Worker {
6126*495ae853SAndroid Build Coastguard Worker if((NULL != ps_dec->ps_cur_sps) && (1 == (ps_dec->ps_cur_sps->u1_is_valid)))
6127*495ae853SAndroid Build Coastguard Worker {
6128*495ae853SAndroid Build Coastguard Worker if((ps_dec->ps_cur_sps->u1_vui_parameters_present_flag == 1) &&
6129*495ae853SAndroid Build Coastguard Worker (1 == ps_dec->ps_cur_sps->s_vui.u1_bitstream_restriction_flag))
6130*495ae853SAndroid Build Coastguard Worker {
6131*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = ps_dec->ps_cur_sps->s_vui.u4_num_reorder_frames + 1;
6132*495ae853SAndroid Build Coastguard Worker }
6133*495ae853SAndroid Build Coastguard Worker else
6134*495ae853SAndroid Build Coastguard Worker {
6135*495ae853SAndroid Build Coastguard Worker /*if VUI is not present assume maximum possible refrence frames for the
6136*495ae853SAndroid Build Coastguard Worker * level, as max reorder frames*/
6137*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = ih264d_get_dpb_size(ps_dec->ps_cur_sps);
6138*495ae853SAndroid Build Coastguard Worker }
6139*495ae853SAndroid Build Coastguard Worker
6140*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs += ps_dec->ps_cur_sps->u1_num_ref_frames + 1;
6141*495ae853SAndroid Build Coastguard Worker }
6142*495ae853SAndroid Build Coastguard Worker else
6143*495ae853SAndroid Build Coastguard Worker {
6144*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = 32;
6145*495ae853SAndroid Build Coastguard Worker }
6146*495ae853SAndroid Build Coastguard Worker
6147*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = MAX(ps_ctl_op->u4_num_disp_bufs, 6);
6148*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_num_disp_bufs = MIN(ps_ctl_op->u4_num_disp_bufs, 32);
6149*495ae853SAndroid Build Coastguard Worker }
6150*495ae853SAndroid Build Coastguard Worker
6151*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_num_out_bufs =
6152*495ae853SAndroid Build Coastguard Worker ih264d_get_outbuf_size(pic_wd, pic_ht, ps_dec->u1_chroma_format, &au4_min_out_buf_size[0]);
6153*495ae853SAndroid Build Coastguard Worker
6154*495ae853SAndroid Build Coastguard Worker for(i = 0; i < ps_ctl_op->u4_min_num_out_bufs; i++)
6155*495ae853SAndroid Build Coastguard Worker {
6156*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_min_out_buf_size[i] = au4_min_out_buf_size[i];
6157*495ae853SAndroid Build Coastguard Worker }
6158*495ae853SAndroid Build Coastguard Worker
6159*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_disp_bufs_requested = ps_ctl_op->u4_num_disp_bufs;
6160*495ae853SAndroid Build Coastguard Worker
6161*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6162*495ae853SAndroid Build Coastguard Worker }
6163*495ae853SAndroid Build Coastguard Worker
6164*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6165*495ae853SAndroid Build Coastguard Worker /* */
6166*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_set_params */
6167*495ae853SAndroid Build Coastguard Worker /* */
6168*495ae853SAndroid Build Coastguard Worker /* Description : */
6169*495ae853SAndroid Build Coastguard Worker /* */
6170*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6171*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6172*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6173*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6174*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6175*495ae853SAndroid Build Coastguard Worker /* */
6176*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6177*495ae853SAndroid Build Coastguard Worker /* */
6178*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6179*495ae853SAndroid Build Coastguard Worker /* */
6180*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6181*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6182*495ae853SAndroid Build Coastguard Worker /* */
6183*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_set_params(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6184*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6185*495ae853SAndroid Build Coastguard Worker {
6186*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6187*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6188*495ae853SAndroid Build Coastguard Worker WORD32 ret = IV_SUCCESS;
6189*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6190*495ae853SAndroid Build Coastguard Worker WORD32 u1_layer_id;
6191*495ae853SAndroid Build Coastguard Worker
6192*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6193*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->i4_eos_flag = 0;
6194*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
6195*495ae853SAndroid Build Coastguard Worker {
6196*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_ip_t *ps_h264d_ctl_ip = (isvcd_ctl_set_config_ip_t *) pv_api_ip;
6197*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_config_op_t *ps_h264d_ctl_op = (isvcd_ctl_set_config_op_t *) pv_api_op;
6198*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip = &ps_h264d_ctl_ip->s_ivd_ctl_set_config_ip_t;
6199*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = &ps_h264d_ctl_op->s_ivd_ctl_set_config_op_t;
6200*495ae853SAndroid Build Coastguard Worker
6201*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
6202*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6203*495ae853SAndroid Build Coastguard Worker
6204*495ae853SAndroid Build Coastguard Worker ps_dec->u1_flushfrm = 0;
6205*495ae853SAndroid Build Coastguard Worker ps_dec->u4_skip_frm_mask = 0;
6206*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
6207*495ae853SAndroid Build Coastguard Worker
6208*495ae853SAndroid Build Coastguard Worker if(ps_ctl_ip->e_frm_skip_mode != IVD_SKIP_NONE)
6209*495ae853SAndroid Build Coastguard Worker {
6210*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
6211*495ae853SAndroid Build Coastguard Worker ret = IV_FAIL;
6212*495ae853SAndroid Build Coastguard Worker }
6213*495ae853SAndroid Build Coastguard Worker
6214*495ae853SAndroid Build Coastguard Worker if(ps_ctl_ip->u4_disp_wd >= ps_dec->u2_disp_width)
6215*495ae853SAndroid Build Coastguard Worker {
6216*495ae853SAndroid Build Coastguard Worker ps_dec->u4_app_disp_width = ps_ctl_ip->u4_disp_wd;
6217*495ae853SAndroid Build Coastguard Worker }
6218*495ae853SAndroid Build Coastguard Worker else if(0 == ps_dec->i4_header_decoded)
6219*495ae853SAndroid Build Coastguard Worker {
6220*495ae853SAndroid Build Coastguard Worker ps_dec->u4_app_disp_width = ps_ctl_ip->u4_disp_wd;
6221*495ae853SAndroid Build Coastguard Worker }
6222*495ae853SAndroid Build Coastguard Worker else if(ps_ctl_ip->u4_disp_wd == 0)
6223*495ae853SAndroid Build Coastguard Worker {
6224*495ae853SAndroid Build Coastguard Worker ps_dec->u4_app_disp_width = 0;
6225*495ae853SAndroid Build Coastguard Worker }
6226*495ae853SAndroid Build Coastguard Worker else
6227*495ae853SAndroid Build Coastguard Worker {
6228*495ae853SAndroid Build Coastguard Worker /*
6229*495ae853SAndroid Build Coastguard Worker * Set the display width to zero. This will ensure that the wrong value we
6230*495ae853SAndroid Build Coastguard Worker * had stored (0xFFFFFFFF) does not propogate.
6231*495ae853SAndroid Build Coastguard Worker */
6232*495ae853SAndroid Build Coastguard Worker ps_dec->u4_app_disp_width = 0;
6233*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM);
6234*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code |= ERROR_DISP_WIDTH_INVALID;
6235*495ae853SAndroid Build Coastguard Worker ret = IV_FAIL;
6236*495ae853SAndroid Build Coastguard Worker }
6237*495ae853SAndroid Build Coastguard Worker
6238*495ae853SAndroid Build Coastguard Worker if(ps_ctl_ip->e_vid_dec_mode == IVD_DECODE_FRAME)
6239*495ae853SAndroid Build Coastguard Worker ps_dec->i4_decode_header = 0;
6240*495ae853SAndroid Build Coastguard Worker else if(ps_ctl_ip->e_vid_dec_mode == IVD_DECODE_HEADER)
6241*495ae853SAndroid Build Coastguard Worker ps_dec->i4_decode_header = 1;
6242*495ae853SAndroid Build Coastguard Worker else
6243*495ae853SAndroid Build Coastguard Worker {
6244*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
6245*495ae853SAndroid Build Coastguard Worker ps_dec->i4_decode_header = 1;
6246*495ae853SAndroid Build Coastguard Worker ret = IV_FAIL;
6247*495ae853SAndroid Build Coastguard Worker }
6248*495ae853SAndroid Build Coastguard Worker ps_dec->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
6249*495ae853SAndroid Build Coastguard Worker
6250*495ae853SAndroid Build Coastguard Worker if((ps_ctl_ip->e_frm_out_mode != IVD_DECODE_FRAME_OUT) &&
6251*495ae853SAndroid Build Coastguard Worker (ps_ctl_ip->e_frm_out_mode != IVD_DISPLAY_FRAME_OUT))
6252*495ae853SAndroid Build Coastguard Worker {
6253*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
6254*495ae853SAndroid Build Coastguard Worker ret = IV_FAIL;
6255*495ae853SAndroid Build Coastguard Worker }
6256*495ae853SAndroid Build Coastguard Worker ps_dec->e_frm_out_mode = ps_ctl_ip->e_frm_out_mode;
6257*495ae853SAndroid Build Coastguard Worker }
6258*495ae853SAndroid Build Coastguard Worker return ret;
6259*495ae853SAndroid Build Coastguard Worker }
6260*495ae853SAndroid Build Coastguard Worker
6261*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6262*495ae853SAndroid Build Coastguard Worker /* */
6263*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_set_target_layer */
6264*495ae853SAndroid Build Coastguard Worker /* */
6265*495ae853SAndroid Build Coastguard Worker /* Description : */
6266*495ae853SAndroid Build Coastguard Worker /* */
6267*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6268*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6269*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6270*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6271*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6272*495ae853SAndroid Build Coastguard Worker /* */
6273*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6274*495ae853SAndroid Build Coastguard Worker /* */
6275*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6276*495ae853SAndroid Build Coastguard Worker /* */
6277*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6278*495ae853SAndroid Build Coastguard Worker /* 05 04 2021 Kishore Draft */
6279*495ae853SAndroid Build Coastguard Worker /* */
6280*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_set_target_layer(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6281*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_target_layer(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6282*495ae853SAndroid Build Coastguard Worker {
6283*495ae853SAndroid Build Coastguard Worker WORD32 ret = IV_SUCCESS;
6284*495ae853SAndroid Build Coastguard Worker
6285*495ae853SAndroid Build Coastguard Worker isvcd_set_target_layer_ip_t *ps_ip;
6286*495ae853SAndroid Build Coastguard Worker isvcd_set_target_layer_op_t *ps_op;
6287*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6288*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6289*495ae853SAndroid Build Coastguard Worker
6290*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_set_target_layer_ip_t *) pv_api_ip;
6291*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_set_target_layer_op_t *) pv_api_op;
6292*495ae853SAndroid Build Coastguard Worker
6293*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_dep_id = ps_ip->u1_tgt_dep_id;
6294*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_quality_id = ps_ip->u1_tgt_quality_id;
6295*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_temp_id = ps_ip->u1_tgt_temp_id;
6296*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_tgt_priority_id = ps_ip->u1_tgt_priority_id;
6297*495ae853SAndroid Build Coastguard Worker
6298*495ae853SAndroid Build Coastguard Worker ret = isvcd_nal_parse_set_target_attr(ps_ip->u1_tgt_quality_id, ps_ip->u1_tgt_dep_id,
6299*495ae853SAndroid Build Coastguard Worker ps_ip->u1_tgt_temp_id, ps_ip->u1_tgt_priority_id,
6300*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->pv_nal_parse_ctxt);
6301*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
6302*495ae853SAndroid Build Coastguard Worker
6303*495ae853SAndroid Build Coastguard Worker return ret;
6304*495ae853SAndroid Build Coastguard Worker }
6305*495ae853SAndroid Build Coastguard Worker
6306*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6307*495ae853SAndroid Build Coastguard Worker /* */
6308*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_set_default_params */
6309*495ae853SAndroid Build Coastguard Worker /* */
6310*495ae853SAndroid Build Coastguard Worker /* Description : */
6311*495ae853SAndroid Build Coastguard Worker /* */
6312*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6313*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6314*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6315*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6316*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6317*495ae853SAndroid Build Coastguard Worker /* */
6318*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6319*495ae853SAndroid Build Coastguard Worker /* */
6320*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6321*495ae853SAndroid Build Coastguard Worker /* */
6322*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6323*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Copied from set_params */
6324*495ae853SAndroid Build Coastguard Worker /* */
6325*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_set_default_params(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6326*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_default_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6327*495ae853SAndroid Build Coastguard Worker {
6328*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6329*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6330*495ae853SAndroid Build Coastguard Worker WORD32 ret = IV_SUCCESS;
6331*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
6332*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6333*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op = (ivd_ctl_set_config_op_t *) pv_api_op;
6334*495ae853SAndroid Build Coastguard Worker
6335*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6336*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
6337*495ae853SAndroid Build Coastguard Worker
6338*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
6339*495ae853SAndroid Build Coastguard Worker {
6340*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
6341*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6342*495ae853SAndroid Build Coastguard Worker
6343*495ae853SAndroid Build Coastguard Worker ps_dec->u4_app_disp_width = 0;
6344*495ae853SAndroid Build Coastguard Worker ps_dec->u4_skip_frm_mask = 0;
6345*495ae853SAndroid Build Coastguard Worker ps_dec->i4_decode_header = 1;
6346*495ae853SAndroid Build Coastguard Worker }
6347*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
6348*495ae853SAndroid Build Coastguard Worker
6349*495ae853SAndroid Build Coastguard Worker return ret;
6350*495ae853SAndroid Build Coastguard Worker }
6351*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6352*495ae853SAndroid Build Coastguard Worker /* */
6353*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_delete */
6354*495ae853SAndroid Build Coastguard Worker /* */
6355*495ae853SAndroid Build Coastguard Worker /* Description : */
6356*495ae853SAndroid Build Coastguard Worker /* */
6357*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6358*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6359*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6360*495ae853SAndroid Build Coastguard Worker /* Globals : <Does it use any global variables?> */
6361*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6362*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6363*495ae853SAndroid Build Coastguard Worker /* */
6364*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6365*495ae853SAndroid Build Coastguard Worker /* */
6366*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6367*495ae853SAndroid Build Coastguard Worker /* */
6368*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6369*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6370*495ae853SAndroid Build Coastguard Worker /* */
6371*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_delete(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6372*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_delete(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6373*495ae853SAndroid Build Coastguard Worker {
6374*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6375*495ae853SAndroid Build Coastguard Worker isvcd_delete_ip_t *ps_ip = (isvcd_delete_ip_t *) pv_api_ip;
6376*495ae853SAndroid Build Coastguard Worker isvcd_delete_op_t *ps_op = (isvcd_delete_op_t *) pv_api_op;
6377*495ae853SAndroid Build Coastguard Worker
6378*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
6379*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6380*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6381*495ae853SAndroid Build Coastguard Worker UNUSED(ps_ip);
6382*495ae853SAndroid Build Coastguard Worker
6383*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
6384*495ae853SAndroid Build Coastguard Worker {
6385*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
6386*495ae853SAndroid Build Coastguard Worker isvcd_free_dynamic_bufs(ps_svc_lyr_dec);
6387*495ae853SAndroid Build Coastguard Worker }
6388*495ae853SAndroid Build Coastguard Worker isvcd_free_static_bufs(dec_hdl);
6389*495ae853SAndroid Build Coastguard Worker ps_op->s_ivd_delete_op_t.u4_error_code = 0;
6390*495ae853SAndroid Build Coastguard Worker
6391*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6392*495ae853SAndroid Build Coastguard Worker }
6393*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6394*495ae853SAndroid Build Coastguard Worker /* */
6395*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_reset */
6396*495ae853SAndroid Build Coastguard Worker /* */
6397*495ae853SAndroid Build Coastguard Worker /* Description : */
6398*495ae853SAndroid Build Coastguard Worker /* */
6399*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6400*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6401*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6402*495ae853SAndroid Build Coastguard Worker /* Globals : <Does it use any global variables?> */
6403*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6404*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6405*495ae853SAndroid Build Coastguard Worker /* */
6406*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6407*495ae853SAndroid Build Coastguard Worker /* */
6408*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6409*495ae853SAndroid Build Coastguard Worker /* */
6410*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6411*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6412*495ae853SAndroid Build Coastguard Worker /* */
6413*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_reset(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6414*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_reset(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6415*495ae853SAndroid Build Coastguard Worker {
6416*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6417*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6418*495ae853SAndroid Build Coastguard Worker ivd_ctl_reset_op_t *ps_ctl_op = (ivd_ctl_reset_op_t *) pv_api_op;
6419*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
6420*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6421*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6422*495ae853SAndroid Build Coastguard Worker UNUSED(pv_api_ip);
6423*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
6424*495ae853SAndroid Build Coastguard Worker
6425*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->i4_eos_flag = 0;
6426*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u4_num_sps_ctr = 0;
6427*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u4_num_pps_ctr = 0;
6428*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt->u1_pre_parse_in_flush = 1;
6429*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
6430*495ae853SAndroid Build Coastguard Worker {
6431*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
6432*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6433*495ae853SAndroid Build Coastguard Worker if(ps_dec != NULL)
6434*495ae853SAndroid Build Coastguard Worker {
6435*495ae853SAndroid Build Coastguard Worker if(((buf_mgr_t *) ps_dec->pv_pic_buf_mgr)->pv_mutex != NULL)
6436*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free(ps_dec->pv_pic_buf_mgr);
6437*495ae853SAndroid Build Coastguard Worker if(((buf_mgr_t *) ps_dec->pv_mv_buf_mgr)->pv_mutex != NULL)
6438*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_free(ps_dec->pv_mv_buf_mgr);
6439*495ae853SAndroid Build Coastguard Worker
6440*495ae853SAndroid Build Coastguard Worker isvcd_init_decoder(ps_svc_lyr_dec);
6441*495ae853SAndroid Build Coastguard Worker ps_dec->u1_flushfrm = 0;
6442*495ae853SAndroid Build Coastguard Worker }
6443*495ae853SAndroid Build Coastguard Worker else
6444*495ae853SAndroid Build Coastguard Worker {
6445*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("\nReset called without Initializing the decoder\n");
6446*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = ERROR_INIT_NOT_DONE;
6447*495ae853SAndroid Build Coastguard Worker }
6448*495ae853SAndroid Build Coastguard Worker }
6449*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6450*495ae853SAndroid Build Coastguard Worker }
6451*495ae853SAndroid Build Coastguard Worker
6452*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6453*495ae853SAndroid Build Coastguard Worker /* */
6454*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_ctl */
6455*495ae853SAndroid Build Coastguard Worker /* */
6456*495ae853SAndroid Build Coastguard Worker /* Description : */
6457*495ae853SAndroid Build Coastguard Worker /* */
6458*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6459*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6460*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6461*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6462*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6463*495ae853SAndroid Build Coastguard Worker /* */
6464*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6465*495ae853SAndroid Build Coastguard Worker /* */
6466*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6467*495ae853SAndroid Build Coastguard Worker /* */
6468*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6469*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6470*495ae853SAndroid Build Coastguard Worker /* */
6471*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_ctl(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6472*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_ctl(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6473*495ae853SAndroid Build Coastguard Worker {
6474*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_ip_t *ps_ctl_ip;
6475*495ae853SAndroid Build Coastguard Worker ivd_ctl_set_config_op_t *ps_ctl_op;
6476*495ae853SAndroid Build Coastguard Worker WORD32 ret = IV_SUCCESS;
6477*495ae853SAndroid Build Coastguard Worker UWORD32 subcommand;
6478*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6479*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6480*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6481*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6482*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
6483*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6484*495ae853SAndroid Build Coastguard Worker if(ps_dec->init_done != 1)
6485*495ae853SAndroid Build Coastguard Worker {
6486*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
6487*495ae853SAndroid Build Coastguard Worker }
6488*495ae853SAndroid Build Coastguard Worker ps_ctl_ip = (ivd_ctl_set_config_ip_t *) pv_api_ip;
6489*495ae853SAndroid Build Coastguard Worker ps_ctl_op = (ivd_ctl_set_config_op_t *) pv_api_op;
6490*495ae853SAndroid Build Coastguard Worker ps_ctl_op->u4_error_code = 0;
6491*495ae853SAndroid Build Coastguard Worker subcommand = ps_ctl_ip->e_sub_cmd;
6492*495ae853SAndroid Build Coastguard Worker
6493*495ae853SAndroid Build Coastguard Worker switch(subcommand)
6494*495ae853SAndroid Build Coastguard Worker {
6495*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_GETPARAMS:
6496*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_status(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6497*495ae853SAndroid Build Coastguard Worker break;
6498*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_SETPARAMS:
6499*495ae853SAndroid Build Coastguard Worker ret = isvcd_set_params(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6500*495ae853SAndroid Build Coastguard Worker break;
6501*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_RESET:
6502*495ae853SAndroid Build Coastguard Worker ret = isvcd_reset(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6503*495ae853SAndroid Build Coastguard Worker break;
6504*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_SETDEFAULT:
6505*495ae853SAndroid Build Coastguard Worker ret = isvcd_set_default_params(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6506*495ae853SAndroid Build Coastguard Worker break;
6507*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_FLUSH:
6508*495ae853SAndroid Build Coastguard Worker ret = isvcd_set_flush_mode(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6509*495ae853SAndroid Build Coastguard Worker break;
6510*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_GETBUFINFO:
6511*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_buf_info(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6512*495ae853SAndroid Build Coastguard Worker break;
6513*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CTL_GETVERSION:
6514*495ae853SAndroid Build Coastguard Worker ret = ih264d_get_version(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6515*495ae853SAndroid Build Coastguard Worker break;
6516*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_DEGRADE:
6517*495ae853SAndroid Build Coastguard Worker ret = isvcd_set_degrade(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6518*495ae853SAndroid Build Coastguard Worker break;
6519*495ae853SAndroid Build Coastguard Worker
6520*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_SET_NUM_CORES:
6521*495ae853SAndroid Build Coastguard Worker ret = isvcd_set_num_cores(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6522*495ae853SAndroid Build Coastguard Worker break;
6523*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS:
6524*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_frame_dimensions(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6525*495ae853SAndroid Build Coastguard Worker break;
6526*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_VUI_PARAMS:
6527*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_vui_params(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6528*495ae853SAndroid Build Coastguard Worker break;
6529*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_MDCV_PARAMS:
6530*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_sei_mdcv_params(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6531*495ae853SAndroid Build Coastguard Worker break;
6532*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_CLL_PARAMS:
6533*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_sei_cll_params(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6534*495ae853SAndroid Build Coastguard Worker break;
6535*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_AVE_PARAMS:
6536*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_sei_ave_params(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6537*495ae853SAndroid Build Coastguard Worker break;
6538*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_GET_SEI_CCV_PARAMS:
6539*495ae853SAndroid Build Coastguard Worker ret = isvcd_get_sei_ccv_params(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6540*495ae853SAndroid Build Coastguard Worker break;
6541*495ae853SAndroid Build Coastguard Worker case IH264D_CMD_CTL_SET_PROCESSOR:
6542*495ae853SAndroid Build Coastguard Worker ret = isvcd_set_processor(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6543*495ae853SAndroid Build Coastguard Worker break;
6544*495ae853SAndroid Build Coastguard Worker case ISVCD_CMD_CTL_SET_TGT_LAYER:
6545*495ae853SAndroid Build Coastguard Worker ret = isvcd_set_target_layer(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
6546*495ae853SAndroid Build Coastguard Worker break;
6547*495ae853SAndroid Build Coastguard Worker default:
6548*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("\ndo nothing\n");
6549*495ae853SAndroid Build Coastguard Worker break;
6550*495ae853SAndroid Build Coastguard Worker }
6551*495ae853SAndroid Build Coastguard Worker
6552*495ae853SAndroid Build Coastguard Worker return ret;
6553*495ae853SAndroid Build Coastguard Worker }
6554*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6555*495ae853SAndroid Build Coastguard Worker /* */
6556*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_rel_display_frame */
6557*495ae853SAndroid Build Coastguard Worker /* */
6558*495ae853SAndroid Build Coastguard Worker /* Description : */
6559*495ae853SAndroid Build Coastguard Worker /* */
6560*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6561*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6562*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6563*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6564*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6565*495ae853SAndroid Build Coastguard Worker /* */
6566*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6567*495ae853SAndroid Build Coastguard Worker /* */
6568*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6569*495ae853SAndroid Build Coastguard Worker /* */
6570*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6571*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6572*495ae853SAndroid Build Coastguard Worker /* */
6573*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_rel_display_frame(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6574*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_rel_display_frame(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6575*495ae853SAndroid Build Coastguard Worker {
6576*495ae853SAndroid Build Coastguard Worker ivd_rel_display_frame_ip_t *ps_rel_ip;
6577*495ae853SAndroid Build Coastguard Worker ivd_rel_display_frame_op_t *ps_rel_op;
6578*495ae853SAndroid Build Coastguard Worker UWORD32 buf_released = 0;
6579*495ae853SAndroid Build Coastguard Worker
6580*495ae853SAndroid Build Coastguard Worker UWORD32 u4_ts = 0;
6581*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6582*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6583*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
6584*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6585*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6586*495ae853SAndroid Build Coastguard Worker
6587*495ae853SAndroid Build Coastguard Worker ps_rel_ip = (ivd_rel_display_frame_ip_t *) pv_api_ip;
6588*495ae853SAndroid Build Coastguard Worker ps_rel_op = (ivd_rel_display_frame_op_t *) pv_api_op;
6589*495ae853SAndroid Build Coastguard Worker ps_rel_op->u4_error_code = 0;
6590*495ae853SAndroid Build Coastguard Worker u4_ts = ps_rel_ip->u4_disp_buf_id;
6591*495ae853SAndroid Build Coastguard Worker
6592*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
6593*495ae853SAndroid Build Coastguard Worker {
6594*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
6595*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6596*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf)
6597*495ae853SAndroid Build Coastguard Worker {
6598*495ae853SAndroid Build Coastguard Worker ps_dec->u4_disp_buf_mapping[u4_ts] = 0;
6599*495ae853SAndroid Build Coastguard Worker ps_dec->u4_disp_buf_to_be_freed[u4_ts] = 0;
6600*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6601*495ae853SAndroid Build Coastguard Worker }
6602*495ae853SAndroid Build Coastguard Worker
6603*495ae853SAndroid Build Coastguard Worker if(ps_dec->pv_pic_buf_mgr != NULL)
6604*495ae853SAndroid Build Coastguard Worker {
6605*495ae853SAndroid Build Coastguard Worker if(1 == ps_dec->u4_disp_buf_mapping[u4_ts])
6606*495ae853SAndroid Build Coastguard Worker {
6607*495ae853SAndroid Build Coastguard Worker ih264_buf_mgr_release((buf_mgr_t *) ps_dec->pv_pic_buf_mgr,
6608*495ae853SAndroid Build Coastguard Worker ps_rel_ip->u4_disp_buf_id, BUF_MGR_IO);
6609*495ae853SAndroid Build Coastguard Worker ps_dec->u4_disp_buf_mapping[u4_ts] = 0;
6610*495ae853SAndroid Build Coastguard Worker buf_released = 1;
6611*495ae853SAndroid Build Coastguard Worker }
6612*495ae853SAndroid Build Coastguard Worker }
6613*495ae853SAndroid Build Coastguard Worker
6614*495ae853SAndroid Build Coastguard Worker if((1 == ps_dec->u4_share_disp_buf) && (0 == buf_released))
6615*495ae853SAndroid Build Coastguard Worker ps_dec->u4_disp_buf_to_be_freed[u4_ts] = 1;
6616*495ae853SAndroid Build Coastguard Worker }
6617*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6618*495ae853SAndroid Build Coastguard Worker }
6619*495ae853SAndroid Build Coastguard Worker
6620*495ae853SAndroid Build Coastguard Worker /**
6621*495ae853SAndroid Build Coastguard Worker *******************************************************************************
6622*495ae853SAndroid Build Coastguard Worker *
6623*495ae853SAndroid Build Coastguard Worker * @brief
6624*495ae853SAndroid Build Coastguard Worker * Sets degrade params
6625*495ae853SAndroid Build Coastguard Worker *
6626*495ae853SAndroid Build Coastguard Worker * @par Description:
6627*495ae853SAndroid Build Coastguard Worker * Sets degrade params.
6628*495ae853SAndroid Build Coastguard Worker * Refer to ih264d_ctl_degrade_ip_t definition for details
6629*495ae853SAndroid Build Coastguard Worker *
6630*495ae853SAndroid Build Coastguard Worker * @param[in] ps_codec_obj
6631*495ae853SAndroid Build Coastguard Worker * Pointer to codec object at API level
6632*495ae853SAndroid Build Coastguard Worker *
6633*495ae853SAndroid Build Coastguard Worker * @param[in] pv_api_ip
6634*495ae853SAndroid Build Coastguard Worker * Pointer to input argument structure
6635*495ae853SAndroid Build Coastguard Worker *
6636*495ae853SAndroid Build Coastguard Worker * @param[out] pv_api_op
6637*495ae853SAndroid Build Coastguard Worker * Pointer to output argument structure
6638*495ae853SAndroid Build Coastguard Worker *
6639*495ae853SAndroid Build Coastguard Worker * @returns Status
6640*495ae853SAndroid Build Coastguard Worker *
6641*495ae853SAndroid Build Coastguard Worker * @remarks
6642*495ae853SAndroid Build Coastguard Worker *
6643*495ae853SAndroid Build Coastguard Worker *
6644*495ae853SAndroid Build Coastguard Worker *******************************************************************************
6645*495ae853SAndroid Build Coastguard Worker */
6646*495ae853SAndroid Build Coastguard Worker
isvcd_set_degrade(iv_obj_t * ps_codec_obj,void * pv_api_ip,void * pv_api_op)6647*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_degrade(iv_obj_t *ps_codec_obj, void *pv_api_ip, void *pv_api_op)
6648*495ae853SAndroid Build Coastguard Worker {
6649*495ae853SAndroid Build Coastguard Worker isvcd_ctl_degrade_ip_t *ps_ip;
6650*495ae853SAndroid Build Coastguard Worker isvcd_ctl_degrade_op_t *ps_op;
6651*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_codec;
6652*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6653*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
6654*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6655*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) ps_codec_obj->pv_codec_handle;
6656*495ae853SAndroid Build Coastguard Worker
6657*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_degrade_ip_t *) pv_api_ip;
6658*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_degrade_op_t *) pv_api_op;
6659*495ae853SAndroid Build Coastguard Worker
6660*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
6661*495ae853SAndroid Build Coastguard Worker {
6662*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
6663*495ae853SAndroid Build Coastguard Worker ps_codec = &ps_svc_lyr_dec->s_dec;
6664*495ae853SAndroid Build Coastguard Worker ps_codec->i4_degrade_type = ps_ip->i4_degrade_type;
6665*495ae853SAndroid Build Coastguard Worker ps_codec->i4_nondegrade_interval = ps_ip->i4_nondegrade_interval;
6666*495ae853SAndroid Build Coastguard Worker ps_codec->i4_degrade_pics = ps_ip->i4_degrade_pics;
6667*495ae853SAndroid Build Coastguard Worker
6668*495ae853SAndroid Build Coastguard Worker ps_codec->i4_degrade_pic_cnt = 0;
6669*495ae853SAndroid Build Coastguard Worker }
6670*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
6671*495ae853SAndroid Build Coastguard Worker
6672*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6673*495ae853SAndroid Build Coastguard Worker }
6674*495ae853SAndroid Build Coastguard Worker
6675*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6676*495ae853SAndroid Build Coastguard Worker /* */
6677*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_frame_dimensions */
6678*495ae853SAndroid Build Coastguard Worker /* */
6679*495ae853SAndroid Build Coastguard Worker /* Description : gets the frame wd and ht and the buffer sizes */
6680*495ae853SAndroid Build Coastguard Worker /* */
6681*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6682*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6683*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6684*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6685*495ae853SAndroid Build Coastguard Worker /* Returns : void */
6686*495ae853SAndroid Build Coastguard Worker /* */
6687*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6688*495ae853SAndroid Build Coastguard Worker /* */
6689*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6690*495ae853SAndroid Build Coastguard Worker /* */
6691*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6692*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6693*495ae853SAndroid Build Coastguard Worker /* */
6694*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_get_frame_dimensions(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6695*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_frame_dimensions(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6696*495ae853SAndroid Build Coastguard Worker {
6697*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_frame_dimensions_ip_t *ps_ip;
6698*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_frame_dimensions_op_t *ps_op;
6699*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6700*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6701*495ae853SAndroid Build Coastguard Worker UWORD32 disp_wd, disp_ht, buffer_wd, buffer_ht, x_offset, y_offset;
6702*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6703*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6704*495ae853SAndroid Build Coastguard Worker
6705*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
6706*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6707*495ae853SAndroid Build Coastguard Worker
6708*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_frame_dimensions_ip_t *) pv_api_ip;
6709*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_frame_dimensions_op_t *) pv_api_op;
6710*495ae853SAndroid Build Coastguard Worker UNUSED(ps_ip);
6711*495ae853SAndroid Build Coastguard Worker if((NULL != ps_dec->ps_cur_sps) && (1 == (ps_dec->ps_cur_sps->u1_is_valid)))
6712*495ae853SAndroid Build Coastguard Worker {
6713*495ae853SAndroid Build Coastguard Worker disp_wd = ps_dec->u2_disp_width;
6714*495ae853SAndroid Build Coastguard Worker disp_ht = ps_dec->u2_disp_height;
6715*495ae853SAndroid Build Coastguard Worker
6716*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf)
6717*495ae853SAndroid Build Coastguard Worker {
6718*495ae853SAndroid Build Coastguard Worker buffer_wd = disp_wd;
6719*495ae853SAndroid Build Coastguard Worker buffer_ht = disp_ht;
6720*495ae853SAndroid Build Coastguard Worker }
6721*495ae853SAndroid Build Coastguard Worker else
6722*495ae853SAndroid Build Coastguard Worker {
6723*495ae853SAndroid Build Coastguard Worker buffer_wd = ps_dec->u2_frm_wd_y;
6724*495ae853SAndroid Build Coastguard Worker buffer_ht = ps_dec->u2_frm_ht_y;
6725*495ae853SAndroid Build Coastguard Worker }
6726*495ae853SAndroid Build Coastguard Worker }
6727*495ae853SAndroid Build Coastguard Worker else
6728*495ae853SAndroid Build Coastguard Worker {
6729*495ae853SAndroid Build Coastguard Worker disp_wd = 0;
6730*495ae853SAndroid Build Coastguard Worker disp_ht = 0;
6731*495ae853SAndroid Build Coastguard Worker
6732*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf)
6733*495ae853SAndroid Build Coastguard Worker {
6734*495ae853SAndroid Build Coastguard Worker buffer_wd = disp_wd;
6735*495ae853SAndroid Build Coastguard Worker buffer_ht = disp_ht;
6736*495ae853SAndroid Build Coastguard Worker }
6737*495ae853SAndroid Build Coastguard Worker else
6738*495ae853SAndroid Build Coastguard Worker {
6739*495ae853SAndroid Build Coastguard Worker buffer_wd = ALIGN16(disp_wd) + (PAD_LEN_Y_H << 1);
6740*495ae853SAndroid Build Coastguard Worker buffer_ht = ALIGN16(disp_ht) + (PAD_LEN_Y_V << 2);
6741*495ae853SAndroid Build Coastguard Worker }
6742*495ae853SAndroid Build Coastguard Worker }
6743*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_app_disp_width > buffer_wd) buffer_wd = ps_dec->u4_app_disp_width;
6744*495ae853SAndroid Build Coastguard Worker
6745*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->u4_share_disp_buf)
6746*495ae853SAndroid Build Coastguard Worker {
6747*495ae853SAndroid Build Coastguard Worker x_offset = 0;
6748*495ae853SAndroid Build Coastguard Worker y_offset = 0;
6749*495ae853SAndroid Build Coastguard Worker }
6750*495ae853SAndroid Build Coastguard Worker else
6751*495ae853SAndroid Build Coastguard Worker {
6752*495ae853SAndroid Build Coastguard Worker y_offset = (PAD_LEN_Y_V << 1);
6753*495ae853SAndroid Build Coastguard Worker x_offset = PAD_LEN_Y_H;
6754*495ae853SAndroid Build Coastguard Worker
6755*495ae853SAndroid Build Coastguard Worker if((NULL != ps_dec->ps_sps) && (1 == (ps_dec->ps_sps->u1_is_valid)) &&
6756*495ae853SAndroid Build Coastguard Worker (0 != ps_dec->u2_crop_offset_y))
6757*495ae853SAndroid Build Coastguard Worker {
6758*495ae853SAndroid Build Coastguard Worker y_offset += ps_dec->u2_crop_offset_y / ps_dec->u2_frm_wd_y;
6759*495ae853SAndroid Build Coastguard Worker x_offset += ps_dec->u2_crop_offset_y % ps_dec->u2_frm_wd_y;
6760*495ae853SAndroid Build Coastguard Worker }
6761*495ae853SAndroid Build Coastguard Worker }
6762*495ae853SAndroid Build Coastguard Worker
6763*495ae853SAndroid Build Coastguard Worker ps_op->u4_disp_wd[0] = disp_wd;
6764*495ae853SAndroid Build Coastguard Worker ps_op->u4_disp_ht[0] = disp_ht;
6765*495ae853SAndroid Build Coastguard Worker ps_op->u4_buffer_wd[0] = buffer_wd;
6766*495ae853SAndroid Build Coastguard Worker ps_op->u4_buffer_ht[0] = buffer_ht;
6767*495ae853SAndroid Build Coastguard Worker ps_op->u4_x_offset[0] = x_offset;
6768*495ae853SAndroid Build Coastguard Worker ps_op->u4_y_offset[0] = y_offset;
6769*495ae853SAndroid Build Coastguard Worker
6770*495ae853SAndroid Build Coastguard Worker ps_op->u4_disp_wd[1] = ps_op->u4_disp_wd[2] = ((ps_op->u4_disp_wd[0] + 1) >> 1);
6771*495ae853SAndroid Build Coastguard Worker ps_op->u4_disp_ht[1] = ps_op->u4_disp_ht[2] = ((ps_op->u4_disp_ht[0] + 1) >> 1);
6772*495ae853SAndroid Build Coastguard Worker ps_op->u4_buffer_wd[1] = ps_op->u4_buffer_wd[2] = (ps_op->u4_buffer_wd[0] >> 1);
6773*495ae853SAndroid Build Coastguard Worker ps_op->u4_buffer_ht[1] = ps_op->u4_buffer_ht[2] = (ps_op->u4_buffer_ht[0] >> 1);
6774*495ae853SAndroid Build Coastguard Worker ps_op->u4_x_offset[1] = ps_op->u4_x_offset[2] = (ps_op->u4_x_offset[0] >> 1);
6775*495ae853SAndroid Build Coastguard Worker ps_op->u4_y_offset[1] = ps_op->u4_y_offset[2] = (ps_op->u4_y_offset[0] >> 1);
6776*495ae853SAndroid Build Coastguard Worker
6777*495ae853SAndroid Build Coastguard Worker if((ps_dec->u1_chroma_format == IV_YUV_420SP_UV) ||
6778*495ae853SAndroid Build Coastguard Worker (ps_dec->u1_chroma_format == IV_YUV_420SP_VU))
6779*495ae853SAndroid Build Coastguard Worker {
6780*495ae853SAndroid Build Coastguard Worker ps_op->u4_disp_wd[2] = 0;
6781*495ae853SAndroid Build Coastguard Worker ps_op->u4_disp_ht[2] = 0;
6782*495ae853SAndroid Build Coastguard Worker ps_op->u4_buffer_wd[2] = 0;
6783*495ae853SAndroid Build Coastguard Worker ps_op->u4_buffer_ht[2] = 0;
6784*495ae853SAndroid Build Coastguard Worker ps_op->u4_x_offset[2] = 0;
6785*495ae853SAndroid Build Coastguard Worker ps_op->u4_y_offset[2] = 0;
6786*495ae853SAndroid Build Coastguard Worker
6787*495ae853SAndroid Build Coastguard Worker ps_op->u4_disp_wd[1] <<= 1;
6788*495ae853SAndroid Build Coastguard Worker ps_op->u4_buffer_wd[1] <<= 1;
6789*495ae853SAndroid Build Coastguard Worker ps_op->u4_x_offset[1] <<= 1;
6790*495ae853SAndroid Build Coastguard Worker }
6791*495ae853SAndroid Build Coastguard Worker
6792*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6793*495ae853SAndroid Build Coastguard Worker }
6794*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6795*495ae853SAndroid Build Coastguard Worker /* */
6796*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_vui_params */
6797*495ae853SAndroid Build Coastguard Worker /* */
6798*495ae853SAndroid Build Coastguard Worker /* Description : gets the VUI params */
6799*495ae853SAndroid Build Coastguard Worker /* */
6800*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
6801*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
6802*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
6803*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6804*495ae853SAndroid Build Coastguard Worker /* Returns : success or failure */
6805*495ae853SAndroid Build Coastguard Worker /* */
6806*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6807*495ae853SAndroid Build Coastguard Worker /* */
6808*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6809*495ae853SAndroid Build Coastguard Worker /* */
6810*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6811*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
6812*495ae853SAndroid Build Coastguard Worker /* */
6813*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6814*495ae853SAndroid Build Coastguard Worker
isvcd_get_vui_params(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6815*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_vui_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6816*495ae853SAndroid Build Coastguard Worker {
6817*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_vui_params_ip_t *ps_ip;
6818*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_vui_params_op_t *ps_op;
6819*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6820*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6821*495ae853SAndroid Build Coastguard Worker dec_seq_params_t *ps_sps;
6822*495ae853SAndroid Build Coastguard Worker vui_t *ps_vui;
6823*495ae853SAndroid Build Coastguard Worker UWORD32 u4_size;
6824*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6825*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6826*495ae853SAndroid Build Coastguard Worker
6827*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_vui_params_ip_t *) pv_api_ip;
6828*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_vui_params_op_t *) pv_api_op;
6829*495ae853SAndroid Build Coastguard Worker UNUSED(ps_ip);
6830*495ae853SAndroid Build Coastguard Worker
6831*495ae853SAndroid Build Coastguard Worker u4_size = ps_op->u4_size;
6832*495ae853SAndroid Build Coastguard Worker memset(ps_op, 0, sizeof(isvcd_ctl_get_vui_params_op_t));
6833*495ae853SAndroid Build Coastguard Worker ps_op->u4_size = u4_size;
6834*495ae853SAndroid Build Coastguard Worker
6835*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
6836*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6837*495ae853SAndroid Build Coastguard Worker if(NULL == ps_dec->ps_cur_sps)
6838*495ae853SAndroid Build Coastguard Worker {
6839*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = ERROR_VUI_PARAMS_NOT_FOUND;
6840*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
6841*495ae853SAndroid Build Coastguard Worker }
6842*495ae853SAndroid Build Coastguard Worker ps_sps = ps_dec->ps_cur_sps;
6843*495ae853SAndroid Build Coastguard Worker
6844*495ae853SAndroid Build Coastguard Worker if((0 == ps_sps->u1_is_valid) || (0 == ps_sps->u1_vui_parameters_present_flag))
6845*495ae853SAndroid Build Coastguard Worker {
6846*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = ERROR_VUI_PARAMS_NOT_FOUND;
6847*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
6848*495ae853SAndroid Build Coastguard Worker }
6849*495ae853SAndroid Build Coastguard Worker
6850*495ae853SAndroid Build Coastguard Worker ps_vui = &ps_sps->s_vui;
6851*495ae853SAndroid Build Coastguard Worker
6852*495ae853SAndroid Build Coastguard Worker ps_op->u1_aspect_ratio_idc = ps_vui->u1_aspect_ratio_idc;
6853*495ae853SAndroid Build Coastguard Worker ps_op->u2_sar_width = ps_vui->u2_sar_width;
6854*495ae853SAndroid Build Coastguard Worker ps_op->u2_sar_height = ps_vui->u2_sar_height;
6855*495ae853SAndroid Build Coastguard Worker ps_op->u1_overscan_appropriate_flag = ps_vui->u1_overscan_appropriate_flag;
6856*495ae853SAndroid Build Coastguard Worker ps_op->u1_video_format = ps_vui->u1_video_format;
6857*495ae853SAndroid Build Coastguard Worker ps_op->u1_video_full_range_flag = ps_vui->u1_video_full_range_flag;
6858*495ae853SAndroid Build Coastguard Worker ps_op->u1_colour_primaries = ps_vui->u1_colour_primaries;
6859*495ae853SAndroid Build Coastguard Worker ps_op->u1_tfr_chars = ps_vui->u1_tfr_chars;
6860*495ae853SAndroid Build Coastguard Worker ps_op->u1_matrix_coeffs = ps_vui->u1_matrix_coeffs;
6861*495ae853SAndroid Build Coastguard Worker ps_op->u1_cr_top_field = ps_vui->u1_cr_top_field;
6862*495ae853SAndroid Build Coastguard Worker ps_op->u1_cr_bottom_field = ps_vui->u1_cr_bottom_field;
6863*495ae853SAndroid Build Coastguard Worker ps_op->u4_num_units_in_tick = ps_vui->u4_num_units_in_tick;
6864*495ae853SAndroid Build Coastguard Worker ps_op->u4_time_scale = ps_vui->u4_time_scale;
6865*495ae853SAndroid Build Coastguard Worker ps_op->u1_fixed_frame_rate_flag = ps_vui->u1_fixed_frame_rate_flag;
6866*495ae853SAndroid Build Coastguard Worker ps_op->u1_nal_hrd_params_present = ps_vui->u1_nal_hrd_params_present;
6867*495ae853SAndroid Build Coastguard Worker ps_op->u1_vcl_hrd_params_present = ps_vui->u1_vcl_hrd_params_present;
6868*495ae853SAndroid Build Coastguard Worker ps_op->u1_low_delay_hrd_flag = ps_vui->u1_low_delay_hrd_flag;
6869*495ae853SAndroid Build Coastguard Worker ps_op->u1_pic_struct_present_flag = ps_vui->u1_pic_struct_present_flag;
6870*495ae853SAndroid Build Coastguard Worker ps_op->u1_bitstream_restriction_flag = ps_vui->u1_bitstream_restriction_flag;
6871*495ae853SAndroid Build Coastguard Worker ps_op->u1_mv_over_pic_boundaries_flag = ps_vui->u1_mv_over_pic_boundaries_flag;
6872*495ae853SAndroid Build Coastguard Worker ps_op->u4_max_bytes_per_pic_denom = ps_vui->u4_max_bytes_per_pic_denom;
6873*495ae853SAndroid Build Coastguard Worker ps_op->u4_max_bits_per_mb_denom = ps_vui->u4_max_bits_per_mb_denom;
6874*495ae853SAndroid Build Coastguard Worker ps_op->u4_log2_max_mv_length_horz = ps_vui->u4_log2_max_mv_length_horz;
6875*495ae853SAndroid Build Coastguard Worker ps_op->u4_log2_max_mv_length_vert = ps_vui->u4_log2_max_mv_length_vert;
6876*495ae853SAndroid Build Coastguard Worker ps_op->u4_num_reorder_frames = ps_vui->u4_num_reorder_frames;
6877*495ae853SAndroid Build Coastguard Worker ps_op->u4_max_dec_frame_buffering = ps_vui->u4_max_dec_frame_buffering;
6878*495ae853SAndroid Build Coastguard Worker
6879*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6880*495ae853SAndroid Build Coastguard Worker }
6881*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6882*495ae853SAndroid Build Coastguard Worker /* */
6883*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_sei_mdcv_params */
6884*495ae853SAndroid Build Coastguard Worker /* */
6885*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI mdcv message in */
6886*495ae853SAndroid Build Coastguard Worker /* output structure */
6887*495ae853SAndroid Build Coastguard Worker /* Inputs : iv_obj_t decoder handle */
6888*495ae853SAndroid Build Coastguard Worker /* : pv_api_ip pointer to input structure */
6889*495ae853SAndroid Build Coastguard Worker /* : pv_api_op pointer to output structure */
6890*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6891*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0; 1 with error code when MDCV is not present */
6892*495ae853SAndroid Build Coastguard Worker /* */
6893*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6894*495ae853SAndroid Build Coastguard Worker /* */
6895*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6896*495ae853SAndroid Build Coastguard Worker /* */
6897*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6898*495ae853SAndroid Build Coastguard Worker /* */
6899*495ae853SAndroid Build Coastguard Worker /* */
6900*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_get_sei_mdcv_params(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6901*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_mdcv_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6902*495ae853SAndroid Build Coastguard Worker {
6903*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_ip_t *ps_ip;
6904*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_mdcv_params_op_t *ps_op;
6905*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6906*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6907*495ae853SAndroid Build Coastguard Worker sei_mdcv_params_t *ps_sei_mdcv;
6908*495ae853SAndroid Build Coastguard Worker WORD32 i4_count;
6909*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6910*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6911*495ae853SAndroid Build Coastguard Worker
6912*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_mdcv_params_ip_t *) pv_api_ip;
6913*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_mdcv_params_op_t *) pv_api_op;
6914*495ae853SAndroid Build Coastguard Worker UNUSED(ps_ip);
6915*495ae853SAndroid Build Coastguard Worker
6916*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
6917*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6918*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_sei_export.u1_sei_mdcv_params_present_flag)
6919*495ae853SAndroid Build Coastguard Worker {
6920*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = ERROR_SEI_MDCV_PARAMS_NOT_FOUND;
6921*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
6922*495ae853SAndroid Build Coastguard Worker }
6923*495ae853SAndroid Build Coastguard Worker ps_sei_mdcv = &ps_dec->s_sei_export.s_sei_mdcv_params;
6924*495ae853SAndroid Build Coastguard Worker
6925*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_MDCV_PRIMARIES; i4_count++)
6926*495ae853SAndroid Build Coastguard Worker {
6927*495ae853SAndroid Build Coastguard Worker ps_op->au2_display_primaries_x[i4_count] = ps_sei_mdcv->au2_display_primaries_x[i4_count];
6928*495ae853SAndroid Build Coastguard Worker ps_op->au2_display_primaries_y[i4_count] = ps_sei_mdcv->au2_display_primaries_y[i4_count];
6929*495ae853SAndroid Build Coastguard Worker }
6930*495ae853SAndroid Build Coastguard Worker
6931*495ae853SAndroid Build Coastguard Worker ps_op->u2_white_point_x = ps_sei_mdcv->u2_white_point_x;
6932*495ae853SAndroid Build Coastguard Worker ps_op->u2_white_point_y = ps_sei_mdcv->u2_white_point_y;
6933*495ae853SAndroid Build Coastguard Worker ps_op->u4_max_display_mastering_luminance = ps_sei_mdcv->u4_max_display_mastering_luminance;
6934*495ae853SAndroid Build Coastguard Worker ps_op->u4_min_display_mastering_luminance = ps_sei_mdcv->u4_min_display_mastering_luminance;
6935*495ae853SAndroid Build Coastguard Worker
6936*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6937*495ae853SAndroid Build Coastguard Worker }
6938*495ae853SAndroid Build Coastguard Worker
6939*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6940*495ae853SAndroid Build Coastguard Worker /* */
6941*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_sei_cll_params */
6942*495ae853SAndroid Build Coastguard Worker /* */
6943*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI cll message in */
6944*495ae853SAndroid Build Coastguard Worker /* output structure */
6945*495ae853SAndroid Build Coastguard Worker /* Inputs : iv_obj_t decoder handle */
6946*495ae853SAndroid Build Coastguard Worker /* : pv_api_ip pointer to input structure */
6947*495ae853SAndroid Build Coastguard Worker /* : pv_api_op pointer to output structure */
6948*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6949*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0; 1 with error code when CLL is not present */
6950*495ae853SAndroid Build Coastguard Worker /* */
6951*495ae853SAndroid Build Coastguard Worker /* Issues : none */
6952*495ae853SAndroid Build Coastguard Worker /* */
6953*495ae853SAndroid Build Coastguard Worker /* Revision History: */
6954*495ae853SAndroid Build Coastguard Worker /* */
6955*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
6956*495ae853SAndroid Build Coastguard Worker /* */
6957*495ae853SAndroid Build Coastguard Worker /* */
6958*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_get_sei_cll_params(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)6959*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_cll_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
6960*495ae853SAndroid Build Coastguard Worker {
6961*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_ip_t *ps_ip;
6962*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_cll_params_op_t *ps_op;
6963*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
6964*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
6965*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
6966*495ae853SAndroid Build Coastguard Worker sei_cll_params_t *ps_sei_cll;
6967*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
6968*495ae853SAndroid Build Coastguard Worker
6969*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_cll_params_ip_t *) pv_api_ip;
6970*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_cll_params_op_t *) pv_api_op;
6971*495ae853SAndroid Build Coastguard Worker UNUSED(ps_ip);
6972*495ae853SAndroid Build Coastguard Worker
6973*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
6974*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
6975*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_sei_export.u1_sei_cll_params_present_flag)
6976*495ae853SAndroid Build Coastguard Worker {
6977*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = ERROR_SEI_CLL_PARAMS_NOT_FOUND;
6978*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
6979*495ae853SAndroid Build Coastguard Worker }
6980*495ae853SAndroid Build Coastguard Worker ps_sei_cll = &ps_dec->s_sei_export.s_sei_cll_params;
6981*495ae853SAndroid Build Coastguard Worker
6982*495ae853SAndroid Build Coastguard Worker ps_op->u2_max_content_light_level = ps_sei_cll->u2_max_content_light_level;
6983*495ae853SAndroid Build Coastguard Worker ps_op->u2_max_pic_average_light_level = ps_sei_cll->u2_max_pic_average_light_level;
6984*495ae853SAndroid Build Coastguard Worker
6985*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
6986*495ae853SAndroid Build Coastguard Worker }
6987*495ae853SAndroid Build Coastguard Worker
6988*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
6989*495ae853SAndroid Build Coastguard Worker /* */
6990*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_sei_ave_params */
6991*495ae853SAndroid Build Coastguard Worker /* */
6992*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI ave message in */
6993*495ae853SAndroid Build Coastguard Worker /* output structure */
6994*495ae853SAndroid Build Coastguard Worker /* Inputs : iv_obj_t decoder handle */
6995*495ae853SAndroid Build Coastguard Worker /* : pv_api_ip pointer to input structure */
6996*495ae853SAndroid Build Coastguard Worker /* : pv_api_op pointer to output structure */
6997*495ae853SAndroid Build Coastguard Worker /* Outputs : */
6998*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0; 1 with error code when AVE is not present */
6999*495ae853SAndroid Build Coastguard Worker /* */
7000*495ae853SAndroid Build Coastguard Worker /* Issues : none */
7001*495ae853SAndroid Build Coastguard Worker /* */
7002*495ae853SAndroid Build Coastguard Worker /* Revision History: */
7003*495ae853SAndroid Build Coastguard Worker /* */
7004*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
7005*495ae853SAndroid Build Coastguard Worker /* */
7006*495ae853SAndroid Build Coastguard Worker /* */
7007*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_get_sei_ave_params(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)7008*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_ave_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
7009*495ae853SAndroid Build Coastguard Worker {
7010*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_ip_t *ps_ip;
7011*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ave_params_op_t *ps_op;
7012*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
7013*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
7014*495ae853SAndroid Build Coastguard Worker sei_ave_params_t *ps_sei_ave;
7015*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
7016*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
7017*495ae853SAndroid Build Coastguard Worker
7018*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_ave_params_ip_t *) pv_api_ip;
7019*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_ave_params_op_t *) pv_api_op;
7020*495ae853SAndroid Build Coastguard Worker UNUSED(ps_ip);
7021*495ae853SAndroid Build Coastguard Worker
7022*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
7023*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
7024*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_sei_export.u1_sei_ave_params_present_flag)
7025*495ae853SAndroid Build Coastguard Worker {
7026*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = ERROR_SEI_AVE_PARAMS_NOT_FOUND;
7027*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
7028*495ae853SAndroid Build Coastguard Worker }
7029*495ae853SAndroid Build Coastguard Worker ps_sei_ave = &ps_dec->s_sei_export.s_sei_ave_params;
7030*495ae853SAndroid Build Coastguard Worker
7031*495ae853SAndroid Build Coastguard Worker ps_op->u4_ambient_illuminance = ps_sei_ave->u4_ambient_illuminance;
7032*495ae853SAndroid Build Coastguard Worker ps_op->u2_ambient_light_x = ps_sei_ave->u2_ambient_light_x;
7033*495ae853SAndroid Build Coastguard Worker ps_op->u2_ambient_light_y = ps_sei_ave->u2_ambient_light_y;
7034*495ae853SAndroid Build Coastguard Worker
7035*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
7036*495ae853SAndroid Build Coastguard Worker }
7037*495ae853SAndroid Build Coastguard Worker
7038*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
7039*495ae853SAndroid Build Coastguard Worker /* */
7040*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_get_sei_ccv_params */
7041*495ae853SAndroid Build Coastguard Worker /* */
7042*495ae853SAndroid Build Coastguard Worker /* Description : This function populates SEI mdcv message in */
7043*495ae853SAndroid Build Coastguard Worker /* output structure */
7044*495ae853SAndroid Build Coastguard Worker /* Inputs : iv_obj_t decoder handle */
7045*495ae853SAndroid Build Coastguard Worker /* : pv_api_ip pointer to input structure */
7046*495ae853SAndroid Build Coastguard Worker /* : pv_api_op pointer to output structure */
7047*495ae853SAndroid Build Coastguard Worker /* Outputs : */
7048*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0; 1 with error code when CCV is not present */
7049*495ae853SAndroid Build Coastguard Worker /* */
7050*495ae853SAndroid Build Coastguard Worker /* Issues : none */
7051*495ae853SAndroid Build Coastguard Worker /* */
7052*495ae853SAndroid Build Coastguard Worker /* Revision History: */
7053*495ae853SAndroid Build Coastguard Worker /* */
7054*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
7055*495ae853SAndroid Build Coastguard Worker /* */
7056*495ae853SAndroid Build Coastguard Worker /* */
7057*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_get_sei_ccv_params(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)7058*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_get_sei_ccv_params(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
7059*495ae853SAndroid Build Coastguard Worker {
7060*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_ip_t *ps_ip;
7061*495ae853SAndroid Build Coastguard Worker isvcd_ctl_get_sei_ccv_params_op_t *ps_op;
7062*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
7063*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
7064*495ae853SAndroid Build Coastguard Worker sei_ccv_params_t *ps_sei_ccv;
7065*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
7066*495ae853SAndroid Build Coastguard Worker WORD32 i4_count;
7067*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
7068*495ae853SAndroid Build Coastguard Worker
7069*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_get_sei_ccv_params_ip_t *) pv_api_ip;
7070*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_get_sei_ccv_params_op_t *) pv_api_op;
7071*495ae853SAndroid Build Coastguard Worker UNUSED(ps_ip);
7072*495ae853SAndroid Build Coastguard Worker
7073*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[ps_svcd_ctxt->u1_target_layer_id];
7074*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
7075*495ae853SAndroid Build Coastguard Worker if(0 == ps_dec->s_sei_export.u1_sei_ccv_params_present_flag)
7076*495ae853SAndroid Build Coastguard Worker {
7077*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = ERROR_SEI_CCV_PARAMS_NOT_FOUND;
7078*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
7079*495ae853SAndroid Build Coastguard Worker }
7080*495ae853SAndroid Build Coastguard Worker ps_sei_ccv = &ps_dec->s_sei_export.s_sei_ccv_params;
7081*495ae853SAndroid Build Coastguard Worker ps_op->u1_ccv_cancel_flag = ps_sei_ccv->u1_ccv_cancel_flag;
7082*495ae853SAndroid Build Coastguard Worker
7083*495ae853SAndroid Build Coastguard Worker if(0 == ps_op->u1_ccv_cancel_flag)
7084*495ae853SAndroid Build Coastguard Worker {
7085*495ae853SAndroid Build Coastguard Worker ps_op->u1_ccv_persistence_flag = ps_sei_ccv->u1_ccv_persistence_flag;
7086*495ae853SAndroid Build Coastguard Worker ps_op->u1_ccv_primaries_present_flag = ps_sei_ccv->u1_ccv_primaries_present_flag;
7087*495ae853SAndroid Build Coastguard Worker ps_op->u1_ccv_min_luminance_value_present_flag =
7088*495ae853SAndroid Build Coastguard Worker ps_sei_ccv->u1_ccv_min_luminance_value_present_flag;
7089*495ae853SAndroid Build Coastguard Worker ps_op->u1_ccv_max_luminance_value_present_flag =
7090*495ae853SAndroid Build Coastguard Worker ps_sei_ccv->u1_ccv_max_luminance_value_present_flag;
7091*495ae853SAndroid Build Coastguard Worker ps_op->u1_ccv_avg_luminance_value_present_flag =
7092*495ae853SAndroid Build Coastguard Worker ps_sei_ccv->u1_ccv_avg_luminance_value_present_flag;
7093*495ae853SAndroid Build Coastguard Worker ps_op->u1_ccv_reserved_zero_2bits = ps_sei_ccv->u1_ccv_reserved_zero_2bits;
7094*495ae853SAndroid Build Coastguard Worker
7095*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei_ccv->u1_ccv_primaries_present_flag)
7096*495ae853SAndroid Build Coastguard Worker {
7097*495ae853SAndroid Build Coastguard Worker for(i4_count = 0; i4_count < NUM_SEI_CCV_PRIMARIES; i4_count++)
7098*495ae853SAndroid Build Coastguard Worker {
7099*495ae853SAndroid Build Coastguard Worker ps_op->ai4_ccv_primaries_x[i4_count] = ps_sei_ccv->ai4_ccv_primaries_x[i4_count];
7100*495ae853SAndroid Build Coastguard Worker ps_op->ai4_ccv_primaries_y[i4_count] = ps_sei_ccv->ai4_ccv_primaries_y[i4_count];
7101*495ae853SAndroid Build Coastguard Worker }
7102*495ae853SAndroid Build Coastguard Worker }
7103*495ae853SAndroid Build Coastguard Worker
7104*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei_ccv->u1_ccv_min_luminance_value_present_flag)
7105*495ae853SAndroid Build Coastguard Worker {
7106*495ae853SAndroid Build Coastguard Worker ps_op->u4_ccv_min_luminance_value = ps_sei_ccv->u4_ccv_min_luminance_value;
7107*495ae853SAndroid Build Coastguard Worker }
7108*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei_ccv->u1_ccv_max_luminance_value_present_flag)
7109*495ae853SAndroid Build Coastguard Worker {
7110*495ae853SAndroid Build Coastguard Worker ps_op->u4_ccv_max_luminance_value = ps_sei_ccv->u4_ccv_max_luminance_value;
7111*495ae853SAndroid Build Coastguard Worker }
7112*495ae853SAndroid Build Coastguard Worker if(1 == ps_sei_ccv->u1_ccv_avg_luminance_value_present_flag)
7113*495ae853SAndroid Build Coastguard Worker {
7114*495ae853SAndroid Build Coastguard Worker ps_op->u4_ccv_avg_luminance_value = ps_sei_ccv->u4_ccv_avg_luminance_value;
7115*495ae853SAndroid Build Coastguard Worker }
7116*495ae853SAndroid Build Coastguard Worker }
7117*495ae853SAndroid Build Coastguard Worker
7118*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
7119*495ae853SAndroid Build Coastguard Worker }
7120*495ae853SAndroid Build Coastguard Worker
7121*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
7122*495ae853SAndroid Build Coastguard Worker /* */
7123*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_set_num_cores */
7124*495ae853SAndroid Build Coastguard Worker /* */
7125*495ae853SAndroid Build Coastguard Worker /* Description : This function sets the no of cores which decoder */
7126*495ae853SAndroid Build Coastguard Worker /* can use for decoding */
7127*495ae853SAndroid Build Coastguard Worker /* Inputs : iv_obj_t decoder handle */
7128*495ae853SAndroid Build Coastguard Worker /* : pv_api_ip pointer to input structure */
7129*495ae853SAndroid Build Coastguard Worker /* : pv_api_op pointer to output structure */
7130*495ae853SAndroid Build Coastguard Worker /* Outputs : */
7131*495ae853SAndroid Build Coastguard Worker /* Returns : returns 0; 1 with error code */
7132*495ae853SAndroid Build Coastguard Worker /* */
7133*495ae853SAndroid Build Coastguard Worker /* Issues : none */
7134*495ae853SAndroid Build Coastguard Worker /* */
7135*495ae853SAndroid Build Coastguard Worker /* Revision History: */
7136*495ae853SAndroid Build Coastguard Worker /* */
7137*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
7138*495ae853SAndroid Build Coastguard Worker /* */
7139*495ae853SAndroid Build Coastguard Worker /* */
7140*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_set_num_cores(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)7141*495ae853SAndroid Build Coastguard Worker WORD32 isvcd_set_num_cores(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
7142*495ae853SAndroid Build Coastguard Worker {
7143*495ae853SAndroid Build Coastguard Worker UWORD8 u1_layer_id;
7144*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_ip_t *ps_ip;
7145*495ae853SAndroid Build Coastguard Worker isvcd_ctl_set_num_cores_op_t *ps_op;
7146*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
7147*495ae853SAndroid Build Coastguard Worker svc_dec_lyr_struct_t *ps_svc_lyr_dec;
7148*495ae853SAndroid Build Coastguard Worker svc_dec_ctxt_t *ps_svcd_ctxt;
7149*495ae853SAndroid Build Coastguard Worker ps_svcd_ctxt = (svc_dec_ctxt_t *) dec_hdl->pv_codec_handle;
7150*495ae853SAndroid Build Coastguard Worker
7151*495ae853SAndroid Build Coastguard Worker ps_ip = (isvcd_ctl_set_num_cores_ip_t *) pv_api_ip;
7152*495ae853SAndroid Build Coastguard Worker ps_op = (isvcd_ctl_set_num_cores_op_t *) pv_api_op;
7153*495ae853SAndroid Build Coastguard Worker ps_op->u4_error_code = 0;
7154*495ae853SAndroid Build Coastguard Worker for(u1_layer_id = 0; u1_layer_id < MAX_NUM_RES_LYRS; u1_layer_id++)
7155*495ae853SAndroid Build Coastguard Worker {
7156*495ae853SAndroid Build Coastguard Worker ps_svc_lyr_dec = &ps_svcd_ctxt->ps_svc_dec_lyr[u1_layer_id];
7157*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
7158*495ae853SAndroid Build Coastguard Worker ps_dec->u4_num_cores = ps_ip->u4_num_cores;
7159*495ae853SAndroid Build Coastguard Worker
7160*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_num_cores == 1)
7161*495ae853SAndroid Build Coastguard Worker {
7162*495ae853SAndroid Build Coastguard Worker ps_dec->u1_separate_parse = 0;
7163*495ae853SAndroid Build Coastguard Worker }
7164*495ae853SAndroid Build Coastguard Worker else
7165*495ae853SAndroid Build Coastguard Worker {
7166*495ae853SAndroid Build Coastguard Worker ps_dec->u1_separate_parse = 1;
7167*495ae853SAndroid Build Coastguard Worker }
7168*495ae853SAndroid Build Coastguard Worker
7169*495ae853SAndroid Build Coastguard Worker /*using only upto three threads currently*/
7170*495ae853SAndroid Build Coastguard Worker if(ps_dec->u4_num_cores > 3) ps_dec->u4_num_cores = 3;
7171*495ae853SAndroid Build Coastguard Worker }
7172*495ae853SAndroid Build Coastguard Worker return IV_SUCCESS;
7173*495ae853SAndroid Build Coastguard Worker }
7174*495ae853SAndroid Build Coastguard Worker
7175*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
7176*495ae853SAndroid Build Coastguard Worker /* */
7177*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_fill_output_struct_from_context */
7178*495ae853SAndroid Build Coastguard Worker /* */
7179*495ae853SAndroid Build Coastguard Worker /* Description : This function fills the output structure from the */
7180*495ae853SAndroid Build Coastguard Worker /* svc layer context */
7181*495ae853SAndroid Build Coastguard Worker /* Inputs : iv_obj_t decoder handle */
7182*495ae853SAndroid Build Coastguard Worker /* : ps_svc_lyr_dec pointer to svc layer context */
7183*495ae853SAndroid Build Coastguard Worker /* : ps_dec_op pointer to output structure */
7184*495ae853SAndroid Build Coastguard Worker /* Outputs : */
7185*495ae853SAndroid Build Coastguard Worker /* Returns : */
7186*495ae853SAndroid Build Coastguard Worker /* */
7187*495ae853SAndroid Build Coastguard Worker /* Issues : none */
7188*495ae853SAndroid Build Coastguard Worker /* */
7189*495ae853SAndroid Build Coastguard Worker /* Revision History: */
7190*495ae853SAndroid Build Coastguard Worker /* */
7191*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
7192*495ae853SAndroid Build Coastguard Worker /* */
7193*495ae853SAndroid Build Coastguard Worker /* */
7194*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_fill_output_struct_from_context(svc_dec_lyr_struct_t * ps_svc_lyr_dec,ivd_video_decode_op_t * ps_dec_op)7195*495ae853SAndroid Build Coastguard Worker void isvcd_fill_output_struct_from_context(svc_dec_lyr_struct_t *ps_svc_lyr_dec,
7196*495ae853SAndroid Build Coastguard Worker ivd_video_decode_op_t *ps_dec_op)
7197*495ae853SAndroid Build Coastguard Worker {
7198*495ae853SAndroid Build Coastguard Worker dec_struct_t *ps_dec;
7199*495ae853SAndroid Build Coastguard Worker ps_dec = &ps_svc_lyr_dec->s_dec;
7200*495ae853SAndroid Build Coastguard Worker if((ps_dec_op->u4_error_code & 0xff) != ERROR_DYNAMIC_RESOLUTION_NOT_SUPPORTED)
7201*495ae853SAndroid Build Coastguard Worker {
7202*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_wd = (UWORD32) ps_dec->u2_disp_width;
7203*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_pic_ht = (UWORD32) ps_dec->u2_disp_height;
7204*495ae853SAndroid Build Coastguard Worker }
7205*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_reorder_depth = ps_dec->i4_reorder_depth;
7206*495ae853SAndroid Build Coastguard Worker ps_dec_op->i4_display_index = ps_dec->i4_display_index;
7207*495ae853SAndroid Build Coastguard Worker ps_dec_op->e_pic_type = ps_dec->i4_frametype;
7208*495ae853SAndroid Build Coastguard Worker
7209*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_new_seq = 0;
7210*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_output_present =
7211*495ae853SAndroid Build Coastguard Worker (ps_svc_lyr_dec->u1_layer_identifier == TARGET_LAYER) ? ps_dec->u4_output_present : 0;
7212*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_progressive_frame_flag = ps_dec->s_disp_op.u4_progressive_frame_flag;
7213*495ae853SAndroid Build Coastguard Worker
7214*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_is_ref_flag = 1;
7215*495ae853SAndroid Build Coastguard Worker if(ps_dec_op->u4_frame_decoded_flag)
7216*495ae853SAndroid Build Coastguard Worker {
7217*495ae853SAndroid Build Coastguard Worker if(ps_dec->ps_cur_slice->u1_nal_ref_idc == 0) ps_dec_op->u4_is_ref_flag = 0;
7218*495ae853SAndroid Build Coastguard Worker }
7219*495ae853SAndroid Build Coastguard Worker
7220*495ae853SAndroid Build Coastguard Worker ps_dec_op->e_output_format = ps_dec->s_disp_op.e_output_format;
7221*495ae853SAndroid Build Coastguard Worker ps_dec_op->s_disp_frm_buf = ps_dec->s_disp_op.s_disp_frm_buf;
7222*495ae853SAndroid Build Coastguard Worker ps_dec_op->e4_fld_type = ps_dec->s_disp_op.e4_fld_type;
7223*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_ts = ps_dec->s_disp_op.u4_ts;
7224*495ae853SAndroid Build Coastguard Worker ps_dec_op->u4_disp_buf_id = ps_dec->s_disp_op.u4_disp_buf_id;
7225*495ae853SAndroid Build Coastguard Worker
7226*495ae853SAndroid Build Coastguard Worker ih264d_export_sei_params(&ps_dec_op->s_sei_decode_op, ps_dec);
7227*495ae853SAndroid Build Coastguard Worker }
7228*495ae853SAndroid Build Coastguard Worker
7229*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
7230*495ae853SAndroid Build Coastguard Worker /* */
7231*495ae853SAndroid Build Coastguard Worker /* Function Name : isvcd_api_function */
7232*495ae853SAndroid Build Coastguard Worker /* */
7233*495ae853SAndroid Build Coastguard Worker /* Description : */
7234*495ae853SAndroid Build Coastguard Worker /* */
7235*495ae853SAndroid Build Coastguard Worker /* Inputs :iv_obj_t decoder handle */
7236*495ae853SAndroid Build Coastguard Worker /* :pv_api_ip pointer to input structure */
7237*495ae853SAndroid Build Coastguard Worker /* :pv_api_op pointer to output structure */
7238*495ae853SAndroid Build Coastguard Worker /* Outputs : */
7239*495ae853SAndroid Build Coastguard Worker /* Returns : void */
7240*495ae853SAndroid Build Coastguard Worker /* */
7241*495ae853SAndroid Build Coastguard Worker /* Issues : none */
7242*495ae853SAndroid Build Coastguard Worker /* */
7243*495ae853SAndroid Build Coastguard Worker /* Revision History: */
7244*495ae853SAndroid Build Coastguard Worker /* */
7245*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
7246*495ae853SAndroid Build Coastguard Worker /* 06 09 2021 Kishore Draft */
7247*495ae853SAndroid Build Coastguard Worker /* */
7248*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvcd_api_function(iv_obj_t * dec_hdl,void * pv_api_ip,void * pv_api_op)7249*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T isvcd_api_function(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
7250*495ae853SAndroid Build Coastguard Worker {
7251*495ae853SAndroid Build Coastguard Worker UWORD32 command;
7252*495ae853SAndroid Build Coastguard Worker UWORD32 *pu2_ptr_cmd;
7253*495ae853SAndroid Build Coastguard Worker UWORD32 u4_api_ret;
7254*495ae853SAndroid Build Coastguard Worker IV_API_CALL_STATUS_T e_status;
7255*495ae853SAndroid Build Coastguard Worker e_status = api_check_struct_sanity(dec_hdl, pv_api_ip, pv_api_op);
7256*495ae853SAndroid Build Coastguard Worker
7257*495ae853SAndroid Build Coastguard Worker if(e_status != IV_SUCCESS)
7258*495ae853SAndroid Build Coastguard Worker {
7259*495ae853SAndroid Build Coastguard Worker UWORD32 *ptr_err;
7260*495ae853SAndroid Build Coastguard Worker
7261*495ae853SAndroid Build Coastguard Worker ptr_err = (UWORD32 *) pv_api_op;
7262*495ae853SAndroid Build Coastguard Worker UNUSED(ptr_err);
7263*495ae853SAndroid Build Coastguard Worker H264_DEC_DEBUG_PRINT("error code = %d\n", *(ptr_err + 1));
7264*495ae853SAndroid Build Coastguard Worker return IV_FAIL;
7265*495ae853SAndroid Build Coastguard Worker }
7266*495ae853SAndroid Build Coastguard Worker
7267*495ae853SAndroid Build Coastguard Worker pu2_ptr_cmd = (UWORD32 *) pv_api_ip;
7268*495ae853SAndroid Build Coastguard Worker pu2_ptr_cmd++;
7269*495ae853SAndroid Build Coastguard Worker
7270*495ae853SAndroid Build Coastguard Worker command = *pu2_ptr_cmd;
7271*495ae853SAndroid Build Coastguard Worker switch(command)
7272*495ae853SAndroid Build Coastguard Worker {
7273*495ae853SAndroid Build Coastguard Worker case IVD_CMD_CREATE:
7274*495ae853SAndroid Build Coastguard Worker u4_api_ret = isvcd_create(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
7275*495ae853SAndroid Build Coastguard Worker break;
7276*495ae853SAndroid Build Coastguard Worker case IVD_CMD_DELETE:
7277*495ae853SAndroid Build Coastguard Worker u4_api_ret = isvcd_delete(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
7278*495ae853SAndroid Build Coastguard Worker break;
7279*495ae853SAndroid Build Coastguard Worker
7280*495ae853SAndroid Build Coastguard Worker case IVD_CMD_VIDEO_DECODE:
7281*495ae853SAndroid Build Coastguard Worker u4_api_ret = isvcd_video_decode(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
7282*495ae853SAndroid Build Coastguard Worker break;
7283*495ae853SAndroid Build Coastguard Worker
7284*495ae853SAndroid Build Coastguard Worker case IVD_CMD_GET_DISPLAY_FRAME:
7285*495ae853SAndroid Build Coastguard Worker u4_api_ret = ih264d_get_display_frame(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
7286*495ae853SAndroid Build Coastguard Worker
7287*495ae853SAndroid Build Coastguard Worker break;
7288*495ae853SAndroid Build Coastguard Worker
7289*495ae853SAndroid Build Coastguard Worker case IVD_CMD_SET_DISPLAY_FRAME:
7290*495ae853SAndroid Build Coastguard Worker u4_api_ret = isvcd_set_display_frame(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
7291*495ae853SAndroid Build Coastguard Worker
7292*495ae853SAndroid Build Coastguard Worker break;
7293*495ae853SAndroid Build Coastguard Worker
7294*495ae853SAndroid Build Coastguard Worker case IVD_CMD_REL_DISPLAY_FRAME:
7295*495ae853SAndroid Build Coastguard Worker u4_api_ret = isvcd_rel_display_frame(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
7296*495ae853SAndroid Build Coastguard Worker break;
7297*495ae853SAndroid Build Coastguard Worker
7298*495ae853SAndroid Build Coastguard Worker case IVD_CMD_VIDEO_CTL:
7299*495ae853SAndroid Build Coastguard Worker u4_api_ret = isvcd_ctl(dec_hdl, (void *) pv_api_ip, (void *) pv_api_op);
7300*495ae853SAndroid Build Coastguard Worker break;
7301*495ae853SAndroid Build Coastguard Worker default:
7302*495ae853SAndroid Build Coastguard Worker u4_api_ret = IV_FAIL;
7303*495ae853SAndroid Build Coastguard Worker break;
7304*495ae853SAndroid Build Coastguard Worker }
7305*495ae853SAndroid Build Coastguard Worker
7306*495ae853SAndroid Build Coastguard Worker return u4_api_ret;
7307*495ae853SAndroid Build Coastguard Worker }
7308