vwf - Vioso warp/blend dataWritten by Paul BourkeJune 2018 Example file for a 4096x2160 projector, one of two for a twin projector dome system: example.vwf.gz
VWF files from Vioso describe warping and blending for their range of multiple projector solutions where, for example, images need to be transformed (warped) and blended together with neighbouring projections. In their most general form they can contain multiple warp meshes and blend images, in the discussion here the minimum will be presented, namely, one warp mesh and one blend image. The general form of the file is as follows, each header section contains information (magic string) of the type of block and information on where the start and what the length of the data is.
typedef struct { char magicNumber[4]; unsigned int numBlocks; // szhdr unsigned int offs; // flags unsigned int reserved; // hMonitor } VWB_WarpSetFileHeader; typedef struct { char magicNumber[4]; unsigned int szHdr; unsigned int flags; unsigned int hMonitor; unsigned int size; int width; int height; float white[4]; float black[4]; float reserved[16]; char name[256]; } VWB_WarpFileHeader; typedef struct { char magicNumber[4]; unsigned int szHdr; unsigned int flags; unsigned int hMonitor; unsigned int size; int width; int height; float white[4]; float black[4]; float splitRowIndex; float splitColumnIndex; float splitRows; float splitColumns; float splitTotalWidth; float splitTotalHeight; float typeCalib; float offsetX; float offsetY; float blackOffset; float blackGain; float blackCut; float compoundID; float vReserved[3]; char name[256]; // To the end of VWB_WarpFileHeader char ident[4096]; unsigned long tmIdent; float vCntDispPx[7]; float vPartialCnt[9]; char primName[256]; float vReserved2[16]; unsigned short displayID[256]; char hostname[256]; } VWB_WarpFileHeader4; The warp record for a straightforward lookup consists of two floating point values (u,v) for each pixel in the destination (warped) image, the (u,v) relate obviously to the input image. As an example the following is visualised with u mapped to red and v mapped to green.
typedef struct { float x; float y; float z; float w; } VWB_WarpRecord; The blend data is simply a BMP file, the grey level being a multiplicative factor on the intensity at the corresponding pixel. Both the warp and blend data blocks are at the resolution of the output images, typically the resolution of the data projector.
typedef struct { unsigned short int type; // Magic identifier unsigned int size; // File size in bytes unsigned short int reserved1; unsigned short int reserved2; unsigned int offset; // Offset to image data, bytes } BMPHEADER; typedef struct { unsigned int size; // Header size in bytes int width,height; // Width and height of image unsigned short planes; // Number of colour planes unsigned short bits; // Bits per pixel unsigned int compression; // Compression type unsigned int imagesize; // Image size in bytes int xresolution; // Pixels per meter, x int yresolution; // Pixels per meter, y unsigned int ncolours; // Number of colours unsigned int importantcolours; // Important colours } BMPINFOHEADER; |