LRESULT Frameserver::SessionFormat(LPARAM lParam, WPARAM stream) { FrameserverSession *fs = SessionLookup(lParam); DubSource *ds; long len; if (!fs) return VDSRVERR_BADSESSION; if (stream<0 || stream>2) return VDSRVERR_NOSTREAM; ds = stream ? (DubSource *)aSrc : (DubSource *)vSrc; if (!ds) return VDSRVERR_NOSTREAM; if (stream) { len = aSrc->getFormatLen(); if (len > fs->arena_size) return VDSRVERR_TOOBIG; memcpy(fs->arena, aSrc->getFormat(), len); } else { BITMAPINFOHEADER *bmih; len = sizeof(BITMAPINFOHEADER); if (len > fs->arena_size) return VDSRVERR_TOOBIG; memcpy(fs->arena, vSrc->getDecompressedFormat(), len); bmih = (BITMAPINFOHEADER *)fs->arena; // bmih->biSize = sizeof(BITMAPINFOHEADER); bmih->biWidth = filters.LastBitmap()->w; bmih->biHeight = filters.LastBitmap()->h; bmih->biPlanes = 1; bmih->biCompression = BI_RGB; bmih->biBitCount = 24; bmih->biSizeImage = ((bmih->biWidth*3+3)&-4)*abs(bmih->biHeight); bmih->biClrUsed = 0; bmih->biClrImportant= 0; } return len; }