1/* 2 * jsimd_powerpc.c 3 * 4 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB 5 * Copyright (C) 2009-2011, 2014-2016, D. R. Commander. 6 * Copyright (C) 2015, Matthieu Darbois. 7 * 8 * Based on the x86 SIMD extension for IJG JPEG library, 9 * Copyright (C) 1999-2006, MIYASAKA Masaru. 10 * For conditions of distribution and use, see copyright notice in jsimdext.inc 11 * 12 * This file contains the interface between the "normal" portions 13 * of the library and the SIMD implementations when running on a 14 * PowerPC architecture. 15 */ 16 17#define JPEG_INTERNALS 18#include "../jinclude.h" 19#include "../jpeglib.h" 20#include "../jsimd.h" 21#include "../jdct.h" 22#include "../jsimddct.h" 23#include "jsimd.h" 24 25#include <stdio.h> 26#include <string.h> 27#include <ctype.h> 28 29static unsigned int simd_support = ~0; 30 31#if defined(__linux__) || defined(ANDROID) || defined(__ANDROID__) 32 33#define SOMEWHAT_SANE_PROC_CPUINFO_SIZE_LIMIT (1024 * 1024) 34 35LOCAL(int) 36check_feature (char *buffer, char *feature) 37{ 38 char *p; 39 if (*feature == 0) 40 return 0; 41 if (strncmp(buffer, "cpu", 3) != 0) 42 return 0; 43 buffer += 3; 44 while (isspace(*buffer)) 45 buffer++; 46 47 /* Check if 'feature' is present in the buffer as a separate word */ 48 while ((p = strstr(buffer, feature))) { 49 if (p > buffer && !isspace(*(p - 1))) { 50 buffer++; 51 continue; 52 } 53 p += strlen(feature); 54 if (*p != 0 && !isspace(*p)) { 55 buffer++; 56 continue; 57 } 58 return 1; 59 } 60 return 0; 61} 62 63LOCAL(int) 64parse_proc_cpuinfo (int bufsize) 65{ 66 char *buffer = (char *)malloc(bufsize); 67 FILE *fd; 68 simd_support = 0; 69 70 if (!buffer) 71 return 0; 72 73 fd = fopen("/proc/cpuinfo", "r"); 74 if (fd) { 75 while (fgets(buffer, bufsize, fd)) { 76 if (!strchr(buffer, '\n') && !feof(fd)) { 77 /* "impossible" happened - insufficient size of the buffer! */ 78 fclose(fd); 79 free(buffer); 80 return 0; 81 } 82 if (check_feature(buffer, "altivec")) 83 simd_support |= JSIMD_ALTIVEC; 84 } 85 fclose(fd); 86 } 87 free(buffer); 88 return 1; 89} 90 91#endif 92 93/* 94 * Check what SIMD accelerations are supported. 95 * 96 * FIXME: This code is racy under a multi-threaded environment. 97 */ 98LOCAL(void) 99init_simd (void) 100{ 101 char *env = NULL; 102#if !defined(__ALTIVEC__) && (defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)) 103 int bufsize = 1024; /* an initial guess for the line buffer size limit */ 104#endif 105 106 if (simd_support != ~0U) 107 return; 108 109 simd_support = 0; 110 111#if defined(__ALTIVEC__) || defined(__APPLE__) 112 simd_support |= JSIMD_ALTIVEC; 113#elif defined(__linux__) || defined(ANDROID) || defined(__ANDROID__) 114 while (!parse_proc_cpuinfo(bufsize)) { 115 bufsize *= 2; 116 if (bufsize > SOMEWHAT_SANE_PROC_CPUINFO_SIZE_LIMIT) 117 break; 118 } 119#endif 120 121 /* Force different settings through environment variables */ 122 env = getenv("JSIMD_FORCEALTIVEC"); 123 if ((env != NULL) && (strcmp(env, "1") == 0)) 124 simd_support = JSIMD_ALTIVEC; 125 env = getenv("JSIMD_FORCENONE"); 126 if ((env != NULL) && (strcmp(env, "1") == 0)) 127 simd_support = 0; 128} 129 130GLOBAL(int) 131jsimd_can_rgb_ycc (void) 132{ 133 init_simd(); 134 135 /* The code is optimised for these values only */ 136 if (BITS_IN_JSAMPLE != 8) 137 return 0; 138 if (sizeof(JDIMENSION) != 4) 139 return 0; 140 if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) 141 return 0; 142 143 if (simd_support & JSIMD_ALTIVEC) 144 return 1; 145 146 return 0; 147} 148 149GLOBAL(int) 150jsimd_can_rgb_gray (void) 151{ 152 init_simd(); 153 154 /* The code is optimised for these values only */ 155 if (BITS_IN_JSAMPLE != 8) 156 return 0; 157 if (sizeof(JDIMENSION) != 4) 158 return 0; 159 if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) 160 return 0; 161 162 if (simd_support & JSIMD_ALTIVEC) 163 return 1; 164 165 return 0; 166} 167 168GLOBAL(int) 169jsimd_can_ycc_rgb (void) 170{ 171 init_simd(); 172 173 /* The code is optimised for these values only */ 174 if (BITS_IN_JSAMPLE != 8) 175 return 0; 176 if (sizeof(JDIMENSION) != 4) 177 return 0; 178 if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4)) 179 return 0; 180 181 if (simd_support & JSIMD_ALTIVEC) 182 return 1; 183 184 return 0; 185} 186 187GLOBAL(int) 188jsimd_can_ycc_rgb565 (void) 189{ 190 return 0; 191} 192 193GLOBAL(void) 194jsimd_rgb_ycc_convert (j_compress_ptr cinfo, 195 JSAMPARRAY input_buf, JSAMPIMAGE output_buf, 196 JDIMENSION output_row, int num_rows) 197{ 198 void (*altivecfct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); 199 200 switch(cinfo->in_color_space) { 201 case JCS_EXT_RGB: 202 altivecfct=jsimd_extrgb_ycc_convert_altivec; 203 break; 204 case JCS_EXT_RGBX: 205 case JCS_EXT_RGBA: 206 altivecfct=jsimd_extrgbx_ycc_convert_altivec; 207 break; 208 case JCS_EXT_BGR: 209 altivecfct=jsimd_extbgr_ycc_convert_altivec; 210 break; 211 case JCS_EXT_BGRX: 212 case JCS_EXT_BGRA: 213 altivecfct=jsimd_extbgrx_ycc_convert_altivec; 214 break; 215 case JCS_EXT_XBGR: 216 case JCS_EXT_ABGR: 217 altivecfct=jsimd_extxbgr_ycc_convert_altivec; 218 break; 219 case JCS_EXT_XRGB: 220 case JCS_EXT_ARGB: 221 altivecfct=jsimd_extxrgb_ycc_convert_altivec; 222 break; 223 default: 224 altivecfct=jsimd_rgb_ycc_convert_altivec; 225 break; 226 } 227 228 altivecfct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); 229} 230 231GLOBAL(void) 232jsimd_rgb_gray_convert (j_compress_ptr cinfo, 233 JSAMPARRAY input_buf, JSAMPIMAGE output_buf, 234 JDIMENSION output_row, int num_rows) 235{ 236 void (*altivecfct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int); 237 238 switch(cinfo->in_color_space) { 239 case JCS_EXT_RGB: 240 altivecfct=jsimd_extrgb_gray_convert_altivec; 241 break; 242 case JCS_EXT_RGBX: 243 case JCS_EXT_RGBA: 244 altivecfct=jsimd_extrgbx_gray_convert_altivec; 245 break; 246 case JCS_EXT_BGR: 247 altivecfct=jsimd_extbgr_gray_convert_altivec; 248 break; 249 case JCS_EXT_BGRX: 250 case JCS_EXT_BGRA: 251 altivecfct=jsimd_extbgrx_gray_convert_altivec; 252 break; 253 case JCS_EXT_XBGR: 254 case JCS_EXT_ABGR: 255 altivecfct=jsimd_extxbgr_gray_convert_altivec; 256 break; 257 case JCS_EXT_XRGB: 258 case JCS_EXT_ARGB: 259 altivecfct=jsimd_extxrgb_gray_convert_altivec; 260 break; 261 default: 262 altivecfct=jsimd_rgb_gray_convert_altivec; 263 break; 264 } 265 266 altivecfct(cinfo->image_width, input_buf, output_buf, output_row, num_rows); 267} 268 269GLOBAL(void) 270jsimd_ycc_rgb_convert (j_decompress_ptr cinfo, 271 JSAMPIMAGE input_buf, JDIMENSION input_row, 272 JSAMPARRAY output_buf, int num_rows) 273{ 274 void (*altivecfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int); 275 276 switch(cinfo->out_color_space) { 277 case JCS_EXT_RGB: 278 altivecfct=jsimd_ycc_extrgb_convert_altivec; 279 break; 280 case JCS_EXT_RGBX: 281 case JCS_EXT_RGBA: 282 altivecfct=jsimd_ycc_extrgbx_convert_altivec; 283 break; 284 case JCS_EXT_BGR: 285 altivecfct=jsimd_ycc_extbgr_convert_altivec; 286 break; 287 case JCS_EXT_BGRX: 288 case JCS_EXT_BGRA: 289 altivecfct=jsimd_ycc_extbgrx_convert_altivec; 290 break; 291 case JCS_EXT_XBGR: 292 case JCS_EXT_ABGR: 293 altivecfct=jsimd_ycc_extxbgr_convert_altivec; 294 break; 295 case JCS_EXT_XRGB: 296 case JCS_EXT_ARGB: 297 altivecfct=jsimd_ycc_extxrgb_convert_altivec; 298 break; 299 default: 300 altivecfct=jsimd_ycc_rgb_convert_altivec; 301 break; 302 } 303 304 altivecfct(cinfo->output_width, input_buf, input_row, output_buf, num_rows); 305} 306 307GLOBAL(void) 308jsimd_ycc_rgb565_convert (j_decompress_ptr cinfo, 309 JSAMPIMAGE input_buf, JDIMENSION input_row, 310 JSAMPARRAY output_buf, int num_rows) 311{ 312} 313 314GLOBAL(int) 315jsimd_can_h2v2_downsample (void) 316{ 317 init_simd(); 318 319 /* The code is optimised for these values only */ 320 if (BITS_IN_JSAMPLE != 8) 321 return 0; 322 if (sizeof(JDIMENSION) != 4) 323 return 0; 324 325 if (simd_support & JSIMD_ALTIVEC) 326 return 1; 327 328 return 0; 329} 330 331GLOBAL(int) 332jsimd_can_h2v1_downsample (void) 333{ 334 init_simd(); 335 336 /* The code is optimised for these values only */ 337 if (BITS_IN_JSAMPLE != 8) 338 return 0; 339 if (sizeof(JDIMENSION) != 4) 340 return 0; 341 342 if (simd_support & JSIMD_ALTIVEC) 343 return 1; 344 345 return 0; 346} 347 348GLOBAL(void) 349jsimd_h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, 350 JSAMPARRAY input_data, JSAMPARRAY output_data) 351{ 352 jsimd_h2v2_downsample_altivec(cinfo->image_width, cinfo->max_v_samp_factor, 353 compptr->v_samp_factor, 354 compptr->width_in_blocks, 355 input_data, output_data); 356} 357 358GLOBAL(void) 359jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, 360 JSAMPARRAY input_data, JSAMPARRAY output_data) 361{ 362 jsimd_h2v1_downsample_altivec(cinfo->image_width, cinfo->max_v_samp_factor, 363 compptr->v_samp_factor, 364 compptr->width_in_blocks, 365 input_data, output_data); 366} 367 368GLOBAL(int) 369jsimd_can_h2v2_upsample (void) 370{ 371 init_simd(); 372 373 /* The code is optimised for these values only */ 374 if (BITS_IN_JSAMPLE != 8) 375 return 0; 376 if (sizeof(JDIMENSION) != 4) 377 return 0; 378 379 if (simd_support & JSIMD_ALTIVEC) 380 return 1; 381 382 return 0; 383} 384 385GLOBAL(int) 386jsimd_can_h2v1_upsample (void) 387{ 388 init_simd(); 389 390 /* The code is optimised for these values only */ 391 if (BITS_IN_JSAMPLE != 8) 392 return 0; 393 if (sizeof(JDIMENSION) != 4) 394 return 0; 395 396 if (simd_support & JSIMD_ALTIVEC) 397 return 1; 398 399 return 0; 400} 401 402GLOBAL(void) 403jsimd_h2v2_upsample (j_decompress_ptr cinfo, 404 jpeg_component_info *compptr, 405 JSAMPARRAY input_data, 406 JSAMPARRAY *output_data_ptr) 407{ 408 jsimd_h2v2_upsample_altivec(cinfo->max_v_samp_factor, cinfo->output_width, 409 input_data, output_data_ptr); 410} 411 412GLOBAL(void) 413jsimd_h2v1_upsample (j_decompress_ptr cinfo, 414 jpeg_component_info *compptr, 415 JSAMPARRAY input_data, 416 JSAMPARRAY *output_data_ptr) 417{ 418 jsimd_h2v1_upsample_altivec(cinfo->max_v_samp_factor, cinfo->output_width, 419 input_data, output_data_ptr); 420} 421 422GLOBAL(int) 423jsimd_can_h2v2_fancy_upsample (void) 424{ 425 init_simd(); 426 427 /* The code is optimised for these values only */ 428 if (BITS_IN_JSAMPLE != 8) 429 return 0; 430 if (sizeof(JDIMENSION) != 4) 431 return 0; 432 433 if (simd_support & JSIMD_ALTIVEC) 434 return 1; 435 436 return 0; 437} 438 439GLOBAL(int) 440jsimd_can_h2v1_fancy_upsample (void) 441{ 442 init_simd(); 443 444 /* The code is optimised for these values only */ 445 if (BITS_IN_JSAMPLE != 8) 446 return 0; 447 if (sizeof(JDIMENSION) != 4) 448 return 0; 449 450 if (simd_support & JSIMD_ALTIVEC) 451 return 1; 452 453 return 0; 454} 455 456GLOBAL(void) 457jsimd_h2v2_fancy_upsample (j_decompress_ptr cinfo, 458 jpeg_component_info *compptr, 459 JSAMPARRAY input_data, 460 JSAMPARRAY *output_data_ptr) 461{ 462 jsimd_h2v2_fancy_upsample_altivec(cinfo->max_v_samp_factor, 463 compptr->downsampled_width, input_data, 464 output_data_ptr); 465} 466 467GLOBAL(void) 468jsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo, 469 jpeg_component_info *compptr, 470 JSAMPARRAY input_data, 471 JSAMPARRAY *output_data_ptr) 472{ 473 jsimd_h2v1_fancy_upsample_altivec(cinfo->max_v_samp_factor, 474 compptr->downsampled_width, input_data, 475 output_data_ptr); 476} 477 478GLOBAL(int) 479jsimd_can_h2v2_merged_upsample (void) 480{ 481 init_simd(); 482 483 /* The code is optimised for these values only */ 484 if (BITS_IN_JSAMPLE != 8) 485 return 0; 486 if (sizeof(JDIMENSION) != 4) 487 return 0; 488 489 if (simd_support & JSIMD_ALTIVEC) 490 return 1; 491 492 return 0; 493} 494 495GLOBAL(int) 496jsimd_can_h2v1_merged_upsample (void) 497{ 498 init_simd(); 499 500 /* The code is optimised for these values only */ 501 if (BITS_IN_JSAMPLE != 8) 502 return 0; 503 if (sizeof(JDIMENSION) != 4) 504 return 0; 505 506 if (simd_support & JSIMD_ALTIVEC) 507 return 1; 508 509 return 0; 510} 511 512GLOBAL(void) 513jsimd_h2v2_merged_upsample (j_decompress_ptr cinfo, 514 JSAMPIMAGE input_buf, 515 JDIMENSION in_row_group_ctr, 516 JSAMPARRAY output_buf) 517{ 518 void (*altivecfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); 519 520 switch(cinfo->out_color_space) { 521 case JCS_EXT_RGB: 522 altivecfct=jsimd_h2v2_extrgb_merged_upsample_altivec; 523 break; 524 case JCS_EXT_RGBX: 525 case JCS_EXT_RGBA: 526 altivecfct=jsimd_h2v2_extrgbx_merged_upsample_altivec; 527 break; 528 case JCS_EXT_BGR: 529 altivecfct=jsimd_h2v2_extbgr_merged_upsample_altivec; 530 break; 531 case JCS_EXT_BGRX: 532 case JCS_EXT_BGRA: 533 altivecfct=jsimd_h2v2_extbgrx_merged_upsample_altivec; 534 break; 535 case JCS_EXT_XBGR: 536 case JCS_EXT_ABGR: 537 altivecfct=jsimd_h2v2_extxbgr_merged_upsample_altivec; 538 break; 539 case JCS_EXT_XRGB: 540 case JCS_EXT_ARGB: 541 altivecfct=jsimd_h2v2_extxrgb_merged_upsample_altivec; 542 break; 543 default: 544 altivecfct=jsimd_h2v2_merged_upsample_altivec; 545 break; 546 } 547 548 altivecfct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); 549} 550 551GLOBAL(void) 552jsimd_h2v1_merged_upsample (j_decompress_ptr cinfo, 553 JSAMPIMAGE input_buf, 554 JDIMENSION in_row_group_ctr, 555 JSAMPARRAY output_buf) 556{ 557 void (*altivecfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY); 558 559 switch(cinfo->out_color_space) { 560 case JCS_EXT_RGB: 561 altivecfct=jsimd_h2v1_extrgb_merged_upsample_altivec; 562 break; 563 case JCS_EXT_RGBX: 564 case JCS_EXT_RGBA: 565 altivecfct=jsimd_h2v1_extrgbx_merged_upsample_altivec; 566 break; 567 case JCS_EXT_BGR: 568 altivecfct=jsimd_h2v1_extbgr_merged_upsample_altivec; 569 break; 570 case JCS_EXT_BGRX: 571 case JCS_EXT_BGRA: 572 altivecfct=jsimd_h2v1_extbgrx_merged_upsample_altivec; 573 break; 574 case JCS_EXT_XBGR: 575 case JCS_EXT_ABGR: 576 altivecfct=jsimd_h2v1_extxbgr_merged_upsample_altivec; 577 break; 578 case JCS_EXT_XRGB: 579 case JCS_EXT_ARGB: 580 altivecfct=jsimd_h2v1_extxrgb_merged_upsample_altivec; 581 break; 582 default: 583 altivecfct=jsimd_h2v1_merged_upsample_altivec; 584 break; 585 } 586 587 altivecfct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf); 588} 589 590GLOBAL(int) 591jsimd_can_convsamp (void) 592{ 593 init_simd(); 594 595 /* The code is optimised for these values only */ 596 if (DCTSIZE != 8) 597 return 0; 598 if (BITS_IN_JSAMPLE != 8) 599 return 0; 600 if (sizeof(JDIMENSION) != 4) 601 return 0; 602 if (sizeof(DCTELEM) != 2) 603 return 0; 604 605 if (simd_support & JSIMD_ALTIVEC) 606 return 1; 607 608 return 0; 609} 610 611GLOBAL(int) 612jsimd_can_convsamp_float (void) 613{ 614 return 0; 615} 616 617GLOBAL(void) 618jsimd_convsamp (JSAMPARRAY sample_data, JDIMENSION start_col, 619 DCTELEM *workspace) 620{ 621 jsimd_convsamp_altivec(sample_data, start_col, workspace); 622} 623 624GLOBAL(void) 625jsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col, 626 FAST_FLOAT *workspace) 627{ 628} 629 630GLOBAL(int) 631jsimd_can_fdct_islow (void) 632{ 633 init_simd(); 634 635 /* The code is optimised for these values only */ 636 if (DCTSIZE != 8) 637 return 0; 638 if (sizeof(DCTELEM) != 2) 639 return 0; 640 641 if (simd_support & JSIMD_ALTIVEC) 642 return 1; 643 644 return 0; 645} 646 647GLOBAL(int) 648jsimd_can_fdct_ifast (void) 649{ 650 init_simd(); 651 652 /* The code is optimised for these values only */ 653 if (DCTSIZE != 8) 654 return 0; 655 if (sizeof(DCTELEM) != 2) 656 return 0; 657 658 if (simd_support & JSIMD_ALTIVEC) 659 return 1; 660 661 return 0; 662} 663 664GLOBAL(int) 665jsimd_can_fdct_float (void) 666{ 667 return 0; 668} 669 670GLOBAL(void) 671jsimd_fdct_islow (DCTELEM *data) 672{ 673 jsimd_fdct_islow_altivec(data); 674} 675 676GLOBAL(void) 677jsimd_fdct_ifast (DCTELEM *data) 678{ 679 jsimd_fdct_ifast_altivec(data); 680} 681 682GLOBAL(void) 683jsimd_fdct_float (FAST_FLOAT *data) 684{ 685} 686 687GLOBAL(int) 688jsimd_can_quantize (void) 689{ 690 init_simd(); 691 692 /* The code is optimised for these values only */ 693 if (DCTSIZE != 8) 694 return 0; 695 if (sizeof(JCOEF) != 2) 696 return 0; 697 if (sizeof(DCTELEM) != 2) 698 return 0; 699 700 if (simd_support & JSIMD_ALTIVEC) 701 return 1; 702 703 return 0; 704} 705 706GLOBAL(int) 707jsimd_can_quantize_float (void) 708{ 709 return 0; 710} 711 712GLOBAL(void) 713jsimd_quantize (JCOEFPTR coef_block, DCTELEM *divisors, 714 DCTELEM *workspace) 715{ 716 jsimd_quantize_altivec(coef_block, divisors, workspace); 717} 718 719GLOBAL(void) 720jsimd_quantize_float (JCOEFPTR coef_block, FAST_FLOAT *divisors, 721 FAST_FLOAT *workspace) 722{ 723} 724 725GLOBAL(int) 726jsimd_can_idct_2x2 (void) 727{ 728 return 0; 729} 730 731GLOBAL(int) 732jsimd_can_idct_4x4 (void) 733{ 734 return 0; 735} 736 737GLOBAL(void) 738jsimd_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info *compptr, 739 JCOEFPTR coef_block, JSAMPARRAY output_buf, 740 JDIMENSION output_col) 741{ 742} 743 744GLOBAL(void) 745jsimd_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info *compptr, 746 JCOEFPTR coef_block, JSAMPARRAY output_buf, 747 JDIMENSION output_col) 748{ 749} 750 751GLOBAL(int) 752jsimd_can_idct_islow (void) 753{ 754 init_simd(); 755 756 /* The code is optimised for these values only */ 757 if (DCTSIZE != 8) 758 return 0; 759 if (sizeof(JCOEF) != 2) 760 return 0; 761 762 if (simd_support & JSIMD_ALTIVEC) 763 return 1; 764 765 return 0; 766} 767 768GLOBAL(int) 769jsimd_can_idct_ifast (void) 770{ 771 init_simd(); 772 773 /* The code is optimised for these values only */ 774 if (DCTSIZE != 8) 775 return 0; 776 if (sizeof(JCOEF) != 2) 777 return 0; 778 779 if (simd_support & JSIMD_ALTIVEC) 780 return 1; 781 782 return 0; 783} 784 785GLOBAL(int) 786jsimd_can_idct_float (void) 787{ 788 return 0; 789} 790 791GLOBAL(void) 792jsimd_idct_islow (j_decompress_ptr cinfo, jpeg_component_info *compptr, 793 JCOEFPTR coef_block, JSAMPARRAY output_buf, 794 JDIMENSION output_col) 795{ 796 jsimd_idct_islow_altivec(compptr->dct_table, coef_block, output_buf, 797 output_col); 798} 799 800GLOBAL(void) 801jsimd_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info *compptr, 802 JCOEFPTR coef_block, JSAMPARRAY output_buf, 803 JDIMENSION output_col) 804{ 805 jsimd_idct_ifast_altivec(compptr->dct_table, coef_block, output_buf, 806 output_col); 807} 808 809GLOBAL(void) 810jsimd_idct_float (j_decompress_ptr cinfo, jpeg_component_info *compptr, 811 JCOEFPTR coef_block, JSAMPARRAY output_buf, 812 JDIMENSION output_col) 813{ 814} 815 816GLOBAL(int) 817jsimd_can_huff_encode_one_block (void) 818{ 819 return 0; 820} 821 822GLOBAL(JOCTET*) 823jsimd_huff_encode_one_block (void *state, JOCTET *buffer, JCOEFPTR block, 824 int last_dc_val, c_derived_tbl *dctbl, 825 c_derived_tbl *actbl) 826{ 827 return NULL; 828} 829