#ifndef _WRIFF_H_ #define _WRIFF_H_ ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // // RIFF.H -- Interface for wrinting RIFF files // // By Nitzan Shaked // ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// #include //#include "avifmt.h" ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // // Chunk types a riff file can contain // typedef enum riffSectionType { RIFF_SECTION_LIST = 0, // "LIST" (size) "TYPE" (data) RIFF_SECTION_CHUNK = 1 // "name" (size) (data) }; // // Structure used to hold information about a chunk // typedef struct _riffSection { riffSectionType type; // LIST or CHUNK long sizeOffset; // Offset in file where size is to be written long currentSize; // Current size (including subchunks, if any) } riffSection; // // Maximum nesting level for riff files // #define MAX_RIFF_NESTING_LEVEL 20 // // Stack used to hold current structure of riff file // typedef riffSection riffStack[MAX_RIFF_NESTING_LEVEL]; // // Information about one riff file // typedef struct _riffFile { FILE *f; // The file handler riffStack stack; long stackTop; // Stack top (-1 if empty) } riffFile; // // Names and types of lists and chunks // typedef char *str4; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // // Create a new riff file and return a pointer to a "riffFile" // // Return NULL if failure // riffFile *riffCreate( LPCTSTR filename ); // // Close a riff file // bool riffClose( riffFile *f ); // // Pads the file to WORD boundry (adds a 0 byte if necessary) // bool riffPadWord( riffFile *f ); // // Pads the file to a given granularity from a given position // bool riffPadJunk( riffFile *f, long granularity, long from ); // // Adds a LIST to a riff file // bool riffAddList( riffFile *f, str4 type, // "LIST" or "RIFF" str4 name ); // // Adds a CHUNK to a riff file // bool riffAddChunk( riffFile *f, str4 name ); // // Writes data to the riff file // bool riffWriteData( riffFile *f, void *buf, long size ); // // Returns the current position (size) of the riff file // long riffSize( riffFile *f ); // // Closes last section in the riff file // bool riffCloseSection( riffFile *f ); bool riffCloseChunk( riffFile *f ); bool riffCloseList( riffFile *f ); ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// #endif _WRIFF_H_