본문 바로가기

GCC

(23)
신경망 Super-Resolution Imaging 오픈 소스 (libsrcnn) 공개 이전에 Super-Resolution Imaging 관련으로 관심을 가졌다가, 오래전에 공개 되었던 한 홍콩의 대학쪽에서 공개된 논문과 소스코드를 이번에 손을 보게 되었습니다. 이전에 fl_imgtk 에 Lanczos3 까지 초 고속으로 구현을 해 보았던지라, 이번 Super-Resolution (이하 SR) 은 어렵지 않게 구현을 할 수 있을 거로 추측을 해 봤습니다만, 결론적으로 대단히 쉽지 않은 부분이 많았습니다. 특히 지속적으로 32 에서 64번씩 반복되는 커널 매트릭스 구조는 도저히 속도를 개선 하는데 쉽지 않은 부분이었습니다만, 그럼에도 만들어진 영상의 품질은 아마 현존하는 이미지 리사이즈 알고리즘 중에서는 최고봉이 아닐까 합니다. 아무래도 Lanczos3 와 같은 리사이즈 엔진은 인간의 눈으..
MinGW-W64 + glut32 예제 컴파일 하기 이전에 올린 MinGW-W64 에 기본으로 포함 되지 않는 glut32 를 만드는 방법을 다음으로, 간단히 OpenGL GLUT Example 페이지에 있는 blender.c 예제를 컴파일 해 보도록 하겠습니다. 먼저 아래의 압축 파일을 특정 위치에 푼 다음 (blender.c 소스 포함임) 해당 위치에 기존의 glut32.dll 을 복사 해 두고 make 를 해서 blender.exe 를 만들 수 있습니다. 단, 이 소스를 빌드 하기 이전엔 반드시 glut32 를 MSYS 에 make install 로 설치한 상태여야 합니다. Windows 의 정책 상 DLL 이 EXE 와 함께 있거나, Windows system 폴더 안에 복사가 되어 있어야 하므로, DLL 을 먼저 복사 해 오는 것을 고려해야 EX..
gcc/MinGW 6.x 부터 생긴 경고, misleading indentation gcc 5 버젼 부터 개발을 해 오던 librawprocessor 에서 눈치를 못 채고 있던 컴파일 경고가 뜨기 시작 한걸 이번에 알았습니다. 아직 major release 가 이루어 지지 않았기 때문에 신경을 덜 쓴 것도 있긴 합니다만, 갑자기 이 오류가 눈에 띈 것은 누군가의 계시인건지 ... 이 오류는 gcc 6 버젼 부터 강화된 여러 조건별 비교문에 따른 것으로 아래처럼 코드가 되어 있는 경우 발생 합니다. 이 오류는 GNU gcc 6 가이드 웹 페이지를 보면 나오는데,https://gcc.gnu.org/gcc-6/porting_to.html 아래 처럼 복합적인 비교문으로 포인터와 숫자로 넘어오는 값을 함께 비교 할 때에는 브레이스 {} 로 묶어 주어야 합니다. 그래서 아래처럼 코드를 변경 하면 ..
MinGW-W64, CPU 명령어 빌드에 맞춰 구동 테스트 하기. 만약 MinGW-W64 (또는 일반 MinGW) 에서 -mavx 또는 -march=corei7-avx 와 같은 빌드를 지시해서 만든 바이너리를 배포 하는데, 만약 이를 구동하는 PC 가 AVX 관련 명령어를 지원 하지 않는 환경에서 해당 바이너리를 구동하면? 이럴 경우 해당 바이너리는 그냥은 구동이 되나, AVX 관련 명령어가 실행 되는 위치에서 exception 을 뱉고, 해당 callstack 은 이전 pc 로 돌아가나, 여기서 문제가 발생 해서 함수 자체가 멍청이가 됩니다. 그래서 배포한 바이너리가 내가 빌드한 환경과 자동으로 구동 될 PC 에서의 환경과 맞는지를 간단히 테스트 할 수 있는 방법을 gcc 는 물론 MinGW 역시 지원 합니다. 이를 확인 하기 위해서는 먼저 #include 에 를 넣..
DirectX 2D 창 메뉴가 안뜨면 창을 옮기리. 부제: DirectX 2D 와 DSound 함께 쓰기 @ Windows7, 8.x 저번 주 에 있었던 DirectX 2D 를 좀 더 개선 하여 다음과 같이 구현 하였습니다.PNG 이미지를 가져와서 D2D 이미지(텍스쳐)로 사용 하도록 함.Dsound 로 WAV 파일을 가져와 출력 하도록함, 백그라운드와 클릭 시 나오는 소리 2가지. 상단 30px 안에서 마우스 왼쪽 클릭 해서 끌면 창 전체가 이동 하도록 함. 렌더링을 thread 로 하도록 함.약간의 UI 적인 요소. 별 대단한 기법이 들어 간 것은 아닙니다만, DirectX 2D 와 Dsound 겹쳐서 쓰는 예제들이 너무 없어서 직접 병합 해 보았습니다. 소스는 MinGW-W64 에서 빌드 되도록 되어 있으며, Code::Blocks 의 프로젝트를 사..
MinGW 용 DirectX 8 input Joystick(조이스틱) 예제 (src, lib 포함) MinGW 에서 DirectX 쓰기란 MinGW-W64 오면서 참 많이 편해진 편 입니다만, 여전히 MSDN 에서 제공하는 기본 예제 조차 컴파일이 안되는 비극을 보면 갈 길이 멀어 보이기도 합니다. 이번엔 Joystick 을 DInput 으로 처리 하려니 되는게 없어 Wine 용 DirectX8 header 와 library 등을 MSDN 에서 제공하는 예제 소스와 함께 빌드 할 수 있도록 만들었습니다. 현재 이 소스는 MinGW-W64 기준 최신버젼 (5.1) 에서 빌드가 가능하며, CodeBlocks 에서 project 파일만 열어서 빌드 후 테스트 가능 합니다. 소스는 아래 첨부파일로 붙임을 하겠으며, 원래 소스가 MSDN 공개에서 가져 왔으며, DirectX8 기준이긴 하나, 이쪽 부분은 발전이..
MinGW w64 로 ffmpeg 관련 링크 오류 ! minGW 의 버젼을 4.9.x 대로 올리면서 DirectX 와 기타 등등의 Windows 의 모든 걸 쓸 수 있도록 나오는 mingw-w64로 선택 했더니 ffmpeg 라이브러리에서 이런 오류가 나온다. unistd 에 포함되던 sleep, globalfree, glob, mkstamp 등이 기본 라이브러리에 없다는 말이다! 문제는 이게 4.9.x 버젼대에만 있는 것이 아니라 5.1 최신판도 마찬가지란 점... 해결책을 찾아야 하는데, 이걸 직접 내가 만들어 쓰는 것도 문제일 탠데 ... 방법을 찾는대로 이어서 포스팅 하도록 하겠다. 이 문제는 이전에 사용한 ffmpeg 을 새로운 minGW 로 빌드 하고, ffmpeg 에 다음 소스들을 수정 해야 한다. libavutil\file.c libavutil..
FLTK를 이용한 RTSP stream player (Win32) 이 프로그램은 현재 제작중인 엔진을 테스트 하기 위해 만든 프로그램이나, 일반적인 RTSP 환경에서도 쓸 수 있기 때문에 공개 합니다. 다만 이 프로그램은 PC 성능에 따라 rendering performance 가 차이가 날 수 있음을 먼저 밝히며, 오디오 기능이 빠져 있음을 알리는 바 입니다. 접속은 프로그램 실행시 바로 선택 할 수 있으며 기본으로 rtsp protocl 을 모두 지정해서 써 주셔야 합니다. 기본으로 테스트를 위해 만든 프로그램이다 보니 주소 오류에 대해서는 처리가 안되어 있음을 인지 해야 합니다. RTSP 서버에 붙게 되면 위 화면처럼 해당 스트림 크기로 자동으로 창이 조절 되면서 실행 됩니다. 아쉽게도 별도로 윈도우 크기를 조절할 수 있도록 만들어 지지는 않았습니다. 이 프로그램..