1557{
1566
1569
1570
1572
1573
1576 ERR(
": not an AVI!\n");
1578 }
1579
1580
1585
1586
1591
1592 if (ck.
cksize !=
sizeof(MainAVIHdr)) {
1593 ERR(
": invalid size of %ld for MainAVIHeader!\n", ck.
cksize);
1595 }
1598
1599
1601 WARN(
"file contains %lu streams, but only supports %d -- change MAX_AVISTREAMS!\n", MainAVIHdr.dwStreams,
MAX_AVISTREAMS);
1603 }
1604
1605
1607 This->uMode &= ~MMIO_RWMODE;
1609 }
1610
1611
1613 This->fInfo.dwRate = MainAVIHdr.dwMicroSecPerFrame;
1614 This->fInfo.dwScale = 1000000;
1615 This->fInfo.dwMaxBytesPerSec = MainAVIHdr.dwMaxBytesPerSec;
1616 This->fInfo.dwFlags = MainAVIHdr.dwFlags;
1618 This->fInfo.dwLength = MainAVIHdr.dwTotalFrames;
1619 This->fInfo.dwStreams = MainAVIHdr.dwStreams;
1620 This->fInfo.dwSuggestedBufferSize = 0;
1621 This->fInfo.dwWidth = MainAVIHdr.dwWidth;
1622 This->fInfo.dwHeight = MainAVIHdr.dwHeight;
1625
1626
1629
1630
1631 for (nStream = 0; nStream <
This->fInfo.dwStreams; nStream++) {
1632
1635
1636
1640 if (pStream ==
NULL)
1643
1654
1657 break;
1662 break;
1663
1668
1671
1674
1675
1684 }
1689
1690
1693 }
1694 break;
1696 {
1701
1702 if (ck.
cksize >
sizeof(streamHdr))
1703 n =
sizeof(streamHdr);
1704
1707
1727
1728
1733 else
1734 wsprintfW(szType,
L"%4.4hs", (
char*)&streamHdr.fccType);
1735
1736
1738 for (
n = nStream; 0 <=
n;
n--) {
1739 if (
This->ppStreams[
n]->sInfo.fccHandler == streamHdr.fccType)
1741 }
1742
1744
1745
1748 }
1749 break;
1751 {
1755
1757 {
1760 }
1761
1764
1766 }
1767 break;
1770 break;
1771 default:
1772 WARN(
": found extra chunk 0x%08lX\n", ck.
ckid);
1776 };
1778 {
1784 }
1787 }
1788 } else {
1789
1793 }
1796 }
1797
1798
1802
1803
1809
1814
1815
1821 This->fInfo.dwFlags &= ~AVIFILEINFO_HASINDEX;
1822 }
1823
1824
1825
1827 for (nStream = 0; nStream <
This->fInfo.dwStreams; nStream++)
1828 This->ppStreams[nStream]->lLastFrame = -1;
1829
1831 ERR(
": Oops, can't seek back to 'movi' chunk!\n");
1833 }
1834
1835
1840
1841 if (nStream >
This->fInfo.dwStreams)
1843
1846 } else {
1848 WARN(
": file seems to be truncated!\n");
1849 if (nStream <= This->fInfo.dwStreams &&
1850 This->ppStreams[nStream]->sInfo.dwSampleSize > 0) {
1854 ck.
cksize &= ~(
This->ppStreams[nStream]->sInfo.dwSampleSize - 1);
1855
1858 }
1859 }
1860 }
1861 }
1862 }
1863 }
1864
1865 for (nStream = 0; nStream <
This->fInfo.dwStreams; nStream++)
1866 {
1867 DWORD sugbuf =
This->ppStreams[nStream]->sInfo.dwSuggestedBufferSize;
1868 if (
This->fInfo.dwSuggestedBufferSize < sugbuf)
1869 This->fInfo.dwSuggestedBufferSize = sugbuf;
1870 }
1871
1872
1874
1876}
static void AVIFILE_ConstructAVIStream(IAVIFileImpl *paf, DWORD nr, const AVISTREAMINFOW *asi)
static HRESULT AVIFILE_LoadIndex(const IAVIFileImpl *This, DWORD size, DWORD offset)
static HRESULT AVIFILE_AddFrame(IAVIStreamImpl *This, DWORD ckid, DWORD size, DWORD offset, DWORD flags)
LPCWSTR AVIFILE_BasenameW(LPCWSTR szFileName)
#define DIBWIDTHBYTES(bi)
#define MultiByteToWideChar
MMRESULT WINAPI mmioAscend(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags)
LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, INT iOrigin)
MMRESULT WINAPI mmioDescend(HMMIO hmmio, LPMMCKINFO lpck, const MMCKINFO *lpckParent, UINT uFlags)
LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch)
GLuint GLuint GLsizei count
#define mmioFOURCC(c0, c1, c2, c3)
#define listtypeSTREAMHEADER
#define AVIERR_UNSUPPORTED
#define listtypeAVIHEADER
#define ckidSTREAMHANDLERDATA
#define AVIFILEINFO_HASINDEX
#define AVIFILEINFO_COPYRIGHTED
#define StreamFromFOURCC(fcc)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)