aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/tier2/riff.h
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/public/tier2/riff.h')
-rw-r--r--mp/src/public/tier2/riff.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/mp/src/public/tier2/riff.h b/mp/src/public/tier2/riff.h
new file mode 100644
index 00000000..95b8c2ba
--- /dev/null
+++ b/mp/src/public/tier2/riff.h
@@ -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