TMN H.263+ 디코더 소스를 VC++로 DLL로 만들었다
원 목적은 EVC++로 PocketPC용으로 만들었는데, 예상외로 VC++로도 그냥 만들어 졌다
어차피 공부용도로 만든거라 공개하는 하긴 하는데
소스야 TMN H.263+ 디코더 소스를 보면 될것 같아 그냥 DLL하고 샘플 프로그램만 올린다
아래 "회사서만든프로그램"코너 보면 SecuEyes Mobile이라는 제목하에 PocketPC용
프로그램이 있는데 여기서 이 DLL를 이용하기도 했다
그리고 이 DLL가지고는 상용 프로그램 만드는데는 무리가 많이 따른다
일단 내가 352x288이내의 영상만 디코딩 되게 해놓았고
YUV to RGB루틴이 C코드로 되어 있어서 CPU부하도 많이 잡아 먹게 된다
★ MTH263Decoder.pas
procedure MTH263_Load; cdecl;
procedure MTH263_Unload; cdecl;
procedure MTH263_Decoding(nImageFlip:Integer; pH263Data:PByte; nH263DataSize:Integer;
var pRGBData : Cardinal; var XSize:Integer; var YSize:Integer); cdecl;
DLL을 사용하기 위해서는 위 3개의 함수만 있으면 된다
MTH263_Load 함수는 어플리케이션이 시작할때 1번만 호출해주면 된다
MTH263_Unload 함수는 어플리케이션이 종료할때 1번만 호출해주면 된다
MTH263_Decoding함수는 실제 H.263+ 프레임을 디코딩하는 함수이다
입력 파라메터는 다음과 같다
nImageFlip : 이미지 상/하 뒤집기 여부
(음..지금생각하니 0이 뒤집기인지, 1이 뒤집기인지 기억이 안남)
pH263Data : H263데이터이다. PByte형이므로 포인터형으로 넘겨주면 된다
nH263DataSize : H263데이터의 크기이다. (단위는 바이트)
출력 파라메터는 다음과 같다
pRGBData : Cardinal (Cardinal형이므로 뭘 의미하시는지 아실 것이다
바로 RGB데이터가 있는 Address값을 반환한다
Pointer(pRGBData)하면 해당 메모리에 접근이 가능하다)
XSize, YSize : 디코딩된 이미지의 Width와 Height이다
★ 디코딩 예제
procedure Decoding( pData:PByte; nSize:Integer );
var
binfo : TBITMAPINFO;
DecodeAddress : Cardinal;
XSize, YSize : Integer;
begin
MTH263_Decoding( 0, pData, nSize, DecodeAddress, XSize, YSize);
binfo.bmiHeader.biSize := sizeof(TBitmapInfoHeader);
binfo.bmiHeader.biWidth := XSize;
binfo.bmiHeader.biHeight := YSize;
binfo.bmiHeader.biPlanes := 1;
binfo.bmiHeader.biBitCount := 24;
binfo.bmiHeader.biCompression := BI_RGB;
binfo.bmiHeader.biSizeImage := XSize * YSize * 3; // 24Bit Color
binfo.bmiHeader.biXPelsPerMeter := 0;
binfo.bmiHeader.biYPelsPerMeter := 0;
binfo.bmiHeader.biClrUsed := 0;
StretchDIBits(Canvas.Handle, 0, 0, XSize,YSize,
0, 0, XSize,YSize,
Pointer(DecodeAddress),
binfo,
DIB_RGB_COLORS,
SRCCOPY );
end;
★ ★ ★ 해당 DLL은 공부용도로만 사용해주시길 부탁드립니다
그리고 퍼 가실때는 출처라도 밝혀주세요 ^^
델/파/이/만/세
'Programming > MFC' 카테고리의 다른 글
[MFC] 다이얼로그에 아이콘이 없을때 (0) | 2007.08.01 |
---|---|
[MFC] 전역변수 선언하기 (0) | 2007.08.01 |
right(),left(),mid(),find() (0) | 2007.08.01 |
[MFC] 커서 바꾸기 (0) | 2007.08.01 |
[MFC] MSN스타일 스킨 에디트 박스 (0) | 2007.08.01 |