makesceneã³ãã³ãã«åé¡ããããèªåã§è§£æ±ºã§ããŸããã
Ubuntu 16.04 64ãããã§Readme.mdã®æ瀺ã«åŸã£ãŠããªããžããªã®ã¯ããŒã³ãäœæããŠãã«ãããŸããã ãã«ãã¯ãšã©ãŒãªãã§ã³ã³ãã€ã«ããããã¹ãŠã®ã¢ããªãããã«ãããŸãã
ãã ãããã©ã¡ãŒã¿-iãæå®ããŠmakesceneã³ãã³ããå®è¡ãããš
ã³ãã³ããã©ããŸã§å®è¡ããããã確èªããããã«åºåã¡ãã»ãŒãžãã³ãŒãã«è¿œå ããŸãããæããã«ãã¯ã©ãã·ã¥ã¯image_io.ccãã¡ã€ã«ã®load_png_fileé¢æ°ã®ããã€ã³ã¿ãŒãèšå®ãããŠããè¡311-314ã®åšãã§çºçããŸãã
ã§ããã©ããã£ãŠçŽãã°ããã®ãããããŸããã headers.heightãšheaders.channelsã®å€ã¯çã«ããªã£ãŠããããã§ãã
image_io
ã§ã¯ã©ãã·ã¥ããå¯èœæ§ã¯æ¯èŒçäœãã§ãã ãã¹ãããã°ã©ã ãäœæããŠãç»åãæåã§ããŒãããŠã¿ãŠãã ããã
#include "mve/image_io.h"
int main() {
mve::image::load_png_file("your path");
return 0;
}
ãã®ç»åã«ã€ããŠä»ã«äœãç¹å¥ãªããšã¯ãããŸããïŒ 8ããããŸãã¯16ãããã®PNGã§ããïŒ
ããŠããã¹ãããã°ã©ã ãã³ã³ãã€ã«ãããã¹ãã¢ããªãšåããã©ã«ããŒã«ããPNGãèªã¿èŸŒãããšããŸããã åãçµæãåŸãããŸãããããã°ã©ã ã¯ãUngÃŒltigerMaschinenbefehlïŒSpeicherabzuggeschriebenïŒãã§ã¯ã©ãã·ã¥ããŸãã
ãã ããé¢æ°åŒã³åºãããload_tiff_fileãã«å€æŽãã代ããã«TIFFãã¡ã€ã«ãããŒããããšãæ£åžžã«å®è¡ãããŠããããã§ãã ãã¶ããload_png_fileé¢æ°ã¯å ·äœçã«å£ããŠããŸããïŒ
ããã圹ç«ã€ãã©ããã¯ããããŸããããã³ãŒããload_png_fileã«æ»ããstraceã䜿çšããŠãã®ã¢ããªã«é¢é£ããã·ã¹ãã ãã°ãååŸããŸããã ã¯ã©ãã·ã¥ããåã®ãã°ã®æåŸã®æ°è¡ã¯æ¬¡ã®ãšããã§ãã
14ïŒ00ïŒ46.197536 openïŒ "./ frame_0001.png"ãO_RDONLYïŒ= 3
14ïŒ00ïŒ46.197561 fstatïŒ3ã{st_mode = S_IFREG | 0664ãst_size = 407653ã...}ïŒ= 0
14ïŒ00ïŒ46.197582 readïŒ3ã "\ 211PNG \ r \ n \ 32 \ n \ 0 \ 0 \ 0 \ rIHDR \ 0 \ 0 \ 5 \ 0 \ 0 \ 0 \ 2 \ 320 \ 10 \ 2 \ 0 \ 0 \ 0 @ \ 37J "...ã4096ïŒ= 4096
14ïŒ00ïŒ46.197651 mmapïŒNULLã2768896ãPROT_READ | PROT_WRITEãMAP_PRIVATE | MAP_ANONYMOUSã-1ã0ïŒ= 0x7fcadc163000
14ïŒ00ïŒ46.198666 --- SIGILL {si_signo = SIGILLãsi_code = ILL_ILLOPNãsi_addr = 0x40b69d} ---
14ïŒ00ïŒ46.337334 +++ SIGILLã«ãã£ãŠæ®ºãããïŒã³ã¢ãã³ãïŒ+++
ãã®ç»åãžã®ãªã³ã¯ãéã£ãŠããã ããŸãããã
ç§ã®æšæž¬ã§ã¯ãç»åã®æ¡åŒµåã¯pngã ãã§ãããå®éã«ã¯pngã§ã¯ãããŸãã...ããpngããã¡ã€ã«ãå®éã«jpegã§ãšã³ã³ãŒããããŠããå Žåã«ãåæ§ã®åé¡ãçºçããŸãã
http://maxdid.it/gamejam/img/frame_0001.png
ffmpegã䜿çšããŠããããªã®ãã¬ãŒã ãç»åãã¡ã€ã«ã«ãšã¯ã¹ããŒãããŸããã
ãã¡ã€ã«åœ¢åŒãééã£ãŠããã®ã§ã¯ãªãããšæããŸããããconvertã³ãã³ãã䜿ã£ãŠpngããtiffã«å€æããããå ã«æ»ãããããŸããããå¹æã¯ãããŸããã§ããã
ããã§ãã¡ã€ã«ã¯æ£åžžã«ããŒããããŸãã
open("frame_0001.png", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0640, st_size=691915, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5395d8a000
read(3, "\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\5\0\0\0\2\320\10\2\0\0\0@\37J"..., 4096) = 4096
mmap(NULL, 2768896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5393b87000
read(3, "\7\0?)\363\207i\27\30x'\356\330\214Xg\7\260\334W\23G\371\323\31 \323\2S\273\353\\"..., 4096) = 4096
...
strace
ã«ãããšãããã°ã©ã ã¯SIGILLïŒKILLã§ã¯ãªãïŒã«ãã£ãŠåŒ·å¶çµäºãããŸãã ããã¯ãããã»ããµãŸãã¯OSãç¡å¹ãªåœä»€ãå®è¡ããããšããŠããããšãæå³ããŠãããšæããŸãã ãããã©ãããã°ããã®ãããããŸããããã©ããããããæ··ä¹±ããŠããã®ã¯ããªãã®ã·ã¹ãã ããlibpngã©ã€ãã©ãªã ãšæããŸãã libpngãåã€ã³ã¹ããŒã«/ã¢ããã°ã¬ãŒãããŠã¿ãŠãã ããã
ããã§ãapt-get installã§ã€ã³ã¹ããŒã«ããlibpngããŒãžã§ã³ãã¢ã³ã€ã³ã¹ããŒã«ãã代ããã«libpngãªããžããªãçŽæ¥ããŠã³ããŒãããŠãã€ã³ã¹ããŒã«æžã¿ã®ã©ã€ãã©ãªãã³ã³ãã€ã«ããŸããã
æ®å¿µãªãããåãå¹æããããŸãã å€åããã¯æ¬åœã«ç§ã®ããã»ããµã§ããïŒ ç§ã¯çŸåšãAMD Phenom II X4 965ããã»ããµã䜿çšããŠããŸãããããã¯ææ°ã¢ãã«ã§ã¯ãªããšæããŸãã ããã§ãããããŸã§ã«åããããªåé¡ãçºçããããšã¯ãªããšæããŸãã
ãšã«ãããçããã¯åé¡ãåçŸã§ããªãã®ã§ãç§ã¯åé¡ãéãããšæããŸãã
ããã§ãæ©èœããªããšã®ããšã§ãããããªããã ç§ã¯ãããããªãã®ããŒããŠã§ã¢ã ãšã¯æ¬åœã«æããŸãã...ãããç§ã¯èãããããŸããã ãã¶ããlibpngã®ç¹å®ã®ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ©èœãç¡å¹ã«ããã³ã³ãã€ã«æãã©ã°ããããŸããïŒ ãã®æç¹ã§ã¯ãäœãåé¡ãåŒãèµ·ãããŠããã®ããå®éã«ã¯ç¥ããã«æšæž¬ããŠããã ãã§ãã
å€ãã®å®éšã®åŸã§ç»åãã¡ã€ã«ãã€ã³ããŒããããšãã«makesceneãã¯ã©ãã·ã¥ããçç±ãç¥ã£ãŠããŸãã libjpegãlibpngã®çç±ã§ã¯ãªããå®éã®çç±ã¯openMPã§ãã ãã®ãã°ã¯ãmakescene.ccã®æ¬¡ã®ã³ãŒãã§ä¿®æ£ã§ããŸãã
845ã©ã€ã³
mve :: ImageBase :: Ptr image;
for (std::size_t i = 0; i < dir.size(); ++i)
...ã
std :: string exif;
image = load_any_image(afname, &exif);
..ã
ãããããã®å€æŽã¯ããŸãæå³ããããŸããã ãã¹ãŠã®ã¹ã¬ããã§å
±æãããimage
å€æ°ã«ç»åãä¿åããŠããŸããç»åã®èªã¿èŸŒã¿ã¯çŸåšã·ãªã¢ã«åãããŠããŸããã競åç¶æ
ã®ããã«ç»åãäžæžããããç»åã®èªã¿èŸŒã¿åŸã«ééã£ãããŒã¿ã䜿çšãããŸãã ..
ç»åãèªã¿èŸŒãåã«ãïŒpragma ompãã¯ãªãã£ã«ã«ã«èšå®ããŠã¿ãŸãããïŒ
@timlgy ãã·ã¹ãã ã«ã€ããŠããå°ãæããŠããã ããŸããïŒ ã©ã®CPUããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã³ã³ãã€ã©ã䜿çšããŠããŸããïŒ
Ubuntu 14.04.5 LTSã16U32Gã§åäœããã³ã³ãã€ã©ã¯gcc 4.8.4ïŒUbuntu 4.8.4-2ubuntu1ã14.04.3ïŒPS'ééã£ãããŒã¿'ããã¯äœã§ããïŒ prebundle.sfmïŒ
ãã®èšäºã«ãããšã ïŒpragma ompcritical
ompã¯ãªãã£ã«ã«ãã£ã¬ã¯ãã£ãã¯ãäžåºŠã«1ã€ã®ã¹ã¬ããã§å®è¡ããå¿
èŠãããã³ãŒãã®ã»ã¯ã·ã§ã³ãèå¥ããŸãã
ãããã£ãŠããã®ã³ãŒããmve::ImageBase::Ptr imagel=oad_any_image(afname, &exif);
å
ã«é
眮ããå Žåããload_any_imageãã¯å±éºã ãšæããŸããã
load_any_image
$ã¯ãããã¯ã°ã©ãŠã³ãã§libpng
ã䜿çšããã ãã§ãé©åã«äœ¿çšãããšã¹ã¬ããã»ãŒãã«ãªããŸãã ãééã£ãããŒã¿ããšã¯ãäžèšã®ã³ãŒãã§ã¯ãç»åã䜿çšãããåã«å¥ã®ç»åã§äžæžããããå¯èœæ§ãããããããã¥ãŒã«ééã£ãç»åããŒã¿ã衚瀺ãããå¯èœæ§ãããããšãæå³ããŸãã
ããŠããã®åé¡ã®æ觊ãåŸãããã«ããããã®ã¯ã©ãã·ã¥ã®åœ±é¿ãå®éã«åããŠããã®ã¯èª°ã§ããïŒ
1ã€ã®ç»åïŒä»»æã®ã¿ã€ãã®jpg tifãŸãã¯pngïŒã®ã¿ãããŒããããšåé¡ãããŸãããã2ã€ã®ç»åïŒä»»æã®ã¿ã€ãïŒãããŒããããšã¯ã©ãã·ã¥ããå¯èœæ§ãé«ããªããŸãã
åé¡ã®åå ãããããŸããã ç»åã®èªã¿èŸŒã¿ã¯äžŠè¡ããŠå¯èœã§ããã¯ãã§ãããåé¡ã¯çºçããŠããŸããã éåžžã«å€§ããªç»åãããŒãããå Žåããã®ã¯ã©ãã·ã¥ã¯äœ¿çšå¯èœãªã¡ã¢ãªã«é¢é£ããŠããå¯èœæ§ããããŸããïŒ 2GBã®RAMãã·ã³ã«32åã®ã€ã¡ãŒãžïŒã³ã¢ãå€ãå ŽåïŒã䞊åã«ããŒããããšãåé¡ãçºçããããšãæ³åã§ããŸãã
ãããŸã§ã®éã load_any_image
ïŒ$ã®åã«$ #pragma omp critical
ã®è¡ã眮ãã ãã§ãåé¡ã解決ããã¯ãã§ãã
@timlgy ãã¯ã©ãã·ã¥ã®ããã¯ãã¬ãŒã¹ãæçš¿ã§ããŸããïŒ
ãŸããã16U32Gããšã¯ã©ãããæå³ã§ããïŒ
@ andre-schulz 16U32Gã¯ãCPU16ãã«ãã¹ã¬ãããš32GBMemãæå³ããŸã
åœä»€ã«ããææ°ã®mveãã«ãã䜿çšããWindows764xã§åãã¯ã©ãã·ã¥ãçºçããŸãã
'' load_any_imageã®åã«#pragmaompã¯ãªãã£ã«ã«ãªè¡ãé 眮ãããããšããŸããããããã¯åœ¹ã«ç«ã¡ãŸããããã®å Žåããã«ãã§ããŸãããããã解決ããã«ã¯ã©ãããã°ããã§ããïŒããã§OpenMPã䜿çšããç®çã¯äœã§ããïŒ
1ã€ã®ç»åã ããã€ã³ããŒãããããšããŸããïŒåãã¯ã©ãã·ã¥ãçºçããŸãã
ããã«ã¡ã¯@stiv-yakovenkoã
æ
å ±ã®ãããã§ã åé¡ã®åå ãšãªã£ãŠããpngãã¡ã€ã«ãæçš¿ããããšã¯å¯èœã§ããïŒ
ãŸããã©ã®CPUã䜿çšããŠããŸããïŒ
åé¡ã¯ã makescene
ããããã°ã¢ãŒãã§ã³ã³ãã€ã«ããããããªãªãŒã¹ã¢ãŒãã§ã¯libpngã«ãªã³ã¯ãããŠããããšã®ããã§ãã ãããããç°ãªãã©ã³ã¿ã€ã ã©ã€ãã©ãªïŒ/MDãš/MDdïŒã«å¯Ÿãããªã³ã¯ã«åé¡ããããŸãã ããã¯ãçŸåšã®ãã«ãã·ã¹ãã ã®åäœæ¹æ³ã«åé¡ããããŸãã ãããããã«èª¿æ»ããå¿
èŠããããŸãã
makescene
ãRelWithDebInfoã¢ãŒãã§æ©èœããããšã確èªã§ããŸããïŒ
ãããã°ã¢ãŒãã§makescene
ãå®è¡ããå¿
èŠãããå Žåã¯ããµãŒãããŒãã£CMakeLists.txt
ã®CMAKE_CONFIGURATION_TYPES
Debug
ãè¿œå ããããšã§ããããã°ã¢ãŒãã§ãµãŒãããŒãã£ã©ã€ãã©ãªãã³ã³ãã€ã«ã§ããŸãã 次ã«ãã©ã€ãã©ãªã®ãããã°ããŒãžã§ã³ãæåã§åã³ã³ãã€ã«ããŠããããã°ããŒãžã§ã³ã®makescene
ã®å Žæã«ã³ããŒããŸãã ã©ãããããããããä¿®æ£/èªååã§ãããã©ãã調ã¹ãŠã¿ãŸãã
ReleaseWithDebããŒãžã§ã³ãæ©èœããããšã確èªããŸãã
@ andre-schulzããã«ã¡ã¯ããããã°ã¢ãŒãã«ã€ããŠåæããŠããã ãããããšãããããŸãã ãµãŒãããŒãã£ã©ã€ãã©ãªããããã°ã¢ãŒãã§åã³ã³ãã€ã«ããtiffd.dllãzlibd.dllããããã°ããŒãžã§ã³ã®makesceneã«è¿œå ããŸããã ããã°ã©ã ã¯ãŸã ã¯ã©ãã·ã¥ããŸãã
png_read_image(png, &row_pointers[0]);
@ andre-schulzä»ã¯å€§äžå€«ã§ãïŒ ãµãŒãããŒãã£ã©ã€ãã©ãªã®CMakeLists.txtã®CMAKE_CONFIGURATION_TYPESãå€æŽããMVE.slnã®å ¥åã©ã€ãã©ãªæ§æãå€æŽããåŸããããã°ãå®å šã«ã³ã³ãã€ã«ãããšãjpgã®èªã¿èŸŒã¿ã®åé¡ã解決ãããŸãã