下面是我的写avi文件有程序。。到了movi块的时候不知道该如何写了。。还有视频数据写到哪个地方呀?多谢知道的朋友了! HMMIO hFile;
MMCKINFO mmckinfo;
MMCKINFO cihdrl,ciavih,cistrl,cistrh,cistrf; MMRESULT rc;
MainAVIHeader mainheader;
AVIStreamHeader mainstreamh;
BITMAPINFO bitmapif;
LONG n; if ((hFile = mmioOpen("C:\\SAMPLE1.avi", NULL, MMIO_CREATE | MMIO_WRITE )) == NULL)
{
return ;
}
::ZeroMemory( &mmckinfo, sizeof(MMCKINFO) );
mmioSeek(hFile, 0L, SEEK_SET);
mmckinfo.fccType = mmioFOURCC('A', 'V', 'I', ' ');
//mmckinfo.
mmioCreateChunk(hFile,&mmckinfo,MMIO_CREATERIFF); if( rc != MMSYSERR_NOERROR )
return ; ::ZeroMemory( &cihdrl, sizeof(MMCKINFO));
cihdrl.ckid = mmioFOURCC( 'h', 'd', 'r', 'l' );
//ciSub.cksize = sizeof(MainAVIHeader);
rc = ::mmioCreateChunk( hFile, &cihdrl, MMIO_CREATELIST ); ::ZeroMemory( &ciavih, sizeof(MMCKINFO));
ciavih.ckid = mmioFOURCC( 'a', 'v', 'i', 'h' );
ciavih.cksize = sizeof(MainAVIHeader);
rc = ::mmioCreateChunk( hFile, &ciavih, 0 );
if( rc != MMSYSERR_NOERROR )
return ;
mainheader.dwMicroSecPerFrame = 2938496;
mainheader.dwMaxBytesPerSec = 1;
mainheader.dwPaddingGranularity = 0;
mainheader.dwFlags = AVIF_HASINDEX | AVIF_TRUSTCKTYPE;
mainheader.dwTotalFrames = 150;//2192;
mainheader.dwInitialFrames = 0;
mainheader.dwStreams = 1;
mainheader.dwSuggestedBufferSize = 120000;
mainheader.dwWidth = m_taginfoheader->biWidth;;
mainheader.dwHeight = m_taginfoheader->biHeight;
memset(mainheader.dwReserved,0,sizeof(mainheader.dwReserved)); //= {};
n = mmioWrite( hFile, (HPSTR)&mainheader, sizeof(MainAVIHeader) );
if( n != sizeof(MainAVIHeader) )
{
mmioClose( hFile, 0 );
return ;
}
rc = ::mmioAscend( hFile, &ciavih, 0 );
::ZeroMemory( &cistrl, sizeof(MMCKINFO));
cistrl.ckid = mmioFOURCC( 's', 't', 'r', 'l' );
rc = mmioCreateChunk( hFile, &cistrl, MMIO_CREATELIST );
//cistrh
if (rc != MMSYSERR_NOERROR )
return ; ::ZeroMemory( &cistrh, sizeof(MMCKINFO));
cistrh.ckid = mmioFOURCC( 's', 't', 'r', 'h' );
cistrh.cksize = sizeof(AVIStreamHeader);
rc = mmioCreateChunk(hFile, &cistrh,0);
mainstreamh.fccType = FCC('vids');
mainstreamh.fccHandler = FCC('DIVX');
mainstreamh.dwFlags = 0;
mainstreamh.wPriority = 0;
mainstreamh.wLanguage = 0;
mainstreamh.dwInitialFrames = 0;
mainstreamh.dwScale = 33333 ;
mainstreamh.dwRate = 1000000;
mainstreamh.dwStart = 0;
mainstreamh.dwLength = 150;
mainstreamh.dwSuggestedBufferSize = 120000;
mainstreamh.dwQuality = 0;
mainstreamh.dwSampleSize = 0;
mainstreamh.rcFrame.left = 0;
mainstreamh.rcFrame.top = 0;
mainstreamh.rcFrame.right = m_taginfoheader->biWidth;
mainstreamh.rcFrame.bottom = m_taginfoheader->biHeight; n = mmioWrite( hFile, (HPSTR)&mainstreamh, sizeof(AVIStreamHeader) );
if( n != sizeof(AVIStreamHeader) )
{
mmioClose( hFile, 0 );
return ;
}
rc = ::mmioAscend( hFile, &cistrh, 0 ); ::ZeroMemory( &cistrf, sizeof(MMCKINFO));
cistrf.ckid = mmioFOURCC( 's', 't', 'r', 'f' );
cistrf.cksize = sizeof(BITMAPINFO);
rc = mmioCreateChunk(hFile, &cistrf,0);
ZeroMemory(&bitmapif,sizeof(BITMAPINFO));
bitmapif.bmiColors = GetBitmapPalette(m_pVih);
CopyMemory(&(bitmapif.bmiHeader, m_pInput->CurrentMediaType().Format(),
m_pInput->CurrentMediaType().FormatLength()); n = mmioWrite( hFile, (HPSTR)&bitmapif, sizeof(BITMAPINFO));
if( n != sizeof(BITMAPINFO) )
{
mmioClose( hFile, 0 );
return ;
}
rc = ::mmioAscend( hFile, &cistrf, 0 );
rc = ::mmioAscend( hFile, &cistrl, 0 );
rc = ::mmioAscend( hFile, &cihdrl, 0 );下面该写movi块的了。。谢谢了
MMCKINFO mmckinfo;
MMCKINFO cihdrl,ciavih,cistrl,cistrh,cistrf; MMRESULT rc;
MainAVIHeader mainheader;
AVIStreamHeader mainstreamh;
BITMAPINFO bitmapif;
LONG n; if ((hFile = mmioOpen("C:\\SAMPLE1.avi", NULL, MMIO_CREATE | MMIO_WRITE )) == NULL)
{
return ;
}
::ZeroMemory( &mmckinfo, sizeof(MMCKINFO) );
mmioSeek(hFile, 0L, SEEK_SET);
mmckinfo.fccType = mmioFOURCC('A', 'V', 'I', ' ');
//mmckinfo.
mmioCreateChunk(hFile,&mmckinfo,MMIO_CREATERIFF); if( rc != MMSYSERR_NOERROR )
return ; ::ZeroMemory( &cihdrl, sizeof(MMCKINFO));
cihdrl.ckid = mmioFOURCC( 'h', 'd', 'r', 'l' );
//ciSub.cksize = sizeof(MainAVIHeader);
rc = ::mmioCreateChunk( hFile, &cihdrl, MMIO_CREATELIST ); ::ZeroMemory( &ciavih, sizeof(MMCKINFO));
ciavih.ckid = mmioFOURCC( 'a', 'v', 'i', 'h' );
ciavih.cksize = sizeof(MainAVIHeader);
rc = ::mmioCreateChunk( hFile, &ciavih, 0 );
if( rc != MMSYSERR_NOERROR )
return ;
mainheader.dwMicroSecPerFrame = 2938496;
mainheader.dwMaxBytesPerSec = 1;
mainheader.dwPaddingGranularity = 0;
mainheader.dwFlags = AVIF_HASINDEX | AVIF_TRUSTCKTYPE;
mainheader.dwTotalFrames = 150;//2192;
mainheader.dwInitialFrames = 0;
mainheader.dwStreams = 1;
mainheader.dwSuggestedBufferSize = 120000;
mainheader.dwWidth = m_taginfoheader->biWidth;;
mainheader.dwHeight = m_taginfoheader->biHeight;
memset(mainheader.dwReserved,0,sizeof(mainheader.dwReserved)); //= {};
n = mmioWrite( hFile, (HPSTR)&mainheader, sizeof(MainAVIHeader) );
if( n != sizeof(MainAVIHeader) )
{
mmioClose( hFile, 0 );
return ;
}
rc = ::mmioAscend( hFile, &ciavih, 0 );
::ZeroMemory( &cistrl, sizeof(MMCKINFO));
cistrl.ckid = mmioFOURCC( 's', 't', 'r', 'l' );
rc = mmioCreateChunk( hFile, &cistrl, MMIO_CREATELIST );
//cistrh
if (rc != MMSYSERR_NOERROR )
return ; ::ZeroMemory( &cistrh, sizeof(MMCKINFO));
cistrh.ckid = mmioFOURCC( 's', 't', 'r', 'h' );
cistrh.cksize = sizeof(AVIStreamHeader);
rc = mmioCreateChunk(hFile, &cistrh,0);
mainstreamh.fccType = FCC('vids');
mainstreamh.fccHandler = FCC('DIVX');
mainstreamh.dwFlags = 0;
mainstreamh.wPriority = 0;
mainstreamh.wLanguage = 0;
mainstreamh.dwInitialFrames = 0;
mainstreamh.dwScale = 33333 ;
mainstreamh.dwRate = 1000000;
mainstreamh.dwStart = 0;
mainstreamh.dwLength = 150;
mainstreamh.dwSuggestedBufferSize = 120000;
mainstreamh.dwQuality = 0;
mainstreamh.dwSampleSize = 0;
mainstreamh.rcFrame.left = 0;
mainstreamh.rcFrame.top = 0;
mainstreamh.rcFrame.right = m_taginfoheader->biWidth;
mainstreamh.rcFrame.bottom = m_taginfoheader->biHeight; n = mmioWrite( hFile, (HPSTR)&mainstreamh, sizeof(AVIStreamHeader) );
if( n != sizeof(AVIStreamHeader) )
{
mmioClose( hFile, 0 );
return ;
}
rc = ::mmioAscend( hFile, &cistrh, 0 ); ::ZeroMemory( &cistrf, sizeof(MMCKINFO));
cistrf.ckid = mmioFOURCC( 's', 't', 'r', 'f' );
cistrf.cksize = sizeof(BITMAPINFO);
rc = mmioCreateChunk(hFile, &cistrf,0);
ZeroMemory(&bitmapif,sizeof(BITMAPINFO));
bitmapif.bmiColors = GetBitmapPalette(m_pVih);
CopyMemory(&(bitmapif.bmiHeader, m_pInput->CurrentMediaType().Format(),
m_pInput->CurrentMediaType().FormatLength()); n = mmioWrite( hFile, (HPSTR)&bitmapif, sizeof(BITMAPINFO));
if( n != sizeof(BITMAPINFO) )
{
mmioClose( hFile, 0 );
return ;
}
rc = ::mmioAscend( hFile, &cistrf, 0 );
rc = ::mmioAscend( hFile, &cistrl, 0 );
rc = ::mmioAscend( hFile, &cihdrl, 0 );下面该写movi块的了。。谢谢了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货