18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h"
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h"
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h"
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_bitstrm.h"
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h"
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_cavlc.h"
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_parse_slice.h"
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_utils.h"
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_nal.h"
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_deblocking.h"
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mem_request.h"
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h"
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_error_handler.h"
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mb_utils.h"
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_sei.h"
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_vui.h"
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define IDCT_BLOCK_WIDTH8X8  8
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_scaling_list(WORD16 *pi2_scaling_list,
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                         WORD32 i4_size_of_scalinglist,
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                         UWORD8 *pu1_use_default_scaling_matrix_flag,
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                         dec_bit_stream_t *ps_bitstrm)
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_j, i4_delta_scale, i4_lastScale = 8, i4_nextScale = 8;
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 *pu4_bitstrm_buf = ps_bitstrm->pu4_buffer;
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 *pu4_bitstrm_ofst = &ps_bitstrm->u4_ofst;
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    *pu1_use_default_scaling_matrix_flag = 0;
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i4_j = 0; i4_j < i4_size_of_scalinglist; i4_j++)
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(i4_nextScale != 0)
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i4_delta_scale = ih264d_sev(pu4_bitstrm_ofst,
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        pu4_bitstrm_buf);
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            i4_nextScale = ((i4_lastScale + i4_delta_scale + 256) & 0xff);
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            *pu1_use_default_scaling_matrix_flag = ((i4_j == 0)
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            && (i4_nextScale == 0));
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pi2_scaling_list[i4_j] =
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (i4_nextScale == 0) ? (i4_lastScale) : (i4_nextScale);
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i4_lastScale = pi2_scaling_list[i4_j];
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_form_default_scaling_matrix(dec_struct_t *ps_dec)
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* perform the inverse scanning for the frame and field scaling matrices */
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_inv_scan;
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 i4_i, i4_j;
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan = (UWORD8 *)gau1_ih264d_inv_scan;
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* for all 4x4 matrices */
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i4_i = 0; i4_i < 6; i4_i++)
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i4_j = 0; i4_j < 16; i4_j++)
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->s_high_profile.i2_scalinglist4x4[i4_i][pu1_inv_scan[i4_j]] =
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                16;
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* for all 8x8 matrices */
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i4_i = 0; i4_i < 2; i4_i++)
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i4_j = 0; i4_j < 64; i4_j++)
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->s_high_profile.i2_scalinglist8x8[i4_i][gau1_ih264d_inv_scan_prog8x8_cabac[i4_j]] =
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                16;
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_form_scaling_matrix_picture(dec_seq_params_t *ps_seq,
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        dec_pic_params_t *ps_pic,
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        dec_struct_t *ps_dec)
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* default scaling matrices */
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_i;
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* check the SPS first */
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_seq->i4_seq_scaling_matrix_present_flag)
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i4_i = 0; i4_i < 8; i4_i++)
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(i4_i < 6)
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* fall-back rule A */
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(!ps_seq->u1_seq_scaling_list_present_flag[i4_i])
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if((i4_i == 0) || (i4_i == 3))
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (i4_i == 0) ? (WORD16 *)(gai2_ih264d_default_intra4x4) : (WORD16 *)(gai2_ih264d_default_inter4x4);
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_dec->s_high_profile.pi2_scale_mat[i4_i
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        - 1];
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(ps_seq->u1_use_default_scaling_matrix_flag[i4_i])
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (i4_i < 3) ? (WORD16 *)(gai2_ih264d_default_intra4x4) : (WORD16 *)(gai2_ih264d_default_inter4x4);
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_seq->i2_scalinglist4x4[i4_i];
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* fall-back rule A */
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if((!ps_seq->u1_seq_scaling_list_present_flag[i4_i])
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                || (ps_seq->u1_use_default_scaling_matrix_flag[i4_i]))
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    (i4_i == 6) ? ((WORD16*)gai2_ih264d_default_intra8x8) : ((WORD16*)gai2_ih264d_default_inter8x8);
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    ps_seq->i2_scalinglist8x8[i4_i - 6];
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* checking for the PPS */
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_pic->i4_pic_scaling_matrix_present_flag)
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i4_i = 0; i4_i < 8; i4_i++)
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(i4_i < 6)
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                /* fall back rule B */
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(!ps_pic->u1_pic_scaling_list_present_flag[i4_i])
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if((i4_i == 0) || (i4_i == 3))
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        if(!ps_seq->i4_seq_scaling_matrix_present_flag)
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        {
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                            (i4_i == 0) ? (WORD16 *)(gai2_ih264d_default_intra4x4) : (WORD16 *)(gai2_ih264d_default_inter4x4);
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        }
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_dec->s_high_profile.pi2_scale_mat[i4_i
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        - 1];
1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(ps_pic->u1_pic_use_default_scaling_matrix_flag[i4_i])
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (i4_i < 3) ? (WORD16 *)(gai2_ih264d_default_intra4x4) : (WORD16 *)(gai2_ih264d_default_inter4x4);
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_pic->i2_pic_scalinglist4x4[i4_i];
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                if(!ps_pic->u1_pic_scaling_list_present_flag[i4_i])
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(!ps_seq->u1_seq_scaling_list_present_flag[i4_i])
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (i4_i == 6) ? ((WORD16*)gai2_ih264d_default_intra8x8) : ((WORD16*)gai2_ih264d_default_inter8x8);
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    if(ps_pic->u1_pic_use_default_scaling_matrix_flag[i4_i])
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (i4_i == 6) ? (WORD16 *)(gai2_ih264d_default_intra8x8) : (WORD16 *)(gai2_ih264d_default_inter8x8);
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    else
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    {
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_dec->s_high_profile.pi2_scale_mat[i4_i] =
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        ps_pic->i2_pic_scalinglist8x8[i4_i - 6];
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    }
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* perform the inverse scanning for the frame and field scaling matrices */
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /*************************************************************************/
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD8 *pu1_inv_scan_4x4;
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        WORD32 i4_i, i4_j;
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu1_inv_scan_4x4 = (UWORD8 *)gau1_ih264d_inv_scan;
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* for all 4x4 matrices */
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i4_i = 0; i4_i < 6; i4_i++)
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i4_j = 0; i4_j < 16; i4_j++)
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->s_high_profile.i2_scalinglist4x4[i4_i][pu1_inv_scan_4x4[i4_j]] =
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                ps_dec->s_high_profile.pi2_scale_mat[i4_i][i4_j];
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* for all 8x8 matrices */
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        for(i4_i = 0; i4_i < 2; i4_i++)
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            for(i4_j = 0; i4_j < 64; i4_j++)
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                ps_dec->s_high_profile.i2_scalinglist8x8[i4_i][gau1_ih264d_inv_scan_prog8x8_cabac[i4_j]] =
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                ps_dec->s_high_profile.pi2_scale_mat[i4_i + 6][i4_j];
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
275