mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-18 14:31:58 +00:00
1
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $Workfile: $
|
||||
// $Date: $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// $Log: $
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef RIFF_H
|
||||
#define RIFF_H
|
||||
#pragma once
|
||||
|
||||
#include "commonmacros.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: This is a simple abstraction that the RIFF classes use to read from
|
||||
// files/memory
|
||||
//-----------------------------------------------------------------------------
|
||||
class IFileReadBinary
|
||||
{
|
||||
public:
|
||||
virtual int open( const char *pFileName ) = 0;
|
||||
virtual int read( void *pOutput, int size, int file ) = 0;
|
||||
virtual void close( int file ) = 0;
|
||||
virtual void seek( int file, int pos ) = 0;
|
||||
virtual unsigned int tell( int file ) = 0;
|
||||
virtual unsigned int size( int file ) = 0;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Used to read/parse a RIFF format file
|
||||
//-----------------------------------------------------------------------------
|
||||
class InFileRIFF
|
||||
{
|
||||
public:
|
||||
InFileRIFF( const char *pFileName, IFileReadBinary &io );
|
||||
~InFileRIFF( void );
|
||||
|
||||
unsigned int RIFFName( void ) { return m_riffName; }
|
||||
unsigned int RIFFSize( void ) { return m_riffSize; }
|
||||
|
||||
int ReadInt( void );
|
||||
int ReadData( void *pOutput, int dataSize );
|
||||
int PositionGet( void );
|
||||
void PositionSet( int position );
|
||||
bool IsValid( void ) { return m_file != 0; }
|
||||
|
||||
private:
|
||||
const InFileRIFF & operator=( const InFileRIFF & );
|
||||
|
||||
IFileReadBinary &m_io;
|
||||
int m_file;
|
||||
unsigned int m_riffName;
|
||||
unsigned int m_riffSize;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Used to iterate over an InFileRIFF
|
||||
//-----------------------------------------------------------------------------
|
||||
class IterateRIFF
|
||||
{
|
||||
public:
|
||||
IterateRIFF( InFileRIFF &riff, int size );
|
||||
IterateRIFF( IterateRIFF &parent );
|
||||
|
||||
bool ChunkAvailable( void );
|
||||
bool ChunkNext( void );
|
||||
|
||||
unsigned int ChunkName( void );
|
||||
unsigned int ChunkSize( void );
|
||||
int ChunkRead( void *pOutput );
|
||||
int ChunkReadPartial( void *pOutput, int dataSize );
|
||||
int ChunkReadInt( void );
|
||||
int ChunkFilePosition( void ) { return m_chunkPosition; }
|
||||
|
||||
private:
|
||||
const IterateRIFF & operator=( const IterateRIFF & );
|
||||
|
||||
void ChunkSetup( void );
|
||||
void ChunkClear( void );
|
||||
|
||||
InFileRIFF &m_riff;
|
||||
int m_start;
|
||||
int m_size;
|
||||
|
||||
unsigned int m_chunkName;
|
||||
int m_chunkSize;
|
||||
int m_chunkPosition;
|
||||
};
|
||||
|
||||
class IFileWriteBinary
|
||||
{
|
||||
public:
|
||||
virtual int create( const char *pFileName ) = 0;
|
||||
virtual int write( void *pData, int size, int file ) = 0;
|
||||
virtual void close( int file ) = 0;
|
||||
virtual void seek( int file, int pos ) = 0;
|
||||
virtual unsigned int tell( int file ) = 0;
|
||||
};
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Used to write a RIFF format file
|
||||
//-----------------------------------------------------------------------------
|
||||
class OutFileRIFF
|
||||
{
|
||||
public:
|
||||
OutFileRIFF( const char *pFileName, IFileWriteBinary &io );
|
||||
~OutFileRIFF( void );
|
||||
|
||||
bool WriteInt( int number );
|
||||
bool WriteData( void *pOutput, int dataSize );
|
||||
int PositionGet( void );
|
||||
void PositionSet( int position );
|
||||
bool IsValid( void ) { return m_file != 0; }
|
||||
|
||||
void HasLISETData( int position );
|
||||
|
||||
private:
|
||||
const OutFileRIFF & operator=( const OutFileRIFF & );
|
||||
|
||||
IFileWriteBinary &m_io;
|
||||
int m_file;
|
||||
unsigned int m_riffName;
|
||||
unsigned int m_riffSize;
|
||||
unsigned int m_nNamePos;
|
||||
|
||||
// hack to make liset work correctly
|
||||
bool m_bUseIncorrectLISETLength;
|
||||
int m_nLISETSize;
|
||||
|
||||
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Used to iterate over an InFileRIFF
|
||||
//-----------------------------------------------------------------------------
|
||||
class IterateOutputRIFF
|
||||
{
|
||||
public:
|
||||
IterateOutputRIFF( OutFileRIFF &riff );
|
||||
IterateOutputRIFF( IterateOutputRIFF &parent );
|
||||
|
||||
void ChunkStart( unsigned int chunkname );
|
||||
void ChunkFinish( void );
|
||||
|
||||
void ChunkWrite( unsigned int chunkname, void *pOutput, int size );
|
||||
void ChunkWriteInt( int number );
|
||||
void ChunkWriteData( void *pOutput, int size );
|
||||
|
||||
int ChunkFilePosition( void ) { return m_chunkPosition; }
|
||||
|
||||
unsigned int ChunkGetPosition( void );
|
||||
void ChunkSetPosition( int position );
|
||||
|
||||
void CopyChunkData( IterateRIFF& input );
|
||||
|
||||
void SetLISETData( int position );
|
||||
|
||||
private:
|
||||
|
||||
const IterateOutputRIFF & operator=( const IterateOutputRIFF & );
|
||||
|
||||
OutFileRIFF &m_riff;
|
||||
int m_start;
|
||||
int m_size;
|
||||
|
||||
unsigned int m_chunkName;
|
||||
int m_chunkSize;
|
||||
int m_chunkPosition;
|
||||
int m_chunkStart;
|
||||
};
|
||||
|
||||
#define RIFF_ID MAKEID('R','I','F','F')
|
||||
#define RIFF_WAVE MAKEID('W','A','V','E')
|
||||
#define WAVE_FMT MAKEID('f','m','t',' ')
|
||||
#define WAVE_DATA MAKEID('d','a','t','a')
|
||||
#define WAVE_FACT MAKEID('f','a','c','t')
|
||||
#define WAVE_CUE MAKEID('c','u','e',' ')
|
||||
#define WAVE_SAMPLER MAKEID('s','m','p','l')
|
||||
#define WAVE_VALVEDATA MAKEID('V','D','A','T')
|
||||
#define WAVE_PADD MAKEID('P','A','D','D')
|
||||
#define WAVE_LIST MAKEID('L','I','S','T')
|
||||
|
||||
#ifndef WAVE_FORMAT_PCM
|
||||
#define WAVE_FORMAT_PCM 0x0001
|
||||
#endif
|
||||
#ifndef WAVE_FORMAT_ADPCM
|
||||
#define WAVE_FORMAT_ADPCM 0x0002
|
||||
#endif
|
||||
#define WAVE_FORMAT_XBOX_ADPCM 0x0069
|
||||
#ifndef WAVE_FORMAT_XMA
|
||||
#define WAVE_FORMAT_XMA 0x0165
|
||||
#endif
|
||||
|
||||
#endif // RIFF_H
|
||||
Reference in New Issue
Block a user