채팅 프로그램 - IOCP

프로젝트/이것저것.. 2010.04.11 01:01


IOCP로 구현..

피망채팅 따라했다.. 피망타자게임만들려고 했는데..
 
기존의 채팅창에서 채팅방까지 추가해서 구현했는데..

생각보다 더 까다로웠다.

방에 들어갔다가 나올때들의 이벤트를 다른 사람들에게 알리는 방법도 생각해줘야 해서 생각보다 패킷구분 해줄것도 많았고..

각 컨트롤들이 유기적으로 돌아가야되는데다가..  스레드도 돌리다 보니 죽는 경우도 다반사..

그래서 고칠것도 많은데.. 아 .. 이것도 완료지어야되는데.. 뭐 하나 제대로 끝낸게 없네..

이것도 핑계일지 모르겠지만.. 시간이 없다..

제작기간 일주일...
신고

'프로젝트 > 이것저것..' 카테고리의 다른 글

채팅 프로그램 - IOCP  (0) 2010.04.11

FFMPEG - MFC Encoder


소녀시대 뮤직비디오를 아이폰용으로 변환중..

처음에 컴파일하는데만 일주일.

처음엔 새버전만 갖다 모아서 하다가 시망... 죄다 버전을 맞춰줘야 했다.

첨엔 msys로 추가할 코덱 하나하나 기다리면서 하다보니 최종적으로 ffmpeg 컴파일하는데 1-2시간씩 걸려서 눈물이 났는데

나중엔 이골이 나다보니깐 msys창 4개-5개씩 띄워놓고 다시 컴파일..

암튼 이것저것 다 해서 결국 lib파일과 dll만드는데까지는 성공..

이미 컴파일된 소스코드도 있고 내가 컴파일 한게 잘못되서 써본적 있는데..

include해야 할 파일도 빠진 것도 있고.. 원하는 함수명도 다른것도 가끔 나오고 해서 그냥 내가 한거 갖다 쓰는게 젤 맘편했다.

암튼 여기까지도 토나왔지만.. 그 후부터가 진짜 헬 오브 지옥..

나와있는 샘플소스란 샘플소스는 다 분석해보고..

소스코드가지고 분석하기도 힘들었다.

여기저기 다 물어보니 sdk만 알면 하기 쉽다는데..

아.. 해보고 하는 소린지.. 내가 븅신인건지.. ㅜ ㅜ..

결국 한짓이 리눅스로 짜여진 ffmpeg.c를 무식하게 msvc에서 인코딩 되도록 만들기.

-i -vcodec .. 명령 인자들 전부 파헤쳐서 옵션 설정해주고..

이게 삽질인줄을 알면서도 나는 눈물나게 계속 삽질을 했다.. ㅜㅜ.. 하라면 해야됐으니깐..

나중에 나를 괴롭혔던 가장 큰 문제는 read_key.. 문제.. 원래 컴파일된 실행 파일에서는 q키를 누르면 종료가 되는건데..

첨엔 왜 죽는지 몰라서 심하게 헤맸다.. 디버깅 할땐 안죽는데 실행만 하면 죽어서..

콘솔환경에서 ffmpeg.c를 돌리다가 ffmpeg.cpp로 변환하고..

객체지향따위는 상관없지만 일단 파일이 여러개가 변환되게 돌려야되기 때문에..
 
static으로 지정된 변수들을 클래스로 만들어서 각종 변수와 함수들을 쑤셔넣고..

간신히 MFC로.. 이렇게 한달남짓이 걸렸다.

아직도 토가 나오려고 한다..

완성날짜가.. 3월초였는데..

아직은 가끔 에러나는 부분도 있고..

수정해야 할 부분도 심하게 많지만..

일단 되기는 된다는 것에 눈물이 난다..

아.. 빡시다 빡셔.. 해야될것도 많고 고칠것도 너무 많다.
신고

'프로젝트 > 동영상 / 필터' 카테고리의 다른 글

FFMPEG - MFC Encoder  (1) 2010.04.11
FFMPEG - MSVC에서 샘플 소스 돌리기  (0) 2010.02.17

FFMPEG - MSVC에서 샘플 소스 돌리기

1. snprintf
snprintf -> _snprintf
 로 고친다.. 콘솔창에 작업할건 아니라 삭제해도 되지만.. 일단 나중에 로그 띄울려면 어쩔수 업따..


2. av_rescale_q(sub->start_display_time, t, AV_TIME_BASE_Q);

괄호를 안쳤다고 블라블라..

함수가 잘못된줄알고 이리저리 찾아보다가 매개변수가 잘못된걸 알았다.

AVRational(1,AV_TIME_BASE) 하려다 구조체가 생성자 오버로딩이 안되서 그냥 인라인 함수로 고쳤다. 

인라인 함수로 고쳐버리장..

<전>
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}

<후>
inline AVRational AV_TIME_BASE_Q(void)
{
AVRational k;
k.num = 1;
k.den = AV_TIME_BASE;
return k;
}

함수 호출시 AV_TIME_BASE_Q 대신 AV_TIME_BASE_Q() 호출해서 썼다.

혹은 검색해보니 그냥 전역변수로 MyAVRational 하나 만들어서 쓰는 사람도 있던데 뭐가 나은지 모르겠다.


3. lrintf

이 함수를 찾을 수 없댄다. 
MSVC는 C99 을 안지켜서 그렇게 나온단다.. 걍 함수를 하나 만들어보자

#ifdef _M_X64 
#include <emmintrin.h> 
static INLINE long lrintf(float f) { 
        return _mm_cvtss_si32(_mm_load_ss(&f)); 



#else 

(int)floor() 로 하라는 사람도 잇는데.. 그냥 자기 맘대로.


4. log

오버로드된 함수 호출이 모호하단다..

log( (float) ..) 로 강제 형변환을 때려버린다.

아마도 6.0에선 발생하지 않고 상위 컴파일러에 발생할듯..


5. inttype.h, stdint.h
찾을 수가 없댄다 직접 찾아서 다운받는당..


6. #define

C를 사용하면
- If you are compiling C programs, "#define inline _inline" before including
  FFmpeg headers.

 C++을 사용할 시에(네임 맹글링때문인듯..)
- If you are compiling C++ programs, "extern "C" {}" around the FFmpeg include
  files.

 #define __STDC_CONSTANT_MACROS
 #define __STDC_LIMIT_MACROS
extern "C"{
#include <libavcodec/avcodec.h> ....
}

7. usleep(t);

아.. 리눅스용 함수인듯 싶다.

하다보니 짜증이 나서 리눅스 공부해서 gcc로 돌리는게 더 빠르겠다 싶었다.
 
후..

#define usleep(t)    Sleep((t+999)/1000)


8. 변수명 변경

frame_rate  ->    time_base.den;
frame_rate_base -> time_base.num;

ffmpeg이놈 시키들은 왜 계속 변수명을 변경하고 다니는지 모르겠다.

-- 추가 : 최근에 또 CODEC_TYPE_VIDEO를 AVMEDIA_TYPE_VIDEO로 바꿔서 헷갈리게 하질 않나.. 변환하는 메인 함수도 다 바꿔버리고.. 짜증이 한바가지..
신고

'프로젝트 > 동영상 / 필터' 카테고리의 다른 글

FFMPEG - MFC Encoder  (1) 2010.04.11
FFMPEG - MSVC에서 샘플 소스 돌리기  (0) 2010.02.17

Zip File Format Viewer




vs2008로 처음 만들어본 그래도 프로그램같이 생긴 프로그램.

다른 프로젝트를 하는동안 zip파일포맷 분석을 위해 만들었다.

압축된 파일의 이미지뷰어를 만들려고 얼마나 고생을 했던지..

이런거라도 만들려고 자료찾아보고 삼일 밤낮을 고생했다..

왼쪽위에 값이 local header, 아래쪽값이 central directory struct의 file header.

헤헤.. 죽겟다...

참고 : http://www.pkware.com/documents/casestudies/APPNOTE.TXT




신고

'프로젝트 > 코덱 / 압축 / 암호' 카테고리의 다른 글

Zip File Format Viewer  (0) 2009.08.18

메모리

프로젝트 2009.07.22 12:58
가상 메모리 할당

400KB사용 > 0-99(100개) 5KB씩 페이지 할당


Reserve
Commit
Write

내가 만든건데.. 소스코드 잊어먹엇다... 다시만들자니 귀찬..


신고

'프로젝트' 카테고리의 다른 글

메모리  (0) 2009.07.22


티스토리 툴바