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 * \file isvcd_resamp_svc.c
23*495ae853SAndroid Build Coastguard Worker *
24*495ae853SAndroid Build Coastguard Worker * \brief
25*495ae853SAndroid Build Coastguard Worker * Contains routines that resample for SVC resampling
26*495ae853SAndroid Build Coastguard Worker *
27*495ae853SAndroid Build Coastguard Worker * Detailed_description
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * \date
30*495ae853SAndroid Build Coastguard Worker *
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * \author
33*495ae853SAndroid Build Coastguard Worker **************************************************************************
34*495ae853SAndroid Build Coastguard Worker */
35*495ae853SAndroid Build Coastguard Worker #include <assert.h>
36*495ae853SAndroid Build Coastguard Worker #include <string.h>
37*495ae853SAndroid Build Coastguard Worker
38*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
39*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
40*495ae853SAndroid Build Coastguard Worker #include "isvc_macros.h"
41*495ae853SAndroid Build Coastguard Worker #include "ih264_platform_macros.h"
42*495ae853SAndroid Build Coastguard Worker #include "isvc_intra_resample.h"
43*495ae853SAndroid Build Coastguard Worker #include "ih264_debug.h"
44*495ae853SAndroid Build Coastguard Worker #include "isvc_defs.h"
45*495ae853SAndroid Build Coastguard Worker #include "isvc_structs.h"
46*495ae853SAndroid Build Coastguard Worker
47*495ae853SAndroid Build Coastguard Worker #define NUM_SEGMENTS 16
48*495ae853SAndroid Build Coastguard Worker #define NUM_INTRA_SAMP_FXNS 32
49*495ae853SAndroid Build Coastguard Worker #define INTERPOL_FILTER_SIZE_LUMA 64
50*495ae853SAndroid Build Coastguard Worker #define INTERPOL_FILTER_SIZE_CHROMA 32
51*495ae853SAndroid Build Coastguard Worker
52*495ae853SAndroid Build Coastguard Worker typedef void(PF_INTRA_SAMP_PADDING)(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index,
53*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1,
54*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride,
55*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y,
56*495ae853SAndroid Build Coastguard Worker WORD32 i4_corner_pixel_available);
57*495ae853SAndroid Build Coastguard Worker
58*495ae853SAndroid Build Coastguard Worker static const WORD8 g_ai1_interp_filter_luma[INTERPOL_FILTER_SIZE_LUMA] = {
59*495ae853SAndroid Build Coastguard Worker 0, -1, -2, -3, -3, -4, -4, -3, -3, -3, -2, -1, -1, -1, -1, -1, 32, 32, 31, 30, 28, 26,
60*495ae853SAndroid Build Coastguard Worker 24, 22, 19, 16, 14, 11, 8, 6, 4, 2, 0, 2, 4, 6, 8, 11, 14, 16, 19, 22, 24, 26,
61*495ae853SAndroid Build Coastguard Worker 28, 30, 31, 32, 0, -1, -1, -1, -1, -1, -2, -3, -3, -3, -4, -4, -3, -3, -2, -1};
62*495ae853SAndroid Build Coastguard Worker
63*495ae853SAndroid Build Coastguard Worker static const UWORD8 g_au1_interp_filter_chroma[INTERPOL_FILTER_SIZE_CHROMA] = {
64*495ae853SAndroid Build Coastguard Worker 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2,
65*495ae853SAndroid Build Coastguard Worker 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30};
66*495ae853SAndroid Build Coastguard Worker
67*495ae853SAndroid Build Coastguard Worker static const UWORD32 gu4_valid_segs_lookup[NUM_SEGMENTS] = {
68*495ae853SAndroid Build Coastguard Worker 0x0F000000, 0xCF000000, 0x3F000000, 0xFF000000, 0x0F000000, 0xCF000000, 0x3F000000, 0xFF000000,
69*495ae853SAndroid Build Coastguard Worker 0x0F000000, 0x8F000000, 0x6F000000, 0xEF000000, 0x1F000000, 0x9F000000, 0x7F000000, 0xFF000000};
70*495ae853SAndroid Build Coastguard Worker
71*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
72*495ae853SAndroid Build Coastguard Worker /* */
73*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_copy_data */
74*495ae853SAndroid Build Coastguard Worker /* */
75*495ae853SAndroid Build Coastguard Worker /* Description : this module copies the data from source to destination */
76*495ae853SAndroid Build Coastguard Worker /* the amount of data to be copied is passed as input */
77*495ae853SAndroid Build Coastguard Worker /* */
78*495ae853SAndroid Build Coastguard Worker /* Inputs : pu1_src : pointer to the source buffer */
79*495ae853SAndroid Build Coastguard Worker /* u2_src_stride : source buffer stride */
80*495ae853SAndroid Build Coastguard Worker /* pu1_dst : pointer to the destination buffer */
81*495ae853SAndroid Build Coastguard Worker /* u2_dst_stride : destination buffer stride */
82*495ae853SAndroid Build Coastguard Worker /* u4_num_bytes : number of bytes to be copied */
83*495ae853SAndroid Build Coastguard Worker /* u4_num_lines : number of lines to be copied */
84*495ae853SAndroid Build Coastguard Worker /* Globals : none */
85*495ae853SAndroid Build Coastguard Worker /* Processing : it does a memcpy from source to destination */
86*495ae853SAndroid Build Coastguard Worker /* */
87*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
88*495ae853SAndroid Build Coastguard Worker /* Returns : none */
89*495ae853SAndroid Build Coastguard Worker /* Issues : both buffers are assumed to be 2-D buffers */
90*495ae853SAndroid Build Coastguard Worker /* */
91*495ae853SAndroid Build Coastguard Worker /* Revision History: */
92*495ae853SAndroid Build Coastguard Worker /* */
93*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
94*495ae853SAndroid Build Coastguard Worker /* 29 04 2009 vijayakumar creation */
95*495ae853SAndroid Build Coastguard Worker /* */
96*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
97*495ae853SAndroid Build Coastguard Worker /** \brief performs the 2-D memory transfer */
isvc_copy_data(UWORD8 * pu1_src,WORD32 i4_src_stride,UWORD8 * pu1_dst,WORD32 i4_dst_stride,WORD32 i4_num_bytes,WORD32 i4_num_lines)98*495ae853SAndroid Build Coastguard Worker static void isvc_copy_data(UWORD8 *pu1_src, WORD32 i4_src_stride, UWORD8 *pu1_dst,
99*495ae853SAndroid Build Coastguard Worker WORD32 i4_dst_stride, WORD32 i4_num_bytes, WORD32 i4_num_lines)
100*495ae853SAndroid Build Coastguard Worker {
101*495ae853SAndroid Build Coastguard Worker WORD32 i4_vert_lines;
102*495ae853SAndroid Build Coastguard Worker ASSERT(NULL != pu1_src);
103*495ae853SAndroid Build Coastguard Worker ASSERT(NULL != pu1_dst);
104*495ae853SAndroid Build Coastguard Worker
105*495ae853SAndroid Build Coastguard Worker for(i4_vert_lines = 0; i4_vert_lines < i4_num_lines; i4_vert_lines++)
106*495ae853SAndroid Build Coastguard Worker {
107*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst, pu1_src, i4_num_bytes);
108*495ae853SAndroid Build Coastguard Worker pu1_src += i4_src_stride;
109*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_dst_stride;
110*495ae853SAndroid Build Coastguard Worker }
111*495ae853SAndroid Build Coastguard Worker }
112*495ae853SAndroid Build Coastguard Worker
isvc_copy_data_semiplanr(UWORD8 * pu1_src,WORD32 i4_src_stride,UWORD8 * pu1_dst1,UWORD8 * pu1_dst2,WORD32 i4_dst_stride,WORD32 i4_num_bytes,WORD32 i4_num_lines)113*495ae853SAndroid Build Coastguard Worker static void isvc_copy_data_semiplanr(UWORD8 *pu1_src, WORD32 i4_src_stride, UWORD8 *pu1_dst1,
114*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_dst2, WORD32 i4_dst_stride, WORD32 i4_num_bytes,
115*495ae853SAndroid Build Coastguard Worker WORD32 i4_num_lines)
116*495ae853SAndroid Build Coastguard Worker {
117*495ae853SAndroid Build Coastguard Worker WORD32 i4_vert_lines, u4_i;
118*495ae853SAndroid Build Coastguard Worker
119*495ae853SAndroid Build Coastguard Worker ASSERT(NULL != pu1_src);
120*495ae853SAndroid Build Coastguard Worker ASSERT(NULL != pu1_dst1);
121*495ae853SAndroid Build Coastguard Worker ASSERT(NULL != pu1_dst2);
122*495ae853SAndroid Build Coastguard Worker
123*495ae853SAndroid Build Coastguard Worker for(i4_vert_lines = 0; i4_vert_lines < i4_num_lines; i4_vert_lines++)
124*495ae853SAndroid Build Coastguard Worker {
125*495ae853SAndroid Build Coastguard Worker for(u4_i = 0; u4_i < i4_num_bytes; u4_i++)
126*495ae853SAndroid Build Coastguard Worker {
127*495ae853SAndroid Build Coastguard Worker *(pu1_dst1 + u4_i) = *(pu1_src + (2 * u4_i));
128*495ae853SAndroid Build Coastguard Worker *(pu1_dst2 + u4_i) = *(pu1_src + (2 * u4_i) + 1);
129*495ae853SAndroid Build Coastguard Worker }
130*495ae853SAndroid Build Coastguard Worker pu1_src += i4_src_stride;
131*495ae853SAndroid Build Coastguard Worker pu1_dst1 += i4_dst_stride;
132*495ae853SAndroid Build Coastguard Worker pu1_dst2 += i4_dst_stride;
133*495ae853SAndroid Build Coastguard Worker }
134*495ae853SAndroid Build Coastguard Worker }
135*495ae853SAndroid Build Coastguard Worker
isvc_left_right_padding(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)136*495ae853SAndroid Build Coastguard Worker static void isvc_left_right_padding(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index,
137*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1,
138*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride,
139*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y,
140*495ae853SAndroid Build Coastguard Worker WORD32 i4_corner_pixel_available)
141*495ae853SAndroid Build Coastguard Worker {
142*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx_i;
143*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src, *pu1_dst;
144*495ae853SAndroid Build Coastguard Worker
145*495ae853SAndroid Build Coastguard Worker UNUSED(i1_yd_index);
146*495ae853SAndroid Build Coastguard Worker UNUSED(pu1_refarray_2);
147*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_x);
148*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_y);
149*495ae853SAndroid Build Coastguard Worker UNUSED(i4_corner_pixel_available);
150*495ae853SAndroid Build Coastguard Worker
151*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_refarray_1 + i4_x + (i4_y * i4_refarray_stride);
152*495ae853SAndroid Build Coastguard Worker pu1_src = pu1_dst + i1_xd_index;
153*495ae853SAndroid Build Coastguard Worker
154*495ae853SAndroid Build Coastguard Worker i1_xd_index = MIN(i1_xd_index, MAX_PIX_FILL_LUMA);
155*495ae853SAndroid Build Coastguard Worker u1_seg_wd = MIN(u1_seg_wd, MAX_PIX_FILL_LUMA);
156*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_src - i1_xd_index;
157*495ae853SAndroid Build Coastguard Worker
158*495ae853SAndroid Build Coastguard Worker for(i4_idx_i = 0; i4_idx_i < u1_seg_ht; i4_idx_i++)
159*495ae853SAndroid Build Coastguard Worker {
160*495ae853SAndroid Build Coastguard Worker memset(pu1_dst, *pu1_src, u1_seg_wd);
161*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_refarray_stride;
162*495ae853SAndroid Build Coastguard Worker pu1_src += i4_refarray_stride;
163*495ae853SAndroid Build Coastguard Worker }
164*495ae853SAndroid Build Coastguard Worker }
165*495ae853SAndroid Build Coastguard Worker
isvc_left_right_padding_chroma(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)166*495ae853SAndroid Build Coastguard Worker static void isvc_left_right_padding_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index,
167*495ae853SAndroid Build Coastguard Worker WORD8 i1_yd_index, UWORD8 u1_seg_wd, UWORD8 u1_seg_ht,
168*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_1, UWORD8 *pu1_refarray_2,
169*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_stride, WORD32 i4_mb_adjoin_x,
170*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_y, WORD32 i4_corner_pixel_available)
171*495ae853SAndroid Build Coastguard Worker {
172*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx_i;
173*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_cb, *pu1_dst_cb;
174*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_cr, *pu1_dst_cr;
175*495ae853SAndroid Build Coastguard Worker WORD32 i4_tmp;
176*495ae853SAndroid Build Coastguard Worker
177*495ae853SAndroid Build Coastguard Worker UNUSED(i1_yd_index);
178*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_x);
179*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_y);
180*495ae853SAndroid Build Coastguard Worker UNUSED(i4_corner_pixel_available);
181*495ae853SAndroid Build Coastguard Worker
182*495ae853SAndroid Build Coastguard Worker i4_tmp = i4_x + (i4_y * i4_refarray_stride);
183*495ae853SAndroid Build Coastguard Worker pu1_dst_cb = pu1_refarray_1 + i4_tmp;
184*495ae853SAndroid Build Coastguard Worker pu1_src_cb = pu1_dst_cb + i1_xd_index;
185*495ae853SAndroid Build Coastguard Worker
186*495ae853SAndroid Build Coastguard Worker pu1_dst_cr = pu1_refarray_2 + i4_tmp;
187*495ae853SAndroid Build Coastguard Worker pu1_src_cr = pu1_dst_cr + i1_xd_index;
188*495ae853SAndroid Build Coastguard Worker
189*495ae853SAndroid Build Coastguard Worker i1_xd_index = MIN(i1_xd_index, MAX_PIX_FILL_CHROMA);
190*495ae853SAndroid Build Coastguard Worker u1_seg_wd = MIN(u1_seg_wd, MAX_PIX_FILL_CHROMA);
191*495ae853SAndroid Build Coastguard Worker pu1_dst_cb = pu1_src_cb - i1_xd_index;
192*495ae853SAndroid Build Coastguard Worker pu1_dst_cr = pu1_src_cr - i1_xd_index;
193*495ae853SAndroid Build Coastguard Worker
194*495ae853SAndroid Build Coastguard Worker for(i4_idx_i = 0; i4_idx_i < u1_seg_ht; i4_idx_i++)
195*495ae853SAndroid Build Coastguard Worker {
196*495ae853SAndroid Build Coastguard Worker memset(pu1_dst_cb, *pu1_src_cb, u1_seg_wd);
197*495ae853SAndroid Build Coastguard Worker pu1_dst_cb += i4_refarray_stride;
198*495ae853SAndroid Build Coastguard Worker pu1_src_cb += i4_refarray_stride;
199*495ae853SAndroid Build Coastguard Worker
200*495ae853SAndroid Build Coastguard Worker memset(pu1_dst_cr, *pu1_src_cr, u1_seg_wd);
201*495ae853SAndroid Build Coastguard Worker pu1_dst_cr += i4_refarray_stride;
202*495ae853SAndroid Build Coastguard Worker pu1_src_cr += i4_refarray_stride;
203*495ae853SAndroid Build Coastguard Worker }
204*495ae853SAndroid Build Coastguard Worker }
205*495ae853SAndroid Build Coastguard Worker
isvc_top_bot_padding(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)206*495ae853SAndroid Build Coastguard Worker static void isvc_top_bot_padding(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index,
207*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1,
208*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride,
209*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y,
210*495ae853SAndroid Build Coastguard Worker WORD32 i4_corner_pixel_available)
211*495ae853SAndroid Build Coastguard Worker {
212*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx_i;
213*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src, *pu1_dst;
214*495ae853SAndroid Build Coastguard Worker
215*495ae853SAndroid Build Coastguard Worker UNUSED(i1_xd_index);
216*495ae853SAndroid Build Coastguard Worker UNUSED(pu1_refarray_2);
217*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_x);
218*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_y);
219*495ae853SAndroid Build Coastguard Worker UNUSED(i4_corner_pixel_available);
220*495ae853SAndroid Build Coastguard Worker
221*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_refarray_1 + i4_x + (i4_y * i4_refarray_stride);
222*495ae853SAndroid Build Coastguard Worker pu1_src = pu1_dst + (i1_yd_index * i4_refarray_stride);
223*495ae853SAndroid Build Coastguard Worker
224*495ae853SAndroid Build Coastguard Worker i1_yd_index = MIN(i1_yd_index, MAX_PIX_FILL_LUMA);
225*495ae853SAndroid Build Coastguard Worker u1_seg_ht = MIN(u1_seg_ht, MAX_PIX_FILL_LUMA);
226*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_src - (i1_yd_index * i4_refarray_stride);
227*495ae853SAndroid Build Coastguard Worker
228*495ae853SAndroid Build Coastguard Worker for(i4_idx_i = 0; i4_idx_i < u1_seg_ht; i4_idx_i++)
229*495ae853SAndroid Build Coastguard Worker {
230*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst, pu1_src, u1_seg_wd);
231*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_refarray_stride;
232*495ae853SAndroid Build Coastguard Worker }
233*495ae853SAndroid Build Coastguard Worker }
234*495ae853SAndroid Build Coastguard Worker
isvc_top_bot_padding_chroma(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)235*495ae853SAndroid Build Coastguard Worker static void isvc_top_bot_padding_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index,
236*495ae853SAndroid Build Coastguard Worker WORD8 i1_yd_index, UWORD8 u1_seg_wd, UWORD8 u1_seg_ht,
237*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_1, UWORD8 *pu1_refarray_2,
238*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_stride, WORD32 i4_mb_adjoin_x,
239*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_y, WORD32 i4_corner_pixel_available)
240*495ae853SAndroid Build Coastguard Worker {
241*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx_i;
242*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_cb, *pu1_dst_cb;
243*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_cr, *pu1_dst_cr;
244*495ae853SAndroid Build Coastguard Worker WORD32 i4_tmp;
245*495ae853SAndroid Build Coastguard Worker
246*495ae853SAndroid Build Coastguard Worker UNUSED(i1_xd_index);
247*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_x);
248*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_y);
249*495ae853SAndroid Build Coastguard Worker UNUSED(i4_corner_pixel_available);
250*495ae853SAndroid Build Coastguard Worker
251*495ae853SAndroid Build Coastguard Worker i4_tmp = i4_x + (i4_y * i4_refarray_stride);
252*495ae853SAndroid Build Coastguard Worker pu1_dst_cb = pu1_refarray_1 + i4_tmp;
253*495ae853SAndroid Build Coastguard Worker pu1_dst_cr = pu1_refarray_2 + i4_tmp;
254*495ae853SAndroid Build Coastguard Worker
255*495ae853SAndroid Build Coastguard Worker i4_tmp = (i1_yd_index * i4_refarray_stride);
256*495ae853SAndroid Build Coastguard Worker pu1_src_cb = pu1_dst_cb + i4_tmp;
257*495ae853SAndroid Build Coastguard Worker pu1_src_cr = pu1_dst_cr + i4_tmp;
258*495ae853SAndroid Build Coastguard Worker
259*495ae853SAndroid Build Coastguard Worker i1_yd_index = MIN(i1_yd_index, MAX_PIX_FILL_CHROMA);
260*495ae853SAndroid Build Coastguard Worker u1_seg_ht = MIN(u1_seg_ht, MAX_PIX_FILL_CHROMA);
261*495ae853SAndroid Build Coastguard Worker
262*495ae853SAndroid Build Coastguard Worker i4_tmp = (i1_yd_index * i4_refarray_stride);
263*495ae853SAndroid Build Coastguard Worker pu1_dst_cb = pu1_src_cb - i4_tmp;
264*495ae853SAndroid Build Coastguard Worker
265*495ae853SAndroid Build Coastguard Worker pu1_dst_cr = pu1_src_cr - i4_tmp;
266*495ae853SAndroid Build Coastguard Worker
267*495ae853SAndroid Build Coastguard Worker for(i4_idx_i = 0; i4_idx_i < u1_seg_ht; i4_idx_i++)
268*495ae853SAndroid Build Coastguard Worker {
269*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cb, pu1_src_cb, u1_seg_wd);
270*495ae853SAndroid Build Coastguard Worker pu1_dst_cb += i4_refarray_stride;
271*495ae853SAndroid Build Coastguard Worker
272*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cr, pu1_src_cr, u1_seg_wd);
273*495ae853SAndroid Build Coastguard Worker pu1_dst_cr += i4_refarray_stride;
274*495ae853SAndroid Build Coastguard Worker }
275*495ae853SAndroid Build Coastguard Worker }
276*495ae853SAndroid Build Coastguard Worker
isvc_diag_reconstruction(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)277*495ae853SAndroid Build Coastguard Worker static void isvc_diag_reconstruction(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index,
278*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1,
279*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride,
280*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y,
281*495ae853SAndroid Build Coastguard Worker WORD32 i4_corner_pixel_available)
282*495ae853SAndroid Build Coastguard Worker {
283*495ae853SAndroid Build Coastguard Worker WORD32 i4_i;
284*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_1, *pu1_src_2, *pu1_dst;
285*495ae853SAndroid Build Coastguard Worker UWORD8 u1_filter_delay_buf[18];
286*495ae853SAndroid Build Coastguard Worker UWORD8 u1_out_buf[16];
287*495ae853SAndroid Build Coastguard Worker WORD32 i4_width, i4_height;
288*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_off, i4_y_off;
289*495ae853SAndroid Build Coastguard Worker WORD32 i4_block_size = BLK_SIZE;
290*495ae853SAndroid Build Coastguard Worker
291*495ae853SAndroid Build Coastguard Worker UNUSED(pu1_refarray_2);
292*495ae853SAndroid Build Coastguard Worker
293*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_refarray_1 + i4_x + (i4_y * i4_refarray_stride);
294*495ae853SAndroid Build Coastguard Worker pu1_src_1 = pu1_dst + i1_xd_index;
295*495ae853SAndroid Build Coastguard Worker pu1_src_2 = pu1_dst + (i1_yd_index * i4_refarray_stride);
296*495ae853SAndroid Build Coastguard Worker
297*495ae853SAndroid Build Coastguard Worker i4_width = MAX(u1_seg_wd, (((i4_mb_adjoin_x >> 3) ^ 1) * i4_block_size));
298*495ae853SAndroid Build Coastguard Worker i4_height = MAX(u1_seg_ht, (((i4_mb_adjoin_y >> 4) ^ 1) * i4_block_size));
299*495ae853SAndroid Build Coastguard Worker
300*495ae853SAndroid Build Coastguard Worker i4_x_off = (i4_width - u1_seg_wd);
301*495ae853SAndroid Build Coastguard Worker i4_y_off = (i4_height - u1_seg_ht);
302*495ae853SAndroid Build Coastguard Worker
303*495ae853SAndroid Build Coastguard Worker if(i1_xd_index > 0 && i1_yd_index > 0)
304*495ae853SAndroid Build Coastguard Worker {
305*495ae853SAndroid Build Coastguard Worker /* Quadrant 1 Processing */
306*495ae853SAndroid Build Coastguard Worker
307*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
308*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf[0], pu1_src_2, (i4_width + 1));
309*495ae853SAndroid Build Coastguard Worker for(i4_i = i4_height; i4_i > 0; i4_i--)
310*495ae853SAndroid Build Coastguard Worker {
311*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_width + i4_i] = *pu1_src_1;
312*495ae853SAndroid Build Coastguard Worker pu1_src_1 += i4_refarray_stride;
313*495ae853SAndroid Build Coastguard Worker }
314*495ae853SAndroid Build Coastguard Worker
315*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
316*495ae853SAndroid Build Coastguard Worker {
317*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
318*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_width] =
319*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_width - 1] + u1_filter_delay_buf[i4_width + 1] + 1) >> 1;
320*495ae853SAndroid Build Coastguard Worker }
321*495ae853SAndroid Build Coastguard Worker
322*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
323*495ae853SAndroid Build Coastguard Worker {
324*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
325*495ae853SAndroid Build Coastguard Worker u1_out_buf[i4_i] = ((u1_filter_delay_buf[i4_i]) + (u1_filter_delay_buf[i4_i + 1] * 2) +
326*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_i + 2]) + 2) >>
327*495ae853SAndroid Build Coastguard Worker 2;
328*495ae853SAndroid Build Coastguard Worker }
329*495ae853SAndroid Build Coastguard Worker
330*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
331*495ae853SAndroid Build Coastguard Worker for(i4_i = 1; i4_i <= u1_seg_ht; i4_i++)
332*495ae853SAndroid Build Coastguard Worker {
333*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst, &u1_out_buf[i4_height - i4_i], u1_seg_wd);
334*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_refarray_stride;
335*495ae853SAndroid Build Coastguard Worker }
336*495ae853SAndroid Build Coastguard Worker }
337*495ae853SAndroid Build Coastguard Worker else if(i1_xd_index < 0 && i1_yd_index > 0)
338*495ae853SAndroid Build Coastguard Worker {
339*495ae853SAndroid Build Coastguard Worker /* Quadrant 2 Processing */
340*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
341*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_height + 1); i4_i++)
342*495ae853SAndroid Build Coastguard Worker {
343*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_i] = *pu1_src_1;
344*495ae853SAndroid Build Coastguard Worker pu1_src_1 += i4_refarray_stride;
345*495ae853SAndroid Build Coastguard Worker }
346*495ae853SAndroid Build Coastguard Worker
347*495ae853SAndroid Build Coastguard Worker pu1_src_2 -= i4_x_off;
348*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf[i4_i], pu1_src_2, i4_width);
349*495ae853SAndroid Build Coastguard Worker
350*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
351*495ae853SAndroid Build Coastguard Worker {
352*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
353*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_i - 1] =
354*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_i] + u1_filter_delay_buf[i4_i - 2] + 1) >> 1;
355*495ae853SAndroid Build Coastguard Worker }
356*495ae853SAndroid Build Coastguard Worker
357*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
358*495ae853SAndroid Build Coastguard Worker {
359*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
360*495ae853SAndroid Build Coastguard Worker u1_out_buf[i4_i] = ((u1_filter_delay_buf[i4_i]) + (u1_filter_delay_buf[i4_i + 1] * 2) +
361*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_i + 2]) + 2) >>
362*495ae853SAndroid Build Coastguard Worker 2;
363*495ae853SAndroid Build Coastguard Worker }
364*495ae853SAndroid Build Coastguard Worker
365*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
366*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < u1_seg_ht; i4_i++)
367*495ae853SAndroid Build Coastguard Worker {
368*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst, &u1_out_buf[i4_x_off + i4_i], u1_seg_wd);
369*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_refarray_stride;
370*495ae853SAndroid Build Coastguard Worker }
371*495ae853SAndroid Build Coastguard Worker }
372*495ae853SAndroid Build Coastguard Worker else if(i1_xd_index > 0 && i1_yd_index < 0)
373*495ae853SAndroid Build Coastguard Worker {
374*495ae853SAndroid Build Coastguard Worker /* Quadrant 3 Processing */
375*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
376*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf[0], pu1_src_2, (i4_width + 1));
377*495ae853SAndroid Build Coastguard Worker
378*495ae853SAndroid Build Coastguard Worker pu1_src_1 -= (i4_y_off * i4_refarray_stride);
379*495ae853SAndroid Build Coastguard Worker for(i4_i = 1; i4_i <= i4_height; i4_i++)
380*495ae853SAndroid Build Coastguard Worker {
381*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_width + i4_i] = *pu1_src_1;
382*495ae853SAndroid Build Coastguard Worker pu1_src_1 += i4_refarray_stride;
383*495ae853SAndroid Build Coastguard Worker }
384*495ae853SAndroid Build Coastguard Worker
385*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
386*495ae853SAndroid Build Coastguard Worker {
387*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
388*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_width] =
389*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_width - 1] + u1_filter_delay_buf[i4_width + 1] + 1) >> 1;
390*495ae853SAndroid Build Coastguard Worker }
391*495ae853SAndroid Build Coastguard Worker
392*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
393*495ae853SAndroid Build Coastguard Worker {
394*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
395*495ae853SAndroid Build Coastguard Worker u1_out_buf[i4_i] = ((u1_filter_delay_buf[i4_i]) + (u1_filter_delay_buf[i4_i + 1] * 2) +
396*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_i + 2]) + 2) >>
397*495ae853SAndroid Build Coastguard Worker 2;
398*495ae853SAndroid Build Coastguard Worker }
399*495ae853SAndroid Build Coastguard Worker
400*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
401*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < u1_seg_ht; i4_i++)
402*495ae853SAndroid Build Coastguard Worker {
403*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst, &u1_out_buf[i4_y_off + i4_i], u1_seg_wd);
404*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_refarray_stride;
405*495ae853SAndroid Build Coastguard Worker }
406*495ae853SAndroid Build Coastguard Worker }
407*495ae853SAndroid Build Coastguard Worker else
408*495ae853SAndroid Build Coastguard Worker {
409*495ae853SAndroid Build Coastguard Worker /* Quadrant 4 Processing */
410*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
411*495ae853SAndroid Build Coastguard Worker pu1_src_1 += ((u1_seg_ht - 1) * i4_refarray_stride);
412*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i <= i4_height; i4_i++)
413*495ae853SAndroid Build Coastguard Worker {
414*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_i] = *pu1_src_1;
415*495ae853SAndroid Build Coastguard Worker pu1_src_1 -= i4_refarray_stride;
416*495ae853SAndroid Build Coastguard Worker }
417*495ae853SAndroid Build Coastguard Worker
418*495ae853SAndroid Build Coastguard Worker pu1_src_2 -= i4_x_off;
419*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf[i4_i], pu1_src_2, i4_width);
420*495ae853SAndroid Build Coastguard Worker
421*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
422*495ae853SAndroid Build Coastguard Worker {
423*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
424*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf[i4_i - 1] =
425*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_i] + u1_filter_delay_buf[i4_i - 2] + 1) >> 1;
426*495ae853SAndroid Build Coastguard Worker }
427*495ae853SAndroid Build Coastguard Worker
428*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
429*495ae853SAndroid Build Coastguard Worker {
430*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
431*495ae853SAndroid Build Coastguard Worker u1_out_buf[i4_i] = ((u1_filter_delay_buf[i4_i]) + (u1_filter_delay_buf[i4_i + 1] * 2) +
432*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf[i4_i + 2]) + 2) >>
433*495ae853SAndroid Build Coastguard Worker 2;
434*495ae853SAndroid Build Coastguard Worker }
435*495ae853SAndroid Build Coastguard Worker
436*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
437*495ae853SAndroid Build Coastguard Worker for(i4_i = 1; i4_i <= u1_seg_ht; i4_i++)
438*495ae853SAndroid Build Coastguard Worker {
439*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst, &u1_out_buf[(u1_seg_ht + i4_x_off) - i4_i], u1_seg_wd);
440*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_refarray_stride;
441*495ae853SAndroid Build Coastguard Worker }
442*495ae853SAndroid Build Coastguard Worker }
443*495ae853SAndroid Build Coastguard Worker }
444*495ae853SAndroid Build Coastguard Worker
isvc_diag_reconstruction_chroma(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)445*495ae853SAndroid Build Coastguard Worker static void isvc_diag_reconstruction_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index,
446*495ae853SAndroid Build Coastguard Worker WORD8 i1_yd_index, UWORD8 u1_seg_wd, UWORD8 u1_seg_ht,
447*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_1, UWORD8 *pu1_refarray_2,
448*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_stride, WORD32 i4_mb_adjoin_x,
449*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_y, WORD32 i4_corner_pixel_available)
450*495ae853SAndroid Build Coastguard Worker {
451*495ae853SAndroid Build Coastguard Worker WORD32 i4_i;
452*495ae853SAndroid Build Coastguard Worker UWORD8 u1_filter_delay_buf_cb[18], u1_filter_delay_buf_cr[18];
453*495ae853SAndroid Build Coastguard Worker UWORD8 u1_out_buf_cb[16], u1_out_buf_cr[16];
454*495ae853SAndroid Build Coastguard Worker WORD32 i4_width, i4_height;
455*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_off, i4_y_off;
456*495ae853SAndroid Build Coastguard Worker WORD32 i4_block_size = BLK_SIZE >> 1;
457*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_1_cb, *pu1_src_2_cb, *pu1_dst_cb;
458*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_1_cr, *pu1_src_2_cr, *pu1_dst_cr;
459*495ae853SAndroid Build Coastguard Worker WORD32 i4_tmp;
460*495ae853SAndroid Build Coastguard Worker
461*495ae853SAndroid Build Coastguard Worker i4_tmp = i4_x + (i4_y * i4_refarray_stride);
462*495ae853SAndroid Build Coastguard Worker pu1_dst_cb = pu1_refarray_1 + i4_tmp;
463*495ae853SAndroid Build Coastguard Worker pu1_dst_cr = pu1_refarray_2 + i4_tmp;
464*495ae853SAndroid Build Coastguard Worker
465*495ae853SAndroid Build Coastguard Worker pu1_src_1_cb = pu1_dst_cb + i1_xd_index;
466*495ae853SAndroid Build Coastguard Worker pu1_src_1_cr = pu1_dst_cr + i1_xd_index;
467*495ae853SAndroid Build Coastguard Worker
468*495ae853SAndroid Build Coastguard Worker i4_tmp = (i1_yd_index * i4_refarray_stride);
469*495ae853SAndroid Build Coastguard Worker pu1_src_2_cb = pu1_dst_cb + i4_tmp;
470*495ae853SAndroid Build Coastguard Worker pu1_src_2_cr = pu1_dst_cr + i4_tmp;
471*495ae853SAndroid Build Coastguard Worker
472*495ae853SAndroid Build Coastguard Worker i4_width = MAX(u1_seg_wd, (((i4_mb_adjoin_x >> 3) ^ 1) * i4_block_size));
473*495ae853SAndroid Build Coastguard Worker i4_height = MAX(u1_seg_ht, (((i4_mb_adjoin_y >> 4) ^ 1) * i4_block_size));
474*495ae853SAndroid Build Coastguard Worker
475*495ae853SAndroid Build Coastguard Worker i4_x_off = (i4_width - u1_seg_wd);
476*495ae853SAndroid Build Coastguard Worker i4_y_off = (i4_height - u1_seg_ht);
477*495ae853SAndroid Build Coastguard Worker
478*495ae853SAndroid Build Coastguard Worker if(i1_xd_index < 0 && i1_yd_index > 0)
479*495ae853SAndroid Build Coastguard Worker {
480*495ae853SAndroid Build Coastguard Worker /* Quadrant 1 Processing */
481*495ae853SAndroid Build Coastguard Worker
482*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
483*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_height + 1); i4_i++)
484*495ae853SAndroid Build Coastguard Worker {
485*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_i] = *pu1_src_1_cb;
486*495ae853SAndroid Build Coastguard Worker pu1_src_1_cb += i4_refarray_stride;
487*495ae853SAndroid Build Coastguard Worker
488*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_i] = *pu1_src_1_cr;
489*495ae853SAndroid Build Coastguard Worker pu1_src_1_cr += i4_refarray_stride;
490*495ae853SAndroid Build Coastguard Worker }
491*495ae853SAndroid Build Coastguard Worker
492*495ae853SAndroid Build Coastguard Worker pu1_src_2_cb -= i4_x_off;
493*495ae853SAndroid Build Coastguard Worker pu1_src_2_cr -= i4_x_off;
494*495ae853SAndroid Build Coastguard Worker
495*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cb[i4_i], pu1_src_2_cb, i4_width);
496*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cr[i4_i], pu1_src_2_cr, i4_width);
497*495ae853SAndroid Build Coastguard Worker
498*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
499*495ae853SAndroid Build Coastguard Worker {
500*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
501*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_i - 1] =
502*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_i] + u1_filter_delay_buf_cb[i4_i - 2] + 1) >> 1;
503*495ae853SAndroid Build Coastguard Worker
504*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_i - 1] =
505*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_i] + u1_filter_delay_buf_cr[i4_i - 2] + 1) >> 1;
506*495ae853SAndroid Build Coastguard Worker }
507*495ae853SAndroid Build Coastguard Worker
508*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
509*495ae853SAndroid Build Coastguard Worker {
510*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
511*495ae853SAndroid Build Coastguard Worker u1_out_buf_cb[i4_i] =
512*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cb[i4_i]) + (u1_filter_delay_buf_cb[i4_i + 1] * 2) +
513*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_i + 2]) + 2) >>
514*495ae853SAndroid Build Coastguard Worker 2;
515*495ae853SAndroid Build Coastguard Worker
516*495ae853SAndroid Build Coastguard Worker u1_out_buf_cr[i4_i] =
517*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cr[i4_i]) + (u1_filter_delay_buf_cr[i4_i + 1] * 2) +
518*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_i + 2]) + 2) >>
519*495ae853SAndroid Build Coastguard Worker 2;
520*495ae853SAndroid Build Coastguard Worker }
521*495ae853SAndroid Build Coastguard Worker
522*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
523*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < u1_seg_ht; i4_i++)
524*495ae853SAndroid Build Coastguard Worker {
525*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cb, &u1_out_buf_cb[i4_x_off + i4_i], u1_seg_wd);
526*495ae853SAndroid Build Coastguard Worker pu1_dst_cb += i4_refarray_stride;
527*495ae853SAndroid Build Coastguard Worker
528*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cr, &u1_out_buf_cr[i4_x_off + i4_i], u1_seg_wd);
529*495ae853SAndroid Build Coastguard Worker pu1_dst_cr += i4_refarray_stride;
530*495ae853SAndroid Build Coastguard Worker }
531*495ae853SAndroid Build Coastguard Worker }
532*495ae853SAndroid Build Coastguard Worker else if(i1_xd_index > 0 && i1_yd_index > 0)
533*495ae853SAndroid Build Coastguard Worker {
534*495ae853SAndroid Build Coastguard Worker /* Quadrant 2 Processing */
535*495ae853SAndroid Build Coastguard Worker
536*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
537*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cb[0], pu1_src_2_cb, (i4_width + 1));
538*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cr[0], pu1_src_2_cr, (i4_width + 1));
539*495ae853SAndroid Build Coastguard Worker
540*495ae853SAndroid Build Coastguard Worker for(i4_i = i4_height; i4_i > 0; i4_i--)
541*495ae853SAndroid Build Coastguard Worker {
542*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_width + i4_i] = *pu1_src_1_cb;
543*495ae853SAndroid Build Coastguard Worker pu1_src_1_cb += i4_refarray_stride;
544*495ae853SAndroid Build Coastguard Worker
545*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_width + i4_i] = *pu1_src_1_cr;
546*495ae853SAndroid Build Coastguard Worker pu1_src_1_cr += i4_refarray_stride;
547*495ae853SAndroid Build Coastguard Worker }
548*495ae853SAndroid Build Coastguard Worker
549*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
550*495ae853SAndroid Build Coastguard Worker {
551*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
552*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_width] =
553*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_width - 1] + u1_filter_delay_buf_cb[i4_width + 1] + 1) >>
554*495ae853SAndroid Build Coastguard Worker 1;
555*495ae853SAndroid Build Coastguard Worker
556*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_width] =
557*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_width - 1] + u1_filter_delay_buf_cr[i4_width + 1] + 1) >>
558*495ae853SAndroid Build Coastguard Worker 1;
559*495ae853SAndroid Build Coastguard Worker }
560*495ae853SAndroid Build Coastguard Worker
561*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
562*495ae853SAndroid Build Coastguard Worker {
563*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
564*495ae853SAndroid Build Coastguard Worker u1_out_buf_cb[i4_i] =
565*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cb[i4_i]) + (u1_filter_delay_buf_cb[i4_i + 1] * 2) +
566*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_i + 2]) + 2) >>
567*495ae853SAndroid Build Coastguard Worker 2;
568*495ae853SAndroid Build Coastguard Worker
569*495ae853SAndroid Build Coastguard Worker u1_out_buf_cr[i4_i] =
570*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cr[i4_i]) + (u1_filter_delay_buf_cr[i4_i + 1] * 2) +
571*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_i + 2]) + 2) >>
572*495ae853SAndroid Build Coastguard Worker 2;
573*495ae853SAndroid Build Coastguard Worker }
574*495ae853SAndroid Build Coastguard Worker
575*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
576*495ae853SAndroid Build Coastguard Worker for(i4_i = 1; i4_i <= u1_seg_ht; i4_i++)
577*495ae853SAndroid Build Coastguard Worker {
578*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cb, &u1_out_buf_cb[i4_height - i4_i], u1_seg_wd);
579*495ae853SAndroid Build Coastguard Worker pu1_dst_cb += i4_refarray_stride;
580*495ae853SAndroid Build Coastguard Worker
581*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cr, &u1_out_buf_cr[i4_height - i4_i], u1_seg_wd);
582*495ae853SAndroid Build Coastguard Worker pu1_dst_cr += i4_refarray_stride;
583*495ae853SAndroid Build Coastguard Worker }
584*495ae853SAndroid Build Coastguard Worker }
585*495ae853SAndroid Build Coastguard Worker else if(i1_xd_index > 0 && i1_yd_index < 0)
586*495ae853SAndroid Build Coastguard Worker {
587*495ae853SAndroid Build Coastguard Worker /* Quadrant 3 Processing */
588*495ae853SAndroid Build Coastguard Worker
589*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
590*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cb[0], pu1_src_2_cb, (i4_width + 1));
591*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cr[0], pu1_src_2_cr, (i4_width + 1));
592*495ae853SAndroid Build Coastguard Worker
593*495ae853SAndroid Build Coastguard Worker i4_tmp = (i4_y_off * i4_refarray_stride);
594*495ae853SAndroid Build Coastguard Worker pu1_src_1_cb -= i4_tmp;
595*495ae853SAndroid Build Coastguard Worker pu1_src_1_cr -= i4_tmp;
596*495ae853SAndroid Build Coastguard Worker for(i4_i = 1; i4_i <= i4_height; i4_i++)
597*495ae853SAndroid Build Coastguard Worker {
598*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_width + i4_i] = *pu1_src_1_cb;
599*495ae853SAndroid Build Coastguard Worker pu1_src_1_cb += i4_refarray_stride;
600*495ae853SAndroid Build Coastguard Worker
601*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_width + i4_i] = *pu1_src_1_cr;
602*495ae853SAndroid Build Coastguard Worker pu1_src_1_cr += i4_refarray_stride;
603*495ae853SAndroid Build Coastguard Worker }
604*495ae853SAndroid Build Coastguard Worker
605*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
606*495ae853SAndroid Build Coastguard Worker {
607*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
608*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_width] =
609*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_width - 1] + u1_filter_delay_buf_cb[i4_width + 1] + 1) >>
610*495ae853SAndroid Build Coastguard Worker 1;
611*495ae853SAndroid Build Coastguard Worker
612*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_width] =
613*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_width - 1] + u1_filter_delay_buf_cr[i4_width + 1] + 1) >>
614*495ae853SAndroid Build Coastguard Worker 1;
615*495ae853SAndroid Build Coastguard Worker }
616*495ae853SAndroid Build Coastguard Worker
617*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
618*495ae853SAndroid Build Coastguard Worker {
619*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
620*495ae853SAndroid Build Coastguard Worker u1_out_buf_cb[i4_i] =
621*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cb[i4_i]) + (u1_filter_delay_buf_cb[i4_i + 1] * 2) +
622*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_i + 2]) + 2) >>
623*495ae853SAndroid Build Coastguard Worker 2;
624*495ae853SAndroid Build Coastguard Worker
625*495ae853SAndroid Build Coastguard Worker u1_out_buf_cr[i4_i] =
626*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cr[i4_i]) + (u1_filter_delay_buf_cr[i4_i + 1] * 2) +
627*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_i + 2]) + 2) >>
628*495ae853SAndroid Build Coastguard Worker 2;
629*495ae853SAndroid Build Coastguard Worker }
630*495ae853SAndroid Build Coastguard Worker
631*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
632*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < u1_seg_ht; i4_i++)
633*495ae853SAndroid Build Coastguard Worker {
634*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cb, &u1_out_buf_cb[i4_y_off + i4_i], u1_seg_wd);
635*495ae853SAndroid Build Coastguard Worker pu1_dst_cb += i4_refarray_stride;
636*495ae853SAndroid Build Coastguard Worker
637*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cr, &u1_out_buf_cr[i4_y_off + i4_i], u1_seg_wd);
638*495ae853SAndroid Build Coastguard Worker pu1_dst_cr += i4_refarray_stride;
639*495ae853SAndroid Build Coastguard Worker }
640*495ae853SAndroid Build Coastguard Worker }
641*495ae853SAndroid Build Coastguard Worker else
642*495ae853SAndroid Build Coastguard Worker {
643*495ae853SAndroid Build Coastguard Worker /* Quadrant 4 Processing */
644*495ae853SAndroid Build Coastguard Worker
645*495ae853SAndroid Build Coastguard Worker /* load the pixel in the filter delay buffer */
646*495ae853SAndroid Build Coastguard Worker i4_tmp = ((u1_seg_ht - 1) * i4_refarray_stride);
647*495ae853SAndroid Build Coastguard Worker pu1_src_1_cb += i4_tmp;
648*495ae853SAndroid Build Coastguard Worker pu1_src_1_cr += i4_tmp;
649*495ae853SAndroid Build Coastguard Worker
650*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i <= i4_height; i4_i++)
651*495ae853SAndroid Build Coastguard Worker {
652*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_i] = *pu1_src_1_cb;
653*495ae853SAndroid Build Coastguard Worker pu1_src_1_cb -= i4_refarray_stride;
654*495ae853SAndroid Build Coastguard Worker
655*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_i] = *pu1_src_1_cr;
656*495ae853SAndroid Build Coastguard Worker pu1_src_1_cr -= i4_refarray_stride;
657*495ae853SAndroid Build Coastguard Worker }
658*495ae853SAndroid Build Coastguard Worker
659*495ae853SAndroid Build Coastguard Worker pu1_src_2_cb -= i4_x_off;
660*495ae853SAndroid Build Coastguard Worker pu1_src_2_cr -= i4_x_off;
661*495ae853SAndroid Build Coastguard Worker
662*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cb[i4_i], pu1_src_2_cb, i4_width);
663*495ae853SAndroid Build Coastguard Worker memcpy(&u1_filter_delay_buf_cr[i4_i], pu1_src_2_cr, i4_width);
664*495ae853SAndroid Build Coastguard Worker
665*495ae853SAndroid Build Coastguard Worker if(0 == i4_corner_pixel_available)
666*495ae853SAndroid Build Coastguard Worker {
667*495ae853SAndroid Build Coastguard Worker /* interpolate the unavailable corner pixel */
668*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cb[i4_i - 1] =
669*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_i] + u1_filter_delay_buf_cb[i4_i - 2] + 1) >> 1;
670*495ae853SAndroid Build Coastguard Worker
671*495ae853SAndroid Build Coastguard Worker u1_filter_delay_buf_cr[i4_i - 1] =
672*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_i] + u1_filter_delay_buf_cr[i4_i - 2] + 1) >> 1;
673*495ae853SAndroid Build Coastguard Worker }
674*495ae853SAndroid Build Coastguard Worker
675*495ae853SAndroid Build Coastguard Worker for(i4_i = 0; i4_i < (i4_width + i4_height - 1); i4_i++)
676*495ae853SAndroid Build Coastguard Worker {
677*495ae853SAndroid Build Coastguard Worker /* get the filtered output */
678*495ae853SAndroid Build Coastguard Worker u1_out_buf_cb[i4_i] =
679*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cb[i4_i]) + (u1_filter_delay_buf_cb[i4_i + 1] * 2) +
680*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cb[i4_i + 2]) + 2) >>
681*495ae853SAndroid Build Coastguard Worker 2;
682*495ae853SAndroid Build Coastguard Worker
683*495ae853SAndroid Build Coastguard Worker u1_out_buf_cr[i4_i] =
684*495ae853SAndroid Build Coastguard Worker ((u1_filter_delay_buf_cr[i4_i]) + (u1_filter_delay_buf_cr[i4_i + 1] * 2) +
685*495ae853SAndroid Build Coastguard Worker (u1_filter_delay_buf_cr[i4_i + 2]) + 2) >>
686*495ae853SAndroid Build Coastguard Worker 2;
687*495ae853SAndroid Build Coastguard Worker }
688*495ae853SAndroid Build Coastguard Worker
689*495ae853SAndroid Build Coastguard Worker /* fill the segment with diagonal reconstructed output */
690*495ae853SAndroid Build Coastguard Worker for(i4_i = 1; i4_i <= u1_seg_ht; i4_i++)
691*495ae853SAndroid Build Coastguard Worker {
692*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cb, &u1_out_buf_cb[(u1_seg_ht + i4_x_off) - i4_i], u1_seg_wd);
693*495ae853SAndroid Build Coastguard Worker pu1_dst_cb += i4_refarray_stride;
694*495ae853SAndroid Build Coastguard Worker
695*495ae853SAndroid Build Coastguard Worker memcpy(pu1_dst_cr, &u1_out_buf_cr[(u1_seg_ht + i4_x_off) - i4_i], u1_seg_wd);
696*495ae853SAndroid Build Coastguard Worker pu1_dst_cr += i4_refarray_stride;
697*495ae853SAndroid Build Coastguard Worker }
698*495ae853SAndroid Build Coastguard Worker }
699*495ae853SAndroid Build Coastguard Worker }
700*495ae853SAndroid Build Coastguard Worker
isvc_diag_padding(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)701*495ae853SAndroid Build Coastguard Worker static void isvc_diag_padding(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index,
702*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1,
703*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride,
704*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y,
705*495ae853SAndroid Build Coastguard Worker WORD32 i4_corner_pixel_available)
706*495ae853SAndroid Build Coastguard Worker
707*495ae853SAndroid Build Coastguard Worker {
708*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx_i;
709*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src, *pu1_dst;
710*495ae853SAndroid Build Coastguard Worker
711*495ae853SAndroid Build Coastguard Worker UNUSED(pu1_refarray_2);
712*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_x);
713*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_y);
714*495ae853SAndroid Build Coastguard Worker UNUSED(i4_corner_pixel_available);
715*495ae853SAndroid Build Coastguard Worker
716*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_refarray_1 + i4_x + (i4_y * i4_refarray_stride);
717*495ae853SAndroid Build Coastguard Worker pu1_src = pu1_dst + i1_xd_index + (i1_yd_index * i4_refarray_stride);
718*495ae853SAndroid Build Coastguard Worker
719*495ae853SAndroid Build Coastguard Worker i1_xd_index = MIN(i1_xd_index, MAX_PIX_FILL_LUMA);
720*495ae853SAndroid Build Coastguard Worker u1_seg_wd = MIN(u1_seg_wd, MAX_PIX_FILL_LUMA);
721*495ae853SAndroid Build Coastguard Worker
722*495ae853SAndroid Build Coastguard Worker i1_yd_index = MIN(i1_yd_index, MAX_PIX_FILL_LUMA);
723*495ae853SAndroid Build Coastguard Worker u1_seg_ht = MIN(u1_seg_ht, MAX_PIX_FILL_LUMA);
724*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_src - i1_xd_index - (i1_yd_index * i4_refarray_stride);
725*495ae853SAndroid Build Coastguard Worker
726*495ae853SAndroid Build Coastguard Worker for(i4_idx_i = 0; i4_idx_i < u1_seg_ht; i4_idx_i++)
727*495ae853SAndroid Build Coastguard Worker {
728*495ae853SAndroid Build Coastguard Worker memset(pu1_dst, *pu1_src, u1_seg_wd);
729*495ae853SAndroid Build Coastguard Worker pu1_dst += i4_refarray_stride;
730*495ae853SAndroid Build Coastguard Worker }
731*495ae853SAndroid Build Coastguard Worker }
732*495ae853SAndroid Build Coastguard Worker
isvc_diag_padding_chroma(WORD32 i4_x,WORD32 i4_y,WORD8 i1_xd_index,WORD8 i1_yd_index,UWORD8 u1_seg_wd,UWORD8 u1_seg_ht,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_mb_adjoin_x,WORD32 i4_mb_adjoin_y,WORD32 i4_corner_pixel_available)733*495ae853SAndroid Build Coastguard Worker static void isvc_diag_padding_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index,
734*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1,
735*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride,
736*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y,
737*495ae853SAndroid Build Coastguard Worker WORD32 i4_corner_pixel_available)
738*495ae853SAndroid Build Coastguard Worker {
739*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx_i;
740*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_cb, *pu1_dst_cb;
741*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src_cr, *pu1_dst_cr;
742*495ae853SAndroid Build Coastguard Worker WORD32 i4_tmp;
743*495ae853SAndroid Build Coastguard Worker
744*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_x);
745*495ae853SAndroid Build Coastguard Worker UNUSED(i4_mb_adjoin_y);
746*495ae853SAndroid Build Coastguard Worker UNUSED(i4_corner_pixel_available);
747*495ae853SAndroid Build Coastguard Worker
748*495ae853SAndroid Build Coastguard Worker i4_tmp = i4_x + (i4_y * i4_refarray_stride);
749*495ae853SAndroid Build Coastguard Worker pu1_dst_cb = pu1_refarray_1 + i4_tmp;
750*495ae853SAndroid Build Coastguard Worker pu1_dst_cr = pu1_refarray_2 + i4_tmp;
751*495ae853SAndroid Build Coastguard Worker
752*495ae853SAndroid Build Coastguard Worker i4_tmp = i1_xd_index + (i1_yd_index * i4_refarray_stride);
753*495ae853SAndroid Build Coastguard Worker pu1_src_cb = pu1_dst_cb + i4_tmp;
754*495ae853SAndroid Build Coastguard Worker pu1_src_cr = pu1_dst_cr + i4_tmp;
755*495ae853SAndroid Build Coastguard Worker
756*495ae853SAndroid Build Coastguard Worker i1_xd_index = MIN(i1_xd_index, MAX_PIX_FILL_LUMA);
757*495ae853SAndroid Build Coastguard Worker u1_seg_wd = MIN(u1_seg_wd, MAX_PIX_FILL_LUMA);
758*495ae853SAndroid Build Coastguard Worker
759*495ae853SAndroid Build Coastguard Worker i1_yd_index = MIN(i1_yd_index, MAX_PIX_FILL_LUMA);
760*495ae853SAndroid Build Coastguard Worker u1_seg_ht = MIN(u1_seg_ht, MAX_PIX_FILL_LUMA);
761*495ae853SAndroid Build Coastguard Worker
762*495ae853SAndroid Build Coastguard Worker i4_tmp = (i1_xd_index + (i1_yd_index * i4_refarray_stride));
763*495ae853SAndroid Build Coastguard Worker pu1_dst_cb = pu1_src_cb - i4_tmp;
764*495ae853SAndroid Build Coastguard Worker pu1_dst_cr = pu1_src_cr - i4_tmp;
765*495ae853SAndroid Build Coastguard Worker
766*495ae853SAndroid Build Coastguard Worker for(i4_idx_i = 0; i4_idx_i < u1_seg_ht; i4_idx_i++)
767*495ae853SAndroid Build Coastguard Worker {
768*495ae853SAndroid Build Coastguard Worker memset(pu1_dst_cb, *pu1_src_cb, u1_seg_wd);
769*495ae853SAndroid Build Coastguard Worker pu1_dst_cb += i4_refarray_stride;
770*495ae853SAndroid Build Coastguard Worker
771*495ae853SAndroid Build Coastguard Worker memset(pu1_dst_cr, *pu1_src_cr, u1_seg_wd);
772*495ae853SAndroid Build Coastguard Worker pu1_dst_cr += i4_refarray_stride;
773*495ae853SAndroid Build Coastguard Worker }
774*495ae853SAndroid Build Coastguard Worker }
775*495ae853SAndroid Build Coastguard Worker
776*495ae853SAndroid Build Coastguard Worker static PF_INTRA_SAMP_PADDING *gpf_lookup_fxns_luma[NUM_INTRA_SAMP_FXNS] = {
777*495ae853SAndroid Build Coastguard Worker NULL,
778*495ae853SAndroid Build Coastguard Worker NULL,
779*495ae853SAndroid Build Coastguard Worker NULL,
780*495ae853SAndroid Build Coastguard Worker NULL,
781*495ae853SAndroid Build Coastguard Worker NULL,
782*495ae853SAndroid Build Coastguard Worker NULL,
783*495ae853SAndroid Build Coastguard Worker NULL,
784*495ae853SAndroid Build Coastguard Worker NULL,
785*495ae853SAndroid Build Coastguard Worker NULL,
786*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding,
787*495ae853SAndroid Build Coastguard Worker NULL,
788*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction,
789*495ae853SAndroid Build Coastguard Worker NULL,
790*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding,
791*495ae853SAndroid Build Coastguard Worker NULL,
792*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction,
793*495ae853SAndroid Build Coastguard Worker NULL,
794*495ae853SAndroid Build Coastguard Worker NULL,
795*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding,
796*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction,
797*495ae853SAndroid Build Coastguard Worker NULL,
798*495ae853SAndroid Build Coastguard Worker NULL,
799*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding,
800*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction,
801*495ae853SAndroid Build Coastguard Worker NULL,
802*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding,
803*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding,
804*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction,
805*495ae853SAndroid Build Coastguard Worker &isvc_diag_padding,
806*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding,
807*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding,
808*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction,
809*495ae853SAndroid Build Coastguard Worker };
810*495ae853SAndroid Build Coastguard Worker
811*495ae853SAndroid Build Coastguard Worker static PF_INTRA_SAMP_PADDING *gpf_lookup_fxns_chroma[NUM_INTRA_SAMP_FXNS] = {
812*495ae853SAndroid Build Coastguard Worker NULL,
813*495ae853SAndroid Build Coastguard Worker NULL,
814*495ae853SAndroid Build Coastguard Worker NULL,
815*495ae853SAndroid Build Coastguard Worker NULL,
816*495ae853SAndroid Build Coastguard Worker NULL,
817*495ae853SAndroid Build Coastguard Worker NULL,
818*495ae853SAndroid Build Coastguard Worker NULL,
819*495ae853SAndroid Build Coastguard Worker NULL,
820*495ae853SAndroid Build Coastguard Worker NULL,
821*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding_chroma,
822*495ae853SAndroid Build Coastguard Worker NULL,
823*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction_chroma,
824*495ae853SAndroid Build Coastguard Worker NULL,
825*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding_chroma,
826*495ae853SAndroid Build Coastguard Worker NULL,
827*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction_chroma,
828*495ae853SAndroid Build Coastguard Worker NULL,
829*495ae853SAndroid Build Coastguard Worker NULL,
830*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding_chroma,
831*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction_chroma,
832*495ae853SAndroid Build Coastguard Worker NULL,
833*495ae853SAndroid Build Coastguard Worker NULL,
834*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding_chroma,
835*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction_chroma,
836*495ae853SAndroid Build Coastguard Worker NULL,
837*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding_chroma,
838*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding_chroma,
839*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction_chroma,
840*495ae853SAndroid Build Coastguard Worker &isvc_diag_padding_chroma,
841*495ae853SAndroid Build Coastguard Worker &isvc_left_right_padding_chroma,
842*495ae853SAndroid Build Coastguard Worker &isvc_top_bot_padding_chroma,
843*495ae853SAndroid Build Coastguard Worker &isvc_diag_reconstruction_chroma,
844*495ae853SAndroid Build Coastguard Worker };
845*495ae853SAndroid Build Coastguard Worker
isvc_get_ref_layer_avlblty_dyadic(WORD8 * pi1_ref_mb_modes,WORD32 i4_ref_mode_stride,WORD32 i4_element_size,WORD32 i4_ref_mb_x,WORD32 i4_ref_mb_y,WORD32 * pi4_avlblty,WORD8 i1_curr_slice_id,WORD8 i1_cons_intr_samp_flag)846*495ae853SAndroid Build Coastguard Worker static void isvc_get_ref_layer_avlblty_dyadic(WORD8 *pi1_ref_mb_modes, WORD32 i4_ref_mode_stride,
847*495ae853SAndroid Build Coastguard Worker WORD32 i4_element_size, WORD32 i4_ref_mb_x,
848*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_mb_y, WORD32 *pi4_avlblty,
849*495ae853SAndroid Build Coastguard Worker WORD8 i1_curr_slice_id, WORD8 i1_cons_intr_samp_flag)
850*495ae853SAndroid Build Coastguard Worker {
851*495ae853SAndroid Build Coastguard Worker WORD8 i1_mb_mode;
852*495ae853SAndroid Build Coastguard Worker
853*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_ref_mb_y * i4_ref_mode_stride * i4_element_size);
854*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_ref_mb_x * i4_element_size);
855*495ae853SAndroid Build Coastguard Worker i1_mb_mode = *pi1_ref_mb_modes;
856*495ae853SAndroid Build Coastguard Worker i1_mb_mode = (i1_mb_mode < 0) ? i1_mb_mode : SVC_EXTRACT_MB_MODE(*pi1_ref_mb_modes);
857*495ae853SAndroid Build Coastguard Worker
858*495ae853SAndroid Build Coastguard Worker if(i1_mb_mode <= SVC_INTER_MB)
859*495ae853SAndroid Build Coastguard Worker {
860*495ae853SAndroid Build Coastguard Worker *pi4_avlblty = 0;
861*495ae853SAndroid Build Coastguard Worker }
862*495ae853SAndroid Build Coastguard Worker else
863*495ae853SAndroid Build Coastguard Worker {
864*495ae853SAndroid Build Coastguard Worker *pi4_avlblty = 1;
865*495ae853SAndroid Build Coastguard Worker }
866*495ae853SAndroid Build Coastguard Worker
867*495ae853SAndroid Build Coastguard Worker if(1 == i1_cons_intr_samp_flag)
868*495ae853SAndroid Build Coastguard Worker {
869*495ae853SAndroid Build Coastguard Worker if(1 == *pi4_avlblty)
870*495ae853SAndroid Build Coastguard Worker {
871*495ae853SAndroid Build Coastguard Worker if(i1_mb_mode != i1_curr_slice_id)
872*495ae853SAndroid Build Coastguard Worker {
873*495ae853SAndroid Build Coastguard Worker *pi4_avlblty = 0;
874*495ae853SAndroid Build Coastguard Worker }
875*495ae853SAndroid Build Coastguard Worker }
876*495ae853SAndroid Build Coastguard Worker }
877*495ae853SAndroid Build Coastguard Worker }
878*495ae853SAndroid Build Coastguard Worker
879*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
880*495ae853SAndroid Build Coastguard Worker /* */
881*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_diagonal_construct_dyadic */
882*495ae853SAndroid Build Coastguard Worker /* */
883*495ae853SAndroid Build Coastguard Worker /* Description : This function fills the unavaible pixels in the reference*/
884*495ae853SAndroid Build Coastguard Worker /* array with diagonally constructed samples */
885*495ae853SAndroid Build Coastguard Worker /* Inputs : i4_x :current position in reference array X to be filled */
886*495ae853SAndroid Build Coastguard Worker /* i4_y :current position in reference array Y to be filled */
887*495ae853SAndroid Build Coastguard Worker /* i4_xd_index : diagonal index in horizontal direction */
888*495ae853SAndroid Build Coastguard Worker /* i4_yd_index : diagonal index in vertical direction */
889*495ae853SAndroid Build Coastguard Worker /* pu1_refarray : popinter to reference array */
890*495ae853SAndroid Build Coastguard Worker /* i4_refarray_wd: width of the reference array */
891*495ae853SAndroid Build Coastguard Worker /* Globals : none */
892*495ae853SAndroid Build Coastguard Worker /* Processing : Fills the sample which is unavailable with filtered */
893*495ae853SAndroid Build Coastguard Worker /* diagonal samples */
894*495ae853SAndroid Build Coastguard Worker /* Outputs : pixel filled */
895*495ae853SAndroid Build Coastguard Worker /* Returns : constructed pixel */
896*495ae853SAndroid Build Coastguard Worker /* */
897*495ae853SAndroid Build Coastguard Worker /* Issues : none */
898*495ae853SAndroid Build Coastguard Worker /* */
899*495ae853SAndroid Build Coastguard Worker /* Revision History: */
900*495ae853SAndroid Build Coastguard Worker /* */
901*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
902*495ae853SAndroid Build Coastguard Worker /* 03 12 2010 Nithya creation */
903*495ae853SAndroid Build Coastguard Worker /* */
904*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_diagonal_construct_dyadic(WORD32 i4_x,WORD32 i4_y,WORD32 i4_xd_index,WORD32 i4_yd_index,UWORD8 * pu1_refarray,WORD32 i4_refarray_wd)905*495ae853SAndroid Build Coastguard Worker static UWORD8 isvc_diagonal_construct_dyadic(WORD32 i4_x, WORD32 i4_y, WORD32 i4_xd_index,
906*495ae853SAndroid Build Coastguard Worker WORD32 i4_yd_index, UWORD8 *pu1_refarray,
907*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_wd)
908*495ae853SAndroid Build Coastguard Worker {
909*495ae853SAndroid Build Coastguard Worker WORD32 i4_diff_hor_ver, i4_sgn_xy;
910*495ae853SAndroid Build Coastguard Worker WORD32 i4_xc, i4_yc;
911*495ae853SAndroid Build Coastguard Worker WORD32 i4_samp1, i4_samp2, i4_samp3;
912*495ae853SAndroid Build Coastguard Worker WORD32 i4_result;
913*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp;
914*495ae853SAndroid Build Coastguard Worker
915*495ae853SAndroid Build Coastguard Worker i4_diff_hor_ver = ABS(i4_xd_index) - ABS(i4_yd_index);
916*495ae853SAndroid Build Coastguard Worker i4_sgn_xy = SIGN(i4_xd_index * i4_yd_index);
917*495ae853SAndroid Build Coastguard Worker
918*495ae853SAndroid Build Coastguard Worker if(i4_diff_hor_ver > 0)
919*495ae853SAndroid Build Coastguard Worker {
920*495ae853SAndroid Build Coastguard Worker i4_xc = i4_x - (i4_sgn_xy * i4_yd_index);
921*495ae853SAndroid Build Coastguard Worker i4_yc = i4_y - i4_yd_index;
922*495ae853SAndroid Build Coastguard Worker
923*495ae853SAndroid Build Coastguard Worker pu1_tmp = pu1_refarray + (i4_yc * i4_refarray_wd);
924*495ae853SAndroid Build Coastguard Worker
925*495ae853SAndroid Build Coastguard Worker i4_samp1 = pu1_tmp[i4_xc - 1];
926*495ae853SAndroid Build Coastguard Worker i4_samp2 = pu1_tmp[i4_xc];
927*495ae853SAndroid Build Coastguard Worker i4_samp3 = pu1_tmp[i4_xc + 1];
928*495ae853SAndroid Build Coastguard Worker }
929*495ae853SAndroid Build Coastguard Worker else if(i4_diff_hor_ver < 0)
930*495ae853SAndroid Build Coastguard Worker {
931*495ae853SAndroid Build Coastguard Worker i4_xc = i4_x - i4_xd_index;
932*495ae853SAndroid Build Coastguard Worker i4_yc = i4_y - (i4_sgn_xy * i4_xd_index);
933*495ae853SAndroid Build Coastguard Worker
934*495ae853SAndroid Build Coastguard Worker pu1_tmp = pu1_refarray + ((i4_yc - 1) * i4_refarray_wd);
935*495ae853SAndroid Build Coastguard Worker
936*495ae853SAndroid Build Coastguard Worker i4_samp1 = pu1_tmp[i4_xc];
937*495ae853SAndroid Build Coastguard Worker pu1_tmp += i4_refarray_wd;
938*495ae853SAndroid Build Coastguard Worker i4_samp2 = pu1_tmp[i4_xc];
939*495ae853SAndroid Build Coastguard Worker pu1_tmp += i4_refarray_wd;
940*495ae853SAndroid Build Coastguard Worker i4_samp3 = pu1_tmp[i4_xc];
941*495ae853SAndroid Build Coastguard Worker }
942*495ae853SAndroid Build Coastguard Worker else
943*495ae853SAndroid Build Coastguard Worker {
944*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_xd, i4_ref_yd;
945*495ae853SAndroid Build Coastguard Worker
946*495ae853SAndroid Build Coastguard Worker i4_ref_xd = i4_x - i4_xd_index;
947*495ae853SAndroid Build Coastguard Worker i4_ref_yd = i4_y - i4_yd_index;
948*495ae853SAndroid Build Coastguard Worker
949*495ae853SAndroid Build Coastguard Worker i4_xc = i4_ref_xd + SIGN(i4_xd_index);
950*495ae853SAndroid Build Coastguard Worker i4_yc = i4_ref_yd + SIGN(i4_yd_index);
951*495ae853SAndroid Build Coastguard Worker
952*495ae853SAndroid Build Coastguard Worker pu1_tmp = pu1_refarray + (i4_ref_yd * i4_refarray_wd);
953*495ae853SAndroid Build Coastguard Worker
954*495ae853SAndroid Build Coastguard Worker i4_samp1 = pu1_tmp[i4_xc];
955*495ae853SAndroid Build Coastguard Worker i4_samp2 = pu1_tmp[i4_ref_xd];
956*495ae853SAndroid Build Coastguard Worker pu1_tmp = pu1_refarray + (i4_yc * i4_refarray_wd);
957*495ae853SAndroid Build Coastguard Worker i4_samp3 = pu1_tmp[i4_ref_xd];
958*495ae853SAndroid Build Coastguard Worker }
959*495ae853SAndroid Build Coastguard Worker
960*495ae853SAndroid Build Coastguard Worker i4_result = (i4_samp1 + (i4_samp2 << 1) + i4_samp3 + 2) >> 2;
961*495ae853SAndroid Build Coastguard Worker
962*495ae853SAndroid Build Coastguard Worker pu1_tmp = pu1_refarray + (i4_y * i4_refarray_wd);
963*495ae853SAndroid Build Coastguard Worker /* Store the filled sample */
964*495ae853SAndroid Build Coastguard Worker pu1_tmp[i4_x] = i4_result;
965*495ae853SAndroid Build Coastguard Worker
966*495ae853SAndroid Build Coastguard Worker return i4_result;
967*495ae853SAndroid Build Coastguard Worker }
968*495ae853SAndroid Build Coastguard Worker
969*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
970*495ae853SAndroid Build Coastguard Worker /* */
971*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_corner_samp_dyadic */
972*495ae853SAndroid Build Coastguard Worker /* */
973*495ae853SAndroid Build Coastguard Worker /* Description : This function fills the corner sample in the reference */
974*495ae853SAndroid Build Coastguard Worker /* array with diagonally constructed samples */
975*495ae853SAndroid Build Coastguard Worker /* Inputs : i4_x :current position in reference array X to be filled */
976*495ae853SAndroid Build Coastguard Worker /* i4_y :current position in reference array Y to be filled */
977*495ae853SAndroid Build Coastguard Worker /* i4_xd_index : diagonal index in horizontal direction */
978*495ae853SAndroid Build Coastguard Worker /* i4_yd_index : diagonal index in vertical direction */
979*495ae853SAndroid Build Coastguard Worker /* pu1_refarray_y : pointer to luma reference array */
980*495ae853SAndroid Build Coastguard Worker /* pu1_refarray_cb : pointer to Cb reference array */
981*495ae853SAndroid Build Coastguard Worker /* pu1_refarray_cr : pointer to Cr reference array */
982*495ae853SAndroid Build Coastguard Worker /* Globals : none */
983*495ae853SAndroid Build Coastguard Worker /* Processing : Fills the sample which is unavailable with filtered */
984*495ae853SAndroid Build Coastguard Worker /* diagonal samples */
985*495ae853SAndroid Build Coastguard Worker /* Outputs : pixel filled */
986*495ae853SAndroid Build Coastguard Worker /* Returns : none */
987*495ae853SAndroid Build Coastguard Worker /* */
988*495ae853SAndroid Build Coastguard Worker /* Issues : none */
989*495ae853SAndroid Build Coastguard Worker /* */
990*495ae853SAndroid Build Coastguard Worker /* Revision History: */
991*495ae853SAndroid Build Coastguard Worker /* */
992*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
993*495ae853SAndroid Build Coastguard Worker /* 03 12 2010 Nithya creation */
994*495ae853SAndroid Build Coastguard Worker /* */
995*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_corner_samp_dyadic(WORD32 i4_x,WORD32 i4_y,WORD32 i4_xD,WORD32 i4_yD,UWORD8 * pu1_refarray_y,UWORD8 * pu1_refarray_cb,UWORD8 * pu1_refarray_cr)996*495ae853SAndroid Build Coastguard Worker static void isvc_corner_samp_dyadic(WORD32 i4_x, WORD32 i4_y, WORD32 i4_xD, WORD32 i4_yD,
997*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_y, UWORD8 *pu1_refarray_cb,
998*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_cr)
999*495ae853SAndroid Build Coastguard Worker {
1000*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_xD, i4_ref_yD;
1001*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_ref_xD, i4_c_ref_yD;
1002*495ae853SAndroid Build Coastguard Worker WORD32 i4_xc, i4_yc;
1003*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_xc, i4_c_yc;
1004*495ae853SAndroid Build Coastguard Worker WORD32 i4_samp1, i4_samp2;
1005*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src, *pu1_tmp_dst;
1006*495ae853SAndroid Build Coastguard Worker
1007*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x - i4_xD;
1008*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y - i4_yD;
1009*495ae853SAndroid Build Coastguard Worker
1010*495ae853SAndroid Build Coastguard Worker i4_xc = i4_ref_xD + SIGN(i4_xD);
1011*495ae853SAndroid Build Coastguard Worker i4_yc = i4_ref_yD + SIGN(i4_yD);
1012*495ae853SAndroid Build Coastguard Worker
1013*495ae853SAndroid Build Coastguard Worker /* Luma */
1014*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_y + (i4_yc * DYADIC_REF_W_Y);
1015*495ae853SAndroid Build Coastguard Worker i4_samp1 = pu1_tmp_src[i4_ref_xD];
1016*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_y + (i4_ref_yD * DYADIC_REF_W_Y);
1017*495ae853SAndroid Build Coastguard Worker i4_samp2 = pu1_tmp_src[i4_xc];
1018*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_tmp_src;
1019*495ae853SAndroid Build Coastguard Worker
1020*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_ref_xD] = (i4_samp1 + i4_samp2 + 1) >> 1;
1021*495ae853SAndroid Build Coastguard Worker
1022*495ae853SAndroid Build Coastguard Worker /* Chroma */
1023*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1024*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1025*495ae853SAndroid Build Coastguard Worker
1026*495ae853SAndroid Build Coastguard Worker i4_c_xc = i4_c_ref_xD + SIGN(i4_xD);
1027*495ae853SAndroid Build Coastguard Worker i4_c_yc = i4_c_ref_yD + SIGN(i4_yD);
1028*495ae853SAndroid Build Coastguard Worker
1029*495ae853SAndroid Build Coastguard Worker /* Cb */
1030*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cb + (i4_c_yc * DYADIC_REF_W_C);
1031*495ae853SAndroid Build Coastguard Worker i4_samp1 = pu1_tmp_src[i4_c_ref_xD];
1032*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cb + (i4_c_ref_yD * DYADIC_REF_W_C);
1033*495ae853SAndroid Build Coastguard Worker i4_samp2 = pu1_tmp_src[i4_c_xc];
1034*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_tmp_src;
1035*495ae853SAndroid Build Coastguard Worker
1036*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_c_ref_xD] = (i4_samp1 + i4_samp2 + 1) >> 1;
1037*495ae853SAndroid Build Coastguard Worker
1038*495ae853SAndroid Build Coastguard Worker /* Cr */
1039*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cr + (i4_c_yc * DYADIC_REF_W_C);
1040*495ae853SAndroid Build Coastguard Worker i4_samp1 = pu1_tmp_src[i4_c_ref_xD];
1041*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cr + (i4_c_ref_yD * DYADIC_REF_W_C);
1042*495ae853SAndroid Build Coastguard Worker i4_samp2 = pu1_tmp_src[i4_c_xc];
1043*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_tmp_src;
1044*495ae853SAndroid Build Coastguard Worker
1045*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_c_ref_xD] = (i4_samp1 + i4_samp2 + 1) >> 1;
1046*495ae853SAndroid Build Coastguard Worker }
1047*495ae853SAndroid Build Coastguard Worker
1048*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1049*495ae853SAndroid Build Coastguard Worker /* */
1050*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_reflayer_construction_dyadic */
1051*495ae853SAndroid Build Coastguard Worker /* */
1052*495ae853SAndroid Build Coastguard Worker /* Description : This function constructs the reference array buffer */
1053*495ae853SAndroid Build Coastguard Worker /* for dyadic cases used for intra resampling of a */
1054*495ae853SAndroid Build Coastguard Worker /* component in an MB */
1055*495ae853SAndroid Build Coastguard Worker /* */
1056*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_intra_samp_ctxt : intra sampling context */
1057*495ae853SAndroid Build Coastguard Worker /* ps_ref_mb_mode_map : ref layer mb mode buffer desc */
1058*495ae853SAndroid Build Coastguard Worker /* pu1_inp_luma : luma input (reference layer data) */
1059*495ae853SAndroid Build Coastguard Worker /* pu1_inp_chroma : chroma input (reference layer data) */
1060*495ae853SAndroid Build Coastguard Worker /* i4_inp_luma_stride : luma input buffer stride */
1061*495ae853SAndroid Build Coastguard Worker /* i4_inp_chroma_stride : chroma input buffer stride */
1062*495ae853SAndroid Build Coastguard Worker /* i4_top : indicates whether the core 8x8 reference block */
1063*495ae853SAndroid Build Coastguard Worker /* is one of 0 and 1 or one of 2 and 3 */
1064*495ae853SAndroid Build Coastguard Worker /* i4_left : indicates whether the core 8x8 reference block */
1065*495ae853SAndroid Build Coastguard Worker /* is one of 0 and 2 or one of 1 and 3 */
1066*495ae853SAndroid Build Coastguard Worker /* ps_ref_mb_coord : coordinates of the reference MB */
1067*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1068*495ae853SAndroid Build Coastguard Worker /* Processing : it fills the reference layer data if they are falling in */
1069*495ae853SAndroid Build Coastguard Worker /* INTRA MB region. If all the pixels are not filled it */
1070*495ae853SAndroid Build Coastguard Worker /* calls the border extension algorithm to fill them */
1071*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1072*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1073*495ae853SAndroid Build Coastguard Worker /* */
1074*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1075*495ae853SAndroid Build Coastguard Worker /* */
1076*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1077*495ae853SAndroid Build Coastguard Worker /* */
1078*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1079*495ae853SAndroid Build Coastguard Worker /* 02 12 2010 Nithya creation */
1080*495ae853SAndroid Build Coastguard Worker /* */
1081*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_reflayer_construction_dyadic(void * pv_intra_samp_ctxt,mem_element_t * ps_ref_mb_mode_map,UWORD8 * pu1_inp_luma,UWORD8 * pu1_inp_chroma,WORD32 i4_inp_luma_stride,WORD32 i4_inp_chroma_stride,WORD32 i4_top,WORD32 i4_left,UWORD16 u2_mb_x,UWORD16 u2_mb_y)1082*495ae853SAndroid Build Coastguard Worker static void isvc_reflayer_construction_dyadic(void *pv_intra_samp_ctxt,
1083*495ae853SAndroid Build Coastguard Worker mem_element_t *ps_ref_mb_mode_map,
1084*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_inp_luma, UWORD8 *pu1_inp_chroma,
1085*495ae853SAndroid Build Coastguard Worker WORD32 i4_inp_luma_stride,
1086*495ae853SAndroid Build Coastguard Worker WORD32 i4_inp_chroma_stride, WORD32 i4_top,
1087*495ae853SAndroid Build Coastguard Worker WORD32 i4_left, UWORD16 u2_mb_x, UWORD16 u2_mb_y)
1088*495ae853SAndroid Build Coastguard Worker {
1089*495ae853SAndroid Build Coastguard Worker enum
1090*495ae853SAndroid Build Coastguard Worker {
1091*495ae853SAndroid Build Coastguard Worker TOPLEFT_MASK = 1,
1092*495ae853SAndroid Build Coastguard Worker LEFT_MASK = 2,
1093*495ae853SAndroid Build Coastguard Worker TOP_MASK = 4,
1094*495ae853SAndroid Build Coastguard Worker TOPRIGHT_MASK = 8,
1095*495ae853SAndroid Build Coastguard Worker BOTTOMLEFT_MASK = 16
1096*495ae853SAndroid Build Coastguard Worker };
1097*495ae853SAndroid Build Coastguard Worker
1098*495ae853SAndroid Build Coastguard Worker WORD32 i4_x, i4_y;
1099*495ae853SAndroid Build Coastguard Worker WORD32 i4_x0, i4_y0;
1100*495ae853SAndroid Build Coastguard Worker WORD32 i4_xc0, i4_yc0;
1101*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_xD, i4_ref_yD;
1102*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_ref_xD, i4_c_ref_yD;
1103*495ae853SAndroid Build Coastguard Worker
1104*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt;
1105*495ae853SAndroid Build Coastguard Worker intra_samp_lyr_ctxt *ps_lyr_ctxt;
1106*495ae853SAndroid Build Coastguard Worker WORD8 *pi1_ref_mb_modes;
1107*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_mode_stride;
1108*495ae853SAndroid Build Coastguard Worker WORD32 i4_element_size;
1109*495ae853SAndroid Build Coastguard Worker WORD32 i4_mbaddr_y;
1110*495ae853SAndroid Build Coastguard Worker WORD32 i4_mbaddr_x;
1111*495ae853SAndroid Build Coastguard Worker
1112*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_wd_luma, i4_refarray_wd_chroma;
1113*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_ht_luma, i4_refarray_ht_chroma;
1114*495ae853SAndroid Build Coastguard Worker WORD32 i4_avlblty;
1115*495ae853SAndroid Build Coastguard Worker WORD8 i1_cons_intr_samp_flag;
1116*495ae853SAndroid Build Coastguard Worker WORD8 i1_slice_id;
1117*495ae853SAndroid Build Coastguard Worker WORD8 i1_corner_samp_avlbl_flag;
1118*495ae853SAndroid Build Coastguard Worker UWORD8 u1_ny_avlblty;
1119*495ae853SAndroid Build Coastguard Worker
1120*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_luma;
1121*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_cb, *pu1_refarray_cr;
1122*495ae853SAndroid Build Coastguard Worker
1123*495ae853SAndroid Build Coastguard Worker ps_ctxt = (intra_sampling_ctxt_t *) pv_intra_samp_ctxt;
1124*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[ps_ctxt->i4_res_lyr_id];
1125*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes = (WORD8 *) ps_ref_mb_mode_map->pv_buffer;
1126*495ae853SAndroid Build Coastguard Worker i4_ref_mode_stride = ps_ref_mb_mode_map->i4_num_element_stride;
1127*495ae853SAndroid Build Coastguard Worker i4_element_size = ps_ref_mb_mode_map->i4_element_size;
1128*495ae853SAndroid Build Coastguard Worker
1129*495ae853SAndroid Build Coastguard Worker i1_cons_intr_samp_flag = ps_lyr_ctxt->i1_constrained_intra_rsmpl_flag;
1130*495ae853SAndroid Build Coastguard Worker
1131*495ae853SAndroid Build Coastguard Worker ASSERT(NULL != pi1_ref_mb_modes);
1132*495ae853SAndroid Build Coastguard Worker
1133*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma = ps_ctxt->pu1_refarray_buffer;
1134*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb = ps_ctxt->pu1_refarray_cb;
1135*495ae853SAndroid Build Coastguard Worker pu1_refarray_cr = ps_ctxt->pu1_refarray_cr;
1136*495ae853SAndroid Build Coastguard Worker
1137*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x = u2_mb_x;
1138*495ae853SAndroid Build Coastguard Worker i4_mbaddr_y = u2_mb_y;
1139*495ae853SAndroid Build Coastguard Worker
1140*495ae853SAndroid Build Coastguard Worker i4_refarray_wd_luma = 20;
1141*495ae853SAndroid Build Coastguard Worker i4_refarray_ht_luma = 20;
1142*495ae853SAndroid Build Coastguard Worker
1143*495ae853SAndroid Build Coastguard Worker i4_refarray_wd_chroma = i4_refarray_wd_luma >> 1;
1144*495ae853SAndroid Build Coastguard Worker i4_refarray_ht_chroma = i4_refarray_ht_luma >> 1;
1145*495ae853SAndroid Build Coastguard Worker
1146*495ae853SAndroid Build Coastguard Worker if(1 == i1_cons_intr_samp_flag)
1147*495ae853SAndroid Build Coastguard Worker {
1148*495ae853SAndroid Build Coastguard Worker WORD8 *pi1_ref_mb_mode_tmp;
1149*495ae853SAndroid Build Coastguard Worker WORD8 i1_mb_mode;
1150*495ae853SAndroid Build Coastguard Worker
1151*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_mode_tmp = pi1_ref_mb_modes;
1152*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_mode_tmp += (i4_mbaddr_y * i4_ref_mode_stride * i4_element_size);
1153*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_mode_tmp += (i4_mbaddr_x * i4_element_size);
1154*495ae853SAndroid Build Coastguard Worker i1_mb_mode = *pi1_ref_mb_mode_tmp;
1155*495ae853SAndroid Build Coastguard Worker i1_mb_mode = (i1_mb_mode < 0) ? i1_mb_mode : SVC_EXTRACT_MB_MODE(*pi1_ref_mb_mode_tmp);
1156*495ae853SAndroid Build Coastguard Worker
1157*495ae853SAndroid Build Coastguard Worker /* The reference layer MB should be intra */
1158*495ae853SAndroid Build Coastguard Worker ASSERT(i1_mb_mode >= 0);
1159*495ae853SAndroid Build Coastguard Worker
1160*495ae853SAndroid Build Coastguard Worker i1_slice_id = i1_mb_mode;
1161*495ae853SAndroid Build Coastguard Worker }
1162*495ae853SAndroid Build Coastguard Worker else
1163*495ae853SAndroid Build Coastguard Worker {
1164*495ae853SAndroid Build Coastguard Worker i1_slice_id = -1;
1165*495ae853SAndroid Build Coastguard Worker }
1166*495ae853SAndroid Build Coastguard Worker
1167*495ae853SAndroid Build Coastguard Worker {
1168*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src, *pu1_dst;
1169*495ae853SAndroid Build Coastguard Worker WORD32 i4_src_stride, i4_dst_stride;
1170*495ae853SAndroid Build Coastguard Worker
1171*495ae853SAndroid Build Coastguard Worker /* Copy luma */
1172*495ae853SAndroid Build Coastguard Worker i4_src_stride = i4_inp_luma_stride;
1173*495ae853SAndroid Build Coastguard Worker i4_dst_stride = DYADIC_REF_W_Y;
1174*495ae853SAndroid Build Coastguard Worker pu1_src = pu1_inp_luma;
1175*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_refarray_luma;
1176*495ae853SAndroid Build Coastguard Worker
1177*495ae853SAndroid Build Coastguard Worker isvc_copy_data(pu1_src, i4_src_stride, pu1_dst, i4_dst_stride, i4_refarray_wd_luma,
1178*495ae853SAndroid Build Coastguard Worker i4_refarray_ht_luma);
1179*495ae853SAndroid Build Coastguard Worker
1180*495ae853SAndroid Build Coastguard Worker i4_src_stride = i4_inp_chroma_stride;
1181*495ae853SAndroid Build Coastguard Worker i4_dst_stride = DYADIC_REF_W_C;
1182*495ae853SAndroid Build Coastguard Worker pu1_src = pu1_inp_chroma;
1183*495ae853SAndroid Build Coastguard Worker isvc_copy_data_semiplanr(pu1_src, i4_src_stride, pu1_refarray_cb, pu1_refarray_cr,
1184*495ae853SAndroid Build Coastguard Worker i4_dst_stride, i4_refarray_wd_chroma, i4_refarray_ht_chroma);
1185*495ae853SAndroid Build Coastguard Worker }
1186*495ae853SAndroid Build Coastguard Worker
1187*495ae853SAndroid Build Coastguard Worker {
1188*495ae853SAndroid Build Coastguard Worker /* mb_x + left, mb_y + top */
1189*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_avlblty_dyadic(pi1_ref_mb_modes, i4_ref_mode_stride, i4_element_size,
1190*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x + i4_left, i4_mbaddr_y + i4_top, &i4_avlblty,
1191*495ae853SAndroid Build Coastguard Worker i1_slice_id, i1_cons_intr_samp_flag);
1192*495ae853SAndroid Build Coastguard Worker u1_ny_avlblty = i4_avlblty;
1193*495ae853SAndroid Build Coastguard Worker
1194*495ae853SAndroid Build Coastguard Worker /* mb_x + left, mb_y */
1195*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_avlblty_dyadic(pi1_ref_mb_modes, i4_ref_mode_stride, i4_element_size,
1196*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x + i4_left, i4_mbaddr_y, &i4_avlblty,
1197*495ae853SAndroid Build Coastguard Worker i1_slice_id, i1_cons_intr_samp_flag);
1198*495ae853SAndroid Build Coastguard Worker u1_ny_avlblty += (i4_avlblty << 1);
1199*495ae853SAndroid Build Coastguard Worker
1200*495ae853SAndroid Build Coastguard Worker /* mb_x, mb_y + top */
1201*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_avlblty_dyadic(pi1_ref_mb_modes, i4_ref_mode_stride, i4_element_size,
1202*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x, i4_mbaddr_y + i4_top, &i4_avlblty,
1203*495ae853SAndroid Build Coastguard Worker i1_slice_id, i1_cons_intr_samp_flag);
1204*495ae853SAndroid Build Coastguard Worker u1_ny_avlblty += (i4_avlblty << 2);
1205*495ae853SAndroid Build Coastguard Worker
1206*495ae853SAndroid Build Coastguard Worker /* mb_x - left, mb_y + top */
1207*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_avlblty_dyadic(pi1_ref_mb_modes, i4_ref_mode_stride, i4_element_size,
1208*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x - i4_left, i4_mbaddr_y + i4_top, &i4_avlblty,
1209*495ae853SAndroid Build Coastguard Worker i1_slice_id, i1_cons_intr_samp_flag);
1210*495ae853SAndroid Build Coastguard Worker u1_ny_avlblty += (i4_avlblty << 3);
1211*495ae853SAndroid Build Coastguard Worker
1212*495ae853SAndroid Build Coastguard Worker /* mb_x + left, mb_y - top */
1213*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_avlblty_dyadic(pi1_ref_mb_modes, i4_ref_mode_stride, i4_element_size,
1214*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x + i4_left, i4_mbaddr_y - i4_top, &i4_avlblty,
1215*495ae853SAndroid Build Coastguard Worker i1_slice_id, i1_cons_intr_samp_flag);
1216*495ae853SAndroid Build Coastguard Worker u1_ny_avlblty += (i4_avlblty << 4);
1217*495ae853SAndroid Build Coastguard Worker }
1218*495ae853SAndroid Build Coastguard Worker
1219*495ae853SAndroid Build Coastguard Worker if((TOP_MASK | TOPLEFT_MASK | LEFT_MASK) == u1_ny_avlblty)
1220*495ae853SAndroid Build Coastguard Worker {
1221*495ae853SAndroid Build Coastguard Worker return;
1222*495ae853SAndroid Build Coastguard Worker }
1223*495ae853SAndroid Build Coastguard Worker
1224*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & (TOP_MASK | TOPLEFT_MASK | LEFT_MASK)))
1225*495ae853SAndroid Build Coastguard Worker {
1226*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src, *pu1_tmp_dst1, *pu1_tmp_dst2;
1227*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src1, *pu1_tmp_src2;
1228*495ae853SAndroid Build Coastguard Worker
1229*495ae853SAndroid Build Coastguard Worker /* Set the 4 corner samples to (x-xD,y-yD) */
1230*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1231*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + i4_top;
1232*495ae853SAndroid Build Coastguard Worker
1233*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - i4_left - (i4_left >> 1);
1234*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - i4_top - (i4_top >> 1);
1235*495ae853SAndroid Build Coastguard Worker
1236*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_luma + (i4_ref_yD * DYADIC_REF_W_Y);
1237*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1238*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_tmp_dst1 + DYADIC_REF_W_Y;
1239*495ae853SAndroid Build Coastguard Worker
1240*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0] = pu1_tmp_src[i4_ref_xD];
1241*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0 + 1] = pu1_tmp_src[i4_ref_xD];
1242*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x0] = pu1_tmp_src[i4_ref_xD];
1243*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x0 + 1] = pu1_tmp_src[i4_ref_xD];
1244*495ae853SAndroid Build Coastguard Worker
1245*495ae853SAndroid Build Coastguard Worker /* Set the corner sample of Cb and Cr to (x-xD,y-yD) */
1246*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1247*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1248*495ae853SAndroid Build Coastguard Worker
1249*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1250*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1251*495ae853SAndroid Build Coastguard Worker
1252*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 = pu1_refarray_cb + (i4_c_ref_yD * DYADIC_REF_W_C);
1253*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_refarray_cb + (i4_yc0 * DYADIC_REF_W_C);
1254*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_xc0] = pu1_tmp_src1[i4_c_ref_xD];
1255*495ae853SAndroid Build Coastguard Worker pu1_tmp_src2 = pu1_refarray_cr + (i4_c_ref_yD * DYADIC_REF_W_C);
1256*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_refarray_cr + (i4_yc0 * DYADIC_REF_W_C);
1257*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_xc0] = pu1_tmp_src2[i4_c_ref_xD];
1258*495ae853SAndroid Build Coastguard Worker }
1259*495ae853SAndroid Build Coastguard Worker
1260*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & (TOP_MASK | TOPLEFT_MASK)))
1261*495ae853SAndroid Build Coastguard Worker {
1262*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src, *pu1_tmp_dst1, *pu1_tmp_dst2;
1263*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src1, *pu1_tmp_src2;
1264*495ae853SAndroid Build Coastguard Worker
1265*495ae853SAndroid Build Coastguard Worker /* Copy (x0,ref_yD), (x0+1,ref_yD), ..., (x0+7,ref_yD) to */
1266*495ae853SAndroid Build Coastguard Worker /* (x0,y0), (x0+1,y0), ..., (x0+7,y0) and */
1267*495ae853SAndroid Build Coastguard Worker /* (x0,y0+1), (x0+1,y0+1), ..., (x0+7,y0+1) */
1268*495ae853SAndroid Build Coastguard Worker i4_x0 = 2;
1269*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + i4_top;
1270*495ae853SAndroid Build Coastguard Worker if(i4_left > 0)
1271*495ae853SAndroid Build Coastguard Worker {
1272*495ae853SAndroid Build Coastguard Worker i4_x0 += 8;
1273*495ae853SAndroid Build Coastguard Worker }
1274*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - i4_top - (i4_top >> 1);
1275*495ae853SAndroid Build Coastguard Worker
1276*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_luma + (i4_ref_yD * DYADIC_REF_W_Y);
1277*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1278*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_tmp_dst1 + DYADIC_REF_W_Y;
1279*495ae853SAndroid Build Coastguard Worker
1280*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_x0; i4_x < i4_x0 + 8; i4_x++)
1281*495ae853SAndroid Build Coastguard Worker {
1282*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x] = pu1_tmp_src[i4_x];
1283*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x] = pu1_tmp_src[i4_x];
1284*495ae853SAndroid Build Coastguard Worker }
1285*495ae853SAndroid Build Coastguard Worker
1286*495ae853SAndroid Build Coastguard Worker /* Cb and Cr copy */
1287*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1288*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1289*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1290*495ae853SAndroid Build Coastguard Worker
1291*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 = pu1_refarray_cb + (i4_c_ref_yD * DYADIC_REF_W_C);
1292*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_refarray_cb + (i4_yc0 * DYADIC_REF_W_C);
1293*495ae853SAndroid Build Coastguard Worker pu1_tmp_src2 = pu1_refarray_cr + (i4_c_ref_yD * DYADIC_REF_W_C);
1294*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_refarray_cr + (i4_yc0 * DYADIC_REF_W_C);
1295*495ae853SAndroid Build Coastguard Worker
1296*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_xc0; i4_x < i4_xc0 + 4; i4_x++)
1297*495ae853SAndroid Build Coastguard Worker {
1298*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x] = pu1_tmp_src1[i4_x];
1299*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x] = pu1_tmp_src2[i4_x];
1300*495ae853SAndroid Build Coastguard Worker }
1301*495ae853SAndroid Build Coastguard Worker }
1302*495ae853SAndroid Build Coastguard Worker
1303*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & (TOPLEFT_MASK | LEFT_MASK)))
1304*495ae853SAndroid Build Coastguard Worker {
1305*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src, *pu1_tmp_dst1, *pu1_tmp_dst2;
1306*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src1, *pu1_tmp_src2;
1307*495ae853SAndroid Build Coastguard Worker
1308*495ae853SAndroid Build Coastguard Worker /* Copy (ref_xD,y0) to (x0,y0) and (x0+1,y0); */
1309*495ae853SAndroid Build Coastguard Worker /* copy (ref_xD,y0+1) to (x0,y0+1) and (x0+1,y0+1); ... ;*/
1310*495ae853SAndroid Build Coastguard Worker /* copy (ref_xD,y0+7) to (x0,y0+7) and (x0+1,y0+7) */
1311*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1312*495ae853SAndroid Build Coastguard Worker i4_y0 = 2;
1313*495ae853SAndroid Build Coastguard Worker if(i4_top > 0)
1314*495ae853SAndroid Build Coastguard Worker {
1315*495ae853SAndroid Build Coastguard Worker i4_y0 += 8;
1316*495ae853SAndroid Build Coastguard Worker }
1317*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - i4_left - (i4_left >> 1);
1318*495ae853SAndroid Build Coastguard Worker
1319*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1320*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_tmp_src;
1321*495ae853SAndroid Build Coastguard Worker
1322*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_y0; i4_y < i4_y0 + 8; i4_y++)
1323*495ae853SAndroid Build Coastguard Worker {
1324*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0] = pu1_tmp_src[i4_ref_xD];
1325*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0 + 1] = pu1_tmp_src[i4_ref_xD];
1326*495ae853SAndroid Build Coastguard Worker pu1_tmp_src += DYADIC_REF_W_Y;
1327*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 += DYADIC_REF_W_Y;
1328*495ae853SAndroid Build Coastguard Worker }
1329*495ae853SAndroid Build Coastguard Worker
1330*495ae853SAndroid Build Coastguard Worker /* Cb and Cr copy */
1331*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1332*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1333*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1334*495ae853SAndroid Build Coastguard Worker
1335*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 = pu1_refarray_cb + (i4_yc0 * DYADIC_REF_W_C);
1336*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_tmp_src1;
1337*495ae853SAndroid Build Coastguard Worker pu1_tmp_src2 = pu1_refarray_cr + (i4_yc0 * DYADIC_REF_W_C);
1338*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_tmp_src2;
1339*495ae853SAndroid Build Coastguard Worker
1340*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_yc0; i4_y < i4_yc0 + 4; i4_y++)
1341*495ae853SAndroid Build Coastguard Worker {
1342*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_xc0] = pu1_tmp_src1[i4_c_ref_xD];
1343*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_xc0] = pu1_tmp_src2[i4_c_ref_xD];
1344*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 += DYADIC_REF_W_C;
1345*495ae853SAndroid Build Coastguard Worker pu1_tmp_src2 += DYADIC_REF_W_C;
1346*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 += DYADIC_REF_W_C;
1347*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 += DYADIC_REF_W_C;
1348*495ae853SAndroid Build Coastguard Worker }
1349*495ae853SAndroid Build Coastguard Worker }
1350*495ae853SAndroid Build Coastguard Worker
1351*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & TOP_MASK))
1352*495ae853SAndroid Build Coastguard Worker {
1353*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & TOPRIGHT_MASK))
1354*495ae853SAndroid Build Coastguard Worker {
1355*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src, *pu1_tmp_dst;
1356*495ae853SAndroid Build Coastguard Worker
1357*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 - i4_left;
1358*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + i4_top;
1359*495ae853SAndroid Build Coastguard Worker
1360*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - i4_top - (i4_top >> 1);
1361*495ae853SAndroid Build Coastguard Worker
1362*495ae853SAndroid Build Coastguard Worker /* Copy (x0,ref_yD) and (x0+1,ref_yD) to (x0,y0) and (x0+1,y0), and */
1363*495ae853SAndroid Build Coastguard Worker /* to (x0,y0+1) and (x0+1,y0+1) */
1364*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_luma + (i4_ref_yD * DYADIC_REF_W_Y);
1365*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1366*495ae853SAndroid Build Coastguard Worker
1367*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0] = pu1_tmp_src[i4_x0];
1368*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0 + 1] = pu1_tmp_src[i4_x0 + 1];
1369*495ae853SAndroid Build Coastguard Worker
1370*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst += DYADIC_REF_W_Y;
1371*495ae853SAndroid Build Coastguard Worker
1372*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0] = pu1_tmp_src[i4_x0];
1373*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0 + 1] = pu1_tmp_src[i4_x0 + 1];
1374*495ae853SAndroid Build Coastguard Worker
1375*495ae853SAndroid Build Coastguard Worker /* Cb copy */
1376*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1377*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1378*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1379*495ae853SAndroid Build Coastguard Worker
1380*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cb + (i4_c_ref_yD * DYADIC_REF_W_C);
1381*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_refarray_cb + (i4_yc0 * DYADIC_REF_W_C);
1382*495ae853SAndroid Build Coastguard Worker
1383*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_xc0] = pu1_tmp_src[i4_xc0];
1384*495ae853SAndroid Build Coastguard Worker
1385*495ae853SAndroid Build Coastguard Worker /* Cr copy */
1386*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cr + (i4_c_ref_yD * DYADIC_REF_W_C);
1387*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_refarray_cr + (i4_yc0 * DYADIC_REF_W_C);
1388*495ae853SAndroid Build Coastguard Worker
1389*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_xc0] = pu1_tmp_src[i4_xc0];
1390*495ae853SAndroid Build Coastguard Worker }
1391*495ae853SAndroid Build Coastguard Worker else
1392*495ae853SAndroid Build Coastguard Worker {
1393*495ae853SAndroid Build Coastguard Worker WORD32 i4_xD, i4_yD;
1394*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_xD, i4_c_yD;
1395*495ae853SAndroid Build Coastguard Worker
1396*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_avlblty_dyadic(pi1_ref_mb_modes, i4_ref_mode_stride, i4_element_size,
1397*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x - i4_left, i4_mbaddr_y, &i4_avlblty,
1398*495ae853SAndroid Build Coastguard Worker i1_slice_id, i1_cons_intr_samp_flag);
1399*495ae853SAndroid Build Coastguard Worker i1_corner_samp_avlbl_flag = i4_avlblty;
1400*495ae853SAndroid Build Coastguard Worker
1401*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 - i4_left;
1402*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + i4_top;
1403*495ae853SAndroid Build Coastguard Worker
1404*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1405*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1406*495ae853SAndroid Build Coastguard Worker
1407*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - i4_top - (i4_top >> 1);
1408*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - (i4_left * 7) - (i4_left >> 1);
1409*495ae853SAndroid Build Coastguard Worker
1410*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1411*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1412*495ae853SAndroid Build Coastguard Worker
1413*495ae853SAndroid Build Coastguard Worker i4_xD = i4_x0 - i4_ref_xD;
1414*495ae853SAndroid Build Coastguard Worker i4_yD = i4_y0 - i4_ref_yD;
1415*495ae853SAndroid Build Coastguard Worker
1416*495ae853SAndroid Build Coastguard Worker i4_c_xD = i4_xc0 - i4_c_ref_xD;
1417*495ae853SAndroid Build Coastguard Worker i4_c_yD = i4_yc0 - i4_c_ref_yD;
1418*495ae853SAndroid Build Coastguard Worker
1419*495ae853SAndroid Build Coastguard Worker /* Fill corner sample if not available */
1420*495ae853SAndroid Build Coastguard Worker if(!i1_corner_samp_avlbl_flag)
1421*495ae853SAndroid Build Coastguard Worker {
1422*495ae853SAndroid Build Coastguard Worker isvc_corner_samp_dyadic(i4_x0, i4_y0, i4_xD, i4_yD, pu1_refarray_luma,
1423*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb, pu1_refarray_cr);
1424*495ae853SAndroid Build Coastguard Worker }
1425*495ae853SAndroid Build Coastguard Worker
1426*495ae853SAndroid Build Coastguard Worker /* Call diagonal construction for luma */
1427*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_y0; i4_y < i4_y0 + 2; i4_y++)
1428*495ae853SAndroid Build Coastguard Worker {
1429*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_x0; i4_x < i4_x0 + 2; i4_x++)
1430*495ae853SAndroid Build Coastguard Worker {
1431*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_x, i4_y, i4_xD, i4_yD, pu1_refarray_luma,
1432*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_Y);
1433*495ae853SAndroid Build Coastguard Worker i4_xD++;
1434*495ae853SAndroid Build Coastguard Worker }
1435*495ae853SAndroid Build Coastguard Worker i4_yD++;
1436*495ae853SAndroid Build Coastguard Worker i4_xD -= 2;
1437*495ae853SAndroid Build Coastguard Worker }
1438*495ae853SAndroid Build Coastguard Worker
1439*495ae853SAndroid Build Coastguard Worker /* Call diagonal construction for chroma */
1440*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_xc0, i4_yc0, i4_c_xD, i4_c_yD, pu1_refarray_cb,
1441*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_C);
1442*495ae853SAndroid Build Coastguard Worker
1443*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_xc0, i4_yc0, i4_c_xD, i4_c_yD, pu1_refarray_cr,
1444*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_C);
1445*495ae853SAndroid Build Coastguard Worker }
1446*495ae853SAndroid Build Coastguard Worker }
1447*495ae853SAndroid Build Coastguard Worker
1448*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & LEFT_MASK))
1449*495ae853SAndroid Build Coastguard Worker {
1450*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & BOTTOMLEFT_MASK))
1451*495ae853SAndroid Build Coastguard Worker {
1452*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src, *pu1_tmp_dst;
1453*495ae853SAndroid Build Coastguard Worker
1454*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1455*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 - i4_top;
1456*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - i4_left - (i4_left >> 1);
1457*495ae853SAndroid Build Coastguard Worker
1458*495ae853SAndroid Build Coastguard Worker /* Copy (ref_xD,y0) to (x0,y0), (x0+1,y0), and */
1459*495ae853SAndroid Build Coastguard Worker /* copy (ref_xD,y0+1) to (x0,y0+1), (x0+1,y0+1) */
1460*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1461*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_tmp_src;
1462*495ae853SAndroid Build Coastguard Worker
1463*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0] = pu1_tmp_src[i4_ref_xD];
1464*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0 + 1] = pu1_tmp_src[i4_ref_xD];
1465*495ae853SAndroid Build Coastguard Worker
1466*495ae853SAndroid Build Coastguard Worker pu1_tmp_src += DYADIC_REF_W_Y;
1467*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst += DYADIC_REF_W_Y;
1468*495ae853SAndroid Build Coastguard Worker
1469*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0] = pu1_tmp_src[i4_ref_xD];
1470*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0 + 1] = pu1_tmp_src[i4_ref_xD];
1471*495ae853SAndroid Build Coastguard Worker
1472*495ae853SAndroid Build Coastguard Worker /* Cb copy */
1473*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1474*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1475*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1476*495ae853SAndroid Build Coastguard Worker
1477*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cb + (i4_yc0 * DYADIC_REF_W_C);
1478*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_tmp_src;
1479*495ae853SAndroid Build Coastguard Worker
1480*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_xc0] = pu1_tmp_src[i4_c_ref_xD];
1481*495ae853SAndroid Build Coastguard Worker
1482*495ae853SAndroid Build Coastguard Worker /* Cr copy */
1483*495ae853SAndroid Build Coastguard Worker pu1_tmp_src = pu1_refarray_cr + (i4_yc0 * DYADIC_REF_W_C);
1484*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_tmp_src;
1485*495ae853SAndroid Build Coastguard Worker
1486*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_xc0] = pu1_tmp_src[i4_c_ref_xD];
1487*495ae853SAndroid Build Coastguard Worker }
1488*495ae853SAndroid Build Coastguard Worker else
1489*495ae853SAndroid Build Coastguard Worker {
1490*495ae853SAndroid Build Coastguard Worker WORD32 i4_xD, i4_yD;
1491*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_xD, i4_c_yD;
1492*495ae853SAndroid Build Coastguard Worker
1493*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_avlblty_dyadic(pi1_ref_mb_modes, i4_ref_mode_stride, i4_element_size,
1494*495ae853SAndroid Build Coastguard Worker i4_mbaddr_x, i4_mbaddr_y - i4_top, &i4_avlblty,
1495*495ae853SAndroid Build Coastguard Worker i1_slice_id, i1_cons_intr_samp_flag);
1496*495ae853SAndroid Build Coastguard Worker i1_corner_samp_avlbl_flag = i4_avlblty;
1497*495ae853SAndroid Build Coastguard Worker
1498*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1499*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 - i4_top;
1500*495ae853SAndroid Build Coastguard Worker
1501*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1502*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1503*495ae853SAndroid Build Coastguard Worker
1504*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - i4_left - (i4_left >> 1);
1505*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - (i4_top * 7) - (i4_top >> 1);
1506*495ae853SAndroid Build Coastguard Worker
1507*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1508*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1509*495ae853SAndroid Build Coastguard Worker
1510*495ae853SAndroid Build Coastguard Worker i4_xD = i4_x0 - i4_ref_xD;
1511*495ae853SAndroid Build Coastguard Worker i4_yD = i4_y0 - i4_ref_yD;
1512*495ae853SAndroid Build Coastguard Worker
1513*495ae853SAndroid Build Coastguard Worker i4_c_xD = i4_xc0 - i4_c_ref_xD;
1514*495ae853SAndroid Build Coastguard Worker i4_c_yD = i4_yc0 - i4_c_ref_yD;
1515*495ae853SAndroid Build Coastguard Worker
1516*495ae853SAndroid Build Coastguard Worker if(!i1_corner_samp_avlbl_flag)
1517*495ae853SAndroid Build Coastguard Worker {
1518*495ae853SAndroid Build Coastguard Worker isvc_corner_samp_dyadic(i4_x0, i4_y0, i4_xD, i4_yD, pu1_refarray_luma,
1519*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb, pu1_refarray_cr);
1520*495ae853SAndroid Build Coastguard Worker }
1521*495ae853SAndroid Build Coastguard Worker
1522*495ae853SAndroid Build Coastguard Worker /* Call diagonal consrtuction for luma */
1523*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_y0; i4_y < i4_y0 + 2; i4_y++)
1524*495ae853SAndroid Build Coastguard Worker {
1525*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_x0; i4_x < i4_x0 + 2; i4_x++)
1526*495ae853SAndroid Build Coastguard Worker {
1527*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_x, i4_y, i4_xD, i4_yD, pu1_refarray_luma,
1528*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_Y);
1529*495ae853SAndroid Build Coastguard Worker i4_xD++;
1530*495ae853SAndroid Build Coastguard Worker }
1531*495ae853SAndroid Build Coastguard Worker i4_yD++;
1532*495ae853SAndroid Build Coastguard Worker i4_xD -= 2;
1533*495ae853SAndroid Build Coastguard Worker }
1534*495ae853SAndroid Build Coastguard Worker
1535*495ae853SAndroid Build Coastguard Worker /* Call diagonal construction for chroma */
1536*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_xc0, i4_yc0, i4_c_xD, i4_c_yD, pu1_refarray_cb,
1537*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_C);
1538*495ae853SAndroid Build Coastguard Worker
1539*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_xc0, i4_yc0, i4_c_xD, i4_c_yD, pu1_refarray_cr,
1540*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_C);
1541*495ae853SAndroid Build Coastguard Worker }
1542*495ae853SAndroid Build Coastguard Worker }
1543*495ae853SAndroid Build Coastguard Worker
1544*495ae853SAndroid Build Coastguard Worker if(u1_ny_avlblty & TOPLEFT_MASK)
1545*495ae853SAndroid Build Coastguard Worker {
1546*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & LEFT_MASK))
1547*495ae853SAndroid Build Coastguard Worker {
1548*495ae853SAndroid Build Coastguard Worker WORD32 i4_xD, i4_yD;
1549*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_xD, i4_c_yD;
1550*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_dst;
1551*495ae853SAndroid Build Coastguard Worker UWORD8 u1_filled_samp;
1552*495ae853SAndroid Build Coastguard Worker
1553*495ae853SAndroid Build Coastguard Worker i1_corner_samp_avlbl_flag = (u1_ny_avlblty & 4) >> 2;
1554*495ae853SAndroid Build Coastguard Worker
1555*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1556*495ae853SAndroid Build Coastguard Worker i4_y0 = 2;
1557*495ae853SAndroid Build Coastguard Worker i4_ref_yD = 1;
1558*495ae853SAndroid Build Coastguard Worker if(i4_top > 0)
1559*495ae853SAndroid Build Coastguard Worker {
1560*495ae853SAndroid Build Coastguard Worker i4_y0 += 8;
1561*495ae853SAndroid Build Coastguard Worker i4_ref_yD = 18;
1562*495ae853SAndroid Build Coastguard Worker }
1563*495ae853SAndroid Build Coastguard Worker
1564*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - (i4_left) - (i4_left >> 1);
1565*495ae853SAndroid Build Coastguard Worker
1566*495ae853SAndroid Build Coastguard Worker i4_xD = i4_x0 - i4_ref_xD;
1567*495ae853SAndroid Build Coastguard Worker i4_yD = i4_y0 - i4_ref_yD;
1568*495ae853SAndroid Build Coastguard Worker
1569*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1570*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1571*495ae853SAndroid Build Coastguard Worker
1572*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1573*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1574*495ae853SAndroid Build Coastguard Worker
1575*495ae853SAndroid Build Coastguard Worker i4_c_xD = i4_xc0 - i4_c_ref_xD;
1576*495ae853SAndroid Build Coastguard Worker i4_c_yD = i4_yc0 - i4_c_ref_yD;
1577*495ae853SAndroid Build Coastguard Worker
1578*495ae853SAndroid Build Coastguard Worker /* Fill corner sample if unavailable */
1579*495ae853SAndroid Build Coastguard Worker if(!i1_corner_samp_avlbl_flag)
1580*495ae853SAndroid Build Coastguard Worker {
1581*495ae853SAndroid Build Coastguard Worker isvc_corner_samp_dyadic(i4_x0, i4_y0, i4_xD, i4_yD, pu1_refarray_luma,
1582*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb, pu1_refarray_cr);
1583*495ae853SAndroid Build Coastguard Worker }
1584*495ae853SAndroid Build Coastguard Worker
1585*495ae853SAndroid Build Coastguard Worker /* Call the diagonal construction for the 8 rows */
1586*495ae853SAndroid Build Coastguard Worker if(i4_top == i4_left)
1587*495ae853SAndroid Build Coastguard Worker {
1588*495ae853SAndroid Build Coastguard Worker /* if top * left = 1 */
1589*495ae853SAndroid Build Coastguard Worker /* (x0,y0) */
1590*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x0, i4_y0, i4_xD, i4_yD,
1591*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma, DYADIC_REF_W_Y);
1592*495ae853SAndroid Build Coastguard Worker
1593*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1594*495ae853SAndroid Build Coastguard Worker
1595*495ae853SAndroid Build Coastguard Worker /* (x0,y0+1), ..., (x0,y0+7) and */
1596*495ae853SAndroid Build Coastguard Worker /* (x0+1,y0), ..., (x0+1,y0+6) */
1597*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_y0 + 1; i4_y < i4_y0 + 8; i4_y++)
1598*495ae853SAndroid Build Coastguard Worker {
1599*495ae853SAndroid Build Coastguard Worker i4_yD++;
1600*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(
1601*495ae853SAndroid Build Coastguard Worker i4_x0, i4_y, i4_xD, i4_yD, pu1_refarray_luma, DYADIC_REF_W_Y);
1602*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0 + 1] = u1_filled_samp;
1603*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst += DYADIC_REF_W_Y;
1604*495ae853SAndroid Build Coastguard Worker }
1605*495ae853SAndroid Build Coastguard Worker
1606*495ae853SAndroid Build Coastguard Worker /* (x0+1,y0+7) */
1607*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(
1608*495ae853SAndroid Build Coastguard Worker i4_x0 + 1, i4_y0 + 7, i4_xD + 1, i4_yD, pu1_refarray_luma, DYADIC_REF_W_Y);
1609*495ae853SAndroid Build Coastguard Worker }
1610*495ae853SAndroid Build Coastguard Worker else
1611*495ae853SAndroid Build Coastguard Worker {
1612*495ae853SAndroid Build Coastguard Worker /* top * left = -1 */
1613*495ae853SAndroid Build Coastguard Worker /* (x0+1,y0) */
1614*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x0 + 1, i4_y0, i4_xD + 1, i4_yD,
1615*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma, DYADIC_REF_W_Y);
1616*495ae853SAndroid Build Coastguard Worker
1617*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1618*495ae853SAndroid Build Coastguard Worker
1619*495ae853SAndroid Build Coastguard Worker /* (x0,y0), ..., (x0,y0+6) and */
1620*495ae853SAndroid Build Coastguard Worker /* (x0+1,y0+1), ..., (x0+1,y0+7) */
1621*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_y0; i4_y < i4_y0 + 7; i4_y++)
1622*495ae853SAndroid Build Coastguard Worker {
1623*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(
1624*495ae853SAndroid Build Coastguard Worker i4_x0, i4_y, i4_xD, i4_yD, pu1_refarray_luma, DYADIC_REF_W_Y);
1625*495ae853SAndroid Build Coastguard Worker
1626*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst += DYADIC_REF_W_Y;
1627*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x0 + 1] = u1_filled_samp;
1628*495ae853SAndroid Build Coastguard Worker i4_yD++;
1629*495ae853SAndroid Build Coastguard Worker }
1630*495ae853SAndroid Build Coastguard Worker
1631*495ae853SAndroid Build Coastguard Worker /* (x0,y0+7) */
1632*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x0, i4_y0 + 7, i4_xD, i4_yD,
1633*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma, DYADIC_REF_W_Y);
1634*495ae853SAndroid Build Coastguard Worker }
1635*495ae853SAndroid Build Coastguard Worker
1636*495ae853SAndroid Build Coastguard Worker /* For Cb and Cr */
1637*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_yc0; i4_y < i4_yc0 + 4; i4_y++)
1638*495ae853SAndroid Build Coastguard Worker {
1639*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_xc0, i4_y, i4_c_xD, i4_c_yD,
1640*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb, DYADIC_REF_W_C);
1641*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_xc0, i4_y, i4_c_xD, i4_c_yD,
1642*495ae853SAndroid Build Coastguard Worker pu1_refarray_cr, DYADIC_REF_W_C);
1643*495ae853SAndroid Build Coastguard Worker i4_c_yD++;
1644*495ae853SAndroid Build Coastguard Worker }
1645*495ae853SAndroid Build Coastguard Worker }
1646*495ae853SAndroid Build Coastguard Worker
1647*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & TOP_MASK))
1648*495ae853SAndroid Build Coastguard Worker {
1649*495ae853SAndroid Build Coastguard Worker WORD32 i4_xD, i4_yD;
1650*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_xD, i4_c_yD;
1651*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_dst;
1652*495ae853SAndroid Build Coastguard Worker UWORD8 u1_filled_samp;
1653*495ae853SAndroid Build Coastguard Worker
1654*495ae853SAndroid Build Coastguard Worker i1_corner_samp_avlbl_flag = (u1_ny_avlblty & 2) >> 1;
1655*495ae853SAndroid Build Coastguard Worker
1656*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + (i4_top);
1657*495ae853SAndroid Build Coastguard Worker i4_x0 = 2;
1658*495ae853SAndroid Build Coastguard Worker i4_ref_xD = 1;
1659*495ae853SAndroid Build Coastguard Worker if(i4_left > 0)
1660*495ae853SAndroid Build Coastguard Worker {
1661*495ae853SAndroid Build Coastguard Worker i4_x0 += 8;
1662*495ae853SAndroid Build Coastguard Worker i4_ref_xD = 18;
1663*495ae853SAndroid Build Coastguard Worker }
1664*495ae853SAndroid Build Coastguard Worker
1665*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - i4_top - (i4_top >> 1);
1666*495ae853SAndroid Build Coastguard Worker
1667*495ae853SAndroid Build Coastguard Worker i4_xD = i4_x0 - i4_ref_xD;
1668*495ae853SAndroid Build Coastguard Worker i4_yD = i4_y0 - i4_ref_yD;
1669*495ae853SAndroid Build Coastguard Worker
1670*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1671*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1672*495ae853SAndroid Build Coastguard Worker
1673*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1674*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1675*495ae853SAndroid Build Coastguard Worker
1676*495ae853SAndroid Build Coastguard Worker i4_c_xD = i4_xc0 - i4_c_ref_xD;
1677*495ae853SAndroid Build Coastguard Worker i4_c_yD = i4_yc0 - i4_c_ref_yD;
1678*495ae853SAndroid Build Coastguard Worker
1679*495ae853SAndroid Build Coastguard Worker if(!i1_corner_samp_avlbl_flag)
1680*495ae853SAndroid Build Coastguard Worker {
1681*495ae853SAndroid Build Coastguard Worker isvc_corner_samp_dyadic(i4_x0, i4_y0, i4_xD, i4_yD, pu1_refarray_luma,
1682*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb, pu1_refarray_cr);
1683*495ae853SAndroid Build Coastguard Worker }
1684*495ae853SAndroid Build Coastguard Worker
1685*495ae853SAndroid Build Coastguard Worker /* Call the diagonal construction for the 2 rows */
1686*495ae853SAndroid Build Coastguard Worker if(i4_top == i4_left)
1687*495ae853SAndroid Build Coastguard Worker {
1688*495ae853SAndroid Build Coastguard Worker /* if top * left = 1 */
1689*495ae853SAndroid Build Coastguard Worker /* (x0,y0) */
1690*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x0, i4_y0, i4_xD, i4_yD,
1691*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma, DYADIC_REF_W_Y);
1692*495ae853SAndroid Build Coastguard Worker
1693*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_refarray_luma + ((i4_y0 + 1) * DYADIC_REF_W_Y);
1694*495ae853SAndroid Build Coastguard Worker
1695*495ae853SAndroid Build Coastguard Worker /* (x0+1,y0), ..., (x0+7,y0) and */
1696*495ae853SAndroid Build Coastguard Worker /* (x0,y0+1), ..., (x0+6,y0+1) */
1697*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_x0 + 1; i4_x < i4_x0 + 8; i4_x++)
1698*495ae853SAndroid Build Coastguard Worker {
1699*495ae853SAndroid Build Coastguard Worker i4_xD++;
1700*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(
1701*495ae853SAndroid Build Coastguard Worker i4_x, i4_y0, i4_xD, i4_yD, pu1_refarray_luma, DYADIC_REF_W_Y);
1702*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x - 1] = u1_filled_samp;
1703*495ae853SAndroid Build Coastguard Worker }
1704*495ae853SAndroid Build Coastguard Worker
1705*495ae853SAndroid Build Coastguard Worker /* (x0+7,y0+1) */
1706*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(
1707*495ae853SAndroid Build Coastguard Worker i4_x0 + 7, i4_y0 + 1, i4_xD, i4_yD + 1, pu1_refarray_luma, DYADIC_REF_W_Y);
1708*495ae853SAndroid Build Coastguard Worker }
1709*495ae853SAndroid Build Coastguard Worker else
1710*495ae853SAndroid Build Coastguard Worker {
1711*495ae853SAndroid Build Coastguard Worker /* top * left = -1 */
1712*495ae853SAndroid Build Coastguard Worker /* (x0,y0+1) */
1713*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x0, i4_y0 + 1, i4_xD, i4_yD + 1,
1714*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma, DYADIC_REF_W_Y);
1715*495ae853SAndroid Build Coastguard Worker
1716*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst = pu1_refarray_luma + ((i4_y0 + 1) * DYADIC_REF_W_Y);
1717*495ae853SAndroid Build Coastguard Worker
1718*495ae853SAndroid Build Coastguard Worker /* (x0,y0), ..., (x0,y0+6) and */
1719*495ae853SAndroid Build Coastguard Worker /* (x0+1,y0+1), ..., (x0+1,y0+7) */
1720*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_x0; i4_x < i4_x0 + 7; i4_x++)
1721*495ae853SAndroid Build Coastguard Worker {
1722*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(
1723*495ae853SAndroid Build Coastguard Worker i4_x, i4_y0, i4_xD, i4_yD, pu1_refarray_luma, DYADIC_REF_W_Y);
1724*495ae853SAndroid Build Coastguard Worker
1725*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst[i4_x + 1] = u1_filled_samp;
1726*495ae853SAndroid Build Coastguard Worker i4_xD++;
1727*495ae853SAndroid Build Coastguard Worker }
1728*495ae853SAndroid Build Coastguard Worker
1729*495ae853SAndroid Build Coastguard Worker /* (x0+7,y0) */
1730*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x0 + 7, i4_y0, i4_xD, i4_yD,
1731*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma, DYADIC_REF_W_Y);
1732*495ae853SAndroid Build Coastguard Worker }
1733*495ae853SAndroid Build Coastguard Worker
1734*495ae853SAndroid Build Coastguard Worker /* For Cb and Cr */
1735*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_xc0; i4_x < i4_xc0 + 4; i4_x++)
1736*495ae853SAndroid Build Coastguard Worker {
1737*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x, i4_yc0, i4_c_xD, i4_c_yD,
1738*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb, DYADIC_REF_W_C);
1739*495ae853SAndroid Build Coastguard Worker u1_filled_samp = isvc_diagonal_construct_dyadic(i4_x, i4_yc0, i4_c_xD, i4_c_yD,
1740*495ae853SAndroid Build Coastguard Worker pu1_refarray_cr, DYADIC_REF_W_C);
1741*495ae853SAndroid Build Coastguard Worker i4_c_xD++;
1742*495ae853SAndroid Build Coastguard Worker }
1743*495ae853SAndroid Build Coastguard Worker }
1744*495ae853SAndroid Build Coastguard Worker }
1745*495ae853SAndroid Build Coastguard Worker
1746*495ae853SAndroid Build Coastguard Worker if(!(u1_ny_avlblty & TOPLEFT_MASK))
1747*495ae853SAndroid Build Coastguard Worker {
1748*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_dst1, *pu1_tmp_dst2;
1749*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_tmp_src1, *pu1_tmp_src2;
1750*495ae853SAndroid Build Coastguard Worker
1751*495ae853SAndroid Build Coastguard Worker if(u1_ny_avlblty & LEFT_MASK)
1752*495ae853SAndroid Build Coastguard Worker {
1753*495ae853SAndroid Build Coastguard Worker /* (mb_x+left,mb_y) available, (mb_x,mb_y+top) unavailable */
1754*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1755*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + i4_top;
1756*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - i4_top - (i4_top >> 1);
1757*495ae853SAndroid Build Coastguard Worker
1758*495ae853SAndroid Build Coastguard Worker /* Copy (x0,ref_yD), (x0+1,ref_yD) to */
1759*495ae853SAndroid Build Coastguard Worker /* (x0,y0), (x0+1,y0), and (x0,y0+1), (x0+1,y0+1) */
1760*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 = pu1_refarray_luma + (i4_ref_yD * DYADIC_REF_W_Y);
1761*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1762*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_tmp_dst1 + DYADIC_REF_W_Y;
1763*495ae853SAndroid Build Coastguard Worker
1764*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0] = pu1_tmp_src1[i4_x0];
1765*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x0] = pu1_tmp_src1[i4_x0];
1766*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0 + 1] = pu1_tmp_src1[i4_x0 + 1];
1767*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x0 + 1] = pu1_tmp_src1[i4_x0 + 1];
1768*495ae853SAndroid Build Coastguard Worker
1769*495ae853SAndroid Build Coastguard Worker /* Cb and Cr copy */
1770*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1771*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1772*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1773*495ae853SAndroid Build Coastguard Worker
1774*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 = pu1_refarray_cb + (i4_c_ref_yD * DYADIC_REF_W_C);
1775*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_refarray_cb + (i4_yc0 * DYADIC_REF_W_C);
1776*495ae853SAndroid Build Coastguard Worker pu1_tmp_src2 = pu1_refarray_cr + (i4_c_ref_yD * DYADIC_REF_W_C);
1777*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_refarray_cr + (i4_yc0 * DYADIC_REF_W_C);
1778*495ae853SAndroid Build Coastguard Worker
1779*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_xc0] = pu1_tmp_src1[i4_xc0];
1780*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_xc0] = pu1_tmp_src2[i4_xc0];
1781*495ae853SAndroid Build Coastguard Worker }
1782*495ae853SAndroid Build Coastguard Worker else if(u1_ny_avlblty & TOP_MASK)
1783*495ae853SAndroid Build Coastguard Worker {
1784*495ae853SAndroid Build Coastguard Worker /* (mb_x+left,mb_y) unavailable,
1785*495ae853SAndroid Build Coastguard Worker (mb_x,mb_y+top) available */
1786*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1787*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + i4_top;
1788*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - i4_left - (i4_left >> 1);
1789*495ae853SAndroid Build Coastguard Worker
1790*495ae853SAndroid Build Coastguard Worker /* Copy (ref_xD,y0) to (x0,y0) and (x0+1,y0) */
1791*495ae853SAndroid Build Coastguard Worker /* copy (ref_xD,y0+1) to (x0,y0+1) and (x0+1,y0+1) */
1792*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 = pu1_refarray_luma + (i4_y0 * DYADIC_REF_W_Y);
1793*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_tmp_src1;
1794*495ae853SAndroid Build Coastguard Worker pu1_tmp_src2 = pu1_tmp_src1 + DYADIC_REF_W_Y;
1795*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_tmp_src2;
1796*495ae853SAndroid Build Coastguard Worker
1797*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0] = pu1_tmp_src1[i4_ref_xD];
1798*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_x0 + 1] = pu1_tmp_src1[i4_ref_xD];
1799*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x0] = pu1_tmp_src2[i4_ref_xD];
1800*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_x0 + 1] = pu1_tmp_src2[i4_ref_xD];
1801*495ae853SAndroid Build Coastguard Worker
1802*495ae853SAndroid Build Coastguard Worker /* Copy Cb and Cr */
1803*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1804*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1805*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1806*495ae853SAndroid Build Coastguard Worker
1807*495ae853SAndroid Build Coastguard Worker pu1_tmp_src1 = pu1_refarray_cb + (i4_yc0 * DYADIC_REF_W_C);
1808*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1 = pu1_tmp_src1;
1809*495ae853SAndroid Build Coastguard Worker pu1_tmp_src2 = pu1_refarray_cr + (i4_yc0 * DYADIC_REF_W_C);
1810*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2 = pu1_tmp_src2;
1811*495ae853SAndroid Build Coastguard Worker
1812*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst1[i4_xc0] = pu1_tmp_src1[i4_c_ref_xD];
1813*495ae853SAndroid Build Coastguard Worker pu1_tmp_dst2[i4_xc0] = pu1_tmp_src2[i4_c_ref_xD];
1814*495ae853SAndroid Build Coastguard Worker }
1815*495ae853SAndroid Build Coastguard Worker else if(u1_ny_avlblty & (TOP_MASK | LEFT_MASK))
1816*495ae853SAndroid Build Coastguard Worker {
1817*495ae853SAndroid Build Coastguard Worker /* (mb_x+left,mb_y) available,
1818*495ae853SAndroid Build Coastguard Worker (mb_x,mb_y+top) available */
1819*495ae853SAndroid Build Coastguard Worker WORD32 i4_xD, i4_yD;
1820*495ae853SAndroid Build Coastguard Worker WORD32 i4_c_xD, i4_c_yD;
1821*495ae853SAndroid Build Coastguard Worker
1822*495ae853SAndroid Build Coastguard Worker i4_y0 = 9 + (i4_top << 3) + i4_top;
1823*495ae853SAndroid Build Coastguard Worker i4_x0 = 9 + (i4_left << 3) + i4_left;
1824*495ae853SAndroid Build Coastguard Worker
1825*495ae853SAndroid Build Coastguard Worker i4_ref_xD = i4_x0 - i4_left - (i4_left >> 1);
1826*495ae853SAndroid Build Coastguard Worker i4_ref_yD = i4_y0 - i4_top - (i4_top >> 1);
1827*495ae853SAndroid Build Coastguard Worker
1828*495ae853SAndroid Build Coastguard Worker i4_xD = i4_x0 - i4_ref_xD;
1829*495ae853SAndroid Build Coastguard Worker i4_yD = i4_y0 - i4_ref_yD;
1830*495ae853SAndroid Build Coastguard Worker
1831*495ae853SAndroid Build Coastguard Worker i4_xc0 = i4_x0 >> 1;
1832*495ae853SAndroid Build Coastguard Worker i4_yc0 = i4_y0 >> 1;
1833*495ae853SAndroid Build Coastguard Worker
1834*495ae853SAndroid Build Coastguard Worker i4_c_ref_xD = i4_ref_xD >> 1;
1835*495ae853SAndroid Build Coastguard Worker i4_c_ref_yD = i4_ref_yD >> 1;
1836*495ae853SAndroid Build Coastguard Worker
1837*495ae853SAndroid Build Coastguard Worker i4_c_xD = i4_xc0 - i4_c_ref_xD;
1838*495ae853SAndroid Build Coastguard Worker i4_c_yD = i4_yc0 - i4_c_ref_yD;
1839*495ae853SAndroid Build Coastguard Worker
1840*495ae853SAndroid Build Coastguard Worker /* Call diagonal construction for luma */
1841*495ae853SAndroid Build Coastguard Worker for(i4_y = i4_y0; i4_y < i4_y0 + 2; i4_y++)
1842*495ae853SAndroid Build Coastguard Worker {
1843*495ae853SAndroid Build Coastguard Worker for(i4_x = i4_x0; i4_x < i4_x0 + 2; i4_x++)
1844*495ae853SAndroid Build Coastguard Worker {
1845*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_x, i4_y, i4_xD, i4_yD, pu1_refarray_luma,
1846*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_Y);
1847*495ae853SAndroid Build Coastguard Worker i4_xD++;
1848*495ae853SAndroid Build Coastguard Worker }
1849*495ae853SAndroid Build Coastguard Worker i4_yD++;
1850*495ae853SAndroid Build Coastguard Worker i4_xD -= 2;
1851*495ae853SAndroid Build Coastguard Worker }
1852*495ae853SAndroid Build Coastguard Worker
1853*495ae853SAndroid Build Coastguard Worker /* Call diagonal construction for chroma */
1854*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_xc0, i4_yc0, i4_c_xD, i4_c_yD, pu1_refarray_cb,
1855*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_C);
1856*495ae853SAndroid Build Coastguard Worker
1857*495ae853SAndroid Build Coastguard Worker isvc_diagonal_construct_dyadic(i4_xc0, i4_yc0, i4_c_xD, i4_c_yD, pu1_refarray_cr,
1858*495ae853SAndroid Build Coastguard Worker DYADIC_REF_W_C);
1859*495ae853SAndroid Build Coastguard Worker }
1860*495ae853SAndroid Build Coastguard Worker }
1861*495ae853SAndroid Build Coastguard Worker }
1862*495ae853SAndroid Build Coastguard Worker
1863*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1864*495ae853SAndroid Build Coastguard Worker /* */
1865*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_get_ref_layer_mbtype */
1866*495ae853SAndroid Build Coastguard Worker /* */
1867*495ae853SAndroid Build Coastguard Worker /* Description : This function is used to find the mb type of the */
1868*495ae853SAndroid Build Coastguard Worker /* corresponding MB in the reference layer */
1869*495ae853SAndroid Build Coastguard Worker /* */
1870*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_intra_samp_ctxt : intra samp context */
1871*495ae853SAndroid Build Coastguard Worker /* pi1_ref_mb_modes : ref mb modes buffer pointer */
1872*495ae853SAndroid Build Coastguard Worker /* i4_ref_mode_stride : mb mode buffer stride */
1873*495ae853SAndroid Build Coastguard Worker /* i4_x_ref : reference location X */
1874*495ae853SAndroid Build Coastguard Worker /* i4_y_ref : reference location Y */
1875*495ae853SAndroid Build Coastguard Worker /* pi4_mb_type : pointer to store the mb type */
1876*495ae853SAndroid Build Coastguard Worker /* i4_chroma_flag : chroma flag */
1877*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1878*495ae853SAndroid Build Coastguard Worker /* Processing : it derives the bit corresponding to reference MB and */
1879*495ae853SAndroid Build Coastguard Worker /* stores the mbtype as INTRA if the bit is set */
1880*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1881*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1882*495ae853SAndroid Build Coastguard Worker /* */
1883*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1884*495ae853SAndroid Build Coastguard Worker /* */
1885*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1886*495ae853SAndroid Build Coastguard Worker /* */
1887*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1888*495ae853SAndroid Build Coastguard Worker /* 26 06 2009 vijayakumar creation */
1889*495ae853SAndroid Build Coastguard Worker /* */
1890*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_get_ref_layer_mbtype(WORD8 * pi1_ref_mb_modes,WORD32 * pi4_mb_type,WORD8 i1_curr_slice_id,WORD8 i1_cons_intr_samp_flag)1891*495ae853SAndroid Build Coastguard Worker static WORD8 isvc_get_ref_layer_mbtype(WORD8 *pi1_ref_mb_modes, WORD32 *pi4_mb_type,
1892*495ae853SAndroid Build Coastguard Worker WORD8 i1_curr_slice_id, WORD8 i1_cons_intr_samp_flag)
1893*495ae853SAndroid Build Coastguard Worker {
1894*495ae853SAndroid Build Coastguard Worker WORD8 i1_intra_slice_id;
1895*495ae853SAndroid Build Coastguard Worker WORD8 i1_mb_mode;
1896*495ae853SAndroid Build Coastguard Worker
1897*495ae853SAndroid Build Coastguard Worker i1_mb_mode = *pi1_ref_mb_modes;
1898*495ae853SAndroid Build Coastguard Worker i1_mb_mode = (i1_mb_mode < 0) ? i1_mb_mode : SVC_EXTRACT_MB_MODE(*pi1_ref_mb_modes);
1899*495ae853SAndroid Build Coastguard Worker
1900*495ae853SAndroid Build Coastguard Worker if(i1_mb_mode <= SVC_INTER_MB)
1901*495ae853SAndroid Build Coastguard Worker {
1902*495ae853SAndroid Build Coastguard Worker *pi4_mb_type = SVC_INTER_MB;
1903*495ae853SAndroid Build Coastguard Worker i1_intra_slice_id = -1;
1904*495ae853SAndroid Build Coastguard Worker }
1905*495ae853SAndroid Build Coastguard Worker else
1906*495ae853SAndroid Build Coastguard Worker {
1907*495ae853SAndroid Build Coastguard Worker *pi4_mb_type = SVC_INTRA_MB;
1908*495ae853SAndroid Build Coastguard Worker i1_intra_slice_id = i1_mb_mode;
1909*495ae853SAndroid Build Coastguard Worker
1910*495ae853SAndroid Build Coastguard Worker if(1 == i1_cons_intr_samp_flag)
1911*495ae853SAndroid Build Coastguard Worker {
1912*495ae853SAndroid Build Coastguard Worker if(i1_mb_mode != i1_curr_slice_id)
1913*495ae853SAndroid Build Coastguard Worker {
1914*495ae853SAndroid Build Coastguard Worker *pi4_mb_type = SVC_INTER_MB;
1915*495ae853SAndroid Build Coastguard Worker }
1916*495ae853SAndroid Build Coastguard Worker }
1917*495ae853SAndroid Build Coastguard Worker }
1918*495ae853SAndroid Build Coastguard Worker return i1_intra_slice_id;
1919*495ae853SAndroid Build Coastguard Worker }
1920*495ae853SAndroid Build Coastguard Worker
1921*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
1922*495ae853SAndroid Build Coastguard Worker /* */
1923*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_fill_non_ava_pixel */
1924*495ae853SAndroid Build Coastguard Worker /* */
1925*495ae853SAndroid Build Coastguard Worker /* Description : This function does the core pixel level processing */
1926*495ae853SAndroid Build Coastguard Worker /* while filling the non available pixel */
1927*495ae853SAndroid Build Coastguard Worker /* */
1928*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_intra_samp_ctxt : intra sampling context */
1929*495ae853SAndroid Build Coastguard Worker /* i4_refarray_wd : width of the reference array */
1930*495ae853SAndroid Build Coastguard Worker /* i4_refarray_ht : height of the reference array */
1931*495ae853SAndroid Build Coastguard Worker /* ps_mb_coord : current mb coord structure */
1932*495ae853SAndroid Build Coastguard Worker /* i4_chroma_flag : chroam processing flag */
1933*495ae853SAndroid Build Coastguard Worker /* Globals : none */
1934*495ae853SAndroid Build Coastguard Worker /* Processing : based on the map buffer values the non available pixels */
1935*495ae853SAndroid Build Coastguard Worker /* are filled using border extension algorithm */
1936*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
1937*495ae853SAndroid Build Coastguard Worker /* Returns : none */
1938*495ae853SAndroid Build Coastguard Worker /* */
1939*495ae853SAndroid Build Coastguard Worker /* Issues : none */
1940*495ae853SAndroid Build Coastguard Worker /* */
1941*495ae853SAndroid Build Coastguard Worker /* Revision History: */
1942*495ae853SAndroid Build Coastguard Worker /* */
1943*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
1944*495ae853SAndroid Build Coastguard Worker /* 26 06 2009 vijayakumar creation */
1945*495ae853SAndroid Build Coastguard Worker /* 07 03 2011 A.D.Almeida Optimized the filling pixels */
1946*495ae853SAndroid Build Coastguard Worker /* */
1947*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_fill_non_avail_pixel(intra_samp_lyr_ctxt * ps_lyr_ctxt,UWORD8 * pu1_refarray_1,UWORD8 * pu1_refarray_2,WORD32 i4_refarray_stride,WORD32 i4_chroma_flag,UWORD8 u1_avail_map[4][4])1948*495ae853SAndroid Build Coastguard Worker static void isvc_fill_non_avail_pixel(intra_samp_lyr_ctxt *ps_lyr_ctxt, UWORD8 *pu1_refarray_1,
1949*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride,
1950*495ae853SAndroid Build Coastguard Worker WORD32 i4_chroma_flag, UWORD8 u1_avail_map[4][4])
1951*495ae853SAndroid Build Coastguard Worker {
1952*495ae853SAndroid Build Coastguard Worker WORD32 i4_x, i4_y;
1953*495ae853SAndroid Build Coastguard Worker WORD32 i4_corner_pixel_available;
1954*495ae853SAndroid Build Coastguard Worker
1955*495ae853SAndroid Build Coastguard Worker seg_lookup_desc_t *ps_segments_x;
1956*495ae853SAndroid Build Coastguard Worker seg_lookup_desc_t *ps_segments_y;
1957*495ae853SAndroid Build Coastguard Worker seg_description_t *ps_seg_desc_x, *ps_seg_desc_y;
1958*495ae853SAndroid Build Coastguard Worker seg_description_t *ps_seg_x_tmp, *ps_seg_y_tmp;
1959*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_sgmts_x, u1_num_sgmts_y;
1960*495ae853SAndroid Build Coastguard Worker
1961*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_offset;
1962*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_offset;
1963*495ae853SAndroid Build Coastguard Worker WORD32 i4_refmb_wd;
1964*495ae853SAndroid Build Coastguard Worker WORD32 i4_refmb_ht;
1965*495ae853SAndroid Build Coastguard Worker WORD32 i4_xr_index, i4_yr_index;
1966*495ae853SAndroid Build Coastguard Worker WORD32 i4_j, i4_i;
1967*495ae853SAndroid Build Coastguard Worker WORD32 i4_cur_x;
1968*495ae853SAndroid Build Coastguard Worker UWORD32 u4_lookup_4bit, u4_lookup_5bit, u4_4thbit;
1969*495ae853SAndroid Build Coastguard Worker WORD32 i4_pad_size;
1970*495ae853SAndroid Build Coastguard Worker
1971*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_min;
1972*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_min;
1973*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_start_pos, i4_y_start_pos;
1974*495ae853SAndroid Build Coastguard Worker
1975*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_ref_idx_x, *pu1_ref_idx_y;
1976*495ae853SAndroid Build Coastguard Worker
1977*495ae853SAndroid Build Coastguard Worker PF_INTRA_SAMP_PADDING *pf_intra_samp_padding;
1978*495ae853SAndroid Build Coastguard Worker PF_INTRA_SAMP_PADDING **pf_intra_samp_lookup;
1979*495ae853SAndroid Build Coastguard Worker
1980*495ae853SAndroid Build Coastguard Worker i4_x_offset = ps_lyr_ctxt->ps_offsets->i4_abscissa;
1981*495ae853SAndroid Build Coastguard Worker i4_y_offset = ps_lyr_ctxt->ps_offsets->i4_ordinate;
1982*495ae853SAndroid Build Coastguard Worker
1983*495ae853SAndroid Build Coastguard Worker i4_refmb_wd = (MB_SIZE >> i4_chroma_flag) - 1;
1984*495ae853SAndroid Build Coastguard Worker i4_refmb_ht = (MB_SIZE >> i4_chroma_flag) - 1;
1985*495ae853SAndroid Build Coastguard Worker
1986*495ae853SAndroid Build Coastguard Worker if(0 == i4_chroma_flag)
1987*495ae853SAndroid Build Coastguard Worker {
1988*495ae853SAndroid Build Coastguard Worker pf_intra_samp_lookup = gpf_lookup_fxns_luma;
1989*495ae853SAndroid Build Coastguard Worker }
1990*495ae853SAndroid Build Coastguard Worker else
1991*495ae853SAndroid Build Coastguard Worker {
1992*495ae853SAndroid Build Coastguard Worker pf_intra_samp_lookup = gpf_lookup_fxns_chroma;
1993*495ae853SAndroid Build Coastguard Worker }
1994*495ae853SAndroid Build Coastguard Worker
1995*495ae853SAndroid Build Coastguard Worker i4_x_min = ps_lyr_ctxt->i2_x_min_pos;
1996*495ae853SAndroid Build Coastguard Worker i4_y_min = ps_lyr_ctxt->i2_y_min_pos;
1997*495ae853SAndroid Build Coastguard Worker
1998*495ae853SAndroid Build Coastguard Worker i4_pad_size = 2 >> i4_chroma_flag;
1999*495ae853SAndroid Build Coastguard Worker i4_x_start_pos = (i4_x_min - i4_pad_size);
2000*495ae853SAndroid Build Coastguard Worker i4_y_start_pos = (i4_y_min - i4_pad_size);
2001*495ae853SAndroid Build Coastguard Worker
2002*495ae853SAndroid Build Coastguard Worker i4_xr_index = (i4_x_start_pos + i4_x_offset) & i4_refmb_wd;
2003*495ae853SAndroid Build Coastguard Worker i4_yr_index = (i4_y_start_pos + i4_y_offset) & i4_refmb_ht;
2004*495ae853SAndroid Build Coastguard Worker
2005*495ae853SAndroid Build Coastguard Worker ps_segments_x = (ps_lyr_ctxt->as_seg_lookup_horz + i4_xr_index);
2006*495ae853SAndroid Build Coastguard Worker ps_segments_y = (ps_lyr_ctxt->as_seg_lookup_vert + i4_yr_index);
2007*495ae853SAndroid Build Coastguard Worker
2008*495ae853SAndroid Build Coastguard Worker u1_num_sgmts_x = ps_segments_x->u1_num_segments;
2009*495ae853SAndroid Build Coastguard Worker u1_num_sgmts_y = ps_segments_y->u1_num_segments;
2010*495ae853SAndroid Build Coastguard Worker
2011*495ae853SAndroid Build Coastguard Worker ps_seg_desc_x = ps_segments_x->s_segments;
2012*495ae853SAndroid Build Coastguard Worker ps_seg_desc_y = ps_segments_y->s_segments;
2013*495ae853SAndroid Build Coastguard Worker
2014*495ae853SAndroid Build Coastguard Worker pu1_ref_idx_x = &(ps_lyr_ctxt->au1_refarray_x_idx[0]);
2015*495ae853SAndroid Build Coastguard Worker pu1_ref_idx_y = &(ps_lyr_ctxt->au1_refarray_y_idx[0]);
2016*495ae853SAndroid Build Coastguard Worker
2017*495ae853SAndroid Build Coastguard Worker i4_cur_x = pu1_ref_idx_x[i4_x_start_pos];
2018*495ae853SAndroid Build Coastguard Worker
2019*495ae853SAndroid Build Coastguard Worker u4_4thbit = ps_segments_x->u4_start_pos;
2020*495ae853SAndroid Build Coastguard Worker
2021*495ae853SAndroid Build Coastguard Worker for(i4_j = 0; i4_j < u1_num_sgmts_y; i4_j++)
2022*495ae853SAndroid Build Coastguard Worker {
2023*495ae853SAndroid Build Coastguard Worker UWORD8 i4_idx_a, i4_idx_b;
2024*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_ht, u1_seg_wd;
2025*495ae853SAndroid Build Coastguard Worker UWORD8 u1_mb_adjoin_x, u1_mb_adjoin_y;
2026*495ae853SAndroid Build Coastguard Worker WORD8 i1_nearst_mb_bdry_x, i1_nearst_mb_bdry_y;
2027*495ae853SAndroid Build Coastguard Worker UWORD32 u4_num_valid_segs;
2028*495ae853SAndroid Build Coastguard Worker WORD32 i4_idx_a_plus_ny, i4_idx_b_plus_nx, i4_index;
2029*495ae853SAndroid Build Coastguard Worker WORD8 i1_yd_index, i1_xd_index;
2030*495ae853SAndroid Build Coastguard Worker
2031*495ae853SAndroid Build Coastguard Worker ps_seg_y_tmp = &ps_seg_desc_y[i4_j];
2032*495ae853SAndroid Build Coastguard Worker
2033*495ae853SAndroid Build Coastguard Worker i4_y = i4_y_start_pos + ps_seg_y_tmp->u1_seg_off;
2034*495ae853SAndroid Build Coastguard Worker u1_seg_ht = ps_seg_y_tmp->u1_seg_dim;
2035*495ae853SAndroid Build Coastguard Worker i1_yd_index = ps_seg_y_tmp->i1_dist_idx;
2036*495ae853SAndroid Build Coastguard Worker i1_nearst_mb_bdry_y = ps_seg_y_tmp->i1_nearst_mb_bdry;
2037*495ae853SAndroid Build Coastguard Worker u1_mb_adjoin_y = ps_seg_y_tmp->u1_mb_adjoin;
2038*495ae853SAndroid Build Coastguard Worker
2039*495ae853SAndroid Build Coastguard Worker i4_idx_a = pu1_ref_idx_y[i4_y];
2040*495ae853SAndroid Build Coastguard Worker
2041*495ae853SAndroid Build Coastguard Worker i4_idx_a_plus_ny = (i4_idx_a + i1_nearst_mb_bdry_y);
2042*495ae853SAndroid Build Coastguard Worker
2043*495ae853SAndroid Build Coastguard Worker /* Pack the availabilities of the next three horizontal MBs in 3bit
2044*495ae853SAndroid Build Coastguard Worker format and 4th bit indicating if the start position is greater
2045*495ae853SAndroid Build Coastguard Worker than the mb_width/2
2046*495ae853SAndroid Build Coastguard Worker */
2047*495ae853SAndroid Build Coastguard Worker u4_lookup_4bit = u4_4thbit | u1_avail_map[i4_idx_a][i4_cur_x + 2] << 2 |
2048*495ae853SAndroid Build Coastguard Worker u1_avail_map[i4_idx_a][i4_cur_x + 1] << 1 |
2049*495ae853SAndroid Build Coastguard Worker u1_avail_map[i4_idx_a][i4_cur_x];
2050*495ae853SAndroid Build Coastguard Worker
2051*495ae853SAndroid Build Coastguard Worker u4_num_valid_segs = gu4_valid_segs_lookup[u4_lookup_4bit];
2052*495ae853SAndroid Build Coastguard Worker
2053*495ae853SAndroid Build Coastguard Worker i4_i = CLZ(~u4_num_valid_segs);
2054*495ae853SAndroid Build Coastguard Worker u4_num_valid_segs <<= (i4_i + 1);
2055*495ae853SAndroid Build Coastguard Worker
2056*495ae853SAndroid Build Coastguard Worker for(; i4_i < u1_num_sgmts_x; i4_i++)
2057*495ae853SAndroid Build Coastguard Worker {
2058*495ae853SAndroid Build Coastguard Worker ps_seg_x_tmp = &ps_seg_desc_x[i4_i];
2059*495ae853SAndroid Build Coastguard Worker
2060*495ae853SAndroid Build Coastguard Worker i4_x = i4_x_start_pos + ps_seg_x_tmp->u1_seg_off;
2061*495ae853SAndroid Build Coastguard Worker i4_idx_b = pu1_ref_idx_x[i4_x];
2062*495ae853SAndroid Build Coastguard Worker
2063*495ae853SAndroid Build Coastguard Worker u1_seg_wd = ps_seg_x_tmp->u1_seg_dim;
2064*495ae853SAndroid Build Coastguard Worker i1_xd_index = ps_seg_x_tmp->i1_dist_idx;
2065*495ae853SAndroid Build Coastguard Worker i1_nearst_mb_bdry_x = ps_seg_x_tmp->i1_nearst_mb_bdry;
2066*495ae853SAndroid Build Coastguard Worker u1_mb_adjoin_x = ps_seg_x_tmp->u1_mb_adjoin;
2067*495ae853SAndroid Build Coastguard Worker
2068*495ae853SAndroid Build Coastguard Worker i4_idx_b_plus_nx = (i4_idx_b + i1_nearst_mb_bdry_x);
2069*495ae853SAndroid Build Coastguard Worker
2070*495ae853SAndroid Build Coastguard Worker /* Find the avalability of (x,y-Yd),(x-Xd,y),(x-Xd,y-Yd) and pack
2071*495ae853SAndroid Build Coastguard Worker it to 3 bits.
2072*495ae853SAndroid Build Coastguard Worker */
2073*495ae853SAndroid Build Coastguard Worker u4_lookup_5bit = u1_avail_map[i4_idx_a_plus_ny][i4_idx_b_plus_nx] << 2 |
2074*495ae853SAndroid Build Coastguard Worker u1_avail_map[i4_idx_a_plus_ny][i4_idx_b] << 1 |
2075*495ae853SAndroid Build Coastguard Worker u1_avail_map[i4_idx_a][i4_idx_b_plus_nx] | u1_mb_adjoin_x |
2076*495ae853SAndroid Build Coastguard Worker u1_mb_adjoin_y;
2077*495ae853SAndroid Build Coastguard Worker
2078*495ae853SAndroid Build Coastguard Worker i4_corner_pixel_available = u1_avail_map[i4_idx_a_plus_ny][i4_idx_b_plus_nx];
2079*495ae853SAndroid Build Coastguard Worker
2080*495ae853SAndroid Build Coastguard Worker /* Use a function pointer table based on lookup to compute
2081*495ae853SAndroid Build Coastguard Worker Left,Top,Bottom,Right,Diagonal padding.
2082*495ae853SAndroid Build Coastguard Worker */
2083*495ae853SAndroid Build Coastguard Worker pf_intra_samp_padding = pf_intra_samp_lookup[u4_lookup_5bit];
2084*495ae853SAndroid Build Coastguard Worker
2085*495ae853SAndroid Build Coastguard Worker if(pf_intra_samp_padding != NULL)
2086*495ae853SAndroid Build Coastguard Worker {
2087*495ae853SAndroid Build Coastguard Worker pf_intra_samp_padding(i4_x, i4_y, i1_xd_index, i1_yd_index, u1_seg_wd, u1_seg_ht,
2088*495ae853SAndroid Build Coastguard Worker pu1_refarray_1, pu1_refarray_2, i4_refarray_stride,
2089*495ae853SAndroid Build Coastguard Worker u1_mb_adjoin_x, u1_mb_adjoin_y, i4_corner_pixel_available);
2090*495ae853SAndroid Build Coastguard Worker }
2091*495ae853SAndroid Build Coastguard Worker
2092*495ae853SAndroid Build Coastguard Worker /* increment to the next unavailable segment */
2093*495ae853SAndroid Build Coastguard Worker i4_index = CLZ(~u4_num_valid_segs);
2094*495ae853SAndroid Build Coastguard Worker u4_num_valid_segs <<= (i4_index + 1);
2095*495ae853SAndroid Build Coastguard Worker i4_i += i4_index;
2096*495ae853SAndroid Build Coastguard Worker }
2097*495ae853SAndroid Build Coastguard Worker }
2098*495ae853SAndroid Build Coastguard Worker }
2099*495ae853SAndroid Build Coastguard Worker
2100*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2101*495ae853SAndroid Build Coastguard Worker /* */
2102*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_intra_resamp_generate_segment_lookup */
2103*495ae853SAndroid Build Coastguard Worker /* */
2104*495ae853SAndroid Build Coastguard Worker /* Description : This function generates segment lookup used to derive */
2105*495ae853SAndroid Build Coastguard Worker /* segments which have to be be intra resampled */
2106*495ae853SAndroid Build Coastguard Worker /* */
2107*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_lookup_table : look up table */
2108*495ae853SAndroid Build Coastguard Worker /* i4_dimension : dimension of the block which is used in*/
2109*495ae853SAndroid Build Coastguard Worker /* resampling process. */
2110*495ae853SAndroid Build Coastguard Worker /* i4_mb_size : size of the mb */
2111*495ae853SAndroid Build Coastguard Worker /* Globals : None */
2112*495ae853SAndroid Build Coastguard Worker /* Processing : This function generates segment lookup used to derive */
2113*495ae853SAndroid Build Coastguard Worker /* segments which have to be be intra resampled */
2114*495ae853SAndroid Build Coastguard Worker /* Outputs : none */
2115*495ae853SAndroid Build Coastguard Worker /* Returns : none */
2116*495ae853SAndroid Build Coastguard Worker /* */
2117*495ae853SAndroid Build Coastguard Worker /* Issues : None */
2118*495ae853SAndroid Build Coastguard Worker /* */
2119*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2120*495ae853SAndroid Build Coastguard Worker /* */
2121*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2122*495ae853SAndroid Build Coastguard Worker /* 03 03 2011 A.D.Almeida Creation */
2123*495ae853SAndroid Build Coastguard Worker /* */
isvc_intra_resamp_generate_segment_lookup(seg_lookup_desc_t * ps_seg_lookup_table,WORD32 i4_dimension,WORD32 i4_mb_size,WORD32 i4_shift_val)2124*495ae853SAndroid Build Coastguard Worker void isvc_intra_resamp_generate_segment_lookup(seg_lookup_desc_t *ps_seg_lookup_table,
2125*495ae853SAndroid Build Coastguard Worker WORD32 i4_dimension, WORD32 i4_mb_size,
2126*495ae853SAndroid Build Coastguard Worker WORD32 i4_shift_val)
2127*495ae853SAndroid Build Coastguard Worker {
2128*495ae853SAndroid Build Coastguard Worker WORD32 i4_x;
2129*495ae853SAndroid Build Coastguard Worker WORD32 i4_position, i4_dist_prev_mb, i4_dist_next_mb;
2130*495ae853SAndroid Build Coastguard Worker UWORD8 u1_seg_dim;
2131*495ae853SAndroid Build Coastguard Worker UWORD8 u1_num_sgmts;
2132*495ae853SAndroid Build Coastguard Worker WORD32 i4_block_size = i4_mb_size >> 1;
2133*495ae853SAndroid Build Coastguard Worker UWORD8 u1_offset = 0;
2134*495ae853SAndroid Build Coastguard Worker seg_lookup_desc_t *ps_segments;
2135*495ae853SAndroid Build Coastguard Worker seg_description_t *ps_seg_desc;
2136*495ae853SAndroid Build Coastguard Worker
2137*495ae853SAndroid Build Coastguard Worker memset(ps_seg_lookup_table, 0, i4_mb_size * sizeof(seg_lookup_desc_t));
2138*495ae853SAndroid Build Coastguard Worker
2139*495ae853SAndroid Build Coastguard Worker for(i4_x = 0; i4_x < i4_mb_size; i4_x++)
2140*495ae853SAndroid Build Coastguard Worker {
2141*495ae853SAndroid Build Coastguard Worker ps_segments = &ps_seg_lookup_table[i4_x];
2142*495ae853SAndroid Build Coastguard Worker ps_seg_desc = ps_segments->s_segments;
2143*495ae853SAndroid Build Coastguard Worker i4_position = i4_x;
2144*495ae853SAndroid Build Coastguard Worker
2145*495ae853SAndroid Build Coastguard Worker if(i4_x >= i4_block_size)
2146*495ae853SAndroid Build Coastguard Worker {
2147*495ae853SAndroid Build Coastguard Worker /* set the fourth bit so that later it can be directly OR ed */
2148*495ae853SAndroid Build Coastguard Worker ps_segments->u4_start_pos = 8;
2149*495ae853SAndroid Build Coastguard Worker }
2150*495ae853SAndroid Build Coastguard Worker else
2151*495ae853SAndroid Build Coastguard Worker {
2152*495ae853SAndroid Build Coastguard Worker ps_segments->u4_start_pos = 0;
2153*495ae853SAndroid Build Coastguard Worker }
2154*495ae853SAndroid Build Coastguard Worker
2155*495ae853SAndroid Build Coastguard Worker u1_num_sgmts = 0;
2156*495ae853SAndroid Build Coastguard Worker u1_offset = 0;
2157*495ae853SAndroid Build Coastguard Worker
2158*495ae853SAndroid Build Coastguard Worker while(i4_position < (i4_x + i4_dimension))
2159*495ae853SAndroid Build Coastguard Worker {
2160*495ae853SAndroid Build Coastguard Worker /* check and fill the nearest mb boundry flag */
2161*495ae853SAndroid Build Coastguard Worker if((i4_position & (i4_mb_size - 1)) < i4_block_size)
2162*495ae853SAndroid Build Coastguard Worker {
2163*495ae853SAndroid Build Coastguard Worker ps_seg_desc->i1_nearst_mb_bdry = -1;
2164*495ae853SAndroid Build Coastguard Worker }
2165*495ae853SAndroid Build Coastguard Worker else
2166*495ae853SAndroid Build Coastguard Worker {
2167*495ae853SAndroid Build Coastguard Worker ps_seg_desc->i1_nearst_mb_bdry = 1;
2168*495ae853SAndroid Build Coastguard Worker }
2169*495ae853SAndroid Build Coastguard Worker
2170*495ae853SAndroid Build Coastguard Worker /* find the distance from the previous MB for start of segment*/
2171*495ae853SAndroid Build Coastguard Worker i4_dist_prev_mb = (i4_position & (i4_mb_size - 1));
2172*495ae853SAndroid Build Coastguard Worker
2173*495ae853SAndroid Build Coastguard Worker ps_seg_desc->i1_dist_idx =
2174*495ae853SAndroid Build Coastguard Worker ((i4_dist_prev_mb >= i4_mb_size >> 1) ? (i4_mb_size - i4_dist_prev_mb)
2175*495ae853SAndroid Build Coastguard Worker : -(i4_dist_prev_mb + 1));
2176*495ae853SAndroid Build Coastguard Worker
2177*495ae853SAndroid Build Coastguard Worker /* find the size of the segment */
2178*495ae853SAndroid Build Coastguard Worker u1_seg_dim = (i4_block_size - (i4_position & (i4_block_size - 1)));
2179*495ae853SAndroid Build Coastguard Worker i4_position += u1_seg_dim;
2180*495ae853SAndroid Build Coastguard Worker if(i4_position > (i4_x + i4_dimension))
2181*495ae853SAndroid Build Coastguard Worker {
2182*495ae853SAndroid Build Coastguard Worker i4_position = (i4_x + i4_dimension);
2183*495ae853SAndroid Build Coastguard Worker u1_seg_dim = (i4_position & (i4_block_size - 1));
2184*495ae853SAndroid Build Coastguard Worker }
2185*495ae853SAndroid Build Coastguard Worker
2186*495ae853SAndroid Build Coastguard Worker /* find the distance from the next MB for end of segment */
2187*495ae853SAndroid Build Coastguard Worker i4_dist_next_mb = (i4_position & (i4_mb_size - 1));
2188*495ae853SAndroid Build Coastguard Worker
2189*495ae853SAndroid Build Coastguard Worker ps_seg_desc->u1_seg_dim = u1_seg_dim;
2190*495ae853SAndroid Build Coastguard Worker ps_seg_desc->u1_seg_off = u1_offset;
2191*495ae853SAndroid Build Coastguard Worker
2192*495ae853SAndroid Build Coastguard Worker /* check if the segment has a adjoining MB edge */
2193*495ae853SAndroid Build Coastguard Worker if(i4_dist_prev_mb == 0)
2194*495ae853SAndroid Build Coastguard Worker {
2195*495ae853SAndroid Build Coastguard Worker if(0 == u1_num_sgmts)
2196*495ae853SAndroid Build Coastguard Worker {
2197*495ae853SAndroid Build Coastguard Worker ps_seg_desc->u1_mb_adjoin = 0;
2198*495ae853SAndroid Build Coastguard Worker }
2199*495ae853SAndroid Build Coastguard Worker else
2200*495ae853SAndroid Build Coastguard Worker {
2201*495ae853SAndroid Build Coastguard Worker ps_seg_desc->u1_mb_adjoin = 1 << i4_shift_val;
2202*495ae853SAndroid Build Coastguard Worker }
2203*495ae853SAndroid Build Coastguard Worker }
2204*495ae853SAndroid Build Coastguard Worker else if(i4_dist_next_mb == 0)
2205*495ae853SAndroid Build Coastguard Worker {
2206*495ae853SAndroid Build Coastguard Worker if(i4_position == (i4_x + i4_dimension))
2207*495ae853SAndroid Build Coastguard Worker {
2208*495ae853SAndroid Build Coastguard Worker ps_seg_desc->u1_mb_adjoin = 0;
2209*495ae853SAndroid Build Coastguard Worker }
2210*495ae853SAndroid Build Coastguard Worker else
2211*495ae853SAndroid Build Coastguard Worker {
2212*495ae853SAndroid Build Coastguard Worker ps_seg_desc->u1_mb_adjoin = 1 << i4_shift_val;
2213*495ae853SAndroid Build Coastguard Worker }
2214*495ae853SAndroid Build Coastguard Worker }
2215*495ae853SAndroid Build Coastguard Worker else
2216*495ae853SAndroid Build Coastguard Worker {
2217*495ae853SAndroid Build Coastguard Worker ps_seg_desc->u1_mb_adjoin = 0;
2218*495ae853SAndroid Build Coastguard Worker }
2219*495ae853SAndroid Build Coastguard Worker
2220*495ae853SAndroid Build Coastguard Worker u1_offset += u1_seg_dim;
2221*495ae853SAndroid Build Coastguard Worker u1_num_sgmts++;
2222*495ae853SAndroid Build Coastguard Worker ps_seg_desc++;
2223*495ae853SAndroid Build Coastguard Worker }
2224*495ae853SAndroid Build Coastguard Worker
2225*495ae853SAndroid Build Coastguard Worker /* fill the number of segments for this position */
2226*495ae853SAndroid Build Coastguard Worker ps_segments->u1_num_segments = u1_num_sgmts;
2227*495ae853SAndroid Build Coastguard Worker }
2228*495ae853SAndroid Build Coastguard Worker }
2229*495ae853SAndroid Build Coastguard Worker
isvc_reflayer_construction(void * pv_intra_samp_ctxt,UWORD8 * pu1_inp_1,WORD32 i4_inp_stride,WORD32 i4_refarray_stride,mem_element_t * ps_ref_mb_mode_map,WORD32 i4_chroma_flag)2230*495ae853SAndroid Build Coastguard Worker static void isvc_reflayer_construction(void *pv_intra_samp_ctxt, UWORD8 *pu1_inp_1,
2231*495ae853SAndroid Build Coastguard Worker WORD32 i4_inp_stride, WORD32 i4_refarray_stride,
2232*495ae853SAndroid Build Coastguard Worker mem_element_t *ps_ref_mb_mode_map, WORD32 i4_chroma_flag)
2233*495ae853SAndroid Build Coastguard Worker {
2234*495ae853SAndroid Build Coastguard Worker WORD32 i4_x, i4_y;
2235*495ae853SAndroid Build Coastguard Worker
2236*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt;
2237*495ae853SAndroid Build Coastguard Worker intra_samp_lyr_ctxt *ps_lyr_ctxt;
2238*495ae853SAndroid Build Coastguard Worker WORD8 *pi1_ref_mb_modes, *pi1_ref_mb_modes_bkp_1;
2239*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_mode_stride;
2240*495ae853SAndroid Build Coastguard Worker WORD32 i4_element_size;
2241*495ae853SAndroid Build Coastguard Worker WORD32 i4_dummy;
2242*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_ht, i4_mb_wd;
2243*495ae853SAndroid Build Coastguard Worker
2244*495ae853SAndroid Build Coastguard Worker /* 4x4 mb grid buffer to store the mb availablity */
2245*495ae853SAndroid Build Coastguard Worker UWORD8 u1_map_buf[BLK_SIZE][BLK_SIZE];
2246*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_wd;
2247*495ae853SAndroid Build Coastguard Worker WORD32 i4_ref_ht;
2248*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_offset;
2249*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_offset;
2250*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_wd;
2251*495ae853SAndroid Build Coastguard Worker WORD32 i4_refarray_ht;
2252*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_type;
2253*495ae853SAndroid Build Coastguard Worker WORD8 i1_cons_intr_samp_flag;
2254*495ae853SAndroid Build Coastguard Worker WORD8 i1_slice_id = 0;
2255*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_wd_sft, i4_mb_ht_sft;
2256*495ae853SAndroid Build Coastguard Worker
2257*495ae853SAndroid Build Coastguard Worker WORD32 i4_unfill_check;
2258*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_1, *pu1_refarray_2;
2259*495ae853SAndroid Build Coastguard Worker
2260*495ae853SAndroid Build Coastguard Worker UNUSED(i4_dummy);
2261*495ae853SAndroid Build Coastguard Worker memset(&u1_map_buf[0][0], 0, 16);
2262*495ae853SAndroid Build Coastguard Worker
2263*495ae853SAndroid Build Coastguard Worker ps_ctxt = (intra_sampling_ctxt_t *) pv_intra_samp_ctxt;
2264*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[ps_ctxt->i4_res_lyr_id];
2265*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes = (WORD8 *) ps_ref_mb_mode_map->pv_buffer;
2266*495ae853SAndroid Build Coastguard Worker i4_ref_mode_stride = ps_ref_mb_mode_map->i4_num_element_stride;
2267*495ae853SAndroid Build Coastguard Worker i4_element_size = ps_ref_mb_mode_map->i4_element_size;
2268*495ae853SAndroid Build Coastguard Worker
2269*495ae853SAndroid Build Coastguard Worker /* get the condtrained intra sampling flag */
2270*495ae853SAndroid Build Coastguard Worker i1_cons_intr_samp_flag = ps_lyr_ctxt->i1_constrained_intra_rsmpl_flag;
2271*495ae853SAndroid Build Coastguard Worker
2272*495ae853SAndroid Build Coastguard Worker ASSERT(NULL != pi1_ref_mb_modes);
2273*495ae853SAndroid Build Coastguard Worker
2274*495ae853SAndroid Build Coastguard Worker {
2275*495ae853SAndroid Build Coastguard Worker WORD32 i4_base_width = ps_lyr_ctxt->i4_ref_width;
2276*495ae853SAndroid Build Coastguard Worker WORD32 i4_base_height = ps_lyr_ctxt->i4_ref_height;
2277*495ae853SAndroid Build Coastguard Worker
2278*495ae853SAndroid Build Coastguard Worker i4_ref_wd = i4_base_width >> i4_chroma_flag;
2279*495ae853SAndroid Build Coastguard Worker i4_ref_ht = i4_base_height >> i4_chroma_flag;
2280*495ae853SAndroid Build Coastguard Worker
2281*495ae853SAndroid Build Coastguard Worker i4_mb_wd_sft = (MB_WIDTH_SHIFT - i4_chroma_flag);
2282*495ae853SAndroid Build Coastguard Worker i4_mb_ht_sft = (MB_HEIGHT_SHIFT - i4_chroma_flag);
2283*495ae853SAndroid Build Coastguard Worker }
2284*495ae853SAndroid Build Coastguard Worker
2285*495ae853SAndroid Build Coastguard Worker i4_x_offset = ps_lyr_ctxt->ps_offsets->i4_abscissa;
2286*495ae853SAndroid Build Coastguard Worker i4_y_offset = ps_lyr_ctxt->ps_offsets->i4_ordinate;
2287*495ae853SAndroid Build Coastguard Worker i4_refarray_wd = ps_lyr_ctxt->ps_ref_array_dims->i4_abscissa;
2288*495ae853SAndroid Build Coastguard Worker i4_refarray_ht = ps_lyr_ctxt->ps_ref_array_dims->i4_ordinate;
2289*495ae853SAndroid Build Coastguard Worker
2290*495ae853SAndroid Build Coastguard Worker i4_mb_wd = (MB_SIZE >> i4_chroma_flag);
2291*495ae853SAndroid Build Coastguard Worker i4_mb_ht = (MB_SIZE >> i4_chroma_flag);
2292*495ae853SAndroid Build Coastguard Worker
2293*495ae853SAndroid Build Coastguard Worker if(1 == i1_cons_intr_samp_flag)
2294*495ae853SAndroid Build Coastguard Worker {
2295*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_min, i4_x_max;
2296*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_min, i4_y_max;
2297*495ae853SAndroid Build Coastguard Worker
2298*495ae853SAndroid Build Coastguard Worker i4_x_min = ps_lyr_ctxt->i2_x_min_pos;
2299*495ae853SAndroid Build Coastguard Worker i4_x_max = ps_lyr_ctxt->i2_x_max_pos;
2300*495ae853SAndroid Build Coastguard Worker i4_y_min = ps_lyr_ctxt->i2_y_min_pos;
2301*495ae853SAndroid Build Coastguard Worker i4_y_max = ps_lyr_ctxt->i2_y_max_pos;
2302*495ae853SAndroid Build Coastguard Worker
2303*495ae853SAndroid Build Coastguard Worker i4_mb_type = SVC_INTER_MB;
2304*495ae853SAndroid Build Coastguard Worker {
2305*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_ref;
2306*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_ref;
2307*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_x, i4_mb_y;
2308*495ae853SAndroid Build Coastguard Worker
2309*495ae853SAndroid Build Coastguard Worker /* derive local varaibles */
2310*495ae853SAndroid Build Coastguard Worker i4_y_ref = (i4_y_min + 1) + i4_y_offset;
2311*495ae853SAndroid Build Coastguard Worker i4_x_ref = (i4_x_min + 1) + i4_x_offset;
2312*495ae853SAndroid Build Coastguard Worker
2313*495ae853SAndroid Build Coastguard Worker i4_mb_x = (i4_x_ref >> i4_mb_wd_sft);
2314*495ae853SAndroid Build Coastguard Worker i4_mb_y = (i4_y_ref >> i4_mb_ht_sft);
2315*495ae853SAndroid Build Coastguard Worker
2316*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes = (WORD8 *) ps_ref_mb_mode_map->pv_buffer;
2317*495ae853SAndroid Build Coastguard Worker
2318*495ae853SAndroid Build Coastguard Worker /* get the location of the byte which has the current mb mode */
2319*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_mb_y * i4_ref_mode_stride * i4_element_size);
2320*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_mb_x * i4_element_size);
2321*495ae853SAndroid Build Coastguard Worker }
2322*495ae853SAndroid Build Coastguard Worker
2323*495ae853SAndroid Build Coastguard Worker for(i4_y = (i4_y_min + 1); i4_y <= (i4_y_max - 1);)
2324*495ae853SAndroid Build Coastguard Worker {
2325*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_ref;
2326*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_ref;
2327*495ae853SAndroid Build Coastguard Worker WORD32 i4_distleftX, i4_rangeX;
2328*495ae853SAndroid Build Coastguard Worker WORD32 i4_disttopY, i4_rangeY;
2329*495ae853SAndroid Build Coastguard Worker
2330*495ae853SAndroid Build Coastguard Worker i4_y_ref = (i4_y + i4_y_offset);
2331*495ae853SAndroid Build Coastguard Worker i4_disttopY = (i4_y_ref) & (i4_mb_ht - 1);
2332*495ae853SAndroid Build Coastguard Worker i4_rangeY = (i4_mb_ht - i4_disttopY);
2333*495ae853SAndroid Build Coastguard Worker
2334*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes_bkp_1 = pi1_ref_mb_modes;
2335*495ae853SAndroid Build Coastguard Worker
2336*495ae853SAndroid Build Coastguard Worker for(i4_x = (i4_x_min + 1); i4_x <= (i4_x_max - 1);)
2337*495ae853SAndroid Build Coastguard Worker {
2338*495ae853SAndroid Build Coastguard Worker i4_x_ref = (i4_x + i4_x_offset);
2339*495ae853SAndroid Build Coastguard Worker i4_distleftX = (i4_x_ref) & (i4_mb_wd - 1);
2340*495ae853SAndroid Build Coastguard Worker i4_rangeX = (i4_mb_wd - i4_distleftX);
2341*495ae853SAndroid Build Coastguard Worker
2342*495ae853SAndroid Build Coastguard Worker /* get the referecne layer mb type */
2343*495ae853SAndroid Build Coastguard Worker i1_slice_id =
2344*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_mbtype(pi1_ref_mb_modes_bkp_1, &i4_mb_type, i1_slice_id, 0);
2345*495ae853SAndroid Build Coastguard Worker if(SVC_INTRA_MB == i4_mb_type)
2346*495ae853SAndroid Build Coastguard Worker {
2347*495ae853SAndroid Build Coastguard Worker break;
2348*495ae853SAndroid Build Coastguard Worker }
2349*495ae853SAndroid Build Coastguard Worker i4_x += i4_rangeX;
2350*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes_bkp_1 += i4_element_size;
2351*495ae853SAndroid Build Coastguard Worker }
2352*495ae853SAndroid Build Coastguard Worker
2353*495ae853SAndroid Build Coastguard Worker if(SVC_INTRA_MB == i4_mb_type)
2354*495ae853SAndroid Build Coastguard Worker {
2355*495ae853SAndroid Build Coastguard Worker break;
2356*495ae853SAndroid Build Coastguard Worker }
2357*495ae853SAndroid Build Coastguard Worker
2358*495ae853SAndroid Build Coastguard Worker i4_y += i4_rangeY;
2359*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_ref_mode_stride * i4_element_size);
2360*495ae853SAndroid Build Coastguard Worker }
2361*495ae853SAndroid Build Coastguard Worker }
2362*495ae853SAndroid Build Coastguard Worker else
2363*495ae853SAndroid Build Coastguard Worker {
2364*495ae853SAndroid Build Coastguard Worker i1_slice_id = -1;
2365*495ae853SAndroid Build Coastguard Worker }
2366*495ae853SAndroid Build Coastguard Worker
2367*495ae853SAndroid Build Coastguard Worker i4_unfill_check = 0;
2368*495ae853SAndroid Build Coastguard Worker
2369*495ae853SAndroid Build Coastguard Worker /* --------------------------------------------------------------------- */
2370*495ae853SAndroid Build Coastguard Worker /* Copying the data from recon buffer to refSample Array.
2371*495ae853SAndroid Build Coastguard Worker */
2372*495ae853SAndroid Build Coastguard Worker /* NOTE: The copying of the data from recon buffer to refSample Array */
2373*495ae853SAndroid Build Coastguard Worker /* can be optimized by bring in data at N-MB level,thus taking */
2374*495ae853SAndroid Build Coastguard Worker /* advantage of the overlapping data which now gets copied every
2375*495ae853SAndroid Build Coastguard Worker * MB*/
2376*495ae853SAndroid Build Coastguard Worker /* --------------------------------------------------------------------- */
2377*495ae853SAndroid Build Coastguard Worker {
2378*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_ref_start, i4_x_ref_end;
2379*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_ref_start, i4_y_ref_end;
2380*495ae853SAndroid Build Coastguard Worker WORD32 i4_rangeW, i4_rangeH;
2381*495ae853SAndroid Build Coastguard Worker WORD32 i4_offset;
2382*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_src, *pu1_dst;
2383*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_dst1, *pu1_dst2;
2384*495ae853SAndroid Build Coastguard Worker
2385*495ae853SAndroid Build Coastguard Worker /* Copy (refW x refH) dimension into reference sample array */
2386*495ae853SAndroid Build Coastguard Worker i4_x_ref_start = MAX(0, MIN((i4_ref_wd - 1), i4_x_offset));
2387*495ae853SAndroid Build Coastguard Worker i4_x_ref_end = MAX(0, MIN((i4_ref_wd - 1), (i4_refarray_wd - 1) + i4_x_offset));
2388*495ae853SAndroid Build Coastguard Worker i4_y_ref_start = MAX(0, MIN((i4_ref_ht - 1), i4_y_offset));
2389*495ae853SAndroid Build Coastguard Worker i4_y_ref_end = MAX(0, MIN((i4_ref_ht - 1), (i4_refarray_ht - 1) + i4_y_offset));
2390*495ae853SAndroid Build Coastguard Worker
2391*495ae853SAndroid Build Coastguard Worker /* find the actual data to be copied */
2392*495ae853SAndroid Build Coastguard Worker i4_rangeW = (i4_x_ref_end - i4_x_ref_start + 1);
2393*495ae853SAndroid Build Coastguard Worker i4_rangeH = (i4_y_ref_end - i4_y_ref_start + 1);
2394*495ae853SAndroid Build Coastguard Worker
2395*495ae853SAndroid Build Coastguard Worker /* get the reconbuffer pointer and ref sample array pointer */
2396*495ae853SAndroid Build Coastguard Worker i4_offset =
2397*495ae853SAndroid Build Coastguard Worker (i4_x_ref_start - i4_x_offset) + ((i4_y_ref_start - i4_y_offset) * i4_refarray_stride);
2398*495ae853SAndroid Build Coastguard Worker
2399*495ae853SAndroid Build Coastguard Worker if(0 == i4_chroma_flag)
2400*495ae853SAndroid Build Coastguard Worker {
2401*495ae853SAndroid Build Coastguard Worker pu1_refarray_1 = ps_ctxt->pu1_refarray_buffer;
2402*495ae853SAndroid Build Coastguard Worker pu1_refarray_2 = NULL;
2403*495ae853SAndroid Build Coastguard Worker
2404*495ae853SAndroid Build Coastguard Worker pu1_src = pu1_inp_1;
2405*495ae853SAndroid Build Coastguard Worker pu1_dst = pu1_refarray_1 + i4_offset;
2406*495ae853SAndroid Build Coastguard Worker
2407*495ae853SAndroid Build Coastguard Worker /* Copy luma data into refsample array */
2408*495ae853SAndroid Build Coastguard Worker isvc_copy_data(pu1_src, i4_inp_stride, pu1_dst, i4_refarray_stride, i4_rangeW,
2409*495ae853SAndroid Build Coastguard Worker i4_rangeH);
2410*495ae853SAndroid Build Coastguard Worker }
2411*495ae853SAndroid Build Coastguard Worker else
2412*495ae853SAndroid Build Coastguard Worker {
2413*495ae853SAndroid Build Coastguard Worker pu1_refarray_1 = ps_ctxt->pu1_refarray_buffer;
2414*495ae853SAndroid Build Coastguard Worker pu1_refarray_2 = ps_ctxt->pu1_refarray_cb;
2415*495ae853SAndroid Build Coastguard Worker
2416*495ae853SAndroid Build Coastguard Worker pu1_src = pu1_inp_1;
2417*495ae853SAndroid Build Coastguard Worker pu1_dst1 = pu1_refarray_1 + i4_offset;
2418*495ae853SAndroid Build Coastguard Worker
2419*495ae853SAndroid Build Coastguard Worker pu1_dst2 = pu1_refarray_2 + i4_offset;
2420*495ae853SAndroid Build Coastguard Worker
2421*495ae853SAndroid Build Coastguard Worker isvc_copy_data_semiplanr(pu1_src, i4_inp_stride, pu1_dst1, pu1_dst2, i4_refarray_stride,
2422*495ae853SAndroid Build Coastguard Worker i4_rangeW, i4_rangeH);
2423*495ae853SAndroid Build Coastguard Worker }
2424*495ae853SAndroid Build Coastguard Worker }
2425*495ae853SAndroid Build Coastguard Worker {
2426*495ae853SAndroid Build Coastguard Worker WORD32 i4_i, i4_j;
2427*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_ref_idx_x, *pu1_ref_idx_y;
2428*495ae853SAndroid Build Coastguard Worker
2429*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_ref;
2430*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_ref;
2431*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_x, i4_mb_y;
2432*495ae853SAndroid Build Coastguard Worker
2433*495ae853SAndroid Build Coastguard Worker i4_y_ref = i4_y_offset;
2434*495ae853SAndroid Build Coastguard Worker i4_x_ref = i4_x_offset;
2435*495ae853SAndroid Build Coastguard Worker
2436*495ae853SAndroid Build Coastguard Worker i4_mb_x = (i4_x_ref >> i4_mb_wd_sft);
2437*495ae853SAndroid Build Coastguard Worker i4_mb_y = (i4_y_ref >> i4_mb_ht_sft);
2438*495ae853SAndroid Build Coastguard Worker
2439*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes = (WORD8 *) ps_ref_mb_mode_map->pv_buffer;
2440*495ae853SAndroid Build Coastguard Worker
2441*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_mb_y * i4_ref_mode_stride * i4_element_size);
2442*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_mb_x * i4_element_size);
2443*495ae853SAndroid Build Coastguard Worker
2444*495ae853SAndroid Build Coastguard Worker pu1_ref_idx_x = &(ps_lyr_ctxt->au1_refarray_x_idx[0]);
2445*495ae853SAndroid Build Coastguard Worker pu1_ref_idx_y = &(ps_lyr_ctxt->au1_refarray_y_idx[0]);
2446*495ae853SAndroid Build Coastguard Worker
2447*495ae853SAndroid Build Coastguard Worker i4_j = 0;
2448*495ae853SAndroid Build Coastguard Worker for(i4_y = 0; i4_y < i4_refarray_ht;)
2449*495ae853SAndroid Build Coastguard Worker {
2450*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_ref;
2451*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_ref;
2452*495ae853SAndroid Build Coastguard Worker WORD32 i4_distleftX, i4_rangeX;
2453*495ae853SAndroid Build Coastguard Worker WORD32 i4_disttopY, i4_rangeY;
2454*495ae853SAndroid Build Coastguard Worker
2455*495ae853SAndroid Build Coastguard Worker i4_y_ref = i4_y + i4_y_offset;
2456*495ae853SAndroid Build Coastguard Worker i4_disttopY = (i4_y_ref) & (i4_mb_ht - 1);
2457*495ae853SAndroid Build Coastguard Worker i4_rangeY = (i4_mb_ht - i4_disttopY);
2458*495ae853SAndroid Build Coastguard Worker
2459*495ae853SAndroid Build Coastguard Worker memset(pu1_ref_idx_y, i4_j, i4_rangeY);
2460*495ae853SAndroid Build Coastguard Worker pu1_ref_idx_y += i4_rangeY;
2461*495ae853SAndroid Build Coastguard Worker
2462*495ae853SAndroid Build Coastguard Worker i4_i = 0;
2463*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes_bkp_1 = pi1_ref_mb_modes;
2464*495ae853SAndroid Build Coastguard Worker for(i4_x = 0; i4_x < i4_refarray_wd;)
2465*495ae853SAndroid Build Coastguard Worker {
2466*495ae853SAndroid Build Coastguard Worker i4_x_ref = i4_x + i4_x_offset;
2467*495ae853SAndroid Build Coastguard Worker i4_distleftX = (i4_x_ref) & (i4_mb_wd - 1);
2468*495ae853SAndroid Build Coastguard Worker i4_rangeX = (i4_mb_wd - i4_distleftX);
2469*495ae853SAndroid Build Coastguard Worker
2470*495ae853SAndroid Build Coastguard Worker if(0 == i4_j)
2471*495ae853SAndroid Build Coastguard Worker {
2472*495ae853SAndroid Build Coastguard Worker memset(pu1_ref_idx_x, i4_i, i4_rangeX);
2473*495ae853SAndroid Build Coastguard Worker pu1_ref_idx_x += i4_rangeX;
2474*495ae853SAndroid Build Coastguard Worker }
2475*495ae853SAndroid Build Coastguard Worker
2476*495ae853SAndroid Build Coastguard Worker isvc_get_ref_layer_mbtype(pi1_ref_mb_modes_bkp_1, &i4_mb_type, i1_slice_id,
2477*495ae853SAndroid Build Coastguard Worker i1_cons_intr_samp_flag);
2478*495ae853SAndroid Build Coastguard Worker
2479*495ae853SAndroid Build Coastguard Worker if(SVC_INTRA_MB == i4_mb_type)
2480*495ae853SAndroid Build Coastguard Worker {
2481*495ae853SAndroid Build Coastguard Worker u1_map_buf[i4_j][i4_i] = 1;
2482*495ae853SAndroid Build Coastguard Worker i4_dummy = 1;
2483*495ae853SAndroid Build Coastguard Worker }
2484*495ae853SAndroid Build Coastguard Worker else
2485*495ae853SAndroid Build Coastguard Worker {
2486*495ae853SAndroid Build Coastguard Worker i4_unfill_check = 1;
2487*495ae853SAndroid Build Coastguard Worker }
2488*495ae853SAndroid Build Coastguard Worker
2489*495ae853SAndroid Build Coastguard Worker i4_x = i4_x + i4_rangeX;
2490*495ae853SAndroid Build Coastguard Worker i4_i++;
2491*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes_bkp_1 += i4_element_size;
2492*495ae853SAndroid Build Coastguard Worker }
2493*495ae853SAndroid Build Coastguard Worker i4_j++;
2494*495ae853SAndroid Build Coastguard Worker i4_y = i4_y + i4_rangeY;
2495*495ae853SAndroid Build Coastguard Worker pi1_ref_mb_modes += (i4_ref_mode_stride * i4_element_size);
2496*495ae853SAndroid Build Coastguard Worker }
2497*495ae853SAndroid Build Coastguard Worker ASSERT(1 == i4_dummy);
2498*495ae853SAndroid Build Coastguard Worker }
2499*495ae853SAndroid Build Coastguard Worker
2500*495ae853SAndroid Build Coastguard Worker if(i4_unfill_check == 1)
2501*495ae853SAndroid Build Coastguard Worker {
2502*495ae853SAndroid Build Coastguard Worker isvc_fill_non_avail_pixel(ps_lyr_ctxt, pu1_refarray_1, pu1_refarray_2, i4_refarray_stride,
2503*495ae853SAndroid Build Coastguard Worker i4_chroma_flag, u1_map_buf);
2504*495ae853SAndroid Build Coastguard Worker }
2505*495ae853SAndroid Build Coastguard Worker }
2506*495ae853SAndroid Build Coastguard Worker
2507*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2508*495ae853SAndroid Build Coastguard Worker /* */
2509*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_interpolate_base_luma_dyadic */
2510*495ae853SAndroid Build Coastguard Worker /* */
2511*495ae853SAndroid Build Coastguard Worker /* Description : This function takes the reference array buffer & performs*/
2512*495ae853SAndroid Build Coastguard Worker /* intra resampling for dyadic scaling ratios */
2513*495ae853SAndroid Build Coastguard Worker /* Inputs : pu1_inp_buf : ptr to the 12x12 reference sample buffer */
2514*495ae853SAndroid Build Coastguard Worker /* pi2_tmp_filt_buf : ptr to the 12x16 buffer to hold the */
2515*495ae853SAndroid Build Coastguard Worker /* vertically interpolated data */
2516*495ae853SAndroid Build Coastguard Worker /* pu1_out_buf : output buffer pointer */
2517*495ae853SAndroid Build Coastguard Worker /* i4_out_stride : output buffer stride */
2518*495ae853SAndroid Build Coastguard Worker /* Globals : none */
2519*495ae853SAndroid Build Coastguard Worker /* Processing : it does the interpolation in vertical direction followed */
2520*495ae853SAndroid Build Coastguard Worker /* by horizontal direction */
2521*495ae853SAndroid Build Coastguard Worker /* Outputs : resampled pixels */
2522*495ae853SAndroid Build Coastguard Worker /* Returns : none */
2523*495ae853SAndroid Build Coastguard Worker /* */
2524*495ae853SAndroid Build Coastguard Worker /* Issues : none */
2525*495ae853SAndroid Build Coastguard Worker /* */
2526*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2527*495ae853SAndroid Build Coastguard Worker /* */
2528*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2529*495ae853SAndroid Build Coastguard Worker /* 03 12 2010 Nithya creation */
2530*495ae853SAndroid Build Coastguard Worker /* */
2531*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_interpolate_base_luma_dyadic(UWORD8 * pu1_inp_buf,WORD16 * pi2_tmp_filt_buf,UWORD8 * pu1_out_buf,WORD32 i4_out_stride)2532*495ae853SAndroid Build Coastguard Worker void isvc_interpolate_base_luma_dyadic(UWORD8 *pu1_inp_buf, WORD16 *pi2_tmp_filt_buf,
2533*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_out_buf, WORD32 i4_out_stride)
2534*495ae853SAndroid Build Coastguard Worker {
2535*495ae853SAndroid Build Coastguard Worker WORD32 i4_x, i4_y;
2536*495ae853SAndroid Build Coastguard Worker WORD32 i4_coeff_0, i4_coeff_1, i4_coeff_2, i4_coeff_3;
2537*495ae853SAndroid Build Coastguard Worker WORD32 i4_samp_0, i4_samp_1, i4_samp_2, i4_samp_3;
2538*495ae853SAndroid Build Coastguard Worker WORD32 i4_rslt_1, i4_rslt_2;
2539*495ae853SAndroid Build Coastguard Worker WORD32 i4_filt_stride, i4_src_stride;
2540*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_inp, *pu1_out;
2541*495ae853SAndroid Build Coastguard Worker WORD16 *pi2_tmp;
2542*495ae853SAndroid Build Coastguard Worker
2543*495ae853SAndroid Build Coastguard Worker /* Filter coefficient values for phase 4 */
2544*495ae853SAndroid Build Coastguard Worker i4_coeff_0 = -3;
2545*495ae853SAndroid Build Coastguard Worker i4_coeff_1 = 28;
2546*495ae853SAndroid Build Coastguard Worker i4_coeff_2 = 8;
2547*495ae853SAndroid Build Coastguard Worker i4_coeff_3 = -1;
2548*495ae853SAndroid Build Coastguard Worker
2549*495ae853SAndroid Build Coastguard Worker i4_filt_stride = 12;
2550*495ae853SAndroid Build Coastguard Worker i4_src_stride = DYADIC_REF_W_Y;
2551*495ae853SAndroid Build Coastguard Worker
2552*495ae853SAndroid Build Coastguard Worker pu1_inp = pu1_inp_buf;
2553*495ae853SAndroid Build Coastguard Worker pi2_tmp = pi2_tmp_filt_buf;
2554*495ae853SAndroid Build Coastguard Worker pu1_out = pu1_out_buf;
2555*495ae853SAndroid Build Coastguard Worker
2556*495ae853SAndroid Build Coastguard Worker /* Vertical interpolation */
2557*495ae853SAndroid Build Coastguard Worker for(i4_x = 0; i4_x < 12; i4_x++)
2558*495ae853SAndroid Build Coastguard Worker {
2559*495ae853SAndroid Build Coastguard Worker /* y = 0, y_phase = 12 */
2560*495ae853SAndroid Build Coastguard Worker i4_samp_0 = pu1_inp[i4_x];
2561*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2562*495ae853SAndroid Build Coastguard Worker i4_samp_1 = pu1_inp[i4_x];
2563*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2564*495ae853SAndroid Build Coastguard Worker i4_samp_2 = pu1_inp[i4_x];
2565*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2566*495ae853SAndroid Build Coastguard Worker i4_samp_3 = pu1_inp[i4_x];
2567*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2568*495ae853SAndroid Build Coastguard Worker
2569*495ae853SAndroid Build Coastguard Worker /* since y_phase 12 for y = 0 */
2570*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_3;
2571*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_2;
2572*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_2 * i4_coeff_1;
2573*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_3 * i4_coeff_0;
2574*495ae853SAndroid Build Coastguard Worker
2575*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_1;
2576*495ae853SAndroid Build Coastguard Worker pi2_tmp += i4_filt_stride;
2577*495ae853SAndroid Build Coastguard Worker
2578*495ae853SAndroid Build Coastguard Worker for(i4_y = 1; i4_y < 15; i4_y += 2)
2579*495ae853SAndroid Build Coastguard Worker {
2580*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2581*495ae853SAndroid Build Coastguard Worker i4_samp_1 = i4_samp_2;
2582*495ae853SAndroid Build Coastguard Worker i4_samp_2 = i4_samp_3;
2583*495ae853SAndroid Build Coastguard Worker i4_samp_3 = pu1_inp[i4_x];
2584*495ae853SAndroid Build Coastguard Worker
2585*495ae853SAndroid Build Coastguard Worker /* y_phase is 4 for odd values of y */
2586*495ae853SAndroid Build Coastguard Worker /* and 12 for even values of y */
2587*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_0;
2588*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_1;
2589*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_2 * i4_coeff_2;
2590*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_3 * i4_coeff_3;
2591*495ae853SAndroid Build Coastguard Worker
2592*495ae853SAndroid Build Coastguard Worker i4_rslt_2 = i4_samp_0 * i4_coeff_3;
2593*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_1 * i4_coeff_2;
2594*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_2 * i4_coeff_1;
2595*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_3 * i4_coeff_0;
2596*495ae853SAndroid Build Coastguard Worker
2597*495ae853SAndroid Build Coastguard Worker /* Storing the results */
2598*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_1;
2599*495ae853SAndroid Build Coastguard Worker pi2_tmp += i4_filt_stride;
2600*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_2;
2601*495ae853SAndroid Build Coastguard Worker
2602*495ae853SAndroid Build Coastguard Worker /* Incrementing the pointers */
2603*495ae853SAndroid Build Coastguard Worker pi2_tmp += i4_filt_stride;
2604*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2605*495ae853SAndroid Build Coastguard Worker }
2606*495ae853SAndroid Build Coastguard Worker
2607*495ae853SAndroid Build Coastguard Worker /* y = 15, y_phase = 4 */
2608*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2609*495ae853SAndroid Build Coastguard Worker i4_samp_1 = i4_samp_2;
2610*495ae853SAndroid Build Coastguard Worker i4_samp_2 = i4_samp_3;
2611*495ae853SAndroid Build Coastguard Worker i4_samp_3 = pu1_inp[i4_x];
2612*495ae853SAndroid Build Coastguard Worker
2613*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_0;
2614*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_1;
2615*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_2 * i4_coeff_2;
2616*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_3 * i4_coeff_3;
2617*495ae853SAndroid Build Coastguard Worker
2618*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_1;
2619*495ae853SAndroid Build Coastguard Worker pu1_inp = pu1_inp_buf;
2620*495ae853SAndroid Build Coastguard Worker pi2_tmp = pi2_tmp_filt_buf;
2621*495ae853SAndroid Build Coastguard Worker }
2622*495ae853SAndroid Build Coastguard Worker
2623*495ae853SAndroid Build Coastguard Worker /* Horizontal interpolation */
2624*495ae853SAndroid Build Coastguard Worker for(i4_y = 0; i4_y < 16; i4_y++)
2625*495ae853SAndroid Build Coastguard Worker {
2626*495ae853SAndroid Build Coastguard Worker /* x = 0, x_phase = 12 */
2627*495ae853SAndroid Build Coastguard Worker i4_samp_0 = *pi2_tmp++;
2628*495ae853SAndroid Build Coastguard Worker i4_samp_1 = *pi2_tmp++;
2629*495ae853SAndroid Build Coastguard Worker i4_samp_2 = *pi2_tmp++;
2630*495ae853SAndroid Build Coastguard Worker i4_samp_3 = *pi2_tmp++;
2631*495ae853SAndroid Build Coastguard Worker
2632*495ae853SAndroid Build Coastguard Worker /* since x_phase 12 for x = 0 */
2633*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_3;
2634*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_2;
2635*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_2 * i4_coeff_1;
2636*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_3 * i4_coeff_0;
2637*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += 512;
2638*495ae853SAndroid Build Coastguard Worker
2639*495ae853SAndroid Build Coastguard Worker i4_rslt_1 >>= 10;
2640*495ae853SAndroid Build Coastguard Worker pu1_out[0] = CLIPUCHAR(i4_rslt_1);
2641*495ae853SAndroid Build Coastguard Worker
2642*495ae853SAndroid Build Coastguard Worker for(i4_x = 1; i4_x < 15; i4_x += 2)
2643*495ae853SAndroid Build Coastguard Worker {
2644*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2645*495ae853SAndroid Build Coastguard Worker i4_samp_1 = i4_samp_2;
2646*495ae853SAndroid Build Coastguard Worker i4_samp_2 = i4_samp_3;
2647*495ae853SAndroid Build Coastguard Worker i4_samp_3 = *pi2_tmp++;
2648*495ae853SAndroid Build Coastguard Worker
2649*495ae853SAndroid Build Coastguard Worker /* x_phase is 4 for odd values of x */
2650*495ae853SAndroid Build Coastguard Worker /* and 12 for even values of x */
2651*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_0;
2652*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_1;
2653*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_2 * i4_coeff_2;
2654*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_3 * i4_coeff_3;
2655*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += 512;
2656*495ae853SAndroid Build Coastguard Worker
2657*495ae853SAndroid Build Coastguard Worker i4_rslt_2 = i4_samp_0 * i4_coeff_3;
2658*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_1 * i4_coeff_2;
2659*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_2 * i4_coeff_1;
2660*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_3 * i4_coeff_0;
2661*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += 512;
2662*495ae853SAndroid Build Coastguard Worker
2663*495ae853SAndroid Build Coastguard Worker i4_rslt_1 >>= 10;
2664*495ae853SAndroid Build Coastguard Worker i4_rslt_2 >>= 10;
2665*495ae853SAndroid Build Coastguard Worker
2666*495ae853SAndroid Build Coastguard Worker pu1_out[i4_x] = CLIPUCHAR(i4_rslt_1);
2667*495ae853SAndroid Build Coastguard Worker pu1_out[i4_x + 1] = CLIPUCHAR(i4_rslt_2);
2668*495ae853SAndroid Build Coastguard Worker }
2669*495ae853SAndroid Build Coastguard Worker
2670*495ae853SAndroid Build Coastguard Worker /* x = 15 */
2671*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2672*495ae853SAndroid Build Coastguard Worker i4_samp_1 = i4_samp_2;
2673*495ae853SAndroid Build Coastguard Worker i4_samp_2 = i4_samp_3;
2674*495ae853SAndroid Build Coastguard Worker i4_samp_3 = *pi2_tmp++;
2675*495ae853SAndroid Build Coastguard Worker
2676*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_0;
2677*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_1;
2678*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_2 * i4_coeff_2;
2679*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_3 * i4_coeff_3;
2680*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += 512;
2681*495ae853SAndroid Build Coastguard Worker
2682*495ae853SAndroid Build Coastguard Worker i4_rslt_1 >>= 10;
2683*495ae853SAndroid Build Coastguard Worker pu1_out[i4_x] = CLIPUCHAR(i4_rslt_1);
2684*495ae853SAndroid Build Coastguard Worker pu1_out += i4_out_stride;
2685*495ae853SAndroid Build Coastguard Worker }
2686*495ae853SAndroid Build Coastguard Worker }
2687*495ae853SAndroid Build Coastguard Worker
2688*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2689*495ae853SAndroid Build Coastguard Worker /* */
2690*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_vert_interpol_chroma_dyadic */
2691*495ae853SAndroid Build Coastguard Worker /* */
2692*495ae853SAndroid Build Coastguard Worker /* Description : This function takes the reference array buffer & performs*/
2693*495ae853SAndroid Build Coastguard Worker /* vertical intra resampling for dyadic scaling ratios for */
2694*495ae853SAndroid Build Coastguard Worker /* chroma for the following ref_lyr_chroma_phase_y_plus1 and*/
2695*495ae853SAndroid Build Coastguard Worker /* chroma_phase_y_plus1: */
2696*495ae853SAndroid Build Coastguard Worker /* ref_lyr cur_lyr */
2697*495ae853SAndroid Build Coastguard Worker /* 0 0 */
2698*495ae853SAndroid Build Coastguard Worker /* 1 0 */
2699*495ae853SAndroid Build Coastguard Worker /* 1 1 */
2700*495ae853SAndroid Build Coastguard Worker /* 1 2 */
2701*495ae853SAndroid Build Coastguard Worker /* 2 1 */
2702*495ae853SAndroid Build Coastguard Worker /* 2 2 */
2703*495ae853SAndroid Build Coastguard Worker /* Inputs : pu1_inp_buf : ptr to the 6x6 reference sample buffer */
2704*495ae853SAndroid Build Coastguard Worker /* pi2_tmp_filt_buf : ptr to the 6x8 buffer to hold the */
2705*495ae853SAndroid Build Coastguard Worker /* vertically interpolated data */
2706*495ae853SAndroid Build Coastguard Worker /* i4_phase_0 : y phase for even values of y */
2707*495ae853SAndroid Build Coastguard Worker /* i4_phase_1 : y phase for odd values of y */
2708*495ae853SAndroid Build Coastguard Worker /* Globals : none */
2709*495ae853SAndroid Build Coastguard Worker /* Processing : it does the interpolation in vertical direction */
2710*495ae853SAndroid Build Coastguard Worker /* Outputs : vertically resampled samples */
2711*495ae853SAndroid Build Coastguard Worker /* Returns : none */
2712*495ae853SAndroid Build Coastguard Worker /* */
2713*495ae853SAndroid Build Coastguard Worker /* Issues : none */
2714*495ae853SAndroid Build Coastguard Worker /* */
2715*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2716*495ae853SAndroid Build Coastguard Worker /* */
2717*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2718*495ae853SAndroid Build Coastguard Worker /* 06 12 2010 Nithya creation */
2719*495ae853SAndroid Build Coastguard Worker /* */
2720*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_vert_interpol_chroma_dyadic(UWORD8 * pu1_inp_buf,WORD16 * pi2_tmp_filt_buf,WORD32 i4_phase_0,WORD32 i4_phase_1)2721*495ae853SAndroid Build Coastguard Worker void isvc_vert_interpol_chroma_dyadic(UWORD8 *pu1_inp_buf, WORD16 *pi2_tmp_filt_buf,
2722*495ae853SAndroid Build Coastguard Worker WORD32 i4_phase_0, WORD32 i4_phase_1)
2723*495ae853SAndroid Build Coastguard Worker {
2724*495ae853SAndroid Build Coastguard Worker WORD32 i4_x, i4_y;
2725*495ae853SAndroid Build Coastguard Worker WORD32 i4_coeff_0, i4_coeff_1, i4_coeff_2, i4_coeff_3;
2726*495ae853SAndroid Build Coastguard Worker WORD32 i4_samp_0, i4_samp_1;
2727*495ae853SAndroid Build Coastguard Worker WORD32 i4_rslt_1, i4_rslt_2;
2728*495ae853SAndroid Build Coastguard Worker WORD32 i4_filt_stride, i4_src_stride;
2729*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_inp;
2730*495ae853SAndroid Build Coastguard Worker WORD16 *pi2_tmp;
2731*495ae853SAndroid Build Coastguard Worker
2732*495ae853SAndroid Build Coastguard Worker i4_coeff_0 = 16 - i4_phase_0;
2733*495ae853SAndroid Build Coastguard Worker i4_coeff_1 = i4_phase_0;
2734*495ae853SAndroid Build Coastguard Worker i4_coeff_2 = 16 - i4_phase_1;
2735*495ae853SAndroid Build Coastguard Worker i4_coeff_3 = i4_phase_1;
2736*495ae853SAndroid Build Coastguard Worker
2737*495ae853SAndroid Build Coastguard Worker pu1_inp = pu1_inp_buf;
2738*495ae853SAndroid Build Coastguard Worker pi2_tmp = pi2_tmp_filt_buf;
2739*495ae853SAndroid Build Coastguard Worker i4_filt_stride = 6;
2740*495ae853SAndroid Build Coastguard Worker i4_src_stride = DYADIC_REF_W_C;
2741*495ae853SAndroid Build Coastguard Worker
2742*495ae853SAndroid Build Coastguard Worker /* Vertical interpolation */
2743*495ae853SAndroid Build Coastguard Worker for(i4_x = 0; i4_x < 6; i4_x++)
2744*495ae853SAndroid Build Coastguard Worker {
2745*495ae853SAndroid Build Coastguard Worker /* y = 0, y_phase = phase_0 */
2746*495ae853SAndroid Build Coastguard Worker i4_samp_0 = pu1_inp[i4_x];
2747*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2748*495ae853SAndroid Build Coastguard Worker i4_samp_1 = pu1_inp[i4_x];
2749*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2750*495ae853SAndroid Build Coastguard Worker
2751*495ae853SAndroid Build Coastguard Worker /* since y_phase = phase_0 for y = 0 */
2752*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_0;
2753*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_1;
2754*495ae853SAndroid Build Coastguard Worker
2755*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_1;
2756*495ae853SAndroid Build Coastguard Worker pi2_tmp += i4_filt_stride;
2757*495ae853SAndroid Build Coastguard Worker
2758*495ae853SAndroid Build Coastguard Worker for(i4_y = 1; i4_y < 7; i4_y += 2)
2759*495ae853SAndroid Build Coastguard Worker {
2760*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2761*495ae853SAndroid Build Coastguard Worker i4_samp_1 = pu1_inp[i4_x];
2762*495ae853SAndroid Build Coastguard Worker
2763*495ae853SAndroid Build Coastguard Worker /* y_phase is phase_1 for odd values of y */
2764*495ae853SAndroid Build Coastguard Worker /* and phase_0 for even values of y */
2765*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_2;
2766*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_3;
2767*495ae853SAndroid Build Coastguard Worker
2768*495ae853SAndroid Build Coastguard Worker i4_rslt_2 = i4_samp_0 * i4_coeff_0;
2769*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_1 * i4_coeff_1;
2770*495ae853SAndroid Build Coastguard Worker
2771*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_1;
2772*495ae853SAndroid Build Coastguard Worker pi2_tmp += i4_filt_stride;
2773*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_2;
2774*495ae853SAndroid Build Coastguard Worker pi2_tmp += i4_filt_stride;
2775*495ae853SAndroid Build Coastguard Worker pu1_inp += i4_src_stride;
2776*495ae853SAndroid Build Coastguard Worker }
2777*495ae853SAndroid Build Coastguard Worker
2778*495ae853SAndroid Build Coastguard Worker /* y = 7, y_phase = phase_1 */
2779*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2780*495ae853SAndroid Build Coastguard Worker i4_samp_1 = pu1_inp[i4_x];
2781*495ae853SAndroid Build Coastguard Worker
2782*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_2;
2783*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_3;
2784*495ae853SAndroid Build Coastguard Worker
2785*495ae853SAndroid Build Coastguard Worker pi2_tmp[i4_x] = i4_rslt_1;
2786*495ae853SAndroid Build Coastguard Worker
2787*495ae853SAndroid Build Coastguard Worker pu1_inp = pu1_inp_buf;
2788*495ae853SAndroid Build Coastguard Worker pi2_tmp = pi2_tmp_filt_buf;
2789*495ae853SAndroid Build Coastguard Worker }
2790*495ae853SAndroid Build Coastguard Worker }
2791*495ae853SAndroid Build Coastguard Worker
2792*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
2793*495ae853SAndroid Build Coastguard Worker /* */
2794*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_horz_interpol_chroma_dyadic */
2795*495ae853SAndroid Build Coastguard Worker /* */
2796*495ae853SAndroid Build Coastguard Worker /* Description : This function takes the reference array buffer & performs*/
2797*495ae853SAndroid Build Coastguard Worker /* horizontal intra resampling for dyadic scaling ratios for*/
2798*495ae853SAndroid Build Coastguard Worker /* chroma with following ref_lyr_chroma_phase_x_plus1_flag */
2799*495ae853SAndroid Build Coastguard Worker /* and chroma_phase_x_plus1_flag: */
2800*495ae853SAndroid Build Coastguard Worker /* ref_lyr cur_lyr */
2801*495ae853SAndroid Build Coastguard Worker /* 0 0 */
2802*495ae853SAndroid Build Coastguard Worker /* 1 0 */
2803*495ae853SAndroid Build Coastguard Worker /* 1 1 */
2804*495ae853SAndroid Build Coastguard Worker /* Inputs : pi2_tmp_filt_buf : ptr to the 6x8 buffer containing the */
2805*495ae853SAndroid Build Coastguard Worker /* vertically interpolated data */
2806*495ae853SAndroid Build Coastguard Worker /* pu1_out_buf : pointer to the output buffer */
2807*495ae853SAndroid Build Coastguard Worker /* i4_out_stride : output buffer stride */
2808*495ae853SAndroid Build Coastguard Worker /* i4_phase_0 : x phase for even values of x */
2809*495ae853SAndroid Build Coastguard Worker /* i4_phase_1 : x phase for odd values of x */
2810*495ae853SAndroid Build Coastguard Worker /* Globals : none */
2811*495ae853SAndroid Build Coastguard Worker /* Processing : it does the interpolation in vertical direction */
2812*495ae853SAndroid Build Coastguard Worker /* Outputs : resampled samples */
2813*495ae853SAndroid Build Coastguard Worker /* Returns : none */
2814*495ae853SAndroid Build Coastguard Worker /* */
2815*495ae853SAndroid Build Coastguard Worker /* Issues : none */
2816*495ae853SAndroid Build Coastguard Worker /* */
2817*495ae853SAndroid Build Coastguard Worker /* Revision History: */
2818*495ae853SAndroid Build Coastguard Worker /* */
2819*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
2820*495ae853SAndroid Build Coastguard Worker /* 06 12 2010 Nithya creation */
2821*495ae853SAndroid Build Coastguard Worker /* */
2822*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_horz_interpol_chroma_dyadic(WORD16 * pi2_tmp_filt_buf,UWORD8 * pu1_out_buf,WORD32 i4_out_stride,WORD32 i4_phase_0,WORD32 i4_phase_1)2823*495ae853SAndroid Build Coastguard Worker void isvc_horz_interpol_chroma_dyadic(WORD16 *pi2_tmp_filt_buf, UWORD8 *pu1_out_buf,
2824*495ae853SAndroid Build Coastguard Worker WORD32 i4_out_stride, WORD32 i4_phase_0, WORD32 i4_phase_1)
2825*495ae853SAndroid Build Coastguard Worker {
2826*495ae853SAndroid Build Coastguard Worker WORD32 i4_x, i4_y;
2827*495ae853SAndroid Build Coastguard Worker WORD32 i4_coeff_0, i4_coeff_1, i4_coeff_2, i4_coeff_3;
2828*495ae853SAndroid Build Coastguard Worker WORD32 i4_samp_0, i4_samp_1;
2829*495ae853SAndroid Build Coastguard Worker WORD32 i4_rslt_1, i4_rslt_2;
2830*495ae853SAndroid Build Coastguard Worker WORD32 i4_dst_stride;
2831*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_out;
2832*495ae853SAndroid Build Coastguard Worker WORD16 *pi2_tmp;
2833*495ae853SAndroid Build Coastguard Worker
2834*495ae853SAndroid Build Coastguard Worker i4_coeff_0 = 16 - i4_phase_0;
2835*495ae853SAndroid Build Coastguard Worker i4_coeff_1 = i4_phase_0;
2836*495ae853SAndroid Build Coastguard Worker i4_coeff_2 = 16 - i4_phase_1;
2837*495ae853SAndroid Build Coastguard Worker i4_coeff_3 = i4_phase_1;
2838*495ae853SAndroid Build Coastguard Worker
2839*495ae853SAndroid Build Coastguard Worker pu1_out = pu1_out_buf;
2840*495ae853SAndroid Build Coastguard Worker pi2_tmp = pi2_tmp_filt_buf;
2841*495ae853SAndroid Build Coastguard Worker i4_dst_stride = i4_out_stride;
2842*495ae853SAndroid Build Coastguard Worker
2843*495ae853SAndroid Build Coastguard Worker /* Horizontal interpolation */
2844*495ae853SAndroid Build Coastguard Worker for(i4_y = 0; i4_y < 8; i4_y++)
2845*495ae853SAndroid Build Coastguard Worker {
2846*495ae853SAndroid Build Coastguard Worker /* x = 0, x_phase = phase_0 */
2847*495ae853SAndroid Build Coastguard Worker i4_samp_0 = *pi2_tmp++;
2848*495ae853SAndroid Build Coastguard Worker i4_samp_1 = *pi2_tmp++;
2849*495ae853SAndroid Build Coastguard Worker
2850*495ae853SAndroid Build Coastguard Worker /* since x_phase = phase_0 for x = 0 */
2851*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_0;
2852*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_1;
2853*495ae853SAndroid Build Coastguard Worker
2854*495ae853SAndroid Build Coastguard Worker /* Round to 8-bit value */
2855*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += 128;
2856*495ae853SAndroid Build Coastguard Worker i4_rslt_1 >>= 8;
2857*495ae853SAndroid Build Coastguard Worker
2858*495ae853SAndroid Build Coastguard Worker pu1_out[0] = i4_rslt_1;
2859*495ae853SAndroid Build Coastguard Worker
2860*495ae853SAndroid Build Coastguard Worker for(i4_x = 1; i4_x < 7; i4_x += 2)
2861*495ae853SAndroid Build Coastguard Worker {
2862*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2863*495ae853SAndroid Build Coastguard Worker i4_samp_1 = *pi2_tmp++;
2864*495ae853SAndroid Build Coastguard Worker
2865*495ae853SAndroid Build Coastguard Worker /* x_phase is phase_1 for odd values of x */
2866*495ae853SAndroid Build Coastguard Worker /* and phase_0 for even values of x */
2867*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_2;
2868*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_3;
2869*495ae853SAndroid Build Coastguard Worker
2870*495ae853SAndroid Build Coastguard Worker i4_rslt_2 = i4_samp_0 * i4_coeff_0;
2871*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += i4_samp_1 * i4_coeff_1;
2872*495ae853SAndroid Build Coastguard Worker
2873*495ae853SAndroid Build Coastguard Worker /* Rounding to 8-bit values */
2874*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += 128;
2875*495ae853SAndroid Build Coastguard Worker i4_rslt_1 >>= 8;
2876*495ae853SAndroid Build Coastguard Worker i4_rslt_2 += 128;
2877*495ae853SAndroid Build Coastguard Worker i4_rslt_2 >>= 8;
2878*495ae853SAndroid Build Coastguard Worker
2879*495ae853SAndroid Build Coastguard Worker pu1_out[2 * i4_x] = i4_rslt_1;
2880*495ae853SAndroid Build Coastguard Worker pu1_out[2 * (i4_x + 1)] = i4_rslt_2;
2881*495ae853SAndroid Build Coastguard Worker }
2882*495ae853SAndroid Build Coastguard Worker
2883*495ae853SAndroid Build Coastguard Worker /* y = 7, y_phase = phase_1 */
2884*495ae853SAndroid Build Coastguard Worker i4_samp_0 = i4_samp_1;
2885*495ae853SAndroid Build Coastguard Worker i4_samp_1 = *pi2_tmp++;
2886*495ae853SAndroid Build Coastguard Worker
2887*495ae853SAndroid Build Coastguard Worker /* since x_phase = phase_1 for x = 7 */
2888*495ae853SAndroid Build Coastguard Worker i4_rslt_1 = i4_samp_0 * i4_coeff_2;
2889*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += i4_samp_1 * i4_coeff_3;
2890*495ae853SAndroid Build Coastguard Worker
2891*495ae853SAndroid Build Coastguard Worker /* Round to 8-bit value */
2892*495ae853SAndroid Build Coastguard Worker i4_rslt_1 += 128;
2893*495ae853SAndroid Build Coastguard Worker i4_rslt_1 >>= 8;
2894*495ae853SAndroid Build Coastguard Worker
2895*495ae853SAndroid Build Coastguard Worker pu1_out[2 * 7] = i4_rslt_1;
2896*495ae853SAndroid Build Coastguard Worker pu1_out += i4_dst_stride;
2897*495ae853SAndroid Build Coastguard Worker }
2898*495ae853SAndroid Build Coastguard Worker }
2899*495ae853SAndroid Build Coastguard Worker
isvc_interpolate_intra_base(void * pv_intra_samp_ctxt,UWORD8 * pu1_out,WORD32 i4_out_stride,WORD32 i4_refarray_wd,WORD32 i4_chroma_flag,WORD32 i4_refarray_flag)2900*495ae853SAndroid Build Coastguard Worker static void isvc_interpolate_intra_base(void *pv_intra_samp_ctxt, UWORD8 *pu1_out,
2901*495ae853SAndroid Build Coastguard Worker WORD32 i4_out_stride, WORD32 i4_refarray_wd,
2902*495ae853SAndroid Build Coastguard Worker WORD32 i4_chroma_flag, WORD32 i4_refarray_flag)
2903*495ae853SAndroid Build Coastguard Worker {
2904*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt;
2905*495ae853SAndroid Build Coastguard Worker intra_samp_lyr_ctxt *ps_lyr_ctxt;
2906*495ae853SAndroid Build Coastguard Worker WORD32 i4_x, i4_y;
2907*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray;
2908*495ae853SAndroid Build Coastguard Worker coordinates_t *ps_phase;
2909*495ae853SAndroid Build Coastguard Worker
2910*495ae853SAndroid Build Coastguard Worker WORD32 i4_temp_array_ht;
2911*495ae853SAndroid Build Coastguard Worker WORD32 *pi4_interp_buff;
2912*495ae853SAndroid Build Coastguard Worker WORD32 *pi4_interp_buff_temp;
2913*495ae853SAndroid Build Coastguard Worker
2914*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_wd;
2915*495ae853SAndroid Build Coastguard Worker WORD32 i4_mb_ht;
2916*495ae853SAndroid Build Coastguard Worker
2917*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_min, i4_x_max;
2918*495ae853SAndroid Build Coastguard Worker
2919*495ae853SAndroid Build Coastguard Worker ps_ctxt = (intra_sampling_ctxt_t *) pv_intra_samp_ctxt;
2920*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[ps_ctxt->i4_res_lyr_id];
2921*495ae853SAndroid Build Coastguard Worker
2922*495ae853SAndroid Build Coastguard Worker if(0 == i4_refarray_flag)
2923*495ae853SAndroid Build Coastguard Worker {
2924*495ae853SAndroid Build Coastguard Worker pu1_refarray = ps_ctxt->pu1_refarray_buffer;
2925*495ae853SAndroid Build Coastguard Worker }
2926*495ae853SAndroid Build Coastguard Worker else
2927*495ae853SAndroid Build Coastguard Worker {
2928*495ae853SAndroid Build Coastguard Worker pu1_refarray = ps_ctxt->pu1_refarray_cb;
2929*495ae853SAndroid Build Coastguard Worker }
2930*495ae853SAndroid Build Coastguard Worker
2931*495ae853SAndroid Build Coastguard Worker i4_mb_wd = MB_SIZE >> i4_chroma_flag;
2932*495ae853SAndroid Build Coastguard Worker i4_mb_ht = MB_SIZE >> i4_chroma_flag;
2933*495ae853SAndroid Build Coastguard Worker
2934*495ae853SAndroid Build Coastguard Worker i4_x_min = ps_lyr_ctxt->i2_x_min_pos;
2935*495ae853SAndroid Build Coastguard Worker i4_x_max = ps_lyr_ctxt->i2_x_max_pos;
2936*495ae853SAndroid Build Coastguard Worker
2937*495ae853SAndroid Build Coastguard Worker ps_phase = ps_lyr_ctxt->ps_phase;
2938*495ae853SAndroid Build Coastguard Worker
2939*495ae853SAndroid Build Coastguard Worker i4_temp_array_ht = i4_mb_ht;
2940*495ae853SAndroid Build Coastguard Worker pi4_interp_buff = ps_ctxt->pi4_temp_interpolation_buffer;
2941*495ae853SAndroid Build Coastguard Worker pi4_interp_buff_temp = pi4_interp_buff;
2942*495ae853SAndroid Build Coastguard Worker
2943*495ae853SAndroid Build Coastguard Worker for(i4_y = 0; i4_y < i4_temp_array_ht; i4_y++)
2944*495ae853SAndroid Build Coastguard Worker {
2945*495ae853SAndroid Build Coastguard Worker for(i4_x = (i4_x_min - 1); i4_x <= (i4_x_max + 2); i4_x++)
2946*495ae853SAndroid Build Coastguard Worker {
2947*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_ref = ps_lyr_ctxt->pi4_ref_array_positions_y[i4_y];
2948*495ae853SAndroid Build Coastguard Worker WORD32 i4_y_phase =
2949*495ae853SAndroid Build Coastguard Worker ps_phase[(ps_lyr_ctxt->ps_mb_pos->i4_ordinate * i4_mb_ht + i4_y) % 3].i4_ordinate;
2950*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_temp = pu1_refarray + i4_x + (i4_y_ref * i4_refarray_wd);
2951*495ae853SAndroid Build Coastguard Worker
2952*495ae853SAndroid Build Coastguard Worker if(0 == i4_chroma_flag)
2953*495ae853SAndroid Build Coastguard Worker {
2954*495ae853SAndroid Build Coastguard Worker *(pi4_interp_buff + i4_x) =
2955*495ae853SAndroid Build Coastguard Worker (g_ai1_interp_filter_luma[i4_y_phase]) *
2956*495ae853SAndroid Build Coastguard Worker (*(pu1_refarray_temp - i4_refarray_wd)) +
2957*495ae853SAndroid Build Coastguard Worker
2958*495ae853SAndroid Build Coastguard Worker (g_ai1_interp_filter_luma[16 + i4_y_phase]) * (*(pu1_refarray_temp)) +
2959*495ae853SAndroid Build Coastguard Worker
2960*495ae853SAndroid Build Coastguard Worker (g_ai1_interp_filter_luma[32 + i4_y_phase]) *
2961*495ae853SAndroid Build Coastguard Worker (*(pu1_refarray_temp + i4_refarray_wd)) +
2962*495ae853SAndroid Build Coastguard Worker
2963*495ae853SAndroid Build Coastguard Worker (g_ai1_interp_filter_luma[48 + i4_y_phase]) *
2964*495ae853SAndroid Build Coastguard Worker (*(pu1_refarray_temp + (2 * i4_refarray_wd)));
2965*495ae853SAndroid Build Coastguard Worker }
2966*495ae853SAndroid Build Coastguard Worker else
2967*495ae853SAndroid Build Coastguard Worker {
2968*495ae853SAndroid Build Coastguard Worker *(pi4_interp_buff + i4_x) =
2969*495ae853SAndroid Build Coastguard Worker (g_au1_interp_filter_chroma[i4_y_phase]) * (*(pu1_refarray_temp)) +
2970*495ae853SAndroid Build Coastguard Worker (g_au1_interp_filter_chroma[16 + i4_y_phase]) *
2971*495ae853SAndroid Build Coastguard Worker (*(pu1_refarray_temp + i4_refarray_wd));
2972*495ae853SAndroid Build Coastguard Worker }
2973*495ae853SAndroid Build Coastguard Worker }
2974*495ae853SAndroid Build Coastguard Worker
2975*495ae853SAndroid Build Coastguard Worker pi4_interp_buff = pi4_interp_buff + i4_refarray_wd;
2976*495ae853SAndroid Build Coastguard Worker }
2977*495ae853SAndroid Build Coastguard Worker
2978*495ae853SAndroid Build Coastguard Worker pi4_interp_buff = pi4_interp_buff_temp;
2979*495ae853SAndroid Build Coastguard Worker
2980*495ae853SAndroid Build Coastguard Worker for(i4_y = 0; i4_y < i4_temp_array_ht; i4_y++)
2981*495ae853SAndroid Build Coastguard Worker {
2982*495ae853SAndroid Build Coastguard Worker for(i4_x = 0; i4_x < i4_mb_wd; i4_x++)
2983*495ae853SAndroid Build Coastguard Worker {
2984*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_ref = ps_lyr_ctxt->pi4_ref_array_positions_y[i4_x];
2985*495ae853SAndroid Build Coastguard Worker WORD32 i4_x_phase =
2986*495ae853SAndroid Build Coastguard Worker ps_phase[(ps_lyr_ctxt->ps_mb_pos->i4_abscissa * MAX_REF_ARR_WD_HT + i4_x) % 3]
2987*495ae853SAndroid Build Coastguard Worker .i4_ordinate;
2988*495ae853SAndroid Build Coastguard Worker
2989*495ae853SAndroid Build Coastguard Worker pi4_interp_buff_temp = pi4_interp_buff + i4_x_ref;
2990*495ae853SAndroid Build Coastguard Worker
2991*495ae853SAndroid Build Coastguard Worker if(0 == i4_chroma_flag)
2992*495ae853SAndroid Build Coastguard Worker {
2993*495ae853SAndroid Build Coastguard Worker *(pu1_out + i4_x + (i4_y * i4_out_stride)) = CLIPUCHAR(
2994*495ae853SAndroid Build Coastguard Worker ((g_ai1_interp_filter_luma[i4_x_phase]) * (*(pi4_interp_buff_temp - 1)) +
2995*495ae853SAndroid Build Coastguard Worker (g_ai1_interp_filter_luma[16 + i4_x_phase]) * (*(pi4_interp_buff_temp)) +
2996*495ae853SAndroid Build Coastguard Worker (g_ai1_interp_filter_luma[32 + i4_x_phase]) * (*(pi4_interp_buff_temp + 1)) +
2997*495ae853SAndroid Build Coastguard Worker (g_ai1_interp_filter_luma[48 + i4_x_phase]) * (*(pi4_interp_buff_temp + 2)) +
2998*495ae853SAndroid Build Coastguard Worker 512) >>
2999*495ae853SAndroid Build Coastguard Worker 10);
3000*495ae853SAndroid Build Coastguard Worker }
3001*495ae853SAndroid Build Coastguard Worker else
3002*495ae853SAndroid Build Coastguard Worker {
3003*495ae853SAndroid Build Coastguard Worker *(pu1_out + (2 * i4_x) + (i4_y * i4_out_stride)) = CLIPUCHAR(
3004*495ae853SAndroid Build Coastguard Worker ((g_au1_interp_filter_chroma[i4_x_phase]) * (*(pi4_interp_buff_temp)) +
3005*495ae853SAndroid Build Coastguard Worker (g_au1_interp_filter_chroma[16 + i4_x_phase]) * (*(pi4_interp_buff_temp + 1)) +
3006*495ae853SAndroid Build Coastguard Worker 512) >>
3007*495ae853SAndroid Build Coastguard Worker 10);
3008*495ae853SAndroid Build Coastguard Worker }
3009*495ae853SAndroid Build Coastguard Worker }
3010*495ae853SAndroid Build Coastguard Worker
3011*495ae853SAndroid Build Coastguard Worker pi4_interp_buff = pi4_interp_buff + i4_refarray_wd;
3012*495ae853SAndroid Build Coastguard Worker }
3013*495ae853SAndroid Build Coastguard Worker }
3014*495ae853SAndroid Build Coastguard Worker
3015*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3016*495ae853SAndroid Build Coastguard Worker /* */
3017*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_intra_samp_mb_dyadic */
3018*495ae853SAndroid Build Coastguard Worker /* */
3019*495ae853SAndroid Build Coastguard Worker /* Description : MB level function which performs the intra resampling */
3020*495ae853SAndroid Build Coastguard Worker /* of data of an MB (luma and chroma inclusive) for dyadic */
3021*495ae853SAndroid Build Coastguard Worker /* scaling ratios */
3022*495ae853SAndroid Build Coastguard Worker /* */
3023*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_intra_samp_ctxt : intra sampling context */
3024*495ae853SAndroid Build Coastguard Worker /* ps_ref_luma : reference layer luma data buffer desc */
3025*495ae853SAndroid Build Coastguard Worker /* ps_ref_chroma : reference layer chroma data buffer desc */
3026*495ae853SAndroid Build Coastguard Worker /* ps_ref_mb_mode_map : ref layer mb mode map buff desc */
3027*495ae853SAndroid Build Coastguard Worker /* ps_curr_luma : current layer out luma buffer desc */
3028*495ae853SAndroid Build Coastguard Worker /* ps_curr_chroma : current layer out chroma buffer desc */
3029*495ae853SAndroid Build Coastguard Worker /* x,y : current mb coorinate */
3030*495ae853SAndroid Build Coastguard Worker /* Globals : none */
3031*495ae853SAndroid Build Coastguard Worker /* Processing : it calls the reference layer construction followed by */
3032*495ae853SAndroid Build Coastguard Worker /* interpolation function for luma and cb and cr */
3033*495ae853SAndroid Build Coastguard Worker /* Outputs : inter resampled data of current MB */
3034*495ae853SAndroid Build Coastguard Worker /* Returns : none */
3035*495ae853SAndroid Build Coastguard Worker /* */
3036*495ae853SAndroid Build Coastguard Worker /* Issues : none */
3037*495ae853SAndroid Build Coastguard Worker /* */
3038*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3039*495ae853SAndroid Build Coastguard Worker /* */
3040*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3041*495ae853SAndroid Build Coastguard Worker /* 07 12 2010 Nithya creation */
3042*495ae853SAndroid Build Coastguard Worker /* */
3043*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_intra_samp_mb_dyadic(void * pv_intra_samp_ctxt,mem_element_t * ps_ref_luma,mem_element_t * ps_ref_chroma,mem_element_t * ps_ref_mb_mode_map,mem_element_t * ps_curr_luma,mem_element_t * ps_curr_chroma,UWORD16 u2_mb_x,UWORD16 u2_mb_y,WORD32 i4_scaled_ref_layer_left_offset,WORD32 i4_scaled_ref_layer_top_offset)3044*495ae853SAndroid Build Coastguard Worker void isvc_intra_samp_mb_dyadic(void *pv_intra_samp_ctxt, mem_element_t *ps_ref_luma,
3045*495ae853SAndroid Build Coastguard Worker mem_element_t *ps_ref_chroma, mem_element_t *ps_ref_mb_mode_map,
3046*495ae853SAndroid Build Coastguard Worker mem_element_t *ps_curr_luma, mem_element_t *ps_curr_chroma,
3047*495ae853SAndroid Build Coastguard Worker UWORD16 u2_mb_x, UWORD16 u2_mb_y,
3048*495ae853SAndroid Build Coastguard Worker WORD32 i4_scaled_ref_layer_left_offset,
3049*495ae853SAndroid Build Coastguard Worker WORD32 i4_scaled_ref_layer_top_offset)
3050*495ae853SAndroid Build Coastguard Worker {
3051*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_inp_luma, *pu1_inp_chroma;
3052*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_out_luma, *pu1_out_chroma;
3053*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_out_cb, *pu1_out_cr;
3054*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_refarray_luma, *pu1_refarray_cb, *pu1_refarray_cr;
3055*495ae853SAndroid Build Coastguard Worker WORD16 *pi2_tmp_filt_buf;
3056*495ae853SAndroid Build Coastguard Worker WORD32 i4_inp_luma_stride, i4_inp_chroma_stride;
3057*495ae853SAndroid Build Coastguard Worker WORD32 i4_out_luma_stride, i4_out_chroma_stride;
3058*495ae853SAndroid Build Coastguard Worker UWORD16 u2_mb_x_ref, u2_mb_y_ref;
3059*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt;
3060*495ae853SAndroid Build Coastguard Worker intra_samp_lyr_ctxt *ps_lyr_ctxt;
3061*495ae853SAndroid Build Coastguard Worker WORD32 i4_scaled_mb_x, i4_scaled_mb_y;
3062*495ae853SAndroid Build Coastguard Worker WORD32 i4_top, i4_left;
3063*495ae853SAndroid Build Coastguard Worker
3064*495ae853SAndroid Build Coastguard Worker ps_ctxt = (intra_sampling_ctxt_t *) pv_intra_samp_ctxt;
3065*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt = &ps_ctxt->as_res_lyrs[ps_ctxt->i4_res_lyr_id];
3066*495ae853SAndroid Build Coastguard Worker
3067*495ae853SAndroid Build Coastguard Worker i4_scaled_mb_x = u2_mb_x - (i4_scaled_ref_layer_left_offset >> 4);
3068*495ae853SAndroid Build Coastguard Worker i4_scaled_mb_y = u2_mb_y - (i4_scaled_ref_layer_top_offset >> 4);
3069*495ae853SAndroid Build Coastguard Worker
3070*495ae853SAndroid Build Coastguard Worker if(i4_scaled_mb_x & 0x1)
3071*495ae853SAndroid Build Coastguard Worker {
3072*495ae853SAndroid Build Coastguard Worker i4_left = 1;
3073*495ae853SAndroid Build Coastguard Worker }
3074*495ae853SAndroid Build Coastguard Worker else
3075*495ae853SAndroid Build Coastguard Worker {
3076*495ae853SAndroid Build Coastguard Worker i4_left = -1;
3077*495ae853SAndroid Build Coastguard Worker }
3078*495ae853SAndroid Build Coastguard Worker if(i4_scaled_mb_y & 0x1)
3079*495ae853SAndroid Build Coastguard Worker {
3080*495ae853SAndroid Build Coastguard Worker i4_top = 1;
3081*495ae853SAndroid Build Coastguard Worker }
3082*495ae853SAndroid Build Coastguard Worker else
3083*495ae853SAndroid Build Coastguard Worker {
3084*495ae853SAndroid Build Coastguard Worker i4_top = -1;
3085*495ae853SAndroid Build Coastguard Worker }
3086*495ae853SAndroid Build Coastguard Worker
3087*495ae853SAndroid Build Coastguard Worker u2_mb_x_ref = (i4_scaled_mb_x >> 1);
3088*495ae853SAndroid Build Coastguard Worker u2_mb_y_ref = (i4_scaled_mb_y >> 1);
3089*495ae853SAndroid Build Coastguard Worker
3090*495ae853SAndroid Build Coastguard Worker pu1_inp_luma = (UWORD8 *) ps_ref_luma->pv_buffer;
3091*495ae853SAndroid Build Coastguard Worker pu1_inp_chroma = (UWORD8 *) ps_ref_chroma->pv_buffer;
3092*495ae853SAndroid Build Coastguard Worker
3093*495ae853SAndroid Build Coastguard Worker i4_inp_luma_stride = ps_ref_luma->i4_num_element_stride;
3094*495ae853SAndroid Build Coastguard Worker i4_inp_chroma_stride = ps_ref_chroma->i4_num_element_stride;
3095*495ae853SAndroid Build Coastguard Worker
3096*495ae853SAndroid Build Coastguard Worker /* ------- Constructing refSampleArray ----------------------- */
3097*495ae853SAndroid Build Coastguard Worker isvc_reflayer_construction_dyadic(pv_intra_samp_ctxt, ps_ref_mb_mode_map, pu1_inp_luma,
3098*495ae853SAndroid Build Coastguard Worker pu1_inp_chroma, i4_inp_luma_stride, i4_inp_chroma_stride,
3099*495ae853SAndroid Build Coastguard Worker i4_top, i4_left, u2_mb_x_ref, u2_mb_y_ref);
3100*495ae853SAndroid Build Coastguard Worker
3101*495ae853SAndroid Build Coastguard Worker /* --------------------------------------------------------------------- */
3102*495ae853SAndroid Build Coastguard Worker /* LUMA INTERPOLATION */
3103*495ae853SAndroid Build Coastguard Worker /* --------------------------------------------------------------------- */
3104*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma = ps_ctxt->pu1_refarray_buffer;
3105*495ae853SAndroid Build Coastguard Worker if(1 == i4_top)
3106*495ae853SAndroid Build Coastguard Worker {
3107*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma += (DYADIC_REF_W_Y << 3);
3108*495ae853SAndroid Build Coastguard Worker }
3109*495ae853SAndroid Build Coastguard Worker if(1 == i4_left)
3110*495ae853SAndroid Build Coastguard Worker {
3111*495ae853SAndroid Build Coastguard Worker pu1_refarray_luma += 8;
3112*495ae853SAndroid Build Coastguard Worker }
3113*495ae853SAndroid Build Coastguard Worker pu1_out_luma = (UWORD8 *) ps_curr_luma->pv_buffer;
3114*495ae853SAndroid Build Coastguard Worker i4_out_luma_stride = ps_curr_luma->i4_num_element_stride;
3115*495ae853SAndroid Build Coastguard Worker pi2_tmp_filt_buf = (WORD16 *) ps_ctxt->pi4_temp_interpolation_buffer;
3116*495ae853SAndroid Build Coastguard Worker
3117*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->pf_interpolate_luma(pu1_refarray_luma, pi2_tmp_filt_buf, pu1_out_luma,
3118*495ae853SAndroid Build Coastguard Worker i4_out_luma_stride);
3119*495ae853SAndroid Build Coastguard Worker
3120*495ae853SAndroid Build Coastguard Worker /* --------------------------------------------------------------------- */
3121*495ae853SAndroid Build Coastguard Worker /* CHROMA INTERPOLATION */
3122*495ae853SAndroid Build Coastguard Worker /* --------------------------------------------------------------------- */
3123*495ae853SAndroid Build Coastguard Worker pu1_out_chroma = (UWORD8 *) ps_curr_chroma->pv_buffer;
3124*495ae853SAndroid Build Coastguard Worker i4_out_chroma_stride = ps_curr_chroma->i4_num_element_stride;
3125*495ae853SAndroid Build Coastguard Worker
3126*495ae853SAndroid Build Coastguard Worker /* CB */
3127*495ae853SAndroid Build Coastguard Worker pu1_out_cb = pu1_out_chroma;
3128*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb = ps_ctxt->pu1_refarray_cb;
3129*495ae853SAndroid Build Coastguard Worker
3130*495ae853SAndroid Build Coastguard Worker if(1 == i4_top)
3131*495ae853SAndroid Build Coastguard Worker {
3132*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb += (DYADIC_REF_W_C << 2);
3133*495ae853SAndroid Build Coastguard Worker }
3134*495ae853SAndroid Build Coastguard Worker if(1 == i4_left)
3135*495ae853SAndroid Build Coastguard Worker {
3136*495ae853SAndroid Build Coastguard Worker pu1_refarray_cb += 4;
3137*495ae853SAndroid Build Coastguard Worker }
3138*495ae853SAndroid Build Coastguard Worker
3139*495ae853SAndroid Build Coastguard Worker /* Vertical interpolation */
3140*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->pf_vert_interpol_chroma(pu1_refarray_cb, pi2_tmp_filt_buf,
3141*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->i4_y_phase_0, ps_lyr_ctxt->i4_y_phase_1);
3142*495ae853SAndroid Build Coastguard Worker
3143*495ae853SAndroid Build Coastguard Worker /* Horizontal interpolation */
3144*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->pf_horz_interpol_chroma(pi2_tmp_filt_buf, pu1_out_cb, i4_out_chroma_stride,
3145*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->i4_x_phase_0, ps_lyr_ctxt->i4_x_phase_1);
3146*495ae853SAndroid Build Coastguard Worker
3147*495ae853SAndroid Build Coastguard Worker /* CR */
3148*495ae853SAndroid Build Coastguard Worker pu1_out_cr = pu1_out_chroma + 1;
3149*495ae853SAndroid Build Coastguard Worker pu1_refarray_cr = ps_ctxt->pu1_refarray_cr;
3150*495ae853SAndroid Build Coastguard Worker
3151*495ae853SAndroid Build Coastguard Worker if(1 == i4_top)
3152*495ae853SAndroid Build Coastguard Worker {
3153*495ae853SAndroid Build Coastguard Worker pu1_refarray_cr += (DYADIC_REF_W_C << 2);
3154*495ae853SAndroid Build Coastguard Worker }
3155*495ae853SAndroid Build Coastguard Worker if(1 == i4_left)
3156*495ae853SAndroid Build Coastguard Worker {
3157*495ae853SAndroid Build Coastguard Worker pu1_refarray_cr += 4;
3158*495ae853SAndroid Build Coastguard Worker }
3159*495ae853SAndroid Build Coastguard Worker
3160*495ae853SAndroid Build Coastguard Worker /* Vertical interpolation */
3161*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->pf_vert_interpol_chroma(pu1_refarray_cr, pi2_tmp_filt_buf,
3162*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->i4_y_phase_0, ps_lyr_ctxt->i4_y_phase_1);
3163*495ae853SAndroid Build Coastguard Worker
3164*495ae853SAndroid Build Coastguard Worker /* Horizontal interpolation */
3165*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->pf_horz_interpol_chroma(pi2_tmp_filt_buf, pu1_out_cr, i4_out_chroma_stride,
3166*495ae853SAndroid Build Coastguard Worker ps_lyr_ctxt->i4_x_phase_0, ps_lyr_ctxt->i4_x_phase_1);
3167*495ae853SAndroid Build Coastguard Worker }
3168*495ae853SAndroid Build Coastguard Worker
3169*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
3170*495ae853SAndroid Build Coastguard Worker /* */
3171*495ae853SAndroid Build Coastguard Worker /* Function Name : isvc_intra_samp_mb */
3172*495ae853SAndroid Build Coastguard Worker /* */
3173*495ae853SAndroid Build Coastguard Worker /* Description : MB level function which performs the intra resampling */
3174*495ae853SAndroid Build Coastguard Worker /* of data of an MB (luma and chroma inclusive) */
3175*495ae853SAndroid Build Coastguard Worker /* */
3176*495ae853SAndroid Build Coastguard Worker /* Inputs : pv_intra_samp_ctxt : intra sampling context */
3177*495ae853SAndroid Build Coastguard Worker /* ps_ref_luma : reference layer luma data buffer desc */
3178*495ae853SAndroid Build Coastguard Worker /* ps_ref_chroma : reference layer chroma data buffer desc */
3179*495ae853SAndroid Build Coastguard Worker /* ps_ref_mb_mode_map : ref layer mb mode map buff desc */
3180*495ae853SAndroid Build Coastguard Worker /* ps_curr_luma : current layer out luma buffer desc */
3181*495ae853SAndroid Build Coastguard Worker /* ps_curr_chroma : current layer out chroma buffer desc */
3182*495ae853SAndroid Build Coastguard Worker /* x,y : current mb coorinate */
3183*495ae853SAndroid Build Coastguard Worker /* Globals : none */
3184*495ae853SAndroid Build Coastguard Worker /* Processing : it calls the reference layer construction followed by */
3185*495ae853SAndroid Build Coastguard Worker /* interpolation function for luma and cb and cr */
3186*495ae853SAndroid Build Coastguard Worker /* Outputs : inter resampled data of current MB */
3187*495ae853SAndroid Build Coastguard Worker /* Returns : none */
3188*495ae853SAndroid Build Coastguard Worker /* */
3189*495ae853SAndroid Build Coastguard Worker /* Issues : none */
3190*495ae853SAndroid Build Coastguard Worker /* */
3191*495ae853SAndroid Build Coastguard Worker /* Revision History: */
3192*495ae853SAndroid Build Coastguard Worker /* */
3193*495ae853SAndroid Build Coastguard Worker /* DD MM YYYY Author(s) Changes (Describe the changes made) */
3194*495ae853SAndroid Build Coastguard Worker /* 07 12 2010 Nithya creation */
3195*495ae853SAndroid Build Coastguard Worker /* */
3196*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
isvc_intra_samp_mb(void * pv_intra_samp_ctxt_luma,void * pv_intra_samp_ctxt_chroma,mem_element_t * ps_ref_luma,mem_element_t * ps_ref_chroma,mem_element_t * ps_ref_mb_mode_map,mem_element_t * ps_curr_luma,mem_element_t * ps_curr_chroma)3197*495ae853SAndroid Build Coastguard Worker void isvc_intra_samp_mb(void *pv_intra_samp_ctxt_luma, void *pv_intra_samp_ctxt_chroma,
3198*495ae853SAndroid Build Coastguard Worker mem_element_t *ps_ref_luma, mem_element_t *ps_ref_chroma,
3199*495ae853SAndroid Build Coastguard Worker mem_element_t *ps_ref_mb_mode_map, mem_element_t *ps_curr_luma,
3200*495ae853SAndroid Build Coastguard Worker mem_element_t *ps_curr_chroma)
3201*495ae853SAndroid Build Coastguard Worker {
3202*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_inp_luma, *pu1_inp_chroma;
3203*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_out_luma, *pu1_out_chroma;
3204*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_out_cb, *pu1_out_cr;
3205*495ae853SAndroid Build Coastguard Worker WORD32 i4_inp_luma_stride, i4_inp_chroma_stride;
3206*495ae853SAndroid Build Coastguard Worker WORD32 i4_out_luma_stride, i4_out_chroma_stride;
3207*495ae853SAndroid Build Coastguard Worker WORD32 i4_chroma_flag, i4_refarray_stride;
3208*495ae853SAndroid Build Coastguard Worker
3209*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt_luma;
3210*495ae853SAndroid Build Coastguard Worker intra_sampling_ctxt_t *ps_ctxt_chroma;
3211*495ae853SAndroid Build Coastguard Worker
3212*495ae853SAndroid Build Coastguard Worker ps_ctxt_luma = (intra_sampling_ctxt_t *) pv_intra_samp_ctxt_luma;
3213*495ae853SAndroid Build Coastguard Worker ps_ctxt_chroma = (intra_sampling_ctxt_t *) pv_intra_samp_ctxt_chroma;
3214*495ae853SAndroid Build Coastguard Worker
3215*495ae853SAndroid Build Coastguard Worker i4_refarray_stride = ps_ctxt_luma->i4_refarray_stride;
3216*495ae853SAndroid Build Coastguard Worker
3217*495ae853SAndroid Build Coastguard Worker pu1_inp_luma = (UWORD8 *) ps_ref_luma->pv_buffer;
3218*495ae853SAndroid Build Coastguard Worker pu1_inp_chroma = (UWORD8 *) ps_ref_chroma->pv_buffer;
3219*495ae853SAndroid Build Coastguard Worker
3220*495ae853SAndroid Build Coastguard Worker i4_inp_luma_stride = ps_ref_luma->i4_num_element_stride;
3221*495ae853SAndroid Build Coastguard Worker i4_inp_chroma_stride = ps_ref_chroma->i4_num_element_stride;
3222*495ae853SAndroid Build Coastguard Worker
3223*495ae853SAndroid Build Coastguard Worker pu1_out_luma = (UWORD8 *) ps_curr_luma->pv_buffer;
3224*495ae853SAndroid Build Coastguard Worker i4_out_luma_stride = ps_curr_luma->i4_num_element_stride;
3225*495ae853SAndroid Build Coastguard Worker
3226*495ae853SAndroid Build Coastguard Worker i4_chroma_flag = 0;
3227*495ae853SAndroid Build Coastguard Worker
3228*495ae853SAndroid Build Coastguard Worker /* ------- Constructing refSampleArray ----------------------- */
3229*495ae853SAndroid Build Coastguard Worker isvc_reflayer_construction(pv_intra_samp_ctxt_luma, pu1_inp_luma, i4_inp_luma_stride,
3230*495ae853SAndroid Build Coastguard Worker i4_refarray_stride, ps_ref_mb_mode_map, i4_chroma_flag);
3231*495ae853SAndroid Build Coastguard Worker
3232*495ae853SAndroid Build Coastguard Worker /* ---- Interpolation process for Intra_Base prediction ------ */
3233*495ae853SAndroid Build Coastguard Worker isvc_interpolate_intra_base(pv_intra_samp_ctxt_luma, pu1_out_luma, i4_out_luma_stride,
3234*495ae853SAndroid Build Coastguard Worker i4_refarray_stride, i4_chroma_flag, 0);
3235*495ae853SAndroid Build Coastguard Worker
3236*495ae853SAndroid Build Coastguard Worker pu1_out_chroma = (UWORD8 *) ps_curr_chroma->pv_buffer;
3237*495ae853SAndroid Build Coastguard Worker i4_out_chroma_stride = ps_curr_chroma->i4_num_element_stride;
3238*495ae853SAndroid Build Coastguard Worker
3239*495ae853SAndroid Build Coastguard Worker pu1_out_cb = pu1_out_chroma;
3240*495ae853SAndroid Build Coastguard Worker pu1_out_cr = pu1_out_cb + 1;
3241*495ae853SAndroid Build Coastguard Worker
3242*495ae853SAndroid Build Coastguard Worker i4_refarray_stride = ps_ctxt_chroma->i4_refarray_stride;
3243*495ae853SAndroid Build Coastguard Worker
3244*495ae853SAndroid Build Coastguard Worker i4_chroma_flag = 1;
3245*495ae853SAndroid Build Coastguard Worker
3246*495ae853SAndroid Build Coastguard Worker /* ------- Constructing refSampleArray ----------------------- */
3247*495ae853SAndroid Build Coastguard Worker isvc_reflayer_construction(pv_intra_samp_ctxt_chroma, pu1_inp_chroma, i4_inp_chroma_stride,
3248*495ae853SAndroid Build Coastguard Worker i4_refarray_stride, ps_ref_mb_mode_map, i4_chroma_flag);
3249*495ae853SAndroid Build Coastguard Worker
3250*495ae853SAndroid Build Coastguard Worker /* ---- Cb Interpolation process for Intra_Base prediction ------ */
3251*495ae853SAndroid Build Coastguard Worker isvc_interpolate_intra_base(pv_intra_samp_ctxt_chroma, pu1_out_cb, i4_out_chroma_stride,
3252*495ae853SAndroid Build Coastguard Worker i4_refarray_stride, i4_chroma_flag, 0);
3253*495ae853SAndroid Build Coastguard Worker
3254*495ae853SAndroid Build Coastguard Worker /* ---- Cr Interpolation process for Intra_Base prediction ------ */
3255*495ae853SAndroid Build Coastguard Worker isvc_interpolate_intra_base(pv_intra_samp_ctxt_chroma, pu1_out_cr, i4_out_chroma_stride,
3256*495ae853SAndroid Build Coastguard Worker i4_refarray_stride, i4_chroma_flag, 1);
3257*495ae853SAndroid Build Coastguard Worker }
3258