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 |