CAFE

VC++(API/MFC) Q&A

Cam에서 받은 영상을 avi로 저장???

작성자O~투|작성시간05.12.18|조회수415 목록 댓글 0
avi 만드는 함수

void CRealTimeDlg::m_MakeAvi()
{
AVISTREAMINFO strhdr;
PAVIFILE pfile;
PAVISTREAM ps, psCompressed;

AVICOMPRESSOPTIONS opts;
AVICOMPRESSOPTIONS FAR *aopts[1] = {&opts};
HRESULT hr;

pfile = NULL;
ps = NULL;
psCompressed = NULL;

int time_index = 1;

dnode *tmpnode;
tmpnode = new dnode;
// unsigned char *temp;

AVIFileInit();
hr = AVIFileOpen(&pfile, "out.avi", OF_WRITE|OF_CREATE, NULL);
if(hr != AVIERR_OK)
{
AfxMessageBox("avi file open Error!!");
exit(-1);
}
_fmemset(&strhdr, 0, sizeof(strhdr));
strhdr.fccType = streamtypeVIDEO;
strhdr.fccHandler = BI_RGB ;
strhdr.dwScale = 1;
strhdr.dwRate = 15;
strhdr.dwSuggestedBufferSize = m_Bm->bmiHeader.biSizeImage;
SetRect(&strhdr.rcFrame, 0,0,(int)m_Bm->bmiHeader.biWidth, (int)m_Bm->bmiHeader.biHeight);

hr = AVIFileCreateStream(pfile, &ps, &strhdr);
_fmemset(&opts, 0, sizeof(opts));
AVISaveOptions(NULL, 0,1, &ps, (LPAVICOMPRESSOPTIONS FAR *)&aopts);
AVIMakeCompressedStream(&psCompressed, ps, &opts, NULL);

*tmpnode = m_GetQueue();
while(tmpnode != tail)
{


time_index += 10;
AVIStreamSetFormat(psCompressed, time_index, m_Bm, sizeof(BITMAPINFO)+256*sizeof(RGBQUAD));
hr = AVIStreamWrite(psCompressed, time_index, 1, tmpnode->data, m_Bm->bmiHeader.biWidth*m_Bm->bmiHeader.biHeight, AVIIF_KEYFRAME, NULL, NULL);
VirtualFree(tmpnode, 0, MEM_RELEASE);

*tmpnode = m_GetQueue();
}
AVIFileExit();
}



이케 구현했습니다.

버튼을 누렀을때 큐를 사용하여 콜백함수에서 흑백으로 바꾸어 버퍼에 저장하고 큐에 집어 넣고 버튼을 다시 누르면 avi만드는 함수를 호출하였습니다..그런데 avi 파일을 만들기는 하는데 재생할려고 하면 비어있다고 재생이 안되네여..어케 해야 되는지좀 갈켜 주세여.??

부탁 드립니다..

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼