73 lines
1.8 KiB
C
73 lines
1.8 KiB
C
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
#ifndef VBRHEADER_H
|
||
|
#define VBRHEADER_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
// for XING VBR Header flags
|
||
|
#define FRAMES_FLAG 0x0001
|
||
|
#define BYTES_FLAG 0x0002
|
||
|
#define TOC_FLAG 0x0004
|
||
|
#define VBR_SCALE_FLAG 0x0008
|
||
|
|
||
|
class CMPAFile;
|
||
|
|
||
|
class CVBRHeader
|
||
|
{
|
||
|
public:
|
||
|
enum VBRHeaderType
|
||
|
{
|
||
|
NoHeader,
|
||
|
XINGHeader,
|
||
|
VBRIHeader
|
||
|
};
|
||
|
|
||
|
CVBRHeader( CMPAFile* pMPAFile, VBRHeaderType HeaderType, uint32 dwOffset );
|
||
|
~CVBRHeader(void);
|
||
|
|
||
|
static bool IsVBRHeaderAvailable( CMPAFile* pMPAFile, VBRHeaderType& HeaderType, uint32& dwOffset );
|
||
|
bool SeekPoint(float fPercent, uint32& dwSeekPoint);
|
||
|
|
||
|
uint32 m_dwBytesPerSec;
|
||
|
uint32 m_dwBytes; // total number of bytes
|
||
|
uint32 m_dwFrames; // total number of frames
|
||
|
|
||
|
private:
|
||
|
static uint32 m_dwXINGOffsets[2][2];
|
||
|
|
||
|
static bool CheckID( CMPAFile* pMPAFile, char ch0, char ch1, char ch2, char ch3, uint32& dwOffset );
|
||
|
static bool CheckXING( CMPAFile* pMPAFile, uint32& dwOffset );
|
||
|
static bool CheckVBRI( CMPAFile* pMPAFile, uint32& dwOffset );
|
||
|
|
||
|
bool ExtractLAMETag( uint32 dwOffset );
|
||
|
bool ExtractXINGHeader( uint32 dwOffset );
|
||
|
bool ExtractVBRIHeader( uint32 dwOffset );
|
||
|
|
||
|
uint32 SeekPointXING(float fPercent)const ;
|
||
|
uint32 SeekPointVBRI(float fPercent) const;
|
||
|
uint32 SeekPointByTimeVBRI(float fEntryTimeMS) const;
|
||
|
|
||
|
CMPAFile* m_pMPAFile;
|
||
|
public:
|
||
|
VBRHeaderType m_HeaderType;
|
||
|
uint32 m_dwOffset;
|
||
|
uint32 m_dwQuality; // quality (0..100)
|
||
|
int* m_pnToc; // TOC points for seeking (must be freed)
|
||
|
uint32 m_dwTableSize; // size of table (number of entries)
|
||
|
|
||
|
// only VBRI
|
||
|
float m_fDelay;
|
||
|
uint32 m_dwTableScale; // for seeking
|
||
|
uint32 m_dwBytesPerEntry;
|
||
|
uint32 m_dwFramesPerEntry;
|
||
|
uint32 m_dwVersion;
|
||
|
};
|
||
|
|
||
|
#endif // VBRHEADER_H
|