Coverage Report

Created: 2026-05-30 06:23

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libavc/decoder/mvc/imvcd_utils.c
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Copyright (C) 2021 The Android Open Source Project
4
 *
5
 * Licensed under the Apache License, Version 2.0 (the "License");
6
 * you may not use this file except in compliance with the License.
7
 * You may obtain a copy of the License at:
8
 *
9
 * http://www.apache.org/licenses/LICENSE-2.0
10
 *
11
 * Unless required by applicable law or agreed to in writing, software
12
 * distributed under the License is distributed on an "AS IS" BASIS,
13
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 * See the License for the specific language governing permissions and
15
 * limitations under the License.
16
 *
17
 *****************************************************************************
18
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19
 */
20
21
/*****************************************************************************/
22
/*                                                                           */
23
/*  File Name         : imvcd_utils.c                                        */
24
/*                                                                           */
25
/*  Description       : MVCD Utility functions used by 'imvcd_api.c'         */
26
/*                                                                           */
27
/*****************************************************************************/
28
#include <string.h>
29
30
#include "ih264_typedefs.h"
31
#include "iv.h"
32
#include "ih264_debug.h"
33
#include "ih264_disp_mgr.h"
34
#include "ih264_macros.h"
35
#include "ih264d_error_handler.h"
36
#include "ih264d_format_conv.h"
37
#include "ih264d_utils.h"
38
#include "imvcd_structs.h"
39
#include "imvcd_utils.h"
40
41
void imvcd_free_ref_bufs(mvc_au_buf_mgr_t *ps_mvc_au_buf_mgr,
42
                         mvc_au_mv_pred_buf_mgr_t *ps_mvc_au_mv_pred_buf_mgr, WORD32 i4_pic_buf_id)
43
66.5k
{
44
66.5k
    ih264_buf_mgr_release(ps_mvc_au_buf_mgr->ps_buf_mgr_ctxt, i4_pic_buf_id, BUF_MGR_REF);
45
46
66.5k
    ih264_buf_mgr_release(ps_mvc_au_mv_pred_buf_mgr->ps_buf_mgr_ctxt,
47
66.5k
                          ps_mvc_au_buf_mgr->au1_au_buf_id_to_mv_buf_id_map[i4_pic_buf_id],
48
66.5k
                          BUF_MGR_REF);
49
66.5k
}
50
51
void imvcd_release_all_ref_bufs(mvc_dec_ctxt_t *ps_mvcd_ctxt, WORD32 i4_num_bufs)
52
0
{
53
0
    WORD32 i;
54
55
0
    for(i = 0; i < i4_num_bufs; i++)
56
0
    {
57
0
        ih264_buf_mgr_release(ps_mvcd_ctxt->s_mvc_au_buf_mgr.ps_buf_mgr_ctxt, i, BUF_MGR_REF);
58
59
0
        ih264_buf_mgr_release(ps_mvcd_ctxt->s_mvc_au_mv_pred_buf_mgr.ps_buf_mgr_ctxt,
60
0
                              ps_mvcd_ctxt->s_mvc_au_buf_mgr.au1_au_buf_id_to_mv_buf_id_map[i],
61
0
                              BUF_MGR_REF);
62
0
    }
63
0
}
64
65
void imvcd_free_ref_and_io_bufs(mvc_au_buf_mgr_t *ps_mvc_au_buf_mgr,
66
                                mvc_au_mv_pred_buf_mgr_t *ps_mvc_au_mv_pred_buf_mgr,
67
                                WORD32 i4_pic_buf_id)
68
0
{
69
0
    ih264_buf_mgr_release(ps_mvc_au_buf_mgr->ps_buf_mgr_ctxt, i4_pic_buf_id,
70
0
                          BUF_MGR_REF | BUF_MGR_IO);
71
72
0
    ih264_buf_mgr_release(ps_mvc_au_mv_pred_buf_mgr->ps_buf_mgr_ctxt,
73
0
                          ps_mvc_au_buf_mgr->au1_au_buf_id_to_mv_buf_id_map[i4_pic_buf_id],
74
0
                          BUF_MGR_REF | BUF_MGR_IO);
75
0
}
76
77
void imvcd_release_all_ref_and_io_bufs(mvc_dec_ctxt_t *ps_mvcd_ctxt, WORD32 i4_num_bufs)
78
0
{
79
0
    WORD32 i;
80
81
0
    for(i = 0; i < i4_num_bufs; i++)
82
0
    {
83
0
        ih264_buf_mgr_release(ps_mvcd_ctxt->s_mvc_au_buf_mgr.ps_buf_mgr_ctxt, i,
84
0
                              BUF_MGR_REF | BUF_MGR_IO);
85
86
0
        ih264_buf_mgr_release(ps_mvcd_ctxt->s_mvc_au_mv_pred_buf_mgr.ps_buf_mgr_ctxt,
87
0
                              ps_mvcd_ctxt->s_mvc_au_buf_mgr.au1_au_buf_id_to_mv_buf_id_map[i],
88
0
                              BUF_MGR_REF | BUF_MGR_IO);
89
0
    }
90
0
}
91
92
bool is_header_decoded(WORD32 i4_header_decoded, AVC_EXT_NALU_ID_T e_nalu_id)
93
272k
{
94
    /* Accounting for idiocy in 'ih264d_parse_nal_unit' */
95
272k
    e_nalu_id = (SPS == e_nalu_id) ? UNSPEC_0 : ((PPS == e_nalu_id) ? SLICE_NON_IDR : e_nalu_id);
96
272k
    return !!(i4_header_decoded & (1 << e_nalu_id));
97
272k
}
98
99
bool is_mvc_nalu(AVC_EXT_NALU_ID_T e_nalu_id)
100
153k
{
101
153k
    switch(e_nalu_id)
102
153k
    {
103
75.4k
        case SLICE_NON_IDR:
104
75.4k
        case SLICE_DPA:
105
75.4k
        case SLICE_DPB:
106
75.4k
        case SLICE_DPC:
107
100k
        case SLICE_IDR:
108
102k
        case PREFIX_NAL:
109
106k
        case SUBSET_SPS:
110
107k
        case CODED_SLICE_EXTENSION:
111
107k
        {
112
107k
            return true;
113
106k
        }
114
46.2k
        default:
115
46.2k
        {
116
46.2k
            return false;
117
106k
        }
118
153k
    }
119
153k
}
120
121
bool is_slice_nalu_type(AVC_EXT_NALU_ID_T e_nalu_id)
122
293
{
123
293
    switch(e_nalu_id)
124
293
    {
125
3
        case SLICE_NON_IDR:
126
3
        case SLICE_DPA:
127
3
        case SLICE_DPB:
128
3
        case SLICE_DPC:
129
3
        case SLICE_IDR:
130
3
        case CODED_SLICE_EXTENSION:
131
287
        case PREFIX_NAL:
132
287
        {
133
287
            return true;
134
3
        }
135
6
        default:
136
6
        {
137
6
            return false;
138
3
        }
139
293
    }
140
293
}
141
142
nalu_mvc_ext_t *imvcd_get_cur_nalu_mvc_ext(mvc_dec_ctxt_t *ps_mvcd_ctxt)
143
594k
{
144
594k
    return &ps_mvcd_ctxt->as_nalu_mvc_ext[ps_mvcd_ctxt->u2_num_views_decoded];
145
594k
}
146
147
nalu_mvc_ext_t *imvcd_get_nalu_mvc_ext(nalu_mvc_ext_t *ps_nalu_mvc_exts,
148
                                       UWORD16 u2_num_views_decoded, UWORD16 u2_view_id)
149
2.55k
{
150
2.55k
    WORD32 i;
151
152
2.55k
    for(i = 0; i < u2_num_views_decoded; i++)
153
2.55k
    {
154
2.55k
        if(ps_nalu_mvc_exts[i].u2_view_id == u2_view_id)
155
2.55k
        {
156
2.55k
            return &ps_nalu_mvc_exts[i];
157
2.55k
        }
158
2.55k
    }
159
160
0
    return NULL;
161
2.55k
}
162
163
ref_pic_list_mod_data_t *imvcd_get_cur_ref_pic_list_mod_data(mvc_dec_ctxt_t *ps_mvcd_ctxt)
164
137k
{
165
137k
    return &ps_mvcd_ctxt->as_ref_pic_list_mod_data[ps_mvcd_ctxt->u2_num_views_decoded];
166
137k
}
167
168
subset_sps_t *imvcd_get_valid_subset_sps(mvc_dec_ctxt_t *ps_mvcd_ctxt)
169
306k
{
170
306k
    if(0 != ps_mvcd_ctxt->u2_num_views_decoded)
171
1.58k
    {
172
1.58k
        dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
173
174
1.58k
        return ps_mvcd_ctxt
175
1.58k
            ->aps_pps_id_to_subset_sps_map[ps_view_ctxt->ps_cur_pps->u1_pic_parameter_set_id];
176
1.58k
    }
177
304k
    else
178
304k
    {
179
304k
        WORD32 i;
180
181
9.82M
        for(i = 0; i < MAX_NUM_SEQ_PARAMS; i++)
182
9.52M
        {
183
9.52M
            if(ps_mvcd_ctxt->as_subset_sps[i].s_sps_data.u1_is_valid)
184
8.13k
            {
185
8.13k
                return &ps_mvcd_ctxt->as_subset_sps[i];
186
8.13k
            }
187
9.52M
        }
188
189
296k
        return NULL;
190
304k
    }
191
306k
}
192
193
void imvcd_modulate_max_disp_seq(dec_struct_t *ps_view_ctxt)
194
143k
{
195
143k
    WORD64 i8_temp;
196
197
143k
    i8_temp = ((WORD64) ps_view_ctxt->i4_prev_max_display_seq) +
198
143k
              ((WORD64) ps_view_ctxt->i4_max_poc) +
199
143k
              ((WORD64) ps_view_ctxt->u1_max_dec_frame_buffering) + 1ll;
200
201
143k
    ps_view_ctxt->i4_prev_max_display_seq = IS_OUT_OF_RANGE_S32(i8_temp) ? 0 : ((WORD32) i8_temp);
202
143k
    ps_view_ctxt->i4_max_poc = 0;
203
143k
}
204
205
mv_pred_t imvcd_get_default_mv_pred(void)
206
68.9k
{
207
68.9k
    mv_pred_t s_mv_pred = {.i2_mv = {0},
208
68.9k
                           .i1_ref_frame = {OUT_OF_RANGE_REF, OUT_OF_RANGE_REF},
209
68.9k
                           .u1_col_ref_pic_idx = UINT8_MAX,
210
68.9k
                           .u1_pic_type = UINT8_MAX};
211
212
68.9k
    return s_mv_pred;
213
68.9k
}
214
215
UWORD32 imvcd_get_max_num_ivp_refs(mvc_dec_ctxt_t *ps_mvcd_ctxt)
216
3.36k
{
217
3.36k
    WORD32 i;
218
219
3.36k
    subset_sps_t *ps_subset_sps = imvcd_get_valid_subset_sps(ps_mvcd_ctxt);
220
221
3.36k
    UWORD32 u4_max_ivp_refs = 0;
222
223
3.36k
    if(!ps_subset_sps)
224
3.22k
    {
225
3.22k
        return u4_max_ivp_refs;
226
3.22k
    }
227
228
422
    for(i = 0; i < ps_subset_sps->s_sps_mvc_ext.u2_num_views; i++)
229
280
    {
230
280
        u4_max_ivp_refs = MAX(
231
280
            u4_max_ivp_refs, ps_subset_sps->s_sps_mvc_ext.as_anchor_ref_data[0][i].u1_num_refs +
232
280
                                 ps_subset_sps->s_sps_mvc_ext.as_anchor_ref_data[1][i].u1_num_refs);
233
280
        u4_max_ivp_refs =
234
280
            MAX(u4_max_ivp_refs,
235
280
                ps_subset_sps->s_sps_mvc_ext.as_non_anchor_ref_data[0][i].u1_num_refs +
236
280
                    ps_subset_sps->s_sps_mvc_ext.as_non_anchor_ref_data[1][i].u1_num_refs);
237
280
    }
238
239
142
    return u4_max_ivp_refs;
240
3.36k
}
241
242
bool imvcd_is_idr_au(mvc_dec_ctxt_t *ps_mvcd_ctxt)
243
420k
{
244
420k
    return (ps_mvcd_ctxt->u2_num_views_decoded > 1)
245
420k
               ? !ps_mvcd_ctxt->as_nalu_mvc_ext->u1_non_idr_flag
246
420k
               : (ps_mvcd_ctxt->ae_nalu_id[0] == SLICE_IDR);
247
420k
}
248
249
coordinates_t imvcd_get_buf_pad_dims(bool b_is_chroma)
250
5.11k
{
251
5.11k
    coordinates_t s_dims;
252
253
    /* Vert pad is '4 * PAD_LEN_UV_V' to account for field Pics */
254
5.11k
    if(b_is_chroma)
255
2.55k
    {
256
2.55k
        s_dims.i4_abscissa = (PAD_LEN_UV_H * 4);
257
2.55k
        s_dims.i4_ordinate = (PAD_LEN_UV_V * 4);
258
2.55k
    }
259
2.55k
    else
260
2.55k
    {
261
2.55k
        s_dims.i4_abscissa = (PAD_LEN_Y_H * 2);
262
2.55k
        s_dims.i4_ordinate = (PAD_LEN_Y_V * 4);
263
2.55k
    }
264
265
5.11k
    return s_dims;
266
5.11k
}
267
268
WORD32 imvcd_get_ref_pic_pad_offset(WORD32 i4_stride, bool b_is_chroma)
269
152k
{
270
152k
    return !b_is_chroma ? (i4_stride * PAD_LEN_Y_V * 2 + PAD_LEN_Y_H)
271
152k
                        : (i4_stride * PAD_LEN_UV_V * 2 + PAD_LEN_UV_H * 2);
272
152k
}
273
274
UWORD32 imvcd_get_next_bits(dec_bit_stream_t *ps_bitstream)
275
0
{
276
0
    UWORD32 u4_next_word;
277
278
0
    NEXTBITS(u4_next_word, ps_bitstream->u4_ofst, ps_bitstream->pu4_buffer, 32);
279
280
0
    return u4_next_word;
281
0
}
282
283
void imvcd_set_view_buf_id_to_buf_map(dec_struct_t *ps_view_ctxt)
284
269k
{
285
269k
    WORD32 i, j;
286
287
269k
    memset(ps_view_ctxt->apv_buf_id_pic_buf_map, 0, sizeof(ps_view_ctxt->apv_buf_id_pic_buf_map));
288
289
807k
    for(i = 0; i < 2; i++)
290
538k
    {
291
1.46M
        for(j = 0; j < ps_view_ctxt->ps_cur_slice->u1_num_ref_idx_lx_active[i]; j++)
292
927k
        {
293
927k
            ps_view_ctxt
294
927k
                ->apv_buf_id_pic_buf_map[ps_view_ctxt->ps_ref_pic_buf_lx[i][j]->u1_pic_buf_id] =
295
927k
                (void *) ps_view_ctxt->ps_ref_pic_buf_lx[i][j];
296
927k
        }
297
538k
    }
298
269k
}
299
300
IV_API_CALL_STATUS_T imvcd_get_next_display_au_buf(mvc_dec_ctxt_t *ps_mvcd_ctxt)
301
98.6k
{
302
98.6k
    mvc_au_buffer_t *ps_au_buf;
303
304
98.6k
    IV_API_CALL_STATUS_T e_retval = IV_FAIL;
305
306
98.6k
    UWORD32 i;
307
98.6k
    WORD32 i4_buf_id;
308
309
98.6k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
310
311
98.6k
    ps_au_buf =
312
98.6k
        (mvc_au_buffer_t *) ih264_disp_mgr_get(&ps_mvcd_ctxt->s_mvc_disp_buf_mgr, &i4_buf_id);
313
314
98.6k
    ps_view_ctxt->i4_display_index = DEFAULT_POC;
315
316
98.6k
    if(ps_au_buf != NULL)
317
80.3k
    {
318
80.3k
        ps_view_ctxt->pv_disp_sei_params = &ps_au_buf->s_sei_pic;
319
80.3k
        ps_view_ctxt->i4_display_index = ps_au_buf->i4_poc;
320
80.3k
        ps_view_ctxt->u4_num_fld_in_frm += 2;
321
80.3k
        ps_view_ctxt->s_disp_op.u4_ts = ps_au_buf->u4_time_stamp;
322
323
80.3k
        e_retval = IV_SUCCESS;
324
80.3k
    }
325
326
98.6k
    if(ps_au_buf)
327
80.3k
    {
328
162k
        for(i = 0; i < ps_mvcd_ctxt->u2_num_views; i++)
329
81.8k
        {
330
81.8k
            yuv_buf_props_t *ps_src = &ps_au_buf->as_view_buffers[i];
331
81.8k
            yuv_buf_props_t *ps_dst = &ps_mvcd_ctxt->s_out_buffer.as_view_buf_props[i];
332
333
81.8k
            WORD32 i4_y_src_stride = ps_src->as_component_bufs[Y].i4_data_stride;
334
81.8k
            WORD32 i4_uv_src_stride = ps_src->as_component_bufs[UV].i4_data_stride;
335
81.8k
            UWORD8 *pu1_y_src = (UWORD8 *) ps_src->as_component_bufs[Y].pv_data;
336
81.8k
            UWORD8 *pu1_uv_src = (UWORD8 *) ps_src->as_component_bufs[UV].pv_data;
337
338
81.8k
            pu1_y_src += (0 == i) ? ps_view_ctxt->u2_crop_offset_y
339
81.8k
                                  : (ps_au_buf->as_disp_offsets[i].u2_left_offset +
340
1.42k
                                     ps_au_buf->as_disp_offsets[i].u2_top_offset * i4_y_src_stride);
341
81.8k
            pu1_uv_src +=
342
81.8k
                (0 == i) ? ps_view_ctxt->u2_crop_offset_uv
343
81.8k
                         : (ps_au_buf->as_disp_offsets[i].u2_left_offset +
344
1.42k
                            (ps_au_buf->as_disp_offsets[i].u2_top_offset * i4_uv_src_stride) / 2);
345
346
81.8k
            ps_dst->u2_width = ps_au_buf->u2_disp_width;
347
81.8k
            ps_dst->u2_height = ps_au_buf->u2_disp_height;
348
349
81.8k
            ASSERT(ps_dst->as_component_bufs[U].i4_data_stride ==
350
81.8k
                   ps_dst->as_component_bufs[V].i4_data_stride);
351
352
81.8k
            ih264d_fmt_conv_420sp_to_420p(
353
81.8k
                pu1_y_src, pu1_uv_src, (UWORD8 *) ps_dst->as_component_bufs[Y].pv_data,
354
81.8k
                (UWORD8 *) ps_dst->as_component_bufs[U].pv_data,
355
81.8k
                (UWORD8 *) ps_dst->as_component_bufs[V].pv_data, ps_dst->u2_width,
356
81.8k
                ps_dst->u2_height, i4_y_src_stride, i4_uv_src_stride,
357
81.8k
                ps_dst->as_component_bufs[Y].i4_data_stride,
358
81.8k
                ps_dst->as_component_bufs[U].i4_data_stride, 1, 0);
359
81.8k
        }
360
361
80.3k
        ih264_buf_mgr_release(ps_mvcd_ctxt->s_mvc_au_buf_mgr.ps_buf_mgr_ctxt,
362
80.3k
                              ps_au_buf->i4_pic_buf_id, BUF_MGR_IO);
363
80.3k
    }
364
365
98.6k
    return e_retval;
366
98.6k
}
367
368
UWORD32 imvcd_get_num_mbs_in_level(UWORD8 u1_level_idc)
369
112k
{
370
112k
    switch(u1_level_idc)
371
112k
    {
372
1.32k
        case H264_LEVEL_1_0:
373
1.32k
        {
374
1.32k
            return MAX_MBS_LEVEL_10;
375
0
        }
376
1.41k
        case H264_LEVEL_1_1:
377
1.41k
        {
378
1.41k
            return MAX_MBS_LEVEL_11;
379
0
        }
380
1.66k
        case H264_LEVEL_1_2:
381
1.66k
        {
382
1.66k
            return MAX_MBS_LEVEL_12;
383
0
        }
384
1.54k
        case H264_LEVEL_1_3:
385
1.54k
        {
386
1.54k
            return MAX_MBS_LEVEL_13;
387
0
        }
388
550
        case H264_LEVEL_2_0:
389
550
        {
390
550
            return MAX_MBS_LEVEL_20;
391
0
        }
392
206
        case H264_LEVEL_2_1:
393
206
        {
394
206
            return MAX_MBS_LEVEL_21;
395
0
        }
396
1.25k
        case H264_LEVEL_2_2:
397
1.25k
        {
398
1.25k
            return MAX_MBS_LEVEL_22;
399
0
        }
400
3.24k
        case H264_LEVEL_3_0:
401
3.24k
        {
402
3.24k
            return MAX_MBS_LEVEL_30;
403
0
        }
404
27.4k
        case H264_LEVEL_3_1:
405
27.4k
        {
406
27.4k
            return MAX_MBS_LEVEL_31;
407
0
        }
408
4.58k
        case H264_LEVEL_3_2:
409
4.58k
        {
410
4.58k
            return MAX_MBS_LEVEL_32;
411
0
        }
412
2.35k
        case H264_LEVEL_4_0:
413
2.35k
        {
414
2.35k
            return MAX_MBS_LEVEL_40;
415
0
        }
416
747
        case H264_LEVEL_4_1:
417
747
        {
418
747
            return MAX_MBS_LEVEL_41;
419
0
        }
420
1.17k
        case H264_LEVEL_4_2:
421
1.17k
        {
422
1.17k
            return MAX_MBS_LEVEL_42;
423
0
        }
424
1.02k
        case H264_LEVEL_5_0:
425
1.02k
        {
426
1.02k
            return MAX_MBS_LEVEL_50;
427
0
        }
428
0
        case H264_LEVEL_5_1:
429
63.6k
        default:
430
63.6k
        {
431
63.6k
            return MAX_MBS_LEVEL_51;
432
0
        }
433
112k
    }
434
112k
}
435
436
WORD16 imvcd_free_dynamic_bufs(mvc_dec_ctxt_t *ps_mvcd_ctxt)
437
3.91k
{
438
3.91k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
439
440
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_deblk_pic);
441
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->pu1_dec_mb_map);
442
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->pu1_recon_mb_map);
443
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->pu2_slice_num_map);
444
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_dec_slice_buf);
445
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_frm_mb_info);
446
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->pi2_coeff_data);
447
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_parse_mb_data);
448
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_parse_part_params);
449
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_deblk_top_mb);
450
451
3.91k
    if(ps_view_ctxt->p_ctxt_inc_mb_map)
452
3.36k
    {
453
3.36k
        ps_view_ctxt->p_ctxt_inc_mb_map -= 1;
454
3.36k
        PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->p_ctxt_inc_mb_map);
455
3.36k
    }
456
457
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_mv_p[0]);
458
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_mv_p[1]);
459
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_pred_pkd);
460
3.91k
    {
461
3.91k
        UWORD8 i;
462
19.5k
        for(i = 0; i < MV_SCRATCH_BUFS; i++)
463
15.6k
        {
464
15.6k
            PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_mv_top_p[i]);
465
15.6k
        }
466
3.91k
    }
467
468
3.91k
    if(ps_view_ctxt->pu1_y_intra_pred_line)
469
3.36k
    {
470
3.36k
        ps_view_ctxt->pu1_y_intra_pred_line -= MB_SIZE;
471
3.36k
    }
472
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->pu1_y_intra_pred_line);
473
474
3.91k
    if(ps_view_ctxt->pu1_u_intra_pred_line)
475
3.36k
    {
476
3.36k
        ps_view_ctxt->pu1_u_intra_pred_line -= MB_SIZE;
477
3.36k
    }
478
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->pu1_u_intra_pred_line);
479
480
3.91k
    if(ps_view_ctxt->pu1_v_intra_pred_line)
481
3.36k
    {
482
3.36k
        ps_view_ctxt->pu1_v_intra_pred_line -= MB_SIZE;
483
3.36k
    }
484
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->pu1_v_intra_pred_line);
485
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_view_ctxt->ps_nbr_mb_row);
486
487
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt, ps_mvcd_ctxt->s_mvc_au_buf_mgr.pv_au_buf_base);
488
3.91k
    PS_DEC_ALIGNED_FREE(ps_view_ctxt,
489
3.91k
                        ps_mvcd_ctxt->s_mvc_au_mv_pred_buf_mgr.pv_au_mv_pred_buf_base);
490
491
3.91k
    return OK;
492
3.91k
}
493
494
static UWORD32 imvcd_get_num_au_data_bufs(mvc_dec_ctxt_t *ps_mvcd_ctxt)
495
20.2k
{
496
20.2k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
497
498
20.2k
    return ps_view_ctxt->u1_pic_bufs;
499
20.2k
}
500
501
static UWORD32 imvcd_get_num_elements_in_mv_pred_buf(UWORD32 u4_view_wd, UWORD32 u4_view_ht)
502
12.6k
{
503
12.6k
    return (u4_view_wd * (u4_view_ht + PAD_MV_BANK_ROW)) / MB_SIZE;
504
12.6k
}
505
506
static UWORD32 imvcd_get_mv_pred_buf_padding_length(UWORD32 u4_view_wd)
507
145k
{
508
145k
    return (u4_view_wd * OFFSET_MV_BANK_ROW) / MB_SIZE;
509
145k
}
510
511
static UWORD32 imvcd_get_au_mv_pred_buf_size(mvc_dec_ctxt_t *ps_mvcd_ctxt)
512
6.73k
{
513
6.73k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
514
515
6.73k
    UWORD32 u4_num_bufs = imvcd_get_num_au_data_bufs(ps_mvcd_ctxt);
516
517
6.73k
    UWORD32 u4_size = 0;
518
519
6.73k
    u4_size += sizeof(mvc_au_mv_pred_t);
520
521
6.73k
    u4_size +=
522
6.73k
        imvcd_get_num_elements_in_mv_pred_buf(ps_view_ctxt->u2_pic_wd, ps_view_ctxt->u2_pic_ht) *
523
6.73k
        (sizeof(mv_pred_t) + sizeof(UWORD8));
524
525
6.73k
    u4_size *= u4_num_bufs;
526
6.73k
    u4_size *= ps_mvcd_ctxt->u2_num_views;
527
528
6.73k
    return u4_size;
529
6.73k
}
530
531
static UWORD32 imvcd_get_au_buf_size(mvc_dec_ctxt_t *ps_mvcd_ctxt)
532
6.73k
{
533
6.73k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
534
535
6.73k
    UWORD32 u4_size = 0;
536
6.73k
    UWORD32 u4_num_bufs = imvcd_get_num_au_data_bufs(ps_mvcd_ctxt);
537
538
6.73k
    u4_size += sizeof(mvc_au_buffer_t);
539
540
    /* All rvalues below incorporate both padding and pic dimensions */
541
6.73k
    u4_size += ALIGN64(ps_view_ctxt->u2_frm_wd_y * ps_view_ctxt->u2_frm_ht_y) * sizeof(UWORD8);
542
6.73k
    u4_size += ALIGN64(ps_view_ctxt->u2_frm_wd_uv * ps_view_ctxt->u2_frm_ht_uv) * sizeof(UWORD8);
543
544
6.73k
    u4_size *= ps_mvcd_ctxt->u2_num_views;
545
6.73k
    u4_size *= u4_num_bufs;
546
547
6.73k
    return u4_size;
548
6.73k
}
549
550
WORD32 imvcd_init_au_buffers(mvc_dec_ctxt_t *ps_mvcd_ctxt)
551
3.36k
{
552
3.36k
    UWORD32 i, j;
553
3.36k
    UWORD32 u4_luma_size, u4_chroma_size;
554
3.36k
    WORD32 i4_error_code;
555
556
3.36k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
557
558
3.36k
    WORD64 i8_alloc_mem_size = imvcd_get_au_buf_size(ps_mvcd_ctxt);
559
3.36k
    UWORD8 *pu1_buf = (UWORD8 *) ps_mvcd_ctxt->s_mvc_au_buf_mgr.pv_au_buf_base;
560
3.36k
    UWORD32 u4_num_bufs = imvcd_get_num_au_data_bufs(ps_mvcd_ctxt);
561
562
3.36k
    if(ps_mvcd_ctxt->u2_num_views > MAX_NUM_VIEWS)
563
0
    {
564
0
        ps_view_ctxt->i4_error_code = ERROR_BUF_MGR;
565
0
        return ERROR_BUF_MGR;
566
0
    }
567
568
3.36k
    u4_luma_size = ps_view_ctxt->u2_frm_wd_y * ps_view_ctxt->u2_frm_ht_y;
569
3.36k
    u4_chroma_size = ps_view_ctxt->u2_frm_wd_uv * ps_view_ctxt->u2_frm_ht_uv;
570
571
71.5k
    for(i = 0; i < u4_num_bufs; i++)
572
68.1k
    {
573
68.1k
        WORD32 i4_stride;
574
575
68.1k
        mvc_au_buffer_t *ps_au_buf = (mvc_au_buffer_t *) pu1_buf;
576
577
68.1k
        pu1_buf += sizeof(ps_au_buf[0]);
578
579
139k
        for(j = 0; j < ps_mvcd_ctxt->u2_num_views; j++)
580
71.3k
        {
581
71.3k
            i4_stride = ps_view_ctxt->u2_frm_wd_y;
582
71.3k
            ps_au_buf->as_view_buffers[j].as_component_bufs[Y].i4_data_stride = i4_stride;
583
71.3k
            ps_au_buf->as_view_buffers[j].as_component_bufs[Y].pv_data =
584
71.3k
                pu1_buf + imvcd_get_ref_pic_pad_offset(i4_stride, false);
585
71.3k
            pu1_buf += ALIGN64(u4_luma_size) * sizeof(pu1_buf[0]);
586
71.3k
            i8_alloc_mem_size -= ALIGN64(u4_luma_size) * sizeof(pu1_buf[0]);
587
588
71.3k
            i4_stride = ps_view_ctxt->u2_frm_wd_uv;
589
71.3k
            ps_au_buf->as_view_buffers[j].as_component_bufs[UV].i4_data_stride = i4_stride;
590
71.3k
            ps_au_buf->as_view_buffers[j].as_component_bufs[UV].pv_data =
591
71.3k
                pu1_buf + imvcd_get_ref_pic_pad_offset(i4_stride, true);
592
71.3k
            pu1_buf += ALIGN64(u4_chroma_size) * sizeof(pu1_buf[0]);
593
71.3k
            i8_alloc_mem_size -= ALIGN64(u4_chroma_size) * sizeof(pu1_buf[0]);
594
595
71.3k
            ps_au_buf->as_view_buffers[j].as_component_bufs[V].pv_data = NULL;
596
597
71.3k
            ps_au_buf->as_view_buffers[j].u2_height =
598
71.3k
                ps_view_ctxt->ps_cur_sps->u2_frm_ht_in_mbs * MB_SIZE;
599
71.3k
            ps_au_buf->as_view_buffers[j].u2_width =
600
71.3k
                ps_view_ctxt->ps_cur_sps->u2_frm_wd_in_mbs * MB_SIZE;
601
71.3k
            ps_au_buf->as_view_buffers[j].u1_bit_depth = 8;
602
603
71.3k
            ASSERT(i8_alloc_mem_size >= 0);
604
71.3k
        }
605
606
68.1k
        ps_au_buf->i4_pic_buf_id = i;
607
608
68.1k
        i4_error_code =
609
68.1k
            ih264_buf_mgr_add(ps_mvcd_ctxt->s_mvc_au_buf_mgr.ps_buf_mgr_ctxt, ps_au_buf, i);
610
611
68.1k
        if(0 != i4_error_code)
612
0
        {
613
0
            ps_view_ctxt->i4_error_code = ERROR_BUF_MGR;
614
615
0
            return ERROR_BUF_MGR;
616
0
        }
617
618
68.1k
        ps_mvcd_ctxt->s_mvc_au_buf_mgr.aps_buf_id_to_au_buf_map[i] = ps_au_buf;
619
68.1k
    }
620
621
3.36k
    return OK;
622
3.36k
}
623
624
WORD32 imvcd_init_au_mv_pred_bufs(mvc_dec_ctxt_t *ps_mvcd_ctxt)
625
3.36k
{
626
3.36k
    UWORD32 i, j;
627
3.36k
    WORD32 buf_ret;
628
629
3.36k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
630
631
3.36k
    UWORD32 u4_width = ps_view_ctxt->u2_pic_wd;
632
3.36k
    UWORD32 u4_height = ps_view_ctxt->u2_pic_ht;
633
3.36k
    UWORD32 u4_mode_info_buf_size = imvcd_get_num_elements_in_mv_pred_buf(u4_width, u4_height);
634
3.36k
    UWORD8 *pu1_buf = ps_mvcd_ctxt->s_mvc_au_mv_pred_buf_mgr.pv_au_mv_pred_buf_base;
635
3.36k
    WORD64 i8_alloc_mem_size = imvcd_get_au_mv_pred_buf_size(ps_mvcd_ctxt);
636
3.36k
    UWORD32 u4_num_bufs = imvcd_get_num_au_data_bufs(ps_mvcd_ctxt);
637
638
3.36k
    if(ps_mvcd_ctxt->u2_num_views > MAX_NUM_VIEWS)
639
0
    {
640
0
        return ERROR_BUF_MGR;
641
0
    }
642
643
71.5k
    for(i = 0; i < u4_num_bufs; i++)
644
68.1k
    {
645
68.1k
        mvc_au_mv_pred_t *ps_au_mv_data = (mvc_au_mv_pred_t *) pu1_buf;
646
647
68.1k
        pu1_buf += sizeof(ps_au_mv_data[0]);
648
649
68.1k
        buf_ret = ih264_buf_mgr_add(ps_mvcd_ctxt->s_mvc_au_mv_pred_buf_mgr.ps_buf_mgr_ctxt,
650
68.1k
                                    ps_au_mv_data, i);
651
652
68.1k
        if(0 != buf_ret)
653
0
        {
654
0
            return ERROR_BUF_MGR;
655
0
        }
656
657
139k
        for(j = 0; j < ps_mvcd_ctxt->u2_num_views; j++)
658
71.3k
        {
659
71.3k
            UWORD32 u4_mv_buf_size = u4_mode_info_buf_size * sizeof(ps_au_mv_data->aps_mvs[j][0]);
660
71.3k
            UWORD32 u4_mode_desc_buf_size =
661
71.3k
                u4_mode_info_buf_size * sizeof(ps_au_mv_data->apu1_mode_descriptors[j][0]);
662
663
71.3k
            ps_au_mv_data->aps_mvs[j] = (mv_pred_t *) pu1_buf;
664
71.3k
            ps_au_mv_data->aps_mvs[j] += imvcd_get_mv_pred_buf_padding_length(u4_width);
665
71.3k
            pu1_buf += u4_mv_buf_size;
666
71.3k
            i8_alloc_mem_size -= u4_mv_buf_size;
667
668
71.3k
            ps_au_mv_data->apu1_mode_descriptors[j] = pu1_buf;
669
71.3k
            pu1_buf += u4_mode_desc_buf_size;
670
71.3k
            i8_alloc_mem_size -= u4_mode_desc_buf_size;
671
672
71.3k
            memset(ps_au_mv_data->aps_mvs[j] - imvcd_get_mv_pred_buf_padding_length(u4_width), 0,
673
71.3k
                   u4_mv_buf_size);
674
675
71.3k
            memset(ps_au_mv_data->apu1_mode_descriptors[j], 0, u4_mode_desc_buf_size);
676
677
71.3k
            ASSERT(i8_alloc_mem_size >= 0);
678
71.3k
        }
679
68.1k
    }
680
681
3.36k
    return OK;
682
3.36k
}
683
684
WORD32 imvcd_allocate_dynamic_bufs(mvc_dec_ctxt_t *ps_mvcd_ctxt)
685
3.36k
{
686
3.36k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
687
3.36k
    dec_seq_params_t *ps_sps = ps_view_ctxt->ps_cur_sps;
688
689
3.36k
    UWORD32 u4_total_mbs = ps_sps->u4_total_num_of_mbs;
690
3.36k
    UWORD32 u4_wd_mbs = ps_view_ctxt->u2_frm_wd_in_mbs;
691
3.36k
    UWORD32 u4_ht_mbs = ps_view_ctxt->u2_frm_ht_in_mbs;
692
3.36k
    const WORD32 i4_default_alignment = 128;
693
3.36k
    void *pv_mem_ctxt = ps_view_ctxt->pv_mem_ctxt;
694
695
3.36k
    UWORD8 *pu1_buf;
696
3.36k
    WORD32 i4_mem_size;
697
3.36k
    WORD32 i;
698
3.36k
    void *pv_buf;
699
3.36k
    WORD32 i4_num_entries;
700
701
3.36k
    if(ps_mvcd_ctxt->u2_num_views > MAX_NUM_VIEWS)
702
0
    {
703
0
        return IV_FAIL;
704
0
    }
705
706
3.36k
    i4_mem_size = u4_total_mbs * sizeof(ps_view_ctxt->pu1_dec_mb_map[0]);
707
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
708
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
709
3.36k
    memset(pv_buf, 0, i4_mem_size);
710
3.36k
    ps_view_ctxt->pu1_dec_mb_map = pv_buf;
711
712
3.36k
    i4_mem_size = u4_total_mbs * sizeof(ps_view_ctxt->pu1_recon_mb_map[0]);
713
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
714
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
715
3.36k
    memset(pv_buf, 0, i4_mem_size);
716
3.36k
    ps_view_ctxt->pu1_recon_mb_map = pv_buf;
717
718
3.36k
    i4_mem_size = u4_total_mbs * sizeof(ps_view_ctxt->pu2_slice_num_map[0]);
719
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
720
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
721
3.36k
    memset(pv_buf, 0, i4_mem_size);
722
3.36k
    ps_view_ctxt->pu2_slice_num_map = pv_buf;
723
724
3.36k
    ps_view_ctxt->ps_parse_cur_slice = ps_view_ctxt->ps_dec_slice_buf;
725
3.36k
    ps_view_ctxt->ps_decode_cur_slice = ps_view_ctxt->ps_dec_slice_buf;
726
3.36k
    ps_view_ctxt->ps_computebs_cur_slice = ps_view_ctxt->ps_dec_slice_buf;
727
3.36k
    ps_view_ctxt->ps_pred_start = ps_view_ctxt->ps_pred;
728
729
3.36k
    i4_mem_size = sizeof(parse_pmbarams_t) * (ps_view_ctxt->u4_recon_mb_grp);
730
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
731
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
732
3.36k
    memset(pv_buf, 0, i4_mem_size);
733
3.36k
    ps_view_ctxt->ps_parse_mb_data = pv_buf;
734
735
3.36k
    i4_mem_size = sizeof(parse_part_params_t) * ((ps_view_ctxt->u4_recon_mb_grp) << 4);
736
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
737
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
738
3.36k
    memset(pv_buf, 0, i4_mem_size);
739
3.36k
    ps_view_ctxt->ps_parse_part_params = pv_buf;
740
741
3.36k
    i4_mem_size = (u4_wd_mbs * sizeof(deblkmb_neighbour_t));
742
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
743
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
744
3.36k
    memset(pv_buf, 0, i4_mem_size);
745
3.36k
    ps_view_ctxt->ps_deblk_top_mb = pv_buf;
746
747
3.36k
    i4_mem_size = sizeof(ctxt_inc_mb_info_t) * (u4_wd_mbs + 2);
748
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
749
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
750
3.36k
    memset(pv_buf, 0, i4_mem_size);
751
3.36k
    ps_view_ctxt->p_ctxt_inc_mb_map = pv_buf;
752
    /* 0th entry of CtxtIncMbMap will be always be containing default values
753
     for CABAC context representing MB not available */
754
3.36k
    ps_view_ctxt->p_ctxt_inc_mb_map += 1;
755
756
3.36k
    i4_mem_size = sizeof(mv_pred_t) * ps_view_ctxt->u4_recon_mb_grp * 16;
757
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
758
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
759
3.36k
    memset(pv_buf, 0, i4_mem_size);
760
3.36k
    ps_view_ctxt->ps_mv_p[0] = pv_buf;
761
762
3.36k
    i4_mem_size = sizeof(mv_pred_t) * ps_view_ctxt->u4_recon_mb_grp * 16;
763
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
764
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
765
3.36k
    memset(pv_buf, 0, i4_mem_size);
766
3.36k
    ps_view_ctxt->ps_mv_p[1] = pv_buf;
767
768
16.8k
    for(i = 0; i < MV_SCRATCH_BUFS; i++)
769
13.4k
    {
770
13.4k
        i4_mem_size = (sizeof(mv_pred_t) * ps_view_ctxt->u4_recon_mb_grp * 4);
771
13.4k
        pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
772
13.4k
        RETURN_IF((NULL == pv_buf), IV_FAIL);
773
13.4k
        memset(pv_buf, 0, i4_mem_size);
774
13.4k
        ps_view_ctxt->ps_mv_top_p[i] = pv_buf;
775
13.4k
    }
776
777
3.36k
    i4_mem_size = sizeof(UWORD8) * ((u4_wd_mbs + 2) * MB_SIZE) * 2;
778
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
779
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
780
3.36k
    ps_view_ctxt->pu1_y_intra_pred_line = pv_buf;
781
3.36k
    memset(ps_view_ctxt->pu1_y_intra_pred_line, 0, i4_mem_size);
782
3.36k
    ps_view_ctxt->pu1_y_intra_pred_line += MB_SIZE;
783
784
3.36k
    i4_mem_size = sizeof(UWORD8) * ((u4_wd_mbs + 2) * MB_SIZE) * 2;
785
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
786
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
787
3.36k
    ps_view_ctxt->pu1_u_intra_pred_line = pv_buf;
788
3.36k
    memset(ps_view_ctxt->pu1_u_intra_pred_line, 0, i4_mem_size);
789
3.36k
    ps_view_ctxt->pu1_u_intra_pred_line += MB_SIZE;
790
791
3.36k
    i4_mem_size = sizeof(UWORD8) * ((u4_wd_mbs + 2) * MB_SIZE) * 2;
792
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
793
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
794
3.36k
    ps_view_ctxt->pu1_v_intra_pred_line = pv_buf;
795
3.36k
    memset(ps_view_ctxt->pu1_v_intra_pred_line, 0, i4_mem_size);
796
3.36k
    ps_view_ctxt->pu1_v_intra_pred_line += MB_SIZE;
797
798
3.36k
    if(ps_view_ctxt->u1_separate_parse)
799
2.28k
    {
800
        /* Needs one extra row of info, to hold top row data */
801
2.28k
        i4_mem_size = sizeof(mb_neigbour_params_t) * 2 * ((u4_wd_mbs + 2) * (u4_ht_mbs + 1));
802
2.28k
    }
803
1.08k
    else
804
1.08k
    {
805
1.08k
        i4_mem_size = sizeof(mb_neigbour_params_t) * 2 * (u4_wd_mbs + 2);
806
1.08k
    }
807
808
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
809
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
810
811
3.36k
    ps_view_ctxt->ps_nbr_mb_row = pv_buf;
812
3.36k
    memset(ps_view_ctxt->ps_nbr_mb_row, 0, i4_mem_size);
813
814
3.36k
    i4_mem_size = (u4_total_mbs + u4_wd_mbs) * sizeof(deblk_mb_t);
815
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
816
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
817
3.36k
    ps_view_ctxt->ps_deblk_pic = pv_buf;
818
3.36k
    memset(ps_view_ctxt->ps_deblk_pic, 0, i4_mem_size);
819
820
3.36k
    i4_mem_size = sizeof(dec_mb_info_t) * u4_total_mbs;
821
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
822
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
823
3.36k
    ps_view_ctxt->ps_frm_mb_info = pv_buf;
824
3.36k
    memset(ps_view_ctxt->ps_frm_mb_info, 0, i4_mem_size);
825
826
3.36k
    if((1 >= ps_view_ctxt->ps_cur_sps->u1_num_ref_frames) && (0 == ps_view_ctxt->i4_display_delay))
827
0
    {
828
0
        i4_num_entries = 1;
829
0
    }
830
3.36k
    else
831
3.36k
    {
832
3.36k
        i4_num_entries = MAX_FRAMES;
833
3.36k
    }
834
835
3.36k
    i4_num_entries = (2 * i4_num_entries) + 1;
836
3.36k
    i4_num_entries *= 2;
837
838
3.36k
    i4_mem_size = i4_num_entries * sizeof(void *);
839
3.36k
    i4_mem_size += PAD_MAP_IDX_POC * sizeof(void *);
840
3.36k
    i4_mem_size *= u4_total_mbs;
841
3.36k
    i4_mem_size += sizeof(dec_slice_struct_t) * u4_total_mbs;
842
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
843
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
844
845
3.36k
    ps_view_ctxt->ps_dec_slice_buf = pv_buf;
846
3.36k
    memset(ps_view_ctxt->ps_dec_slice_buf, 0, i4_mem_size);
847
3.36k
    pu1_buf = (UWORD8 *) ps_view_ctxt->ps_dec_slice_buf;
848
3.36k
    pu1_buf += sizeof(dec_slice_struct_t) * u4_total_mbs;
849
3.36k
    ps_view_ctxt->pv_map_ref_idx_to_poc_buf = (void *) pu1_buf;
850
851
    /* Allocate memory for packed pred info */
852
3.36k
    i4_num_entries = u4_total_mbs;
853
3.36k
    i4_num_entries *= 16 * 2;
854
855
3.36k
    i4_mem_size = sizeof(pred_info_pkd_t) * i4_num_entries;
856
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
857
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
858
3.36k
    memset(pv_buf, 0, i4_mem_size);
859
3.36k
    ps_view_ctxt->ps_pred_pkd = pv_buf;
860
861
    /* Allocate memory for coeff data */
862
3.36k
    i4_mem_size = MB_LUM_SIZE * sizeof(WORD16);
863
    /*For I16x16 MBs, 16 4x4 AC coeffs and 1 4x4 DC coeff TU blocks will be sent
864
    For all MBs along with 8 4x4 AC coeffs 2 2x2 DC coeff TU blocks will be sent
865
    So use 17 4x4 TU blocks for luma and 9 4x4 TU blocks for chroma */
866
3.36k
    i4_mem_size += u4_total_mbs *
867
3.36k
                   (MAX(17 * sizeof(tu_sblk4x4_coeff_data_t), 4 * sizeof(tu_blk8x8_coeff_data_t)) +
868
3.36k
                    9 * sizeof(tu_sblk4x4_coeff_data_t));
869
    // 32 bytes for each mb to store u1_prev_intra4x4_pred_mode and
870
    // u1_rem_intra4x4_pred_mode data
871
3.36k
    i4_mem_size += u4_total_mbs * 32;
872
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
873
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
874
3.36k
    memset(pv_buf, 0, i4_mem_size);
875
876
3.36k
    ps_view_ctxt->pi2_coeff_data = pv_buf;
877
878
3.36k
    ps_view_ctxt->pv_pic_tu_coeff_data = (void *) (ps_view_ctxt->pi2_coeff_data + MB_LUM_SIZE);
879
880
3.36k
    i4_mem_size = imvcd_get_au_mv_pred_buf_size(ps_mvcd_ctxt);
881
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
882
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
883
3.36k
    memset(pv_buf, 0, i4_mem_size);
884
3.36k
    ps_mvcd_ctxt->s_mvc_au_mv_pred_buf_mgr.pv_au_mv_pred_buf_base = pv_buf;
885
886
3.36k
    i4_mem_size = imvcd_get_au_buf_size(ps_mvcd_ctxt);
887
3.36k
    pv_buf = ps_view_ctxt->pf_aligned_alloc(pv_mem_ctxt, i4_default_alignment, i4_mem_size);
888
3.36k
    RETURN_IF((NULL == pv_buf), IV_FAIL);
889
3.36k
    memset(pv_buf, 0, i4_mem_size);
890
3.36k
    ps_mvcd_ctxt->s_mvc_au_buf_mgr.pv_au_buf_base = pv_buf;
891
892
    /***************************************************************************/
893
    /*Initialize cabac context pointers for every SE that has fixed contextIdx */
894
    /***************************************************************************/
895
3.36k
    {
896
3.36k
        bin_ctxt_model_t *const p_cabac_ctxt_table_t = ps_view_ctxt->p_cabac_ctxt_table_t;
897
3.36k
        bin_ctxt_model_t **p_coeff_abs_level_minus1_t = ps_view_ctxt->p_coeff_abs_level_minus1_t;
898
3.36k
        bin_ctxt_model_t **p_cbf_t = ps_view_ctxt->p_cbf_t;
899
900
3.36k
        ps_view_ctxt->p_mb_field_dec_flag_t = p_cabac_ctxt_table_t + MB_FIELD_DECODING_FLAG;
901
3.36k
        ps_view_ctxt->p_prev_intra4x4_pred_mode_flag_t =
902
3.36k
            p_cabac_ctxt_table_t + PREV_INTRA4X4_PRED_MODE_FLAG;
903
3.36k
        ps_view_ctxt->p_rem_intra4x4_pred_mode_t = p_cabac_ctxt_table_t + REM_INTRA4X4_PRED_MODE;
904
3.36k
        ps_view_ctxt->p_intra_chroma_pred_mode_t = p_cabac_ctxt_table_t + INTRA_CHROMA_PRED_MODE;
905
3.36k
        ps_view_ctxt->p_mb_qp_delta_t = p_cabac_ctxt_table_t + MB_QP_DELTA;
906
3.36k
        ps_view_ctxt->p_ref_idx_t = p_cabac_ctxt_table_t + REF_IDX;
907
3.36k
        ps_view_ctxt->p_mvd_x_t = p_cabac_ctxt_table_t + MVD_X;
908
3.36k
        ps_view_ctxt->p_mvd_y_t = p_cabac_ctxt_table_t + MVD_Y;
909
3.36k
        p_cbf_t[0] = p_cabac_ctxt_table_t + CBF + 0;
910
3.36k
        p_cbf_t[1] = p_cabac_ctxt_table_t + CBF + 4;
911
3.36k
        p_cbf_t[2] = p_cabac_ctxt_table_t + CBF + 8;
912
3.36k
        p_cbf_t[3] = p_cabac_ctxt_table_t + CBF + 12;
913
3.36k
        p_cbf_t[4] = p_cabac_ctxt_table_t + CBF + 16;
914
3.36k
        ps_view_ctxt->p_cbp_luma_t = p_cabac_ctxt_table_t + CBP_LUMA;
915
3.36k
        ps_view_ctxt->p_cbp_chroma_t = p_cabac_ctxt_table_t + CBP_CHROMA;
916
917
3.36k
        p_coeff_abs_level_minus1_t[LUMA_DC_CTXCAT] =
918
3.36k
            p_cabac_ctxt_table_t + COEFF_ABS_LEVEL_MINUS1 + COEFF_ABS_LEVEL_CAT_0_OFFSET;
919
920
3.36k
        p_coeff_abs_level_minus1_t[LUMA_AC_CTXCAT] =
921
3.36k
            p_cabac_ctxt_table_t + COEFF_ABS_LEVEL_MINUS1 + COEFF_ABS_LEVEL_CAT_1_OFFSET;
922
923
3.36k
        p_coeff_abs_level_minus1_t[LUMA_4X4_CTXCAT] =
924
3.36k
            p_cabac_ctxt_table_t + COEFF_ABS_LEVEL_MINUS1 + COEFF_ABS_LEVEL_CAT_2_OFFSET;
925
926
3.36k
        p_coeff_abs_level_minus1_t[CHROMA_DC_CTXCAT] =
927
3.36k
            p_cabac_ctxt_table_t + COEFF_ABS_LEVEL_MINUS1 + COEFF_ABS_LEVEL_CAT_3_OFFSET;
928
929
3.36k
        p_coeff_abs_level_minus1_t[CHROMA_AC_CTXCAT] =
930
3.36k
            p_cabac_ctxt_table_t + COEFF_ABS_LEVEL_MINUS1 + COEFF_ABS_LEVEL_CAT_4_OFFSET;
931
932
3.36k
        p_coeff_abs_level_minus1_t[LUMA_8X8_CTXCAT] =
933
3.36k
            p_cabac_ctxt_table_t + COEFF_ABS_LEVEL_MINUS1_8X8 + COEFF_ABS_LEVEL_CAT_5_OFFSET;
934
935
        /********************************************************/
936
        /* context for the high profile related syntax elements */
937
        /* This is maintained seperately in s_high_profile     */
938
        /********************************************************/
939
3.36k
        {
940
3.36k
            ps_view_ctxt->s_high_profile.ps_transform8x8_flag =
941
3.36k
                p_cabac_ctxt_table_t + TRANSFORM_SIZE_8X8_FLAG;
942
943
3.36k
            ps_view_ctxt->s_high_profile.ps_sigcoeff_8x8_frame =
944
3.36k
                p_cabac_ctxt_table_t + SIGNIFICANT_COEFF_FLAG_8X8_FRAME;
945
946
3.36k
            ps_view_ctxt->s_high_profile.ps_last_sigcoeff_8x8_frame =
947
3.36k
                p_cabac_ctxt_table_t + LAST_SIGNIFICANT_COEFF_FLAG_8X8_FRAME;
948
949
3.36k
            ps_view_ctxt->s_high_profile.ps_coeff_abs_levelminus1 =
950
3.36k
                p_cabac_ctxt_table_t + COEFF_ABS_LEVEL_MINUS1_8X8;
951
952
3.36k
            ps_view_ctxt->s_high_profile.ps_sigcoeff_8x8_field =
953
3.36k
                p_cabac_ctxt_table_t + SIGNIFICANT_COEFF_FLAG_8X8_FIELD;
954
955
3.36k
            ps_view_ctxt->s_high_profile.ps_last_sigcoeff_8x8_field =
956
3.36k
                p_cabac_ctxt_table_t + LAST_SIGNIFICANT_COEFF_FLAG_8X8_FIELD;
957
3.36k
        }
958
3.36k
    }
959
960
3.36k
    return OK;
961
3.36k
}
962
963
void imvcd_convert_au_buf_to_view_buf(mvc_au_buffer_t *ps_au_buf, pic_buffer_t *ps_view_buf,
964
                                      UWORD16 u2_view_order_id, UWORD16 u2_view_id)
965
914k
{
966
914k
    yuv_buf_props_t *ps_view_buffer = &ps_au_buf->as_view_buffers[u2_view_id];
967
914k
    offsets_t *ps_disp_offsets = &ps_au_buf->as_disp_offsets[u2_view_id];
968
914k
    mvc_au_mv_pred_t *ps_au_mv_data = ps_au_buf->ps_au_mv_data;
969
970
914k
    ps_view_buf->pu1_buf1 = ps_view_buffer->as_component_bufs[Y].pv_data;
971
914k
    ps_view_buf->pu1_buf2 = ps_view_buffer->as_component_bufs[UV].pv_data;
972
914k
    ps_view_buf->pu1_buf3 = NULL;
973
914k
    ps_view_buf->u2_frm_wd_y = ps_view_buffer->as_component_bufs[Y].i4_data_stride;
974
914k
    ps_view_buf->u2_frm_wd_uv = ps_view_buffer->as_component_bufs[UV].i4_data_stride;
975
914k
    ps_view_buf->pu1_buf3 = NULL;
976
977
914k
    ps_view_buf->u2_disp_width = ps_au_buf->u2_disp_width;
978
914k
    ps_view_buf->u2_disp_height = ps_au_buf->u2_disp_height;
979
914k
    ps_view_buf->u2_frm_ht_y = ps_view_buffer->u2_height;
980
914k
    ps_view_buf->u2_frm_ht_uv = ps_view_buffer->u2_height / 2;
981
982
914k
    ps_view_buf->u4_time_stamp = ps_au_buf->u4_time_stamp;
983
914k
    ps_view_buf->u4_ts = ps_au_buf->u4_time_stamp;
984
985
914k
    ps_view_buf->u2_crop_offset_y =
986
914k
        ps_disp_offsets->u2_left_offset + ps_disp_offsets->u2_top_offset * ps_view_buf->u2_frm_wd_y;
987
914k
    ps_view_buf->u2_crop_offset_uv =
988
914k
        ps_disp_offsets->u2_left_offset +
989
914k
        (ps_disp_offsets->u2_top_offset / 2) * ps_view_buf->u2_frm_wd_uv;
990
991
914k
    ps_view_buf->i4_poc = ps_au_buf->i4_poc;
992
914k
    ps_view_buf->i4_pic_num = ps_au_buf->i4_frame_num;
993
914k
    ps_view_buf->i4_frame_num = ps_au_buf->i4_frame_num;
994
914k
    ps_view_buf->i4_avg_poc = ps_au_buf->i4_poc;
995
914k
    ps_view_buf->u1_is_short = ps_au_buf->b_is_short_term_ref;
996
914k
    ps_view_buf->u1_pic_type = ps_au_buf->u1_pic_type;
997
914k
    ps_view_buf->i4_top_field_order_cnt = ps_au_buf->i4_poc;
998
914k
    ps_view_buf->i4_bottom_field_order_cnt = ps_au_buf->i4_poc;
999
914k
    ps_view_buf->u1_picturetype = FRM_PIC;
1000
914k
    ps_view_buf->u1_long_term_frm_idx = ps_au_buf->u1_long_term_frm_idx;
1001
914k
    ps_view_buf->u1_long_term_pic_num = ps_au_buf->u1_long_term_pic_num;
1002
914k
    ps_view_buf->u4_pack_slc_typ = ps_au_buf->au4_pack_slc_typ[u2_view_order_id];
1003
914k
    ps_view_buf->u1_pic_struct = ps_au_buf->u1_pic_struct;
1004
914k
    ps_view_buf->s_sei_pic = ps_au_buf->s_sei_pic;
1005
1006
914k
    ps_view_buf->u1_pic_buf_id = ps_au_buf->i4_pic_buf_id;
1007
914k
    ps_view_buf->u1_mv_buf_id = ps_au_buf->i4_mv_buf_id;
1008
1009
914k
    ps_view_buf->pu1_col_zero_flag = ps_au_mv_data->apu1_mode_descriptors[u2_view_id];
1010
914k
    ps_view_buf->ps_mv = ps_au_mv_data->aps_mvs[u2_view_id];
1011
914k
}
1012
1013
void imvcd_init_ref_idx_to_ref_buf_map(mvc_dec_ctxt_t *ps_mvcd_ctxt)
1014
68.7k
{
1015
68.7k
    pic_buffer_t *ps_pic;
1016
1017
68.7k
    void **ppv_map_ref_idx_to_poc_lx;
1018
68.7k
    WORD8 i, j;
1019
1020
68.7k
    dec_struct_t *ps_view_ctxt = &ps_mvcd_ctxt->s_view_dec_ctxt;
1021
1022
68.7k
    bool b_is_b_pic = !!(
1023
68.7k
        ps_mvcd_ctxt->ps_cur_au->au4_pack_slc_typ[ps_mvcd_ctxt->u2_num_views_decoded] & B_SLC_BIT);
1024
1025
166k
    for(i = 0; i < 1 + ((WORD32) b_is_b_pic); i++)
1026
97.3k
    {
1027
97.3k
        ppv_map_ref_idx_to_poc_lx =
1028
97.3k
            ps_view_ctxt->ppv_map_ref_idx_to_poc + ((0 == i) ? FRM_LIST_L0 : FRM_LIST_L1);
1029
97.3k
        ppv_map_ref_idx_to_poc_lx[0] = NULL;
1030
97.3k
        ppv_map_ref_idx_to_poc_lx++;
1031
1032
388k
        for(j = 0; j < ps_view_ctxt->ps_cur_slice->u1_num_ref_idx_lx_active[i]; j++)
1033
291k
        {
1034
291k
            ps_pic = ps_view_ctxt->ps_ref_pic_buf_lx[i][j];
1035
1036
291k
            ppv_map_ref_idx_to_poc_lx[j] = ps_pic->pu1_buf1;
1037
291k
        }
1038
97.3k
    }
1039
1040
68.7k
    if(!b_is_b_pic)
1041
40.2k
    {
1042
40.2k
        ppv_map_ref_idx_to_poc_lx = ps_view_ctxt->ppv_map_ref_idx_to_poc + FRM_LIST_L1;
1043
40.2k
        ppv_map_ref_idx_to_poc_lx[0] = NULL;
1044
40.2k
    }
1045
1046
68.7k
    if(ps_view_ctxt->u4_num_cores >= 3)
1047
21.4k
    {
1048
21.4k
        WORD32 i4_size;
1049
1050
21.4k
        WORD32 i4_num_entries = MAX_FRAMES;
1051
1052
21.4k
        if((1 >= ps_view_ctxt->ps_cur_sps->u1_num_ref_frames) &&
1053
12.3k
           (0 == ps_view_ctxt->i4_display_delay))
1054
0
        {
1055
0
            i4_num_entries = 1;
1056
0
        }
1057
1058
21.4k
        i4_num_entries = 2 * i4_num_entries + 1;
1059
21.4k
        i4_num_entries *= 2;
1060
1061
21.4k
        i4_size = i4_num_entries * sizeof(void *);
1062
21.4k
        i4_size += PAD_MAP_IDX_POC * sizeof(void *);
1063
1064
21.4k
        memcpy(ps_view_ctxt->ps_parse_cur_slice->ppv_map_ref_idx_to_poc,
1065
21.4k
               ps_view_ctxt->ppv_map_ref_idx_to_poc, i4_size);
1066
21.4k
    }
1067
68.7k
}
1068
1069
void imvcd_ivp_buf_copier(mvc_au_buffer_t *ps_au_buf_src, mvc_au_buffer_t *ps_au_buf_dst,
1070
                          mvc_au_mv_pred_t *ps_au_mv_data_src, mvc_au_mv_pred_t *ps_au_mv_data_dst,
1071
                          UWORD16 u2_src_view_id, UWORD16 u2_dst_view_id)
1072
2.55k
{
1073
2.55k
    UWORD32 i, j;
1074
1075
2.55k
    mv_pred_t *ps_mode_info_src = ps_au_mv_data_src->aps_mvs[u2_src_view_id];
1076
2.55k
    mv_pred_t *ps_mode_info_dst = ps_au_mv_data_dst->aps_mvs[u2_dst_view_id];
1077
1078
2.55k
    UWORD32 u4_view_wd = ps_au_buf_src->as_view_buffers[u2_src_view_id].u2_width;
1079
2.55k
    UWORD32 u4_view_ht = ps_au_buf_src->as_view_buffers[u2_src_view_id].u2_height;
1080
2.55k
    UWORD32 u4_mode_info_buf_size = imvcd_get_num_elements_in_mv_pred_buf(u4_view_wd, u4_view_ht);
1081
2.55k
    UWORD32 u4_mode_info_pad_size = imvcd_get_mv_pred_buf_padding_length(u4_view_wd);
1082
1083
2.55k
    ps_mode_info_src -= u4_mode_info_pad_size;
1084
2.55k
    ps_mode_info_dst -= u4_mode_info_pad_size;
1085
1086
2.55k
    ps_au_buf_dst->ps_au_mv_data = ps_au_mv_data_dst;
1087
1088
2.55k
    ps_au_buf_dst->as_disp_offsets[u2_dst_view_id] = ps_au_buf_src->as_disp_offsets[u2_src_view_id];
1089
1090
7.66k
    for(i = 0; i < NUM_SP_COMPONENTS; i++)
1091
5.11k
    {
1092
5.11k
        bool b_is_chroma = ((COMPONENT_TYPES_T) i) != Y;
1093
1094
5.11k
        coordinates_t s_pad_dims = imvcd_get_buf_pad_dims(b_is_chroma);
1095
5.11k
        buffer_container_t *ps_src =
1096
5.11k
            &ps_au_buf_src->as_view_buffers[u2_src_view_id].as_component_bufs[i];
1097
5.11k
        buffer_container_t *ps_dst =
1098
5.11k
            &ps_au_buf_dst->as_view_buffers[u2_dst_view_id].as_component_bufs[i];
1099
1100
5.11k
        WORD32 i4_src_pad_offset =
1101
5.11k
            imvcd_get_ref_pic_pad_offset(ps_src->i4_data_stride, b_is_chroma);
1102
5.11k
        WORD32 i4_dst_pad_offset =
1103
5.11k
            imvcd_get_ref_pic_pad_offset(ps_dst->i4_data_stride, b_is_chroma);
1104
1105
352k
        for(j = 0; j < ((u4_view_ht >> b_is_chroma) + s_pad_dims.i4_ordinate); j++)
1106
347k
        {
1107
347k
            UWORD8 *pu1_src =
1108
347k
                ((UWORD8 *) ps_src->pv_data) + j * ps_src->i4_data_stride - i4_src_pad_offset;
1109
347k
            UWORD8 *pu1_dst =
1110
347k
                ((UWORD8 *) ps_dst->pv_data) + j * ps_dst->i4_data_stride - i4_dst_pad_offset;
1111
1112
347k
            memcpy(pu1_dst, pu1_src, (u4_view_wd + s_pad_dims.i4_abscissa) * sizeof(pu1_dst[0]));
1113
347k
        }
1114
5.11k
    }
1115
1116
2.55k
    memcpy(ps_mode_info_dst, ps_mode_info_src, u4_mode_info_buf_size * sizeof(ps_mode_info_dst[0]));
1117
1118
207k
    for(i = 0; i < u4_mode_info_buf_size; i++)
1119
204k
    {
1120
        /* In accordance with 'H.8.4' */
1121
204k
        ps_au_mv_data_dst->apu1_mode_descriptors[u2_dst_view_id][i] =
1122
204k
            ps_au_mv_data_src->apu1_mode_descriptors[u2_src_view_id][i] & 0xFE;
1123
204k
    }
1124
1125
2.55k
    ps_au_buf_dst->au4_pack_slc_typ[u2_dst_view_id] =
1126
2.55k
        ps_au_buf_src->au4_pack_slc_typ[u2_src_view_id];
1127
2.55k
    ps_au_buf_dst->b_is_short_term_ref = ps_au_buf_src->b_is_short_term_ref;
1128
2.55k
    ps_au_buf_dst->i4_avg_poc = ps_au_buf_src->i4_avg_poc;
1129
2.55k
    ps_au_buf_dst->i4_frame_num = ps_au_buf_src->i4_frame_num;
1130
2.55k
    ps_au_buf_dst->i4_pic_num = ps_au_buf_src->i4_pic_num;
1131
2.55k
    ps_au_buf_dst->i4_poc = ps_au_buf_src->i4_poc;
1132
2.55k
    ps_au_buf_dst->s_sei_pic = ps_au_buf_src->s_sei_pic;
1133
2.55k
    ps_au_buf_dst->u1_long_term_frm_idx = ps_au_buf_src->u1_long_term_frm_idx;
1134
2.55k
    ps_au_buf_dst->u1_long_term_pic_num = ps_au_buf_src->u1_long_term_pic_num;
1135
2.55k
    ps_au_buf_dst->u1_picturetype = ps_au_buf_src->u1_picturetype;
1136
2.55k
    ps_au_buf_dst->u1_pic_struct = ps_au_buf_src->u1_pic_struct;
1137
2.55k
    ps_au_buf_dst->u2_disp_height = ps_au_buf_src->u2_disp_height;
1138
2.55k
    ps_au_buf_dst->u2_disp_width = ps_au_buf_src->u2_disp_width;
1139
2.55k
    ps_au_buf_dst->u4_time_stamp = ps_au_buf_src->u4_time_stamp;
1140
2.55k
}