blob: d2349013b86ab6e9b99d784ff6dabc616a19e609 [file] [log] [blame]
Independent JPEG Group's JPEG software release 6b
with x86 SIMD extension for IJG JPEG library version 1.02
== INTERNAL ==
-----------------------------------------------------------
¢£¤³¤Î¥Õ¥¡¥¤¥ë¤Ï
¤³¤Î¥Õ¥¡¥¤¥ë¤Ç¤Ï¡¢SIMD ÈÇ libjpeg ¥é¥¤¥Ö¥é¥ê¤Î¡¢SIMD ³ÈÄ¥Éôʬ¤Î¾ÜºÙ¤ò
²òÀ⤷¤Þ¤¹¡£SIMD ³ÈÄ¥Éôʬ¤ËÂФ·¤Æ²¿¤é¤«¤Î¼ê¤ò²Ã¤¨¤¿¤¤¾ì¹ç¤ä¡¢É¸½à¤Ç¤Ï
Âбþ¤·¤Æ¤¤¤Ê¤¤¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤ËÂбþ¤µ¤»¤¿¤¤¾ì¹ç¤Ê¤É¤Ï¡¢¤³¤³¤òÆɤó¤Ç
¤¯¤À¤µ¤¤¡£
¢£¥Õ¥¡¥¤¥ë¥Õ¥©¡¼¥Þ¥Ã¥È¡¿¸Æ¤Ó½Ð¤·µ¬Ìó(ABI)¤Î»ØÄê
¢£OS ¤Î SIMD ¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯ (jsimdgcc.c / jsimddjg.asm / jsimdw32.asm)
¢£¥¢¥»¥ó¥Ö¥ê¸À¸ìÍÑÀßÄê¥Õ¥¡¥¤¥ë jsimdcfg.inc ¤ÎºîÀ® (makecfg.c)
¢£SIMD Ì¿Îá¤Î¼Â¹Ô»þ¤ÎÁªÂò¡¿SIMD Æ°ºî¥â¡¼¥É¾ðÊó
¢£¤½¤Î¤Û¤«¤ÎÀßÄê¹àÌÜ¥Þ¥¯¥í
¡û RGB_RED / RGB_GREEN / RGB_BLUE / RGB_PIXELSIZE
¡û RGBX_FILLER_0XFF
¡û JFDCT_INT_QUANTIZE_WITH_DIVISION
¡û UPSAMPLE_H1V2_SUPPORTED
¢£¥Õ¥¡¥¤¥ë¥Õ¥©¡¼¥Þ¥Ã¥È¡¿¸Æ¤Ó½Ð¤·µ¬Ìó(ABI)¤Î»ØÄê
¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Ç½ñ¤«¤ì¤¿¥³¡¼¥É¤ò¡¢£Ã¸À¸ì¤Ê¤É¤Î¹âµé¸À¸ì¤Ç½ñ¤«¤ì¤¿¥³¡¼¥É
¤È¥ê¥ó¥¯¤¹¤ë¤Ë¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò°ìÃפµ¤»¤ë¤³¤È¡¢
¤ª¤è¤Ó¡¢¸Æ¤Ó½Ð¤·µ¬Ìó¤Ê¤É¤Î¥Ð¥¤¥Ê¥ê¥³¡¼¥É¤Îµ¬Ìó(ABI)¤ò°ìÃפµ¤»¤ë¤³¤È¤¬
ɬÍפǤ¹¡£¤³¤Î¥½¥Õ¥È¤Ç¤Ï¡¢¤³¤ì¤é¤Î»ØÄê¤ò¡¢¥¢¥»¥ó¥Ö¥é nasm ¤ËÍ¿¤¨¤ë¥ª¥×
¥·¥ç¥ó¤Ç»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¡¦nasm -fwin32 -DWIN32 ...
Win32 ¤Î coff ¥Õ¥©¡¼¥Þ¥Ã¥È¡£Microsoft Visual C++ ¤ä MinGW¡¦CygWin
¤Ê¤É¡¢Win32 ¥³¥ó¥Ñ¥¤¥é¤ÎÂçÉôʬ¤¬³ºÅö¡£
¡¦nasm -fobj -DOBJ32 ...
Win32 ¤Î obj ¥Õ¥©¡¼¥Þ¥Ã¥È¡£¸µ¡¹¤Ï MS-DOS ¤Ç»È¤ï¤ì¤Æ¤¤¤¿ obj ·Á¼°
(MSOMF)¤ò 32bit ¤Ë³ÈÄ¥¤·¤¿¤â¤Î¡£Borland C++ Complier (Win32) ¤Ê¤É¡£
¡¦nasm -felf -DELF ...
³Æ¼ï¤Î UNIX ¤Ç¹­¤¯ºÎÍѤµ¤ì¤Æ¤¤¤ë ELF ¥Õ¥©¡¼¥Þ¥Ã¥È¡£linux ¤ä xBSD
¥Õ¥¡¥ß¥ê¤Ê¤É¡¢¸½ºß¤Î UNIX ¤ÎÂçÉôʬ¤¬³ºÅö¡£
¡¦nasm -faoutb -DAOUT ...
°ÊÁ°¤Î xBSD ¥Õ¥¡¥ß¥ê¤Ç»È¤ï¤ì¤Æ¤¤¤¿ a.out ¥Õ¥©¡¼¥Þ¥Ã¥È¡£
¡¦nasm -fmacho -DMACHO ...
Darwin (MacOS X) ¤Ê¤É¤ÇºÎÍѤµ¤ì¤Æ¤¤¤ë Mach-O ¥Õ¥©¡¼¥Þ¥Ã¥È¡£
Ãí¡Ë-fmacho ¥ª¥×¥·¥ç¥ó¤Ï nasm 0.98.40 °Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹¡£
¡¦nasm -fcoff -DDJGPP ...
MS-DOS ¤Î DJGPP ¥³¥ó¥Ñ¥¤¥é¤Ç»È¤ï¤ì¤ë coff ¥Õ¥©¡¼¥Þ¥Ã¥È¡£
¤³¤Î¤¦¤Á¡¢-f ¥ª¥×¥·¥ç¥ó¤Ï nasm ¤¬²ò¼á¤¹¤ë¥Õ¥¡¥¤¥ë¥Õ¥©¡¼¥Þ¥Ã¥È¤Î»ØÄê»Ò¤Ç¡¢
-D ¥ª¥×¥·¥ç¥ó(¥Þ¥¯¥í¤ÎÄêµÁ)¤Ï jsimdext.inc ¤ÎÃæ¤Ç²ò¼á¤µ¤ì¤ë¥Ð¥¤¥Ê¥êµ¬Ìó
(ABI)¤Î»ØÄê»Ò¤Ç¤¹¡£jsimdext.inc ¤Ç¤Ï¡¢-D ¥ª¥×¥·¥ç¥ó¤Ç¤Î¥Þ¥¯¥íÄêµÁ¤Ë½¾¤Ã¤Æ¡¢
¥»¥°¥á¥ó¥È(¥»¥¯¥·¥ç¥ó)¤ÎÄêµÁ¤ä³°Éô̾̾Á°Áõ¾þ¤ÎÄêµÁ¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¾Ü¤·¤¯¤Ï jsimdext.inc ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£
ELF ·Á¼° ¤ª¤è¤Ó a.out ·Á¼° ¤Î¾ì¹ç¡¢-DPIC ¤òÄɲ䷤ƻØÄꤹ¤ë¤È¥³¡¼¥É¤¬
Position Independent Code (°ÌÃÖÆÈΩ¥³¡¼¥É) ¤Ë¤Ê¤ê¤Þ¤¹¡£-DPIC ¤Ï
jsimdext.inc ¤ÎÃæ¤Ç²ò¼á¤µ¤ì¡¢¥³¡¼¥É¤ò PIC ¤Ë¤¹¤ë¤¿¤á¤Î¥Þ¥¯¥í¤òÄêµÁ¤·¤Þ¤¹¡£
Mach-O ·Á¼°¤Î¾ì¹ç¤Ï¡¢¥³¡¼¥É¤Ï¾ï¤Ë PIC ¤Ç¤¢¤ëɬÍפ¬¤¢¤ë¤¿¤á¡¢-DPIC ¤ò
»ØÄꤷ¤Ê¤¯¤Æ¤â¾ï¤Ë PIC ·Á¼°¤Î¥³¡¼¥É¤òÀ¸À®¤·¤Þ¤¹¡£
¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë±þ¤¸¤Æ¡¢¤³¤ì¤é¤ÎÃ椫¤éŬÀڤʤâ¤Î¤òÁªÂò¤¹¤ëɬÍפ¬¤¢¤ê
¤Þ¤¹¡£Æ±º­¤Î makefile ¤Ç¤Ï¡¢¤¢¤é¤«¤¸¤áŬÀڤʤâ¤Î¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£
configure ¥¹¥¯¥ê¥×¥È¤Ç¤Ï¡¢config.guess ¤¬½ÐÎϤ¹¤ë¥Û¥¹¥È¾ðÊó¤ò¸µ¤ËÁªÂò
¤·¤Æ¤¤¤Þ¤¹¡£
¢£OS ¤Î SIMD ¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯ (jsimdgcc.c / jsimddjg.asm / jsimdw32.asm)
SIMD Ì¿Îá¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï¡¢»öÁ°¤Î CPU ¤Î¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯¤À¤±¤Ç¤Ï¤Ê¤¯¡¢
OS ¤Î¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯¤âɬÍפǤ¹¡£ÆÃ¤Ë SSE/SSE2 ¤Ë¤Ä¤¤¤Æ¤Ï¡¢OS ¦¤Ç
SSE/SSE2 Ì¿Îá¤ò¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë»öÁ°¤ËCPU¤òÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¡¢¤½¤ì¤ò
¹Ô¤Ê¤Ã¤Æ¤¤¤Ê¤¤ OS ¤Ç¤Ï¡¢OS ¤¬¥·¥ó¥°¥ë¥¿¥¹¥¯¤«¥Þ¥ë¥Á¥¿¥¹¥¯¤«¤Ë´Ø¤ï¤é¤º¡¢
SSE/SSE2 ¤Ï¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£¤µ¤é¤Ë¡¢¤¢¤Þ¤êÃΤé¤ì¤Æ¤¤¤Þ¤»¤ó¤¬¡¢CPU ¤Ë
Æ⢤µ¤ì¤¿ FPU (¿ôÃͱ黻¥×¥í¥»¥Ã¥µ) ¤ò»ÈÍѤ·¤Ê¤¤(¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë)ÀßÄê
¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¡¢MMX ¤ä 3DNow! ¤â´Þ¤á¤¹¤Ù¤Æ¤Î SIMD Ì¿Îá¤ÏÁ´¤¯¼Â¹Ô¤Ç¤­
¤Þ¤»¤ó¡£Íפ¹¤ë¤Ë¡¢SIMD Ì¿Îá¤ò¼Â¹Ô¤Ç¤­¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤ë¤Ë¤Ï¡¢CPUID ¤Î
¥Õ¥é¥°¤òÄ´¤Ù¤ë¤À¤±¤Ç¤ÏÉÔ½½Ê¬¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
SIMD Ì¿Îá¤Î OS ¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯¤È¤¤¤Ã¤Æ¤â¡¢Êݸî¥â¡¼¥É¤ÇÆ°¤¤¤Æ¤¤¤ë
¥×¥í¥°¥é¥à¤Î¾ì¹ç¡¢CPU ¤ÎÀßÄê¥Õ¥é¥°¤Î¾õÂÖ¤òľÀܥ桼¥¶¡¦¥×¥í¥°¥é¥à¤«¤é
ÆɤߤȤ뤳¤È¤¬¤Ç¤­¤Ê¤¤¤¿¤á¡¢SIMD Ì¿Îá¤ò»î¤·¤Ë¼Â¹Ô¤·¤Æ¤ß¤Æ̵¸úÌ¿ÎáÎã³°¤¬
ȯÀ¸¤¹¤ë¤«¤É¤¦¤«¤ò³Î¤«¤á¤ë¤È¤¤¤¦¡¢°Ü¿¢À­¤Î°­¤¤´ÖÀÜŪ¤ÊÊýË¡¤òºÎ¤é¤¶¤ë¤ò
ÆÀ¤Ê¤¤¤Î¤¬¸½¾õ¤Ç¤¹¡£
¤³¤Î SIMD Ì¿Îá¤Î OS ¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯¤ò¤ä¤Ã¤Æ¤¤¤ë¤Î¤¬¡¢jsimdgcc.c /
jsimddjg.asm / jsimdw32.asm ¤Î£³¤Ä¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ç¤¹¡£¤½¤ì¤¾¤ì¡¢
UNIX/gccÍÑ¡¢DJGPPÍÑ¡¢Win32ÍѤǤ¹¡£jsimdgcc.c ¤Ç¤Ï¡¢Îã³°¤ÎȯÀ¸¤ò
signal() ´Ø¿ô¤Î¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ÇÊá¤Þ¤¨¤Æ¤¤¤Þ¤¹¡£¥³¡¼¥É¤Î°ìÉô¤Ë gcc ¤Î
¥¤¥ó¥é¥¤¥ó¥¢¥»¥ó¥Ö¥é¤ò»È¤Ã¤Æ¤¤¤ë¤¿¤á¡¢gcc ÀìÍѤǤ¹¡£gcc °Ê³°¤Ç¤â
¥³¥ó¥Ñ¥¤¥ë¤Ï¤Ç¤­¤Þ¤¹¤¬¡¢¤³¤Î¾ì¹ç¤Ï SIMD Ì¿Îá¤Î¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯¤Ï
¹Ô¤Ê¤ï¤ì¤Þ¤»¤ó¡£jsimddjg.asm ¤Ï DPMI ¤ÎÎã³°½èÍýµ¡¹½¤òľÀÜÍøÍѤ·¤¿
ÊýË¡¤Ç¡¢jsimdw32.asm ¤Ï Win32 ¤ÎÎã³°½èÍýµ¡¹½¤òľÀÜÍøÍѤ·¤¿ÊýË¡¤Ç¤¹¡£
¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë±þ¤¸¤Æ¡¢¤³¤Î£³¼ïÎà¤ÎÃ椫¤éŬÀڤʤâ¤Î¤òÁªÂò¤¹¤ëɬÍפ¬
¤¢¤ê¤Þ¤¹¡£Æ±º­¤Î makefile ¤Ç¤Ï¡¢¤¢¤é¤«¤¸¤áŬÀڤʤâ¤Î¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£
configure ¥¹¥¯¥ê¥×¥È¤Ç¤Ï¡¢config.guess ¤¬½ÐÎϤ¹¤ë¥Û¥¹¥È¾ðÊó¤ò¸µ¤ËÁªÂò
¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤Î£³¼ïÎà¤Î¤É¤ì¤È¤âŬ¹ç¤·¤Ê¤¤¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Î¾ì¹ç¤Ï¡¢¿·¤¿¤Ê¥Á¥§¥Ã¥¯
´Ø¿ô¤ò½ñ¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¤Ç¤¹¤¬¡¢¤½¤Î OS ¤¬Á´¤Æ¤Î SIMD Ì¿Îá¤ò¥µ¥Ý¡¼¥È
¤·¤Æ¤¤¤ë OS ¤Ç¤¢¤ë¤³¤È¤¬¤ï¤«¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤³¤Î OS ¥µ¥Ý¡¼¥È¥Á¥§¥Ã¥¯¤Ï
¾Êά¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£°Ê²¼¤Î¤è¤¦¤Ê¶õ¤Î´Ø¿ô¤Î¤ß¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò
ºî¤Ã¤Æ¾åµ­¤Î£³¤Ä¤Î¥Õ¥¡¥¤¥ë¤ÎÂå¤ï¤ê¤Ë»ÈÍѤ¹¤ë¤«¡¢¤â¤·¤¯¤Ï jcomapi.c ¤ò
²þÊѤ·¤Æ jpeg_simd_os_support ¤Î¸Æ¤Ó½Ð¤·¤ò¥Ð¥¤¥Ñ¥¹¤¹¤ë¤è¤¦¤Ë¤¹¤ì¤Ð£Ï£Ë
¤Ç¤¹¡£
GLOBAL(unsigned int)
jpeg_simd_os_support (unsigned int simd)
{
return simd;
}
¢£¥¢¥»¥ó¥Ö¥ê¸À¸ìÍÑÀßÄê¥Õ¥¡¥¤¥ë jsimdcfg.inc ¤ÎºîÀ® (makecfg.c)
Åö¥½¥Õ¥È¤Î¾ì¹ç¡¢¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Î¥½¡¼¥¹¥³¡¼¥ÉÃ椫¤é£Ã¸À¸ì¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë
¤Ë¤¢¤ë¾ðÊ󡢤¿¤È¤¨¤Ð¡¢¥×¥ê¥×¥í¥»¥Ã¥µ¥Þ¥¯¥í¤ÎÃͤ乽¤ÂΤÎÃæ¤Ë¤¢¤ëÊÑ¿ô¤Î
¥ª¥Õ¥»¥Ã¥È¤Ê¤É¡¢¤òÃΤëɬÍפ¬¤¢¤ê¤Þ¤¹¡£makecfg.c ¤Ï¡¢JPEG ¥é¥¤¥Ö¥é¥ê¤Î
¥³¥ó¥Ñ¥¤¥ë¤ËÀèΩ¤Ã¤Æ¥³¥ó¥Ñ¥¤¥ë¡¦¥ê¥ó¥¯¡¦¼Â¹Ô¤µ¤ì¡¢¥¢¥»¥ó¥Ö¥ê¸À¸ì¦¤Î
¥½¡¼¥¹¥³¡¼¥É¤ÇɬÍפȤʤë¾ðÊó¤ò¥¢¥»¥ó¥Ö¥ê¸À¸ìÍÑÀßÄê¥Õ¥¡¥¤¥ë jsimdcfg.inc
¤È¤·¤Æ½ÐÎϤ¹¤ëƯ¤­¤ò¤·¤Æ¤¤¤Þ¤¹¡£
Ãí°ÕÅÀ¤È¤·¤Æ¡¢makecfg.c ¤Ï JPEG ¥é¥¤¥Ö¥é¥ê¤Î¥½¡¼¥¹¥³¡¼¥É¤ÈƱ¤¸¥³¥ó¥Ñ¥¤¥ë
¥ª¥×¥·¥ç¥ó¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£Æäˡ¢¹½Â¤ÂΤβò¼á(¥µ¥¤¥º
¤Ê¤É)¤¬ JPEG ¥é¥¤¥Ö¥é¥êËÜÂΤΤâ¤Î¤È°Û¤Ê¤Ã¤Æ¤·¤Þ¤¦¤È¡¢JPEG ¥é¥¤¥Ö¥é¥ê¤¬
¥¯¥é¥Ã¥·¥å¤·¤Þ¤¹¡£
¢£SIMD Ì¿Îá¤Î¼Â¹Ô»þ¤ÎÁªÂò¡¿SIMD Æ°ºî¥â¡¼¥É¾ðÊó
¤³¤Î SIMD ³ÈÄ¥ÈÇ JPEG ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï¡¢¥×¥í¥°¥é¥à¤Î¼Â¹Ô»þ¤ËÆÃÄê¤Î SIMD
Ì¿Îá¤ò»ÈÍѤ·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¤ê¡¢³Æ½èÍýÃʳ¬¤Ç¤É¤Î SIMD Ì¿Îá¤ò»ÈÍѤ·¤ÆÆ°ºî
¤¹¤ë¤Î¤«¤òÇÄ°®¤Ç¤­¤ë»ÅÁȤߤ¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
jpeg_simd_mask() ¤ò»È¤¦¤È¡¢ÆÃÄê¤Î SIMD Ì¿Îá¤ò¼Â¹Ô»þ¤Ë»ÈÍѤ·¤Ê¤¤¤è¤¦¤Ë
¤Ç¤­¤Þ¤¹¡£
GLOBAL(unsigned)
jpeg_simd_mask (j_common_ptr cinfo, unsigned remove, unsigned add);
¤³¤Î´Ø¿ô¤Ï¡¢³Æ SIMD Ì¿Î᥻¥Ã¥È¤ËÂбþ¤¹¤ë¥Þ¥¹¥¯¥Ó¥Ã¥È¤òÀßÄꡦÊѹ¹¤·¤Þ¤¹¡£
remove, add ¤½¤·¤ÆÌá¤êÃͤϡ¢³Æ SIMD Ì¿Îá¤ËÂбþ¤¹¤ë¥Ó¥Ã¥ÈÃÍ (JSIMD_MMX,
JSIMD_3DNOW, JSIMD_SSE, JSIMD_SSE2) ¤ò OR ±é»»¤ÇÁȤ߹ç¤ï¤»¤¿¤â¤Î¤Ç¤¹¡£
"¥Þ¥¹¥¯¥Ó¥Ã¥È" ¤Ï¡¢¹½Â¤ÂÎ cinfo ¤ËÊÝ»ý¤µ¤ì¤ëÃͤǡ¢¤½¤Î½é´üÃÍ¤Ï 0 ¤Ç¤¹¡£
¤½¤·¤Æ¤³¤Î´Ø¿ô¤Ï¡¢¤³¤Î¥Þ¥¹¥¯¥Ó¥Ã¥È¤ò°Ê²¼¤Î¤è¤¦¤Ë¹¹¿·(Áàºî)¤·¤Þ¤¹¡£
(¿·¤·¤¤¥Þ¥¹¥¯¥Ó¥Ã¥È) = ((¸Å¤¤¥Þ¥¹¥¯¥Ó¥Ã¥È) & ~remove) | add;
¤½¤·¤Æ¡¢¤³¤Î¥Þ¥¹¥¯¥Ó¥Ã¥È¤¬ 1 ¤Ë¤µ¤ì¤¿ SIMD Ì¿Î᥻¥Ã¥È¤Ï¡¢¤¿¤È¤¨ CPU/OS
¤ÇÂбþ¤·¤Æ¤¤¤Æ¤â»ÈÍѤµ¤ì¤Þ¤»¤ó¡£¤³¤Î´Ø¿ô¤Ï¡¢¤³¤Î´Ø¿ô¤ò¸Æ¤ÖľÁ°¤Þ¤ÇÀßÄê
¤µ¤ì¤Æ¤¤¤¿¥Þ¥¹¥¯¥Ó¥Ã¥È¤òÊÖ¤·¤Þ¤¹¡£¤Ê¤Î¤Ç¡¢remove, add ¶¦¤Ë 0 ¤òÍ¿¤¨¤Æ
´Ø¿ô¤ò¸Æ¤Ù¤Ð¡¢¸½ºßÀßÄꤵ¤ì¤Æ¤¤¤ë¥Þ¥¹¥¯¥Ó¥Ã¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤¹¡£¤³¤Î´Ø¿ô¤Î
»ÈÍÑÎã¤Ï¡¢cjpeg.c, djpeg.c, jcomapi.c ¤Ë¤¢¤ê¤Þ¤¹¡£
¤³¤Î¥Þ¥¹¥¯¥Ó¥Ã¥È¤ÎÃͤϡ¢¼ÂºÝ¤Ë¤Ï¹½Â¤ÂÎ cinfo ¤Î output_gamma ¤â¤·¤¯¤Ï
input_gamma ÊÑ¿ô¤Î²¼°Ì¥Ó¥Ã¥È¤ÎÊݸ¤µ¤ì¤Æ¤¤¤Þ¤¹(¾Ü¤·¤¯¤Ï jcomapi.c ¤ò
»²¾È)¡£¤³¤ì¤Ï¡¢¹½Â¤ÂÎ cinfo ¤Ë¿·¤¿¤ÊÊÑ¿ô¤òÄɲ䷤Ƥ·¤Þ¤¦¤È¥Ð¥¤¥Ê¥ê¸ß´¹
¤¬Êø¤ì¤Æ¤·¤Þ¤¦¤¿¤á¤Ç¡¢¸½¾õ¤Ç¤Ï̤»ÈÍѤȻפï¤ì¤ë¾åµ­¤ÎÊÑ¿ô¤ò¡Ö´Ö¼Ú¤ê¡×
¤·¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿¡¢°Ê²¼¤Î´Ø¿ô·²¤ò»È¤¦¤È¡¢¥é¥¤¥Ö¥é¥êÆâÉô¤Î³Æ½èÍýÃʳ¬¤Ç¤É¤Î SIMD Ì¿Îá
¤ò»ÈÍѤ·¤ÆÆ°ºî¤¹¤ë¤Î¤«¤òÇÄ°®¤Ç¤­¤Þ¤¹¡£
jpeg_simd_color_converter(); -> ¿§¶õ´ÖÊÑ´¹(RGB->YCbCr)
jpeg_simd_downsampler(); -> ¥À¥¦¥ó¥µ¥ó¥×¥ê¥ó¥°
jpeg_simd_forward_dct(); -> DCT½çÊÑ´¹
jpeg_simd_color_deconverter(); -> ¿§¶õ´ÖÊÑ´¹(YCbCr->RGB)
jpeg_simd_upsampler(); -> ¥¢¥Ã¥×¥µ¥ó¥×¥ê¥ó¥°
jpeg_simd_inverse_dct(); -> DCTµÕÊÑ´¹
ÊÖ¤¹Ãͤϡ¢ÉâÆ°¾®¿ôÅÀDCT½çÊÑ´¹/µÕÊÑ´¹ ¤Î¾ì¹ç¤Ï JSIMD_3DNOW ¤« JSIMD_SSE¡¢
¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï JSIMD_MMX ¤« JSIMD_SSE2 ¤òÊÖ¤·¤Þ¤¹¡£¤Þ¤¿¡¢0 ¤¬Ê֤äÆ
¤­¤¿¾ì¹ç¤Ï SIMD Ì¿Î᥻¥Ã¥È¤Ï»È¤ï¤ì¤º¡¢½¾Íè¤Î¥ë¡¼¥Á¥ó¤¬»È¤ï¤ì¤ë¤³¤È¤ò
°ÕÌ£¤·¤Þ¤¹¡£
¤³¤ì¤é¤Î´Ø¿ô¤Î¾Ü¤·¤¤»È¤¤Êý¤Ë¤Ä¤¤¤Æ¤Ï¡¢cjpeg.c, djpeg.c (»ÈÍÑÎã) ¤ò¤´Í÷
¤¯¤À¤µ¤¤¡£
¤Ê¤ª¡¢¤³¤ì¤é¤Î SIMD ¥Þ¥¹¥¯´Ø¿ô¡¿SIMD ¥â¡¼¥É¾ðÊó´Ø¿ô ¤¬É¬Íפʤ¤¾ì¹ç¤Ï¡¢
°Ê²¼¤Î¥Þ¥¯¥í¤ò jconfig.h ¤Ê¤É¤Ë´Þ¤á¤ë¤³¤È¤Ç¡¢¶Ï¤«¤Ç¤¹¤¬¥³¡¼¥É¥µ¥¤¥º¤¬
ÀáÌó¤Ç¤­¤Þ¤¹¡£
#define JSIMD_MASKFUNC_NOT_SUPPORTED
#define JSIMD_MODEINFO_NOT_SUPPORTED
¢£¤½¤Î¤Û¤«¤ÎÀßÄê¹àÌÜ¥Þ¥¯¥í
¡û RGB_RED / RGB_GREEN / RGB_BLUE / RGB_PIXELSIZE
¤³¤ì¤Ï¡¢jmorecfg.h ¤ÎÃæ¤Ë¤¢¤ëÀßÄê¹àÌÜ¥Þ¥¯¥í¤Ç¡¢¼è¤ê°·¤¦ RGB ·Á¼°²èÁü
¥Ç¡¼¥¿¤Î RGB ¤Îʤӽç¤ä¥Ô¥¯¥»¥ë¥µ¥¤¥º¤òÀßÄꤷ¤Þ¤¹¡£¤³¤Î SIMD ³ÈÄ¥ÈÇ
¤Ç¤âÊѹ¹¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹¤¬¡¢RGB_PIXELSIZE ¤¬ 3 ¤« 4 ¤Î¾ì¹ç¤Î¤ß¡¢
SIMD ÈǤ臨õ´ÖÊÑ´¹¥ë¡¼¥Á¥ó¤¬Í­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤ì°Ê³°¤ÎÃͤˤ·¤¿¾ì¹ç¤Ï¡¢
SIMD ÈǤ臨õ´ÖÊÑ´¹¥ë¡¼¥Á¥ó¤Ï¼«Æ°Åª¤Ë̵¸ú²½¤µ¤ì¤Æ¡¢½¾Íè¤Î¿§¶õ´ÖÊÑ´¹
¥ë¡¼¥Á¥ó¤¬»È¤ï¤ì¤Þ¤¹(¤ä¤äÄ㮤ˤʤê¤Þ¤¹)¡£
¤³¤ì¤é¤ÎÃͤòÊѹ¹¤¹¤ë¤³¤È¤Ç¡¢½ÐÎϤò 32bit/pixel ·Á¼°¤Ë¤·¤¿¤ê¡¢BMP ·Á¼°¤Ë
¹ç¤ï¤»¤Æ¥Ô¥¯¥»¥ë¤ò BGR ½ç¤Ë¤·¤¿¤ê¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£¤Ê¤ª¡¢
¤³¤ì¤é¤ÎÃͤòÌ·½â¤¹¤ëÃÍ¤Ë #define ¤·¤¿¾ì¹ç¤Ï¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤·¤Æ
¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¡û RGBX_FILLER_0XFF
¤³¤ì¤â jmorecfg.h ¤ÎÃæ¤Ë¤¢¤ëÀßÄê¹àÌÜ¥Þ¥¯¥í¤Ç¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï #undef
¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¾å¤Î RGB_PIXELSIZE ¤ò 4 ¤Ë¤·¤¿¾ì¹ç¡¢£±¤Ä¤Î¥Ô¥¯¥»¥ë
¥Ç¡¼¥¿Ãæ¤Ë(RGB¤Î£³¥Ð¥¤¥È¤Î¾¤Ë);·×¤Ê£±¥Ð¥¤¥È¤¬Â¸ºß¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢¤³¤Î;·×¤Ê£±¥Ð¥¤¥È(filler byte)¤Ë¤Ï 0x00 ¤¬Ëä¤á¤é¤ì¤Æ
½ÐÎϤµ¤ì¤Þ¤¹¤¬¡¢¤³¤Î RGBX_FILLER_0XFF ¤ò #define ¤¹¤ë¤È 0x00 ¤ÎÂå¤ï¤ê
¤Ë 0xFF ¤¬ filler byte ¤ËËä¤á¤é¤ì¤Æ½ÐÎϤµ¤ì¤Þ¤¹¡£
½ÐÎϤò 32bit/pixel ·Á¼°¤Ë¤·¤¿¾ì¹ç¤Ç¡¢filler byte ¤ò¥¢¥ë¥Õ¥¡¥Á¥ã¥Í¥ë
¤È¤·¤Æ°·¤¤¤¿¤¤¾ì¹ç¤Ê¤É¤Ï¡¢RGBX_FILLER_0XFF ¤ò #define ¤¹¤ë¤ÈÅԹ礬Îɤ¤
¾ì¹ç¤¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
¤Ê¤ª¡¢¥ª¥ê¥¸¥Ê¥ëÈǤΠJPEG ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï¡¢¤³¤Î filler byte ¤Ë¤Ï²¿¤â
µÍ¤á¤é¤ì¤º¡¢¸µ¤ÎÃͤ¬¤½¤Î¤Þ¤ÞÊÝ»ý¤µ¤ì¤Þ¤¹¡£¤Ç¤¹¤¬¡¢SIMD ÈǤ臨õ´ÖÊÑ´¹
¥ë¡¼¥Á¥ó¤Ç¤Ï¸µ¤ÎÃͤòÊÝ»ý¤¹¤ë¤Ë¤Ï¼ê´Ö¤¬¤«¤«¤ë¤¿¤á¡¢¾ï¤Ë 0x00 ¤« 0xFF
¤ÇËä¤á¤Æ½ÐÎϤ¹¤ë¤è¤¦¤Ë»ÅÍÍÊѹ¹¤ò¹Ô¤Ê¤¤¤Þ¤·¤¿¡£
¡û JFDCT_INT_QUANTIZE_WITH_DIVISION
¤³¤ì¤Ï¡¢jmorecfg.h ¤ÎÃæ¤Ë¤¢¤ëÀßÄê¹àÌÜ¥Þ¥¯¥í¤Ç¡¢°µ½Ì½èÍý¤Ç¤Î DCT·¸¿ô¤Î
Î̻Ҳ½½èÍý¤ÎÊýË¡¤òÊѹ¹¤·¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï #undef ¤Ç¡¢#undef ¤Î¾õÂÖ¤Î
Êý¤¬¹â®¤Ê¤Î¤Ç¡¢ÆäËÍýͳ¤Î¤Ê¤¤¸Â¤ê #undef ¤Ç»ÈÍѤ¹¤ë¤³¤È¤ò¤ªÁ¦¤á¤¤¤¿¤·
¤Þ¤¹¡£
DCT·¸¿ô¤ÎÎ̻Ҳ½½èÍý¤È¤¤¤¦¤Î¤Ï¡¢Ã¼Åª¤Ë¸À¤¨¤Ð²èÁü¥Ç¡¼¥¿¤ËÂФ·¤Æ°ì¤Ä°ì¤Ä
³ä¤ê»»(À°¿ô½ü»»)¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ç¤¹¡£¤Ç¤¹¤¬¡¢½ü»»¤Ï¸¶ÍýŪ¤Ë¹â®²½¤¬
ÉÔ²Äǽ¤Ê¤Î¤Ç¡¢¤³¤Î SIMD ³ÈÄ¥ÈǤǤÏÀ°¿ô½ü»»¤ÎÂå¤ï¤ê¤ËÀ°¿ô¾è»»¤ò»ÈÍѤ·¤Æ
Î̻Ҳ½½èÍý¤ò¼Â¹Ô¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ÎÀ°¿ô¾è»»¤òÂåÍѤ¹¤ëÊýË¡¤Ç¤â¡¢¹âÀºÅÙÀ°¿ôDCT/¹â®À°¿ôDCT¤ò»È¤Ã¤¿¾ì¹ç¤Ç¡¢
¤«¤Ä¡¢0¡Á100 ¤Î¤¹¤Ù¤Æ¤Î°µ½Ì¥¯¥ª¥ê¥Æ¥£ÀßÄê¤Ç¥ª¥ê¥¸¥Ê¥ëÈǤÈÁ´¤¯Æ±¤¸·ë²Ì¤ò
½Ð¤¹¤³¤È¤ò³Îǧ¤·¤Æ¤¤¤Þ¤¹¡£¤Ç¤¹¤¬¡¢°µ½Ì²è¼Á¤ò "¥¯¥ª¥ê¥Æ¥£" ¤Î»Øɸ¤ÇÀßÄê
¤»¤º¡¢¥¯¥ª¥ê¥Æ¥£ 0 ¤è¤ê¤âÄã²è¼Á¤ÎÎ̻Ҳ½¥Æ¡¼¥Ö¥ë¤òľÀÜÍ¿¤¨¤Æ°µ½Ì¤·¤¿¾ì¹ç
¤Ê¤É¤Ï¡¢±é»»ÅÓÃæ¤Î¿ôÃÍÈϰϤδط¸¤Ç¡¢¥ª¥ê¥¸¥Ê¥ëÈǤȤϰۤʤë·ë²Ì¤¬½Ð¤ë¤³¤È
¤âÈÝÄê¤Ç¤­¤Þ¤»¤ó¡£¤½¤¦¤¤¤Ã¤¿Æüì¤Ê¶­³¦¾ò·ï²¼¤Ç¤â¥ª¥ê¥¸¥Ê¥ëÈǤȤθߴ¹ÅÙ¤¬
¹â¤¯¤Ê¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¾ì¹ç¤Ê¤É¤Ë¤Ï¡¢¤³¤Î¹àÌܤò #define ¤Ë¤·¤Æ»ÈÍѤ·¤Æ
¤¯¤À¤µ¤¤¡£¼ã´³Â®ÅÙ¤ÏÍî¤Á¤Þ¤¹¤¬¡¢½¾Íè¤É¤ª¤ê¡¢°ì¤Ä°ì¤Ä½ü»»¤ò¹Ô¤Ã¤ÆÎ̻Ҳ½
½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£
¤â¤Ã¤È¤â¡¢¥¯¥ª¥ê¥Æ¥£ 0 ¤è¤ê¤âÄã²è¼Á¤ÎÀßÄê¤Ç°µ½Ì¤·¤Æ¤â¡¢¤Û¤È¤ó¤É¼ÂÍѤË
¤Ê¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¤³¤ÎÀ°¿ô¾è»»¤òÂåÍѤ¹¤ëÊýË¡¤Ç¤â¡¢ÌäÂê¤Ë¤Ê¤ë¤³¤È¤Ï¤Ê¤¤¤È
»×¤¤¤Þ¤¹¡£
¡û UPSAMPLE_H1V2_SUPPORTED
¤³¤ì¤Ï¡¢jmorecfg.h ¤ÎÃæ¤Ë¤¢¤ë¡¢¥ª¥ê¥¸¥Ê¥ëÈǤΠIJG JPEG library ¤Ë¤Ï
¸ºß¤·¤Ê¤¤ÀßÄê¹àÌÜ¥Þ¥¯¥í¤Ç¤¹¡£¤³¤ì¤Ï¡¢Y:1x2 Cb:1x1 Cr:1x1 (4:2:2) ¤Î
¥µ¥Ö¥µ¥ó¥×¥ê¥ó¥°Èæ¤ò»ý¤Ä JPEG ¥Õ¥¡¥¤¥ë¤ò¡¢¥ª¥ê¥¸¥Ê¥ëÈǤΠIJG JPEG
library ¤è¤ê¤â¹â®¡¿¹â²è¼Á¤ËŸ³«¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤â¤Î¤Ç¤¹¡£
¥µ¥Ö¥µ¥ó¥×¥ê¥ó¥°Èæ Y:1x2 Cb:1x1 Cr:1x1 (4:2:2) ¤ò»ý¤Ä JPEG ¥Õ¥¡¥¤¥ë¤Ï¡¢
¥ª¥ê¥¸¥Ê¥ë¤Î IJG JPEG Library ¤Ç¤âŸ³«¤Ç¤­¤Þ¤¹¤¬¡¢¤³¤Î¥µ¥Ö¥µ¥ó¥×¥ê¥ó¥°
Èæ¤ËÂбþ¤¹¤ë¥¢¥Ã¥×¥µ¥ó¥×¥ê¥ó¥°¡¦¥ë¡¼¥Á¥ó¤¬´Êñ¤Ê¤â¤Î¤·¤«ÍÑ°Õ¤µ¤ì¤Æ
¤¤¤Ê¤¤¤¿¤á¡¢Å¸³«Â®ÅÙ¤âÃÙ¤¯¡¢¤Þ¤¿¡¢¿§¤Î¶­Ìܤ¬¤Ï¤Ã¤­¤ê¤·¤Æ¤¤¤ë£Ã£Ç²èÁü
¤Ê¤É¤Î¾ì¹ç¤Ï¥¸¥ã¥®¡¼¤¬ÌÜΩ¤Ã¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¹àÌܤòÍ­¸ú¤Ë
¤¹¤ë¤³¤È¤Ç¡¢¤³¤Î¤è¤¦¤Ê¥µ¥Ö¥µ¥ó¥×¥ê¥ó¥°Èæ Y:1x2 Cb:1x1 Cr:1x1 ¤ò»ý¤Ä
JPEG ¥Õ¥¡¥¤¥ë¤ò¹â®¤Ë¡¢¤Þ¤¿¡¢¥¸¥ã¥®¡¼¤¬ÌÜΩ¤¿¤Ê¤¤¤è¤¦¤Ë¹â²è¼Á¤ËŸ³«
¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
¤³¤Î¡¢¥µ¥Ö¥µ¥ó¥×¥ê¥ó¥°Èæ Y:1x2 Cb:1x1 Cr:1x1 ¤Î JPEG ¥Õ¥¡¥¤¥ë¤Ï¡¢¤¢¤Þ¤ê
°ìÈÌŪ¤Ê¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢¥Ç¥£¥¸¥¿¥ë¥«¥á¥é¤Ê¤É¤¬½ÐÎϤ¹¤ë¤³¤È¤Î¿¤¤¡¢
¥µ¥Ö¥µ¥ó¥×¥ê¥ó¥°Èæ Y:2x1 Cb:1x1 Cr:1x1 (4:2:2) ¤Î JPEG ¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ
¡ÖJPEG ¥í¥¹¥ì¥¹²óž¡×½èÍý¤ò¹Ô¤Ê¤¦¤È¡¢¤³¤Î Y:1x2 Cb:1x1 Cr:1x1 ¤Î JPEG
¥Õ¥¡¥¤¥ë¤Ë¤Ê¤ê¤Þ¤¹¡£¥Ç¥£¥¸¥¿¥ë¥«¥á¥é¤Ç¡¢¥«¥á¥é¤ò½Ä¤Ë¤·¤Æ¡Ê½Ä°ÌÃ֤ǡ˻£±Æ
¤·¤¿²èÁü¤ò¡ÖJPEG ¥í¥¹¥ì¥¹²óž¡×¤·¤ÆÀµ¾ï¤Ê¸þ¤­¤Ëľ¤¹¡¢¤Ê¤É¤È¤¤¤¦¤³¤È¤Ï¡¢
¤è¤¯¤ä¤ë¤³¤È¤À¤È»×¤¤¤Þ¤¹¡£¤Ç¤¹¤¬¡¢¤³¤Î¤è¤¦¤Ê¡ÖJPEG ¥í¥¹¥ì¥¹²óž¡×¤µ¤ì¤¿
JPEG ¥Õ¥¡¥¤¥ë¤ò¥ª¥ê¥¸¥Ê¥ë¤Î IJG JPEG Library ¤ÇŸ³«¤¹¤ë¤È¡¢¾åµ­¤ÎÍýͳ¤«¤é¡¢
JPEG ¥Õ¥¡¥¤¥ë¤òŸ³«¤·¤Æ¤«¤é²èÁü½èÍý¥½¥Õ¥È¤Ç²óž¤µ¤»¤¿²èÁü¤ËÈæ¤Ù¤Æ²è¼Á¤¬
Îô¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¤³¤Î¹àÌܤòÍ­¸ú¤Ë¤¹¤ë¤³¤È¤Ç¡¢²èÁü½èÍý¥½¥Õ¥È¤Ç²óž¤µ¤»¤¿
²èÁü¤È¤Û¤ÜƱ¤¸¥¯¥ª¥ê¥Æ¥£¤Ç²èÁü¤òŸ³«¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤Î¹àÌܤϡ¢ÆäËÍýͳ¤Î¤Ê¤¤¸Â¤ê¡¢#define ¤Î¾õÂ֤ˤ·¤Æ¤ª¤¯¤³¤È¤ò¤ªÁ¦¤á
¤¤¤¿¤·¤Þ¤¹¡£¥ª¥ê¥¸¥Ê¥ë¤Î IJG JPEG Library ¤È´°Á´¤ËƱ°ì¤Î·ë²Ì¤¬É¬ÍפÊ
¾ì¹ç¤Î¤ß #undef ¤Ë¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤¯¤À¤µ¤¤¡£
[EOF]