YUVPlayer 업데이트…

사실 저나 제 주위 사람들 말고는 쓰는 사람이 거의 없는거 같긴 하지만 하여튼 메모리 릭을 일으키는 몇 가지 버그를 잡았습니다.

  1. ::GetDC(hWnd) 후 ::ReleaseDC(hWnd,dc) 를 호출 하지 않아서 생기는 메모리 릭
  2. gdTexImage2D 를 반복 호출해서 생기게 되는 메모리 릭

정확하게 설명하면 위와 같구요. ::GetDC 로 받아온 Device Context 는 “꼭” ::ReleaseDC 를 호출해줘야 한다는 msdn 님의 가르침에 따라, 약간의 코드를 추가해줬습니다.
또한 gdTexImage2D 를 반복해서 호출하면 이전 텍스쳐 데이타가 사용하던 메모리 영역은 해제가 될 줄 알았는데, 실제로는 그렇지가 않네요. 텍스쳐 사이즈가 달라지는 경우엔 glDestroyTexture 후 glGenTexture, glBindTexture, glTexImage2D 를 차례로 호출해줘야 하고, 사이즈가 달라질 필요가 없는 경우라면 gdTexSubImage2D 를 사용하면 된답니다. 어려운 openGL 세상이에요.
자세한 수정 사항은 제 trac 페이지에서 확인하심 될 듯~
http://trac.unfix.net/browser/yuvplayer/win/yuvplayer/OpenGLView.cpp
p.s) trac 이 ajax 를 활용하도록 업데이트 되었네요.

소스 공개: yuvplayer

예전 포스트에서 얘기한 적이 있던 제 yuvplayer 를 svn repository 에 추가했습니다. 관심이 있으신 분은 아래 링크를 따라가보시면 되겠네요.
http://trac.unfix.net/browser/yuvplayer
사실 한 달쯤 전에 올려뒀는데, 제 svn repository 는 저조차 잘 가보질 않기 때문에 아무도 몰랐을거라 생각합니다;; 흐흣~ Mac 용 버젼도 있는데, 이건 아직 넣고 싶은 기능들 중 구현을 안한 것들이 많아서 추가해두지 않았습니다.
visual studio 2005 기반으로 작업하다보니 프로젝트 파일등이 모두 vs2005 용이네요. 하여튼 uyuv, yuv444, yuv422, yuv420 등으로 된 파일을 플레이할 수 있고, 마우스 오른쪽 버튼을 누른 후 현재 프레임을 다른 포멧으로 저장하는 것도 가능합니다.
관련 포스트:
mac 버젼 – http://b.mytears.org/2007/06/541
windows 버젼 – http://b.mytears.org/2007/06/544

YUVplayer for MS Windows

지난 이틀간 작업한 내 YUVPlayer for windows~! MFC + OpenGL 기반으로 작성되었고, 정말 아무 문제 없이 사용할 수 있을만큼 완성도 높게 작업해보기는 처음이 아닐까 싶다. (CUI 기반으로는 공개를 하고 있지는 않았지만 혼자 유용하게 쓰는게 몇 가지 있는데… GUI 기반으로는 정말 처음인 것 같다.)
단축키를 통해 모든 액션을 취할 수 있고, 드래그앤 드롭을 통한 파일 오픈 또한 가능하다. 게다가 _lseeki64 같이 64bit offset 을 사용하는 시스템 콜을 사용하고 있기 때문에 2GB 를 넘어가는 파일들도 문제 없이 플레이가 가능하다. (31GB 짜리 파일도 문제 없이 플레이가 가능한 것을 확인했음.)

위 스크린 샷은 기본적인 플레이 화면! CBitmapButton 을 통해 이쁜 플레이어 버튼을 만들었고, 여러가지 편법을 통해 –;; 사이즈가 조절되더라도 저 레이아웃이 그대로 유지되도록 만들었다.
Continue reading YUVplayer for MS Windows

내 첫 cocoa application: yuv player

저번 주에 개인적으로 de-interlacing 관련된 발표를 준비하느라 논문에 있는 de-interlacing 기법들을 구현해서 실험을 했었는데, 맥에서 돌아가는 yuv player 를 못찾는 바람에 결과는 윈도우로 옮겨서 확인해야하는 불편이 있었다.
랩에 이미 충분히 쓸만한 yuvplayer 가 있기는 하지만 윈도우 전용이고, 내가 예전 신입생 과제를 하면서 만들었던 플레이어 역시 윈도우용;; 뭐 하튼 플레이어를 구현하는데 필요한 기반 테크닉은 다 갖추고 있었기 때문에 MFC + OpenGL 로 구현해봤던 것을 똑같이 Cocoa+OpenGL 로 구현해봤다.

메뉴를 이용해서 size 와 color format, frame rate 등을 준비할 수 있도록 만들었는데, size 와 frame rate 를 사용자가 직접 입력하는 것은 귀찮은 관계로 나중에 -_-;;
뭐 하튼 Zoom 하고 Drag And Drop 과 관련된 코드만 추가하고 나면 내가 구현하고 싶었던 모든 기능이 다 들어가는 거 같다. (Zoom 이야 glPixelZoom 을 사용하면 한방에 오케이니 흐흣)
XCode + Interface Builder 를 이용한 첫 결과물인데, 굉장히 오래전에 이미 나와있던 프로그래밍 인터페이스인데도 불구하고 굉장히 편리하게 프로그래밍이 가능해서 감탄을 해버렸다. 물론 MS 진영도 Visual Studio 2005 로 오면서 편리한 기능들이 꽤 많이 추가되긴 했지만, GUI Application 을 만들기 위한 IDE 로는 XCode + 인터페이스 빌더 쪽이 한 수 위인 듯…
MFC 나 Cocoa 나 진입 장벽이 꽤 높지만… 기본적인 테크닉을 익히고 나면 굉장히 강력하게 사용이 가능한 것 같다. 그리고 C 에 능숙하다면 다른 언어를 접하는 데도 그리 큰 어려움을 느끼지 않는 것 같다. 학부 시절 C++, Java 등에 눈길을 뺐기지 않고 주력 언어로 C 를 선택했던 게 탁월한 선택이었던 듯…
p.s) 코드를 좀 정리하고 sourceforge 등에 자리를 틀어볼까 싶네요. 🙂

AVR

실험(4) 과목 때문에 스트레스가 여간이 아닙니다. 중간고사 평균이 8점이었고, 중간 + 기말 + Report 점수를 합산한게 70점을 넘지 않으면 F 를 주시겠다는군요. 문제는 이 과목이 전공 필수이고, 전 요번학기가 마지막이어야만 한다는 거죠.
하여튼 그런 이유로 추가 점수를 받기 위해 오랫만에 AVR 을 만져야 했습니다. AVR 은 ATMEL 에서 만든 MCU 로 ISP 인터페이스를 갖추고 있어서 복잡한 롬라이터를 만들지 않고도 간단하게 프로그램을 구울 수 있습니다.
빵판에 구성한 AVR ISP
실험(4) 시간에 atmega128 과 관련 보드 / ISP 가 지급이 되었지만, 뗌질을 하다가 칩을 태워먹은건지 아님 어딘가 뗌질이 잘못된건지 하여튼 작동하지를 않더군요. 어쩔 수 없이 예전에 사두었던 AT90S2313 을 이용하기로 마음을 먹고 위의 사진처럼 빵판에 회로를 구성했습니다. 보기엔 좀 그렇지만 하여튼 작동은 잘 하는군요. 후훗
AVR 을 이용한 자판기 에뮬레이터
결국 두 시간동안 열혈 뗌질을 한 끝에 위와 같은 최종 결과물을 만들어냈습니다. I/O 가 모잘라서 500원 투입 버튼은 만들지 않았지만, 그걸 제외하면 구현해야 하는 스펙은 모조리 구현해놓았습니다.
모처럼 오랫만에 mcu 를 가지고 놀았더니 재밌네요. 필받은 김에 아래와 같은걸 추가로 뗌질해봤습니다.
이 회로는 뭘까요~?
예전에 홍익대학교 전자전기공학부 학회인 유레카에서 유행했던 겁니다 😉 축제 때 팔기도 했던걸로 알고 있는데… 뭐 하여튼 L.E.D 에 저항연결하기도 귀찮고, 전원을 따로 입력받기도 귀찮고 해서 3V 로 동작하게 만들어버렸습니다.
아래 사진은 밤에 불을 다 꺼놓고 노출을 1s 로 해놓은 뒤 위 회로를 살짝 흔들어준 모습입니다. 메시지를 길게 넣을 수도 있지만 그 노가다가 귀찮아서 -_-;
잔상으로 그려진 스마일 마크
위 회로를 업그레이드 해서 ^_^, -_-, T.T, 하트 등을 그릴 수 있도록 업데이트 했습니다. 결과물을 보시려면 아래 url 로 😉
http://mytears.org/tmp/dir/?path=./avr&N
p.s) 참고로 AVR 을 굽기 위해선 MISO / MOSI / SCK / RESET (ISP 에서 입력을 받습니다.), VCC, GND 그리고 XTAL1, XTAL2 (크리스탈) 정도만 연결해주면 됩니다. 예전에 VCC, GND 등은 패러랠 포트에서 들어오는 건 줄 알고 삽질한 기억이 나서;;;

wordpress: korean trackback!

어제 까날옹이 egloos 에서 가볍게 트랙백을 날려주셨는데, egloos 에선 trackback 인코딩을 euc-kr 을 사용하는지 트랙백이 깨져서 와버렸네요. 혹시나 관련된 plugin 을 찾아봤지만 plugin 으로는 아직 존재하지 않는 듯 하고, 관련해서 wind-like 님이 문제를 해결한 버젼의 wp-trackback.php 파일을 배포하시더군요.
하지만 wordpress 기본 파일을 수정할 경우 업데이트를 할 때마다 다시 수정해줘야 하는 번거로움이 있기 때문에 그냥 plugin 을 작성해버렸습니다. 막상 plugin 을 작성하려고 보니 trackback_post 에 대한 action 은 글이 삽입된 이후에 실행되도록 되어 있더군요. 역시 그냥 wp-trackback.php 를 수정해서 사용해야 하는건가 하는 생각이 들었지만, 뭐 정도가 아니면 돌아가면 되는 법!! 이미 데이타베이스에 입력완료된 trackback 을 update 하도록 하는 hack 에 가까운 플러그인이 만들어져버렸습니다. -_-v
혹시나 필요한 분은 아래 url 에서 받아서 사용하시면 되겠습니다.
http://mytears.org/resources/distfiles/wp_korean_trrackback-1.0.zip
p.s) wind-like 님이 수정하신 버젼과는 다르게 ‘트랙백을 받는 경우’ 하고만 관련이 있습니다.

php: mytrz-Gallery

개인적인 스크린샷을 올려놓거나 정모 사진등을 쉽게 업데이트 하기 위해 만들어 놓았던 갤러리를 공개해볼까 합니다 🙂 워낙 simple 하기 때문에 이름을 Simple Gallery 라고 지을까 하는데 가져다가 쓰는 사람이 있을지는 모르겠군요 –;
사용법도 정말 심플합니다. 이미지 디렉토리에 ftp 등을 이용해서 파일을 올려놓기만 하면 자동으로 thumbnail 이 생성되고 리스트가 갱신됩니다. 라이센스는 예전 Directory Viewer 와 마찬가지로 BSD License 가 될 듯 싶네요

데모:
http://mytears.org/resources/etc/screenshot/linux/
개발버젼:
http://trac.unfix.net/browser/mytrz-gallery
라이센스: BSD License 예정

아직은 제대로 동작하지 않습니다. 현재 계획 중인 것들은

  1. smary 를 이용한 템플릿 지원
  2. image resizer 를 gd 와 ImageMagick 등 중에 선택가능

뭐 대강 저 정도입니다. 혹시나 쓰는 사람들이 하나 둘 생기고… 개선 요구가 있음 반영하도록 노력할 계획입니다 😉
덧: 이상하게 이건 손이 안가네요.
Change Log:
2006/08/30
1. 개인 repository 를 통합하면서 svn 경로가 변경됨
2. 웹에서 svn 을 구경하기 위한 툴을 trac 으로 변경
3. 프로젝트 이름은 mytrz-gallery 로 변경
2006/01/06
1. 개인적으로 사용하던 걸 코드를 조금 정리하고 svn 에 import

php: mytrz-dviewer

예전에 수정해서 이쁘게 만들어 사용하고 있는 mod_autoindex 의 경우에는 아파치의 모듈이기 때문에 관리가 활성화 시켜주지 않으면 사용할 수 없는 단점이 있어서… 누군가에게 권하기도 그렇고… 수정하기도 매우 어려웠습니다…
심심하던 차에 아는 사람 부탁 겸… 해서 directory viewer 를 php 로 다시 작성했습니다… template 엔진으로 template_ 만 써보다가 smarty 를 처음 써봤는데 template_ 이 좀 더 쓰기 쉬운 듯 하기는 하지만… smarty 도 그런데로 쓸만한 것 같습니다…
[php:realpath] 란 함수를 사용해서 내가 지정해놓은 디렉토리 루트 밖으로는 나갈 수 없도록 해놓았고 수많은 버그가 있겠지만… 하튼 동작은 합니다…

데모:
http://mytears.org/tmp/dir/
다운로드 url:
http://mytears.org/resources/distfiles/directory-viewer-1.1.1.tar.gz
개발버젼:
http://trac.unfix.net/browser/mytrz-dviewer
라이센스: BSD License

참고로 템플릿 엔진은 smarty 를 쓰고 있는데, 제 서버에는 smarty 가 /usr/lib/php 밑에 설치되어 있기 때문에 따로 더 필요가 없었는데… 서버에 smarty 가 이미 깔려있지 않은 분들은 smarty 를 받아다가 풀어주는 센스가 필요합니다…
p.s) 혹시나 가져다가 새로운 디자인으로 고치신 분이 계시면 skin 관련해서 feedback 좀 부탁드리겠습니다 🙂
Change Log:
2006/8/29
1. 개인 Repository 를 하나로 통합하면서 svn 경로가 수정됨
2. 웹에서 svn 을 둘러보기 위한 툴을 trac 으로 변경
3. 프로젝트 이름을 mytrz-dviewer 로 변경
2006/06/27
1. fancy size bug 수정
2. 1.1.1 버젼 릴리즈
2005/08/24
1. 스킨에서 경로도 표시가능하게 수정
2. taeyoung 스킨 추가
3. web_basedir 에서는 Parent Direcory 링크를 보여주지 않게 고침
4. 1.1 버젼 릴리즈
2005/08/17
1. kirrie 님의 스킨 추가
2. kukie 스킨 업데이트 (I.E 호환성이 더 좋아짐)
2005/08/13
1. Filename / Size / Modification Time 으로 역순 정렬이 가능해짐 (내림차순)
2. 설정 가능한 변수들을 config.php 로 빼냄
3. 숨긴 파일( 파일 이름이 “.” 으로 시작하는 파일) 을 보여줄지 말지 설정 가능해짐
4. BSD License 로 정하고 소스에 라이센스를 명시
5. Encoding 도 설정가능하도록 수정
6. 1.0 버젼 릴리즈
2005/08/12
1. XHTML 표준에 맞지 않는 부분들을 수정 validation 을 통과
2005/08/09
1. template_c 디렉토리의 퍼미션을 바꿔주는 인스톨용 스크립트 추가 (정말 퍼미션만 딱 바꿔줌 -_-);;
2005/08/08
1. 숨긴 파일 (파일 이름이 “.” 으로 시작하는 파일) 을 보여주지 않도록 함
2005/08/04
1. Filename / Size / Modification Time 으로 정렬이 가능해짐 (오름차순만 지원)
2. Skin 기능이 추가됨
3. svn repository 에 import 하고 누구든지 받을 수 있도록 공개