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 파일을 만들기는 하는데 재생할려고 하면 비어있다고 재생이 안되네여..어케 해야 되는지좀 갈켜 주세여.??
부탁 드립니다..
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 파일을 만들기는 하는데 재생할려고 하면 비어있다고 재생이 안되네여..어케 해야 되는지좀 갈켜 주세여.??
부탁 드립니다..
다음검색