| OLD | NEW |
| 1 /* | 1 /* |
| 2 * jccolor.c | 2 * jccolor.c |
| 3 * | 3 * |
| 4 * Copyright (C) 1991-1996, Thomas G. Lane. | 4 * Copyright (C) 1991-1996, Thomas G. Lane. |
| 5 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB | 5 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB |
| 6 * Copyright (C) 2009-2011, D. R. Commander. | 6 * Copyright (C) 2009-2011, D. R. Commander. |
| 7 * This file is part of the Independent JPEG Group's software. | 7 * This file is part of the Independent JPEG Group's software. |
| 8 * For conditions of distribution and use, see the accompanying README file. | 8 * For conditions of distribution and use, see the accompanying README file. |
| 9 * | 9 * |
| 10 * This file contains input colorspace conversion routines. | 10 * This file contains input colorspace conversion routines. |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 rgb_ycc_convert (j_compress_ptr cinfo, | 218 rgb_ycc_convert (j_compress_ptr cinfo, |
| 219 JSAMPARRAY input_buf, JSAMPIMAGE output_buf, | 219 JSAMPARRAY input_buf, JSAMPIMAGE output_buf, |
| 220 JDIMENSION output_row, int num_rows) | 220 JDIMENSION output_row, int num_rows) |
| 221 { | 221 { |
| 222 switch (cinfo->in_color_space) { | 222 switch (cinfo->in_color_space) { |
| 223 case JCS_EXT_RGB: | 223 case JCS_EXT_RGB: |
| 224 extrgb_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, | 224 extrgb_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 225 num_rows); | 225 num_rows); |
| 226 break; | 226 break; |
| 227 case JCS_EXT_RGBX: | 227 case JCS_EXT_RGBX: |
| 228 case JCS_EXT_RGBA: |
| 228 extrgbx_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, | 229 extrgbx_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 229 num_rows); | 230 num_rows); |
| 230 break; | 231 break; |
| 231 case JCS_EXT_BGR: | 232 case JCS_EXT_BGR: |
| 232 extbgr_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, | 233 extbgr_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 233 num_rows); | 234 num_rows); |
| 234 break; | 235 break; |
| 235 case JCS_EXT_BGRX: | 236 case JCS_EXT_BGRX: |
| 237 case JCS_EXT_BGRA: |
| 236 extbgrx_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, | 238 extbgrx_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 237 num_rows); | 239 num_rows); |
| 238 break; | 240 break; |
| 239 case JCS_EXT_XBGR: | 241 case JCS_EXT_XBGR: |
| 242 case JCS_EXT_ABGR: |
| 240 extxbgr_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, | 243 extxbgr_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 241 num_rows); | 244 num_rows); |
| 242 break; | 245 break; |
| 243 case JCS_EXT_XRGB: | 246 case JCS_EXT_XRGB: |
| 247 case JCS_EXT_ARGB: |
| 244 extxrgb_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, | 248 extxrgb_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 245 num_rows); | 249 num_rows); |
| 246 break; | 250 break; |
| 247 default: | 251 default: |
| 248 rgb_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, | 252 rgb_ycc_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 249 num_rows); | 253 num_rows); |
| 250 break; | 254 break; |
| 251 } | 255 } |
| 252 } | 256 } |
| 253 | 257 |
| 254 | 258 |
| 255 /**************** Cases other than RGB -> YCbCr **************/ | 259 /**************** Cases other than RGB -> YCbCr **************/ |
| 256 | 260 |
| 257 | 261 |
| 258 /* | 262 /* |
| 259 * Convert some rows of samples to the JPEG colorspace. | 263 * Convert some rows of samples to the JPEG colorspace. |
| 260 */ | 264 */ |
| 261 | 265 |
| 262 METHODDEF(void) | 266 METHODDEF(void) |
| 263 rgb_gray_convert (j_compress_ptr cinfo, | 267 rgb_gray_convert (j_compress_ptr cinfo, |
| 264 JSAMPARRAY input_buf, JSAMPIMAGE output_buf, | 268 JSAMPARRAY input_buf, JSAMPIMAGE output_buf, |
| 265 JDIMENSION output_row, int num_rows) | 269 JDIMENSION output_row, int num_rows) |
| 266 { | 270 { |
| 267 switch (cinfo->in_color_space) { | 271 switch (cinfo->in_color_space) { |
| 268 case JCS_EXT_RGB: | 272 case JCS_EXT_RGB: |
| 269 extrgb_gray_convert_internal(cinfo, input_buf, output_buf, output_row, | 273 extrgb_gray_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 270 num_rows); | 274 num_rows); |
| 271 break; | 275 break; |
| 272 case JCS_EXT_RGBX: | 276 case JCS_EXT_RGBX: |
| 277 case JCS_EXT_RGBA: |
| 273 extrgbx_gray_convert_internal(cinfo, input_buf, output_buf, output_row, | 278 extrgbx_gray_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 274 num_rows); | 279 num_rows); |
| 275 break; | 280 break; |
| 276 case JCS_EXT_BGR: | 281 case JCS_EXT_BGR: |
| 277 extbgr_gray_convert_internal(cinfo, input_buf, output_buf, output_row, | 282 extbgr_gray_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 278 num_rows); | 283 num_rows); |
| 279 break; | 284 break; |
| 280 case JCS_EXT_BGRX: | 285 case JCS_EXT_BGRX: |
| 286 case JCS_EXT_BGRA: |
| 281 extbgrx_gray_convert_internal(cinfo, input_buf, output_buf, output_row, | 287 extbgrx_gray_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 282 num_rows); | 288 num_rows); |
| 283 break; | 289 break; |
| 284 case JCS_EXT_XBGR: | 290 case JCS_EXT_XBGR: |
| 291 case JCS_EXT_ABGR: |
| 285 extxbgr_gray_convert_internal(cinfo, input_buf, output_buf, output_row, | 292 extxbgr_gray_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 286 num_rows); | 293 num_rows); |
| 287 break; | 294 break; |
| 288 case JCS_EXT_XRGB: | 295 case JCS_EXT_XRGB: |
| 296 case JCS_EXT_ARGB: |
| 289 extxrgb_gray_convert_internal(cinfo, input_buf, output_buf, output_row, | 297 extxrgb_gray_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 290 num_rows); | 298 num_rows); |
| 291 break; | 299 break; |
| 292 default: | 300 default: |
| 293 rgb_gray_convert_internal(cinfo, input_buf, output_buf, output_row, | 301 rgb_gray_convert_internal(cinfo, input_buf, output_buf, output_row, |
| 294 num_rows); | 302 num_rows); |
| 295 break; | 303 break; |
| 296 } | 304 } |
| 297 } | 305 } |
| 298 | 306 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); | 459 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); |
| 452 break; | 460 break; |
| 453 | 461 |
| 454 case JCS_RGB: | 462 case JCS_RGB: |
| 455 case JCS_EXT_RGB: | 463 case JCS_EXT_RGB: |
| 456 case JCS_EXT_RGBX: | 464 case JCS_EXT_RGBX: |
| 457 case JCS_EXT_BGR: | 465 case JCS_EXT_BGR: |
| 458 case JCS_EXT_BGRX: | 466 case JCS_EXT_BGRX: |
| 459 case JCS_EXT_XBGR: | 467 case JCS_EXT_XBGR: |
| 460 case JCS_EXT_XRGB: | 468 case JCS_EXT_XRGB: |
| 469 case JCS_EXT_RGBA: |
| 470 case JCS_EXT_BGRA: |
| 471 case JCS_EXT_ABGR: |
| 472 case JCS_EXT_ARGB: |
| 461 if (cinfo->input_components != rgb_pixelsize[cinfo->in_color_space]) | 473 if (cinfo->input_components != rgb_pixelsize[cinfo->in_color_space]) |
| 462 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); | 474 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); |
| 463 break; | 475 break; |
| 464 | 476 |
| 465 case JCS_YCbCr: | 477 case JCS_YCbCr: |
| 466 if (cinfo->input_components != 3) | 478 if (cinfo->input_components != 3) |
| 467 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); | 479 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); |
| 468 break; | 480 break; |
| 469 | 481 |
| 470 case JCS_CMYK: | 482 case JCS_CMYK: |
| (...skipping 14 matching lines...) Expand all Loading... |
| 485 if (cinfo->num_components != 1) | 497 if (cinfo->num_components != 1) |
| 486 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); | 498 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); |
| 487 if (cinfo->in_color_space == JCS_GRAYSCALE) | 499 if (cinfo->in_color_space == JCS_GRAYSCALE) |
| 488 cconvert->pub.color_convert = grayscale_convert; | 500 cconvert->pub.color_convert = grayscale_convert; |
| 489 else if (cinfo->in_color_space == JCS_RGB || | 501 else if (cinfo->in_color_space == JCS_RGB || |
| 490 cinfo->in_color_space == JCS_EXT_RGB || | 502 cinfo->in_color_space == JCS_EXT_RGB || |
| 491 cinfo->in_color_space == JCS_EXT_RGBX || | 503 cinfo->in_color_space == JCS_EXT_RGBX || |
| 492 cinfo->in_color_space == JCS_EXT_BGR || | 504 cinfo->in_color_space == JCS_EXT_BGR || |
| 493 cinfo->in_color_space == JCS_EXT_BGRX || | 505 cinfo->in_color_space == JCS_EXT_BGRX || |
| 494 cinfo->in_color_space == JCS_EXT_XBGR || | 506 cinfo->in_color_space == JCS_EXT_XBGR || |
| 495 cinfo->in_color_space == JCS_EXT_XRGB) { | 507 cinfo->in_color_space == JCS_EXT_XRGB || |
| 508 cinfo->in_color_space == JCS_EXT_RGBA || |
| 509 cinfo->in_color_space == JCS_EXT_BGRA || |
| 510 cinfo->in_color_space == JCS_EXT_ABGR || |
| 511 cinfo->in_color_space == JCS_EXT_ARGB) { |
| 496 if (jsimd_can_rgb_gray()) | 512 if (jsimd_can_rgb_gray()) |
| 497 cconvert->pub.color_convert = jsimd_rgb_gray_convert; | 513 cconvert->pub.color_convert = jsimd_rgb_gray_convert; |
| 498 else { | 514 else { |
| 499 cconvert->pub.start_pass = rgb_ycc_start; | 515 cconvert->pub.start_pass = rgb_ycc_start; |
| 500 cconvert->pub.color_convert = rgb_gray_convert; | 516 cconvert->pub.color_convert = rgb_gray_convert; |
| 501 } | 517 } |
| 502 } else if (cinfo->in_color_space == JCS_YCbCr) | 518 } else if (cinfo->in_color_space == JCS_YCbCr) |
| 503 cconvert->pub.color_convert = grayscale_convert; | 519 cconvert->pub.color_convert = grayscale_convert; |
| 504 else | 520 else |
| 505 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); | 521 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); |
| 506 break; | 522 break; |
| 507 | 523 |
| 508 case JCS_RGB: | 524 case JCS_RGB: |
| 509 case JCS_EXT_RGB: | 525 case JCS_EXT_RGB: |
| 510 case JCS_EXT_RGBX: | 526 case JCS_EXT_RGBX: |
| 511 case JCS_EXT_BGR: | 527 case JCS_EXT_BGR: |
| 512 case JCS_EXT_BGRX: | 528 case JCS_EXT_BGRX: |
| 513 case JCS_EXT_XBGR: | 529 case JCS_EXT_XBGR: |
| 514 case JCS_EXT_XRGB: | 530 case JCS_EXT_XRGB: |
| 531 case JCS_EXT_RGBA: |
| 532 case JCS_EXT_BGRA: |
| 533 case JCS_EXT_ABGR: |
| 534 case JCS_EXT_ARGB: |
| 515 if (cinfo->num_components != 3) | 535 if (cinfo->num_components != 3) |
| 516 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); | 536 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); |
| 517 if (cinfo->in_color_space == cinfo->jpeg_color_space && | 537 if (cinfo->in_color_space == cinfo->jpeg_color_space && |
| 518 rgb_pixelsize[cinfo->in_color_space] == 3) | 538 rgb_pixelsize[cinfo->in_color_space] == 3) |
| 519 cconvert->pub.color_convert = null_convert; | 539 cconvert->pub.color_convert = null_convert; |
| 520 else | 540 else |
| 521 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); | 541 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); |
| 522 break; | 542 break; |
| 523 | 543 |
| 524 case JCS_YCbCr: | 544 case JCS_YCbCr: |
| 525 if (cinfo->num_components != 3) | 545 if (cinfo->num_components != 3) |
| 526 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); | 546 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); |
| 527 if (cinfo->in_color_space == JCS_RGB || | 547 if (cinfo->in_color_space == JCS_RGB || |
| 528 cinfo->in_color_space == JCS_EXT_RGB || | 548 cinfo->in_color_space == JCS_EXT_RGB || |
| 529 cinfo->in_color_space == JCS_EXT_RGBX || | 549 cinfo->in_color_space == JCS_EXT_RGBX || |
| 530 cinfo->in_color_space == JCS_EXT_BGR || | 550 cinfo->in_color_space == JCS_EXT_BGR || |
| 531 cinfo->in_color_space == JCS_EXT_BGRX || | 551 cinfo->in_color_space == JCS_EXT_BGRX || |
| 532 cinfo->in_color_space == JCS_EXT_XBGR || | 552 cinfo->in_color_space == JCS_EXT_XBGR || |
| 533 cinfo->in_color_space == JCS_EXT_XRGB) { | 553 cinfo->in_color_space == JCS_EXT_XRGB || |
| 554 cinfo->in_color_space == JCS_EXT_RGBA || |
| 555 cinfo->in_color_space == JCS_EXT_BGRA || |
| 556 cinfo->in_color_space == JCS_EXT_ABGR || |
| 557 cinfo->in_color_space == JCS_EXT_ARGB) { |
| 534 if (jsimd_can_rgb_ycc()) | 558 if (jsimd_can_rgb_ycc()) |
| 535 cconvert->pub.color_convert = jsimd_rgb_ycc_convert; | 559 cconvert->pub.color_convert = jsimd_rgb_ycc_convert; |
| 536 else { | 560 else { |
| 537 cconvert->pub.start_pass = rgb_ycc_start; | 561 cconvert->pub.start_pass = rgb_ycc_start; |
| 538 cconvert->pub.color_convert = rgb_ycc_convert; | 562 cconvert->pub.color_convert = rgb_ycc_convert; |
| 539 } | 563 } |
| 540 } else if (cinfo->in_color_space == JCS_YCbCr) | 564 } else if (cinfo->in_color_space == JCS_YCbCr) |
| 541 cconvert->pub.color_convert = null_convert; | 565 cconvert->pub.color_convert = null_convert; |
| 542 else | 566 else |
| 543 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); | 567 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 565 break; | 589 break; |
| 566 | 590 |
| 567 default: /* allow null conversion of JCS_UNKNOWN */ | 591 default: /* allow null conversion of JCS_UNKNOWN */ |
| 568 if (cinfo->jpeg_color_space != cinfo->in_color_space || | 592 if (cinfo->jpeg_color_space != cinfo->in_color_space || |
| 569 cinfo->num_components != cinfo->input_components) | 593 cinfo->num_components != cinfo->input_components) |
| 570 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); | 594 ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); |
| 571 cconvert->pub.color_convert = null_convert; | 595 cconvert->pub.color_convert = null_convert; |
| 572 break; | 596 break; |
| 573 } | 597 } |
| 574 } | 598 } |
| OLD | NEW |