#include#include #include #include #include struct VideoSize2 { const char * mLabel; int mWidth, mHeight; }; struct VideoSize2 toto[] = { {"QVGA", 320, 240}, {"VCD NTSC", 352, 240}, {"VCD PAL", 352, 288}, {"VGA", 640, 480}, {"DVD NTSC", 720, 480}, {"DVD PAL", 720, 576}, {"SVGA", 800, 600}, {"XGA", 1024, 768}, {"WXGA", 1280, 720}, {"SXGA", 1280, 1024}, {"UXGA", 1600, 1200}, {"HD 1080", 1920, 1080}, {"WUXGA", 1920, 1200}, {NULL, 0, 0}, }; //--- void test_func() { AVIFileInit(); COMPVARS _pc; _pc.cbSize = sizeof(COMPVARS); ICCompressorChoose( NULL, ICMF_CHOOSE_ALLCOMPRESSORS, NULL, NULL, &_pc, "Select Compressor"); for (int i=0; toto[i].mLabel; i++) { int nwidth = toto[i].mWidth; int nheight = toto[i].mHeight; // intput format BITMAPINFO bi; ZeroMemory(&bi, sizeof(bi)); BITMAPINFOHEADER & bih = bi.bmiHeader; memset(&bih, 0, sizeof(bih)); bih.biSize = sizeof(bih); bih.biWidth = nwidth; bih.biHeight = nheight; bih.biPlanes = 1; bih.biBitCount = 24; bih.biCompression=BI_RGB; bih.biSizeImage = ((bih.biWidth*bih.biBitCount/8+3)&0xFFFFFFFC)*bih.biHeight; bih.biXPelsPerMeter=10000; bih.biYPelsPerMeter=10000; bih.biClrUsed=0; bih.biClrImportant=0; // output format BITMAPINFO bo; ZeroMemory(&bo, sizeof(bo)); BITMAPINFOHEADER & boh = bo.bmiHeader; memset(&boh, 0, sizeof(boh)); boh.biSize = sizeof(boh); boh.biWidth = nwidth; boh.biHeight = nheight; boh.biPlanes = 1; boh.biBitCount = 24; boh.biCompression = 808802372; // notice here that value 'BI_RLE8' will make ICCompressQuery fail boh.biSizeImage = ((boh.biWidth*boh.biBitCount/8+3)&0xFFFFFFFC)*boh.biHeight; boh.biXPelsPerMeter=0; boh.biYPelsPerMeter=0; boh.biClrUsed=0; boh.biClrImportant=0; LRESULT hr = ICCompressQuery(_pc.hic, &bi, &bo); bool okFormat = false; if (hr == ICERR_OK) okFormat = true; int toto = 0; } } int _tmain(int argc, _TCHAR* argv[]) { test_func(); return 0; }