1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (C) 2004-2010 Michael Niedermayer <michaelni@gmx.at> 3cabdff1aSopenharmony_ci * Copyright (C) 2008 David Conrad 4cabdff1aSopenharmony_ci * Copyright (C) 2015 Open Broadcast Systems Ltd. 5cabdff1aSopenharmony_ci * Author (C) 2015 Rostislav Pehlivanov <atomnuker@gmail.com> 6cabdff1aSopenharmony_ci * 7cabdff1aSopenharmony_ci * This file is part of FFmpeg. 8cabdff1aSopenharmony_ci * 9cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 10cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 11cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 12cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 13cabdff1aSopenharmony_ci * 14cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 15cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 16cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17cabdff1aSopenharmony_ci * Lesser General Public License for more details. 18cabdff1aSopenharmony_ci * 19cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 20cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 21cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22cabdff1aSopenharmony_ci */ 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#if defined(TEMPLATE_8bit) 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci# define RENAME(N) N ## _8bit 27cabdff1aSopenharmony_ci# define TYPE int16_t 28cabdff1aSopenharmony_ci# undef TEMPLATE_8bit 29cabdff1aSopenharmony_ci 30cabdff1aSopenharmony_ci#elif defined(TEMPLATE_10bit) 31cabdff1aSopenharmony_ci 32cabdff1aSopenharmony_ci# define RENAME(N) N ## _10bit 33cabdff1aSopenharmony_ci# define TYPE int32_t 34cabdff1aSopenharmony_ci# undef TEMPLATE_10bit 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_ci#elif defined(TEMPLATE_12bit) 37cabdff1aSopenharmony_ci 38cabdff1aSopenharmony_ci# define RENAME(N) N ## _12bit 39cabdff1aSopenharmony_ci# define TYPE int32_t 40cabdff1aSopenharmony_ci# undef TEMPLATE_12bit 41cabdff1aSopenharmony_ci 42cabdff1aSopenharmony_ci#endif 43cabdff1aSopenharmony_ci 44cabdff1aSopenharmony_cistatic void RENAME(vertical_compose53iL0)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, 45cabdff1aSopenharmony_ci int width) 46cabdff1aSopenharmony_ci{ 47cabdff1aSopenharmony_ci int i; 48cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 49cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 50cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 51cabdff1aSopenharmony_ci for (i = 0; i < width; i++) 52cabdff1aSopenharmony_ci b1[i] -= (unsigned)((int)(b0[i] + (unsigned)b2[i] + 2) >> 2); 53cabdff1aSopenharmony_ci} 54cabdff1aSopenharmony_ci 55cabdff1aSopenharmony_cistatic av_always_inline void RENAME(interleave)(TYPE *dst, TYPE *src0, TYPE *src1, int w2, 56cabdff1aSopenharmony_ci int add, int shift) 57cabdff1aSopenharmony_ci{ 58cabdff1aSopenharmony_ci int i; 59cabdff1aSopenharmony_ci for (i = 0; i < w2; i++) { 60cabdff1aSopenharmony_ci dst[2*i ] = ((int)(src0[i] + (unsigned)add)) >> shift; 61cabdff1aSopenharmony_ci dst[2*i+1] = ((int)(src1[i] + (unsigned)add)) >> shift; 62cabdff1aSopenharmony_ci } 63cabdff1aSopenharmony_ci} 64cabdff1aSopenharmony_ci 65cabdff1aSopenharmony_cistatic void RENAME(horizontal_compose_dirac53i)(uint8_t *_b, uint8_t *_temp, int w) 66cabdff1aSopenharmony_ci{ 67cabdff1aSopenharmony_ci int x; 68cabdff1aSopenharmony_ci const int w2 = w >> 1; 69cabdff1aSopenharmony_ci TYPE *b = (TYPE *)_b; 70cabdff1aSopenharmony_ci TYPE *temp = (TYPE *)_temp; 71cabdff1aSopenharmony_ci 72cabdff1aSopenharmony_ci temp[0] = COMPOSE_53iL0(b[w2], b[0], b[w2]); 73cabdff1aSopenharmony_ci for (x = 1; x < w2; x++) { 74cabdff1aSopenharmony_ci temp[x ] = COMPOSE_53iL0 (b[x+w2-1], b[x ], b[x+w2]); 75cabdff1aSopenharmony_ci temp[x+w2-1] = COMPOSE_DIRAC53iH0(temp[x-1], b[x+w2-1], temp[x]); 76cabdff1aSopenharmony_ci } 77cabdff1aSopenharmony_ci temp[w-1] = COMPOSE_DIRAC53iH0(temp[w2-1], b[w-1], temp[w2-1]); 78cabdff1aSopenharmony_ci 79cabdff1aSopenharmony_ci RENAME(interleave)(b, temp, temp+w2, w2, 1, 1); 80cabdff1aSopenharmony_ci} 81cabdff1aSopenharmony_ci 82cabdff1aSopenharmony_cistatic void RENAME(horizontal_compose_dd97i)(uint8_t *_b, uint8_t *_tmp, int w) 83cabdff1aSopenharmony_ci{ 84cabdff1aSopenharmony_ci int x; 85cabdff1aSopenharmony_ci const int w2 = w >> 1; 86cabdff1aSopenharmony_ci TYPE *b = (TYPE *)_b; 87cabdff1aSopenharmony_ci TYPE *tmp = (TYPE *)_tmp; 88cabdff1aSopenharmony_ci 89cabdff1aSopenharmony_ci tmp[0] = COMPOSE_53iL0(b[w2], b[0], b[w2]); 90cabdff1aSopenharmony_ci for (x = 1; x < w2; x++) 91cabdff1aSopenharmony_ci tmp[x] = COMPOSE_53iL0(b[x+w2-1], b[x], b[x+w2]); 92cabdff1aSopenharmony_ci 93cabdff1aSopenharmony_ci // extend the edges 94cabdff1aSopenharmony_ci tmp[-1] = tmp[0]; 95cabdff1aSopenharmony_ci tmp[w2+1] = tmp[w2] = tmp[w2-1]; 96cabdff1aSopenharmony_ci 97cabdff1aSopenharmony_ci for (x = 0; x < w2; x++) { 98cabdff1aSopenharmony_ci b[2*x ] = ((int)(tmp[x] + 1U))>>1; 99cabdff1aSopenharmony_ci b[2*x+1] = ((int)(COMPOSE_DD97iH0(tmp[x-1], tmp[x], b[x+w2], tmp[x+1], tmp[x+2]) + 1U))>>1; 100cabdff1aSopenharmony_ci } 101cabdff1aSopenharmony_ci} 102cabdff1aSopenharmony_ci 103cabdff1aSopenharmony_cistatic void RENAME(horizontal_compose_dd137i)(uint8_t *_b, uint8_t *_tmp, int w) 104cabdff1aSopenharmony_ci{ 105cabdff1aSopenharmony_ci const int w2 = w >> 1; 106cabdff1aSopenharmony_ci int x; 107cabdff1aSopenharmony_ci TYPE *b = (TYPE *)_b; 108cabdff1aSopenharmony_ci TYPE *tmp = (TYPE *)_tmp; 109cabdff1aSopenharmony_ci 110cabdff1aSopenharmony_ci tmp[0] = COMPOSE_DD137iL0(b[w2], b[w2], b[0], b[w2 ], b[w2+1]); 111cabdff1aSopenharmony_ci tmp[1] = COMPOSE_DD137iL0(b[w2], b[w2], b[1], b[w2+1], b[w2+2]); 112cabdff1aSopenharmony_ci for (x = 2; x < w2-1; x++) 113cabdff1aSopenharmony_ci tmp[x] = COMPOSE_DD137iL0(b[x+w2-2], b[x+w2-1], b[x], b[x+w2], b[x+w2+1]); 114cabdff1aSopenharmony_ci tmp[w2-1] = COMPOSE_DD137iL0(b[w-3], b[w-2], b[w2-1], b[w-1], b[w-1]); 115cabdff1aSopenharmony_ci 116cabdff1aSopenharmony_ci // extend the edges 117cabdff1aSopenharmony_ci tmp[-1] = tmp[0]; 118cabdff1aSopenharmony_ci tmp[w2+1] = tmp[w2] = tmp[w2-1]; 119cabdff1aSopenharmony_ci 120cabdff1aSopenharmony_ci for (x = 0; x < w2; x++) { 121cabdff1aSopenharmony_ci b[2*x ] = ((int)(tmp[x] + 1U))>>1; 122cabdff1aSopenharmony_ci b[2*x+1] = ((int)(COMPOSE_DD97iH0(tmp[x-1], tmp[x], b[x+w2], tmp[x+1], tmp[x+2]) + 1U))>>1; 123cabdff1aSopenharmony_ci } 124cabdff1aSopenharmony_ci} 125cabdff1aSopenharmony_ci 126cabdff1aSopenharmony_cistatic av_always_inline void RENAME(horizontal_compose_haari)(TYPE *b, TYPE *temp, 127cabdff1aSopenharmony_ci int w, int shift) 128cabdff1aSopenharmony_ci{ 129cabdff1aSopenharmony_ci const int w2 = w >> 1; 130cabdff1aSopenharmony_ci int x; 131cabdff1aSopenharmony_ci 132cabdff1aSopenharmony_ci for (x = 0; x < w2; x++) { 133cabdff1aSopenharmony_ci temp[x ] = COMPOSE_HAARiL0(b[x ], b[x+w2]); 134cabdff1aSopenharmony_ci temp[x+w2] = COMPOSE_HAARiH0(b[x+w2], temp[x]); 135cabdff1aSopenharmony_ci } 136cabdff1aSopenharmony_ci 137cabdff1aSopenharmony_ci RENAME(interleave)(b, temp, temp+w2, w2, shift, shift); 138cabdff1aSopenharmony_ci} 139cabdff1aSopenharmony_ci 140cabdff1aSopenharmony_cistatic void RENAME(horizontal_compose_haar0i)(uint8_t *_b, uint8_t *_temp, int w) 141cabdff1aSopenharmony_ci{ 142cabdff1aSopenharmony_ci TYPE *b = (TYPE *)_b; 143cabdff1aSopenharmony_ci TYPE *temp = (TYPE *)_temp; 144cabdff1aSopenharmony_ci RENAME(horizontal_compose_haari)(b, temp, w, 0); 145cabdff1aSopenharmony_ci} 146cabdff1aSopenharmony_ci 147cabdff1aSopenharmony_cistatic void RENAME(horizontal_compose_haar1i)(uint8_t *_b, uint8_t *_temp, int w) 148cabdff1aSopenharmony_ci{ 149cabdff1aSopenharmony_ci TYPE *b = (TYPE *)_b; 150cabdff1aSopenharmony_ci TYPE *temp = (TYPE *)_temp; 151cabdff1aSopenharmony_ci RENAME(horizontal_compose_haari)(b, temp, w, 1); 152cabdff1aSopenharmony_ci} 153cabdff1aSopenharmony_ci 154cabdff1aSopenharmony_cistatic void RENAME(horizontal_compose_fidelityi)(uint8_t *_b, uint8_t *_tmp, int w) 155cabdff1aSopenharmony_ci{ 156cabdff1aSopenharmony_ci const int w2 = w >> 1; 157cabdff1aSopenharmony_ci int i, x; 158cabdff1aSopenharmony_ci TYPE v[8]; 159cabdff1aSopenharmony_ci TYPE *b = (TYPE *)_b; 160cabdff1aSopenharmony_ci TYPE *tmp = (TYPE *)_tmp; 161cabdff1aSopenharmony_ci 162cabdff1aSopenharmony_ci for (x = 0; x < w2; x++) { 163cabdff1aSopenharmony_ci for (i = 0; i < 8; i++) 164cabdff1aSopenharmony_ci v[i] = b[av_clip(x-3+i, 0, w2-1)]; 165cabdff1aSopenharmony_ci tmp[x] = COMPOSE_FIDELITYiH0(v[0], v[1], v[2], v[3], b[x+w2], v[4], v[5], v[6], v[7]); 166cabdff1aSopenharmony_ci } 167cabdff1aSopenharmony_ci 168cabdff1aSopenharmony_ci for (x = 0; x < w2; x++) { 169cabdff1aSopenharmony_ci for (i = 0; i < 8; i++) 170cabdff1aSopenharmony_ci v[i] = tmp[av_clip(x-4+i, 0, w2-1)]; 171cabdff1aSopenharmony_ci tmp[x+w2] = COMPOSE_FIDELITYiL0(v[0], v[1], v[2], v[3], b[x], v[4], v[5], v[6], v[7]); 172cabdff1aSopenharmony_ci } 173cabdff1aSopenharmony_ci 174cabdff1aSopenharmony_ci RENAME(interleave)(b, tmp+w2, tmp, w2, 0, 0); 175cabdff1aSopenharmony_ci} 176cabdff1aSopenharmony_ci 177cabdff1aSopenharmony_cistatic void RENAME(horizontal_compose_daub97i)(uint8_t *_b, uint8_t *_temp, int w) 178cabdff1aSopenharmony_ci{ 179cabdff1aSopenharmony_ci const int w2 = w >> 1; 180cabdff1aSopenharmony_ci int x, b0, b1, b2; 181cabdff1aSopenharmony_ci TYPE *b = (TYPE *)_b; 182cabdff1aSopenharmony_ci TYPE *temp = (TYPE *)_temp; 183cabdff1aSopenharmony_ci 184cabdff1aSopenharmony_ci temp[0] = COMPOSE_DAUB97iL1(b[w2], b[0], b[w2]); 185cabdff1aSopenharmony_ci for (x = 1; x < w2; x++) { 186cabdff1aSopenharmony_ci temp[x ] = COMPOSE_DAUB97iL1(b[x+w2-1], b[x ], b[x+w2]); 187cabdff1aSopenharmony_ci temp[x+w2-1] = COMPOSE_DAUB97iH1(temp[x-1], b[x+w2-1], temp[x]); 188cabdff1aSopenharmony_ci } 189cabdff1aSopenharmony_ci temp[w-1] = COMPOSE_DAUB97iH1(temp[w2-1], b[w-1], temp[w2-1]); 190cabdff1aSopenharmony_ci 191cabdff1aSopenharmony_ci // second stage combined with interleave and shift 192cabdff1aSopenharmony_ci b0 = b2 = COMPOSE_DAUB97iL0(temp[w2], temp[0], temp[w2]); 193cabdff1aSopenharmony_ci b[0] = ~((~b0) >> 1); 194cabdff1aSopenharmony_ci for (x = 1; x < w2; x++) { 195cabdff1aSopenharmony_ci b2 = COMPOSE_DAUB97iL0(temp[x+w2-1], temp[x ], temp[x+w2]); 196cabdff1aSopenharmony_ci b1 = COMPOSE_DAUB97iH0( b0, temp[x+w2-1], b2 ); 197cabdff1aSopenharmony_ci b[2*x-1] = ~((~b1) >> 1); 198cabdff1aSopenharmony_ci b[2*x ] = ~((~b2) >> 1); 199cabdff1aSopenharmony_ci b0 = b2; 200cabdff1aSopenharmony_ci } 201cabdff1aSopenharmony_ci b[w-1] = ~((~COMPOSE_DAUB97iH0(b2, temp[w-1], b2)) >> 1); 202cabdff1aSopenharmony_ci} 203cabdff1aSopenharmony_ci 204cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_dirac53iH0)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, 205cabdff1aSopenharmony_ci int width) 206cabdff1aSopenharmony_ci{ 207cabdff1aSopenharmony_ci int i; 208cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 209cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 210cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 211cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 212cabdff1aSopenharmony_ci b1[i] = COMPOSE_DIRAC53iH0(b0[i], b1[i], b2[i]); 213cabdff1aSopenharmony_ci } 214cabdff1aSopenharmony_ci} 215cabdff1aSopenharmony_ci 216cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_dd97iH0)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, 217cabdff1aSopenharmony_ci uint8_t *_b3, uint8_t *_b4, int width) 218cabdff1aSopenharmony_ci{ 219cabdff1aSopenharmony_ci int i; 220cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 221cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 222cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 223cabdff1aSopenharmony_ci TYPE *b3 = (TYPE *)_b3; 224cabdff1aSopenharmony_ci TYPE *b4 = (TYPE *)_b4; 225cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 226cabdff1aSopenharmony_ci b2[i] = COMPOSE_DD97iH0(b0[i], b1[i], b2[i], b3[i], b4[i]); 227cabdff1aSopenharmony_ci } 228cabdff1aSopenharmony_ci} 229cabdff1aSopenharmony_ci 230cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_dd137iL0)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, 231cabdff1aSopenharmony_ci uint8_t *_b3, uint8_t *_b4, int width) 232cabdff1aSopenharmony_ci{ 233cabdff1aSopenharmony_ci int i; 234cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 235cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 236cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 237cabdff1aSopenharmony_ci TYPE *b3 = (TYPE *)_b3; 238cabdff1aSopenharmony_ci TYPE *b4 = (TYPE *)_b4; 239cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 240cabdff1aSopenharmony_ci b2[i] = COMPOSE_DD137iL0(b0[i], b1[i], b2[i], b3[i], b4[i]); 241cabdff1aSopenharmony_ci } 242cabdff1aSopenharmony_ci} 243cabdff1aSopenharmony_ci 244cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_haar)(uint8_t *_b0, uint8_t *_b1, int width) 245cabdff1aSopenharmony_ci{ 246cabdff1aSopenharmony_ci int i; 247cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 248cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 249cabdff1aSopenharmony_ci 250cabdff1aSopenharmony_ci for (i = 0; i < width; i++) { 251cabdff1aSopenharmony_ci b0[i] = COMPOSE_HAARiL0(b0[i], b1[i]); 252cabdff1aSopenharmony_ci b1[i] = COMPOSE_HAARiH0(b1[i], b0[i]); 253cabdff1aSopenharmony_ci } 254cabdff1aSopenharmony_ci} 255cabdff1aSopenharmony_ci 256cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_fidelityiH0)(uint8_t *_dst, uint8_t *_b[8], int width) 257cabdff1aSopenharmony_ci{ 258cabdff1aSopenharmony_ci int i; 259cabdff1aSopenharmony_ci TYPE *dst = (TYPE *)_dst; 260cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b[0]; 261cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b[1]; 262cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b[2]; 263cabdff1aSopenharmony_ci TYPE *b3 = (TYPE *)_b[3]; 264cabdff1aSopenharmony_ci TYPE *b4 = (TYPE *)_b[4]; 265cabdff1aSopenharmony_ci TYPE *b5 = (TYPE *)_b[5]; 266cabdff1aSopenharmony_ci TYPE *b6 = (TYPE *)_b[6]; 267cabdff1aSopenharmony_ci TYPE *b7 = (TYPE *)_b[7]; 268cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 269cabdff1aSopenharmony_ci dst[i] = COMPOSE_FIDELITYiH0(b0[i], b1[i], b2[i], b3[i], dst[i], b4[i], b5[i], b6[i], b7[i]); 270cabdff1aSopenharmony_ci } 271cabdff1aSopenharmony_ci} 272cabdff1aSopenharmony_ci 273cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_fidelityiL0)(uint8_t *_dst, uint8_t *_b[8], int width) 274cabdff1aSopenharmony_ci{ 275cabdff1aSopenharmony_ci int i; 276cabdff1aSopenharmony_ci TYPE *dst = (TYPE *)_dst; 277cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b[0]; 278cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b[1]; 279cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b[2]; 280cabdff1aSopenharmony_ci TYPE *b3 = (TYPE *)_b[3]; 281cabdff1aSopenharmony_ci TYPE *b4 = (TYPE *)_b[4]; 282cabdff1aSopenharmony_ci TYPE *b5 = (TYPE *)_b[5]; 283cabdff1aSopenharmony_ci TYPE *b6 = (TYPE *)_b[6]; 284cabdff1aSopenharmony_ci TYPE *b7 = (TYPE *)_b[7]; 285cabdff1aSopenharmony_ci 286cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 287cabdff1aSopenharmony_ci dst[i] = COMPOSE_FIDELITYiL0(b0[i], b1[i], b2[i], b3[i], dst[i], b4[i], b5[i], b6[i], b7[i]); 288cabdff1aSopenharmony_ci } 289cabdff1aSopenharmony_ci} 290cabdff1aSopenharmony_ci 291cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_daub97iH0)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, int width) 292cabdff1aSopenharmony_ci{ 293cabdff1aSopenharmony_ci int i; 294cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 295cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 296cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 297cabdff1aSopenharmony_ci 298cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 299cabdff1aSopenharmony_ci b1[i] = COMPOSE_DAUB97iH0(b0[i], b1[i], b2[i]); 300cabdff1aSopenharmony_ci } 301cabdff1aSopenharmony_ci} 302cabdff1aSopenharmony_ci 303cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_daub97iH1)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, int width) 304cabdff1aSopenharmony_ci{ 305cabdff1aSopenharmony_ci int i; 306cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 307cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 308cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 309cabdff1aSopenharmony_ci 310cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 311cabdff1aSopenharmony_ci b1[i] = COMPOSE_DAUB97iH1(b0[i], b1[i], b2[i]); 312cabdff1aSopenharmony_ci } 313cabdff1aSopenharmony_ci} 314cabdff1aSopenharmony_ci 315cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_daub97iL0)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, int width) 316cabdff1aSopenharmony_ci{ 317cabdff1aSopenharmony_ci int i; 318cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 319cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 320cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 321cabdff1aSopenharmony_ci 322cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 323cabdff1aSopenharmony_ci b1[i] = COMPOSE_DAUB97iL0(b0[i], b1[i], b2[i]); 324cabdff1aSopenharmony_ci } 325cabdff1aSopenharmony_ci} 326cabdff1aSopenharmony_ci 327cabdff1aSopenharmony_cistatic void RENAME(vertical_compose_daub97iL1)(uint8_t *_b0, uint8_t *_b1, uint8_t *_b2, int width) 328cabdff1aSopenharmony_ci{ 329cabdff1aSopenharmony_ci int i; 330cabdff1aSopenharmony_ci TYPE *b0 = (TYPE *)_b0; 331cabdff1aSopenharmony_ci TYPE *b1 = (TYPE *)_b1; 332cabdff1aSopenharmony_ci TYPE *b2 = (TYPE *)_b2; 333cabdff1aSopenharmony_ci 334cabdff1aSopenharmony_ci for(i=0; i<width; i++){ 335cabdff1aSopenharmony_ci b1[i] = COMPOSE_DAUB97iL1(b0[i], b1[i], b2[i]); 336cabdff1aSopenharmony_ci } 337cabdff1aSopenharmony_ci} 338cabdff1aSopenharmony_ci 339cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_dd97i_dy)(DWTContext *d, int level, int width, int height, int stride) 340cabdff1aSopenharmony_ci{ 341cabdff1aSopenharmony_ci vertical_compose_3tap vertical_compose_l0 = (void*)d->vertical_compose_l0; 342cabdff1aSopenharmony_ci vertical_compose_5tap vertical_compose_h0 = (void*)d->vertical_compose_h0; 343cabdff1aSopenharmony_ci DWTCompose *cs = d->cs + level; 344cabdff1aSopenharmony_ci 345cabdff1aSopenharmony_ci int i, y = cs->y; 346cabdff1aSopenharmony_ci uint8_t *b[8]; 347cabdff1aSopenharmony_ci for (i = 0; i < 6; i++) 348cabdff1aSopenharmony_ci b[i] = cs->b[i]; 349cabdff1aSopenharmony_ci b[6] = d->buffer + av_clip(y+5, 0, height-2)*stride; 350cabdff1aSopenharmony_ci b[7] = d->buffer + av_clip(y+6, 1, height-1)*stride; 351cabdff1aSopenharmony_ci 352cabdff1aSopenharmony_ci if(y+5<(unsigned)height) vertical_compose_l0( b[5], b[6], b[7], width); 353cabdff1aSopenharmony_ci if(y+1<(unsigned)height) vertical_compose_h0(b[0], b[2], b[3], b[4], b[6], width); 354cabdff1aSopenharmony_ci 355cabdff1aSopenharmony_ci if(y-1<(unsigned)height) d->horizontal_compose(b[0], d->temp, width); 356cabdff1aSopenharmony_ci if(y+0<(unsigned)height) d->horizontal_compose(b[1], d->temp, width); 357cabdff1aSopenharmony_ci 358cabdff1aSopenharmony_ci for (i = 0; i < 6; i++) 359cabdff1aSopenharmony_ci cs->b[i] = b[i+2]; 360cabdff1aSopenharmony_ci cs->y += 2; 361cabdff1aSopenharmony_ci} 362cabdff1aSopenharmony_ci 363cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_dirac53i_dy)(DWTContext *d, int level, int width, int height, int stride) 364cabdff1aSopenharmony_ci{ 365cabdff1aSopenharmony_ci vertical_compose_3tap vertical_compose_l0 = (void*)d->vertical_compose_l0; 366cabdff1aSopenharmony_ci vertical_compose_3tap vertical_compose_h0 = (void*)d->vertical_compose_h0; 367cabdff1aSopenharmony_ci DWTCompose *cs = d->cs + level; 368cabdff1aSopenharmony_ci 369cabdff1aSopenharmony_ci int y= cs->y; 370cabdff1aSopenharmony_ci uint8_t *b[4] = { cs->b[0], cs->b[1] }; 371cabdff1aSopenharmony_ci b[2] = d->buffer + avpriv_mirror(y+1, height-1)*stride; 372cabdff1aSopenharmony_ci b[3] = d->buffer + avpriv_mirror(y+2, height-1)*stride; 373cabdff1aSopenharmony_ci 374cabdff1aSopenharmony_ci if(y+1<(unsigned)height) vertical_compose_l0(b[1], b[2], b[3], width); 375cabdff1aSopenharmony_ci if(y+0<(unsigned)height) vertical_compose_h0(b[0], b[1], b[2], width); 376cabdff1aSopenharmony_ci 377cabdff1aSopenharmony_ci if(y-1<(unsigned)height) d->horizontal_compose(b[0], d->temp, width); 378cabdff1aSopenharmony_ci if(y+0<(unsigned)height) d->horizontal_compose(b[1], d->temp, width); 379cabdff1aSopenharmony_ci 380cabdff1aSopenharmony_ci cs->b[0] = b[2]; 381cabdff1aSopenharmony_ci cs->b[1] = b[3]; 382cabdff1aSopenharmony_ci cs->y += 2; 383cabdff1aSopenharmony_ci} 384cabdff1aSopenharmony_ci 385cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_dd137i_dy)(DWTContext *d, int level, int width, int height, int stride) 386cabdff1aSopenharmony_ci{ 387cabdff1aSopenharmony_ci vertical_compose_5tap vertical_compose_l0 = (void*)d->vertical_compose_l0; 388cabdff1aSopenharmony_ci vertical_compose_5tap vertical_compose_h0 = (void*)d->vertical_compose_h0; 389cabdff1aSopenharmony_ci DWTCompose *cs = d->cs + level; 390cabdff1aSopenharmony_ci 391cabdff1aSopenharmony_ci int i, y = cs->y; 392cabdff1aSopenharmony_ci uint8_t *b[10]; 393cabdff1aSopenharmony_ci for (i = 0; i < 8; i++) 394cabdff1aSopenharmony_ci b[i] = cs->b[i]; 395cabdff1aSopenharmony_ci b[8] = d->buffer + av_clip(y+7, 0, height-2)*stride; 396cabdff1aSopenharmony_ci b[9] = d->buffer + av_clip(y+8, 1, height-1)*stride; 397cabdff1aSopenharmony_ci 398cabdff1aSopenharmony_ci if(y+5<(unsigned)height) vertical_compose_l0(b[3], b[5], b[6], b[7], b[9], width); 399cabdff1aSopenharmony_ci if(y+1<(unsigned)height) vertical_compose_h0(b[0], b[2], b[3], b[4], b[6], width); 400cabdff1aSopenharmony_ci 401cabdff1aSopenharmony_ci if(y-1<(unsigned)height) d->horizontal_compose(b[0], d->temp, width); 402cabdff1aSopenharmony_ci if(y+0<(unsigned)height) d->horizontal_compose(b[1], d->temp, width); 403cabdff1aSopenharmony_ci 404cabdff1aSopenharmony_ci for (i = 0; i < 8; i++) 405cabdff1aSopenharmony_ci cs->b[i] = b[i+2]; 406cabdff1aSopenharmony_ci cs->y += 2; 407cabdff1aSopenharmony_ci} 408cabdff1aSopenharmony_ci 409cabdff1aSopenharmony_ci// haar makes the assumption that height is even (always true for dirac) 410cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_haari_dy)(DWTContext *d, int level, int width, int height, int stride) 411cabdff1aSopenharmony_ci{ 412cabdff1aSopenharmony_ci vertical_compose_2tap vertical_compose = (void*)d->vertical_compose; 413cabdff1aSopenharmony_ci int y = d->cs[level].y; 414cabdff1aSopenharmony_ci uint8_t *b0 = d->buffer + (y-1)*stride; 415cabdff1aSopenharmony_ci uint8_t *b1 = d->buffer + (y )*stride; 416cabdff1aSopenharmony_ci 417cabdff1aSopenharmony_ci vertical_compose(b0, b1, width); 418cabdff1aSopenharmony_ci d->horizontal_compose(b0, d->temp, width); 419cabdff1aSopenharmony_ci d->horizontal_compose(b1, d->temp, width); 420cabdff1aSopenharmony_ci 421cabdff1aSopenharmony_ci d->cs[level].y += 2; 422cabdff1aSopenharmony_ci} 423cabdff1aSopenharmony_ci 424cabdff1aSopenharmony_ci// Don't do sliced idwt for fidelity; the 9 tap filter makes it a bit annoying 425cabdff1aSopenharmony_ci// Fortunately, this filter isn't used in practice. 426cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_fidelity)(DWTContext *d, int level, int width, int height, int stride) 427cabdff1aSopenharmony_ci{ 428cabdff1aSopenharmony_ci vertical_compose_9tap vertical_compose_l0 = (void*)d->vertical_compose_l0; 429cabdff1aSopenharmony_ci vertical_compose_9tap vertical_compose_h0 = (void*)d->vertical_compose_h0; 430cabdff1aSopenharmony_ci int i, y; 431cabdff1aSopenharmony_ci uint8_t *b[8]; 432cabdff1aSopenharmony_ci 433cabdff1aSopenharmony_ci for (y = 1; y < height; y += 2) { 434cabdff1aSopenharmony_ci for (i = 0; i < 8; i++) 435cabdff1aSopenharmony_ci b[i] = d->buffer + av_clip((y-7 + 2*i), 0, height-2)*stride; 436cabdff1aSopenharmony_ci vertical_compose_h0(d->buffer + y*stride, b, width); 437cabdff1aSopenharmony_ci } 438cabdff1aSopenharmony_ci 439cabdff1aSopenharmony_ci for (y = 0; y < height; y += 2) { 440cabdff1aSopenharmony_ci for (i = 0; i < 8; i++) 441cabdff1aSopenharmony_ci b[i] = d->buffer + av_clip((y-7 + 2*i), 1, height-1)*stride; 442cabdff1aSopenharmony_ci vertical_compose_l0(d->buffer + y*stride, b, width); 443cabdff1aSopenharmony_ci } 444cabdff1aSopenharmony_ci 445cabdff1aSopenharmony_ci for (y = 0; y < height; y++) 446cabdff1aSopenharmony_ci d->horizontal_compose(d->buffer + y*stride, d->temp, width); 447cabdff1aSopenharmony_ci 448cabdff1aSopenharmony_ci d->cs[level].y = height+1; 449cabdff1aSopenharmony_ci} 450cabdff1aSopenharmony_ci 451cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_daub97i_dy)(DWTContext *d, int level, int width, int height, int stride) 452cabdff1aSopenharmony_ci{ 453cabdff1aSopenharmony_ci vertical_compose_3tap vertical_compose_l0 = (void*)d->vertical_compose_l0; 454cabdff1aSopenharmony_ci vertical_compose_3tap vertical_compose_h0 = (void*)d->vertical_compose_h0; 455cabdff1aSopenharmony_ci vertical_compose_3tap vertical_compose_l1 = (void*)d->vertical_compose_l1; 456cabdff1aSopenharmony_ci vertical_compose_3tap vertical_compose_h1 = (void*)d->vertical_compose_h1; 457cabdff1aSopenharmony_ci DWTCompose *cs = d->cs + level; 458cabdff1aSopenharmony_ci 459cabdff1aSopenharmony_ci int i, y = cs->y; 460cabdff1aSopenharmony_ci uint8_t *b[6]; 461cabdff1aSopenharmony_ci for (i = 0; i < 4; i++) 462cabdff1aSopenharmony_ci b[i] = cs->b[i]; 463cabdff1aSopenharmony_ci b[4] = d->buffer + avpriv_mirror(y+3, height-1)*stride; 464cabdff1aSopenharmony_ci b[5] = d->buffer + avpriv_mirror(y+4, height-1)*stride; 465cabdff1aSopenharmony_ci 466cabdff1aSopenharmony_ci if(y+3<(unsigned)height) vertical_compose_l1(b[3], b[4], b[5], width); 467cabdff1aSopenharmony_ci if(y+2<(unsigned)height) vertical_compose_h1(b[2], b[3], b[4], width); 468cabdff1aSopenharmony_ci if(y+1<(unsigned)height) vertical_compose_l0(b[1], b[2], b[3], width); 469cabdff1aSopenharmony_ci if(y+0<(unsigned)height) vertical_compose_h0(b[0], b[1], b[2], width); 470cabdff1aSopenharmony_ci 471cabdff1aSopenharmony_ci if(y-1<(unsigned)height) d->horizontal_compose(b[0], d->temp, width); 472cabdff1aSopenharmony_ci if(y+0<(unsigned)height) d->horizontal_compose(b[1], d->temp, width); 473cabdff1aSopenharmony_ci 474cabdff1aSopenharmony_ci for (i = 0; i < 4; i++) 475cabdff1aSopenharmony_ci cs->b[i] = b[i+2]; 476cabdff1aSopenharmony_ci cs->y += 2; 477cabdff1aSopenharmony_ci} 478cabdff1aSopenharmony_ci 479cabdff1aSopenharmony_cistatic void RENAME(spatial_compose97i_init)(DWTCompose *cs, uint8_t *buffer, int height, int stride) 480cabdff1aSopenharmony_ci{ 481cabdff1aSopenharmony_ci cs->b[0] = buffer + avpriv_mirror(-3-1, height-1)*stride; 482cabdff1aSopenharmony_ci cs->b[1] = buffer + avpriv_mirror(-3 , height-1)*stride; 483cabdff1aSopenharmony_ci cs->b[2] = buffer + avpriv_mirror(-3+1, height-1)*stride; 484cabdff1aSopenharmony_ci cs->b[3] = buffer + avpriv_mirror(-3+2, height-1)*stride; 485cabdff1aSopenharmony_ci cs->y = -3; 486cabdff1aSopenharmony_ci} 487cabdff1aSopenharmony_ci 488cabdff1aSopenharmony_cistatic void RENAME(spatial_compose53i_init)(DWTCompose *cs, uint8_t *buffer, int height, int stride) 489cabdff1aSopenharmony_ci{ 490cabdff1aSopenharmony_ci cs->b[0] = buffer + avpriv_mirror(-1-1, height-1)*stride; 491cabdff1aSopenharmony_ci cs->b[1] = buffer + avpriv_mirror(-1 , height-1)*stride; 492cabdff1aSopenharmony_ci cs->y = -1; 493cabdff1aSopenharmony_ci} 494cabdff1aSopenharmony_ci 495cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_dd97i_init)(DWTCompose *cs, uint8_t *buffer, int height, int stride) 496cabdff1aSopenharmony_ci{ 497cabdff1aSopenharmony_ci cs->b[0] = buffer + av_clip(-5-1, 0, height-2)*stride; 498cabdff1aSopenharmony_ci cs->b[1] = buffer + av_clip(-5 , 1, height-1)*stride; 499cabdff1aSopenharmony_ci cs->b[2] = buffer + av_clip(-5+1, 0, height-2)*stride; 500cabdff1aSopenharmony_ci cs->b[3] = buffer + av_clip(-5+2, 1, height-1)*stride; 501cabdff1aSopenharmony_ci cs->b[4] = buffer + av_clip(-5+3, 0, height-2)*stride; 502cabdff1aSopenharmony_ci cs->b[5] = buffer + av_clip(-5+4, 1, height-1)*stride; 503cabdff1aSopenharmony_ci cs->y = -5; 504cabdff1aSopenharmony_ci} 505cabdff1aSopenharmony_ci 506cabdff1aSopenharmony_cistatic void RENAME(spatial_compose_dd137i_init)(DWTCompose *cs, uint8_t *buffer, int height, int stride) 507cabdff1aSopenharmony_ci{ 508cabdff1aSopenharmony_ci cs->b[0] = buffer + av_clip(-5-1, 0, height-2)*stride; 509cabdff1aSopenharmony_ci cs->b[1] = buffer + av_clip(-5 , 1, height-1)*stride; 510cabdff1aSopenharmony_ci cs->b[2] = buffer + av_clip(-5+1, 0, height-2)*stride; 511cabdff1aSopenharmony_ci cs->b[3] = buffer + av_clip(-5+2, 1, height-1)*stride; 512cabdff1aSopenharmony_ci cs->b[4] = buffer + av_clip(-5+3, 0, height-2)*stride; 513cabdff1aSopenharmony_ci cs->b[5] = buffer + av_clip(-5+4, 1, height-1)*stride; 514cabdff1aSopenharmony_ci cs->b[6] = buffer + av_clip(-5+5, 0, height-2)*stride; 515cabdff1aSopenharmony_ci cs->b[7] = buffer + av_clip(-5+6, 1, height-1)*stride; 516cabdff1aSopenharmony_ci cs->y = -5; 517cabdff1aSopenharmony_ci} 518cabdff1aSopenharmony_ci 519cabdff1aSopenharmony_cistatic int RENAME(ff_spatial_idwt_init)(DWTContext *d, enum dwt_type type) 520cabdff1aSopenharmony_ci{ 521cabdff1aSopenharmony_ci int level; 522cabdff1aSopenharmony_ci 523cabdff1aSopenharmony_ci d->temp = (uint8_t *)(((TYPE *)d->temp) + 8); 524cabdff1aSopenharmony_ci 525cabdff1aSopenharmony_ci for (level = d->decomposition_count - 1; level >= 0; level--){ 526cabdff1aSopenharmony_ci int hl = d->height >> level; 527cabdff1aSopenharmony_ci int stride_l = d->stride << level; 528cabdff1aSopenharmony_ci 529cabdff1aSopenharmony_ci switch(type){ 530cabdff1aSopenharmony_ci case DWT_DIRAC_DD9_7: 531cabdff1aSopenharmony_ci RENAME(spatial_compose_dd97i_init)(d->cs+level, d->buffer, hl, stride_l); 532cabdff1aSopenharmony_ci break; 533cabdff1aSopenharmony_ci case DWT_DIRAC_LEGALL5_3: 534cabdff1aSopenharmony_ci RENAME(spatial_compose53i_init)(d->cs+level, d->buffer, hl, stride_l); 535cabdff1aSopenharmony_ci break; 536cabdff1aSopenharmony_ci case DWT_DIRAC_DD13_7: 537cabdff1aSopenharmony_ci RENAME(spatial_compose_dd137i_init)(d->cs+level, d->buffer, hl, stride_l); 538cabdff1aSopenharmony_ci break; 539cabdff1aSopenharmony_ci case DWT_DIRAC_HAAR0: 540cabdff1aSopenharmony_ci case DWT_DIRAC_HAAR1: 541cabdff1aSopenharmony_ci d->cs[level].y = 1; 542cabdff1aSopenharmony_ci break; 543cabdff1aSopenharmony_ci case DWT_DIRAC_DAUB9_7: 544cabdff1aSopenharmony_ci RENAME(spatial_compose97i_init)(d->cs+level, d->buffer, hl, stride_l); 545cabdff1aSopenharmony_ci break; 546cabdff1aSopenharmony_ci default: 547cabdff1aSopenharmony_ci d->cs[level].y = 0; 548cabdff1aSopenharmony_ci break; 549cabdff1aSopenharmony_ci } 550cabdff1aSopenharmony_ci } 551cabdff1aSopenharmony_ci 552cabdff1aSopenharmony_ci switch (type) { 553cabdff1aSopenharmony_ci case DWT_DIRAC_DD9_7: 554cabdff1aSopenharmony_ci d->spatial_compose = RENAME(spatial_compose_dd97i_dy); 555cabdff1aSopenharmony_ci d->vertical_compose_l0 = (void*)RENAME(vertical_compose53iL0); 556cabdff1aSopenharmony_ci d->vertical_compose_h0 = (void*)RENAME(vertical_compose_dd97iH0); 557cabdff1aSopenharmony_ci d->horizontal_compose = RENAME(horizontal_compose_dd97i); 558cabdff1aSopenharmony_ci d->support = 7; 559cabdff1aSopenharmony_ci break; 560cabdff1aSopenharmony_ci case DWT_DIRAC_LEGALL5_3: 561cabdff1aSopenharmony_ci d->spatial_compose = RENAME(spatial_compose_dirac53i_dy); 562cabdff1aSopenharmony_ci d->vertical_compose_l0 = (void*)RENAME(vertical_compose53iL0); 563cabdff1aSopenharmony_ci d->vertical_compose_h0 = (void*)RENAME(vertical_compose_dirac53iH0); 564cabdff1aSopenharmony_ci d->horizontal_compose = RENAME(horizontal_compose_dirac53i); 565cabdff1aSopenharmony_ci d->support = 3; 566cabdff1aSopenharmony_ci break; 567cabdff1aSopenharmony_ci case DWT_DIRAC_DD13_7: 568cabdff1aSopenharmony_ci d->spatial_compose = RENAME(spatial_compose_dd137i_dy); 569cabdff1aSopenharmony_ci d->vertical_compose_l0 = (void*)RENAME(vertical_compose_dd137iL0); 570cabdff1aSopenharmony_ci d->vertical_compose_h0 = (void*)RENAME(vertical_compose_dd97iH0); 571cabdff1aSopenharmony_ci d->horizontal_compose = RENAME(horizontal_compose_dd137i); 572cabdff1aSopenharmony_ci d->support = 7; 573cabdff1aSopenharmony_ci break; 574cabdff1aSopenharmony_ci case DWT_DIRAC_HAAR0: 575cabdff1aSopenharmony_ci case DWT_DIRAC_HAAR1: 576cabdff1aSopenharmony_ci d->spatial_compose = RENAME(spatial_compose_haari_dy); 577cabdff1aSopenharmony_ci d->vertical_compose = (void*)RENAME(vertical_compose_haar); 578cabdff1aSopenharmony_ci if (type == DWT_DIRAC_HAAR0) 579cabdff1aSopenharmony_ci d->horizontal_compose = RENAME(horizontal_compose_haar0i); 580cabdff1aSopenharmony_ci else 581cabdff1aSopenharmony_ci d->horizontal_compose = RENAME(horizontal_compose_haar1i); 582cabdff1aSopenharmony_ci d->support = 1; 583cabdff1aSopenharmony_ci break; 584cabdff1aSopenharmony_ci case DWT_DIRAC_FIDELITY: 585cabdff1aSopenharmony_ci d->spatial_compose = RENAME(spatial_compose_fidelity); 586cabdff1aSopenharmony_ci d->vertical_compose_l0 = (void*)RENAME(vertical_compose_fidelityiL0); 587cabdff1aSopenharmony_ci d->vertical_compose_h0 = (void*)RENAME(vertical_compose_fidelityiH0); 588cabdff1aSopenharmony_ci d->horizontal_compose = RENAME(horizontal_compose_fidelityi); 589cabdff1aSopenharmony_ci d->support = 0; // not really used 590cabdff1aSopenharmony_ci break; 591cabdff1aSopenharmony_ci case DWT_DIRAC_DAUB9_7: 592cabdff1aSopenharmony_ci d->spatial_compose = RENAME(spatial_compose_daub97i_dy); 593cabdff1aSopenharmony_ci d->vertical_compose_l0 = (void*)RENAME(vertical_compose_daub97iL0); 594cabdff1aSopenharmony_ci d->vertical_compose_h0 = (void*)RENAME(vertical_compose_daub97iH0); 595cabdff1aSopenharmony_ci d->vertical_compose_l1 = (void*)RENAME(vertical_compose_daub97iL1); 596cabdff1aSopenharmony_ci d->vertical_compose_h1 = (void*)RENAME(vertical_compose_daub97iH1); 597cabdff1aSopenharmony_ci d->horizontal_compose = RENAME(horizontal_compose_daub97i); 598cabdff1aSopenharmony_ci d->support = 5; 599cabdff1aSopenharmony_ci break; 600cabdff1aSopenharmony_ci default: 601cabdff1aSopenharmony_ci return AVERROR_INVALIDDATA; 602cabdff1aSopenharmony_ci } 603cabdff1aSopenharmony_ci 604cabdff1aSopenharmony_ci return 0; 605cabdff1aSopenharmony_ci} 606cabdff1aSopenharmony_ci 607cabdff1aSopenharmony_ci#undef RENAME 608cabdff1aSopenharmony_ci#undef TYPE 609