|
Packit |
c32a2d |
// ------------------------------------------------------------------------------------------------
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#pragma once
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// ------------------------------------------------------------------------------------------------
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#ifdef _DEBUG
|
|
Packit |
c32a2d |
#pragma comment(lib, "libMPG123_d.lib")
|
|
Packit |
c32a2d |
#else
|
|
Packit |
c32a2d |
#pragma comment(lib, "libMPG123.lib")
|
|
Packit |
c32a2d |
#endif
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// ------------------------------------------------------------------------------------------------
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include "../DShowBase/streams.h"
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include <CORE/SourceFilter_AsyncIO.H>
|
|
Packit |
c32a2d |
#include <CORE/SourceFilter_AsyncReader.H>
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include "../../libMPG123/MPG123.H"
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include <IIEP_FileIn.H>
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// ------------------------------------------------------------------------------------------------
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#define WAVE_HEADER_LENGTH 44
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// ------------------------------------------------------------------------------------------------
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#define MP3_DECODE_LEN 0x4000
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#define MP3_DECODE_BUF_LEN 0x8000
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// ------------------------------------------------------------------------------------------------
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
namespace IIEP
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
class CMP3Stream : public CAsyncStream
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
public:
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
CMP3Stream(void);
|
|
Packit |
c32a2d |
~CMP3Stream(void);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
void SetSeekFlag(void);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
bool Open(const WORD *pcwsFileName, CMediaType &coMT, DWORD dwKBPerSec = INFINITE);
|
|
Packit |
c32a2d |
void Close(void);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
HRESULT SetPointer(LONGLONG llPos);
|
|
Packit |
c32a2d |
HRESULT Read(PBYTE pucBuffer,
|
|
Packit |
c32a2d |
DWORD dwBytesToRead,
|
|
Packit |
c32a2d |
BOOL bAlign,
|
|
Packit |
c32a2d |
LPDWORD pdwBytesRead);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
LONGLONG Size(LONGLONG *pSizeAvailable);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
DWORD Alignment(void);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
void Lock (void);
|
|
Packit |
c32a2d |
void Unlock(void);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
bool DecodeFrame(void);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
//
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
bool OpenFile(const WORD *pcwsFileName);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
DWORD ReadFile(PVOID pBuf , DWORD dwLen );
|
|
Packit |
c32a2d |
long SeekFile(long nOffset, int iOrigin);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
//
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
private:
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
CCritSec m_csLock;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
DWORD m_dwKBPerSec;
|
|
Packit |
c32a2d |
DWORD m_dwTimeStart;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
mpg123_handle *m_pcoMH;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
DWORD m_dwTotalBlocks;
|
|
Packit |
c32a2d |
DWORD m_dwAlignment;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
DWORD m_dwLength;
|
|
Packit |
c32a2d |
DWORD m_dwPosition;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
BYTE m_ucHeader[WAVE_HEADER_LENGTH];
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
//
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
DWORD m_dwDataBufPos;
|
|
Packit |
c32a2d |
DWORD m_dwDataBufLen;
|
|
Packit |
c32a2d |
BYTE m_ucDataBuffer[MP3_DECODE_BUF_LEN];
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
//
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
bool m_bSeekFlag;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
//
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
IIEP::CFileIn m_coFileIn;
|
|
Packit |
c32a2d |
long m_nDataBegin;
|
|
Packit |
c32a2d |
long m_nDataTotal;
|
|
Packit |
c32a2d |
};
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// ----------------------------------------------------------------------------------------------
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
class CMP3Reader : public CAsyncReader
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
public:
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// We're not going to be CoCreate'd so we don't need registration stuff etc
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
STDMETHODIMP Register(void)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return S_OK;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
STDMETHODIMP Unregister(void)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
return S_OK;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
CMP3Reader(CMP3Stream *pcoStream,
|
|
Packit |
c32a2d |
CMediaType *pcoMT,
|
|
Packit |
c32a2d |
HRESULT *phr) :
|
|
Packit |
c32a2d |
CAsyncReader(NAME("MP3 Reader\0"),
|
|
Packit |
c32a2d |
NULL,
|
|
Packit |
c32a2d |
pcoStream,
|
|
Packit |
c32a2d |
phr)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
m_coMT = *pcoMT;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
};
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
// ------------------------------------------------------------------------------------------------
|