Blame ports/MSVC++/CMP3Stream/INCLUDE/CORE/SourceFilter_MP3.H

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
// ------------------------------------------------------------------------------------------------