Logo Search packages:      
Sourcecode: lame version File versions  Download package


 *  LAME MP3 encoder for DirectShow
 *  LAME encoder wrapper
 *  Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd.
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * Library General Public License for more details.
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.

#if !defined(AFX_VITECENCODER_H__40DC8A44_B937_11D2_A381_A2FD7C37FA15__INCLUDED_)
#define AFX_VITECENCODER_H__40DC8A44_B937_11D2_A381_A2FD7C37FA15__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include <lame.h>

const unsigned int dwBitRateValue[2][14] =
    {32,40,48,56,64,80,96,112,128,160,192,224,256,320},     // MPEG-1
    {8,16,24,32,40,48,56,64,80,96,112,128,144,160}          // MPEG-2/2.5
#define STEREO           0
#define JOINT_STEREO     1
#define DUAL_CHANNEL     2
#define MONO             3

#define OUT_BUFFER_SIZE             16384
#define OUT_BUFFER_GUARD            8192


00050 typedef struct {
    DWORD   dwSampleRate;                   //SF in Hz
    DWORD   dwBitrate;                      //BR in bit per second
    vbr_mode    vmVariable;
    DWORD   dwVariableMin;                  //specify a minimum allowed bitrate
    DWORD   dwVariableMax;                  //specify a maximum allowed bitrate
    DWORD   dwQuality;                      //Encoding quality
    DWORD   dwVBRq;                         // VBR quality setting (0=highest quality, 9=lowest)                         
    long    lLayer;                         //Layer: 1 or 2

    MPEG_mode ChMode;                       //Channel coding mode: see doc
    DWORD   dwForceMS;

    DWORD   bCRCProtect;                    //Is CRC protection activated?
    DWORD   bForceMono;
    DWORD   bSetDuration;
    DWORD   bCopyright;                     //Is the stream protected by copyright?
    DWORD   bOriginal;                      //Is the stream an original?

    DWORD   dwPES;                          // PES header. Obsolete

    DWORD   dwEnforceVBRmin;
    DWORD   dwVoiceMode;
    DWORD   dwKeepAllFreq;
    DWORD   dwStrictISO;
    DWORD   dwNoShortBlock;
    DWORD   dwXingTag;
    DWORD   dwModeFixed;
    DWORD   bSampleOverlap;

00082 class CEncoder

    virtual ~CEncoder();

    // Initialize encoder with PCM stream properties
    HRESULT SetInputType(LPWAVEFORMATEX lpwfex, bool bJustCheck = FALSE);   // returns E_INVALIDARG if not supported
    // GetInputType - returns current input type
    HRESULT GetInputType(WAVEFORMATEX *pwfex)
            memcpy(pwfex, &m_wfex, sizeof(WAVEFORMATEX));
            return S_OK;
            return E_UNEXPECTED;

    // Set MPEG audio parameters
    HRESULT SetOutputType(MPEG_ENCODER_CONFIG &mabsi);      // returns E_INVALIDARG if not supported or
                                                            // not compatible with input type
    // Return current MPEG audio settings
    HRESULT GetOutputType(MPEG_ENCODER_CONFIG* pmabsi)
        if (m_bOutpuTypeSet)
            memcpy(pmabsi, &m_mabsi, sizeof(MPEG_ENCODER_CONFIG));
            return S_OK;
            return E_UNEXPECTED;

    // Set if output stream is a PES. Obsolete
    void SetPES(bool bPES)
        m_mabsi.dwPES = false;//bPES;
    // Is output stream a PES. Obsolete
    BOOL IsPES() const
        return (BOOL)m_mabsi.dwPES;

    // Initialize encoder SDK
    HRESULT Init();
    // Close encoder SDK
    HRESULT Close(IStream* pStream);

    // Encode media sample data
    int Encode(const short * pdata, int data_size);
    int GetFrame(const unsigned char ** pframe);
      // Returns block of a mp3 file, witch size integer multiples of cbAlign
      int GetBlockAligned(const unsigned char ** pblock, int* piBufferSize, const long& cbAlign);

    HRESULT Finish();

      HRESULT updateLameTagFrame(IStream* pStream);
      HRESULT skipId3v2(IStream *pStream, size_t lametag_frame_size);
      HRESULT maybeSyncWord(IStream *pStream);
    HRESULT SetDefaultOutputType(LPWAVEFORMATEX lpwfex);

    // Input media type
    WAVEFORMATEX        m_wfex;

    // Output media type

    // Compressor private data
    lame_global_flags * pgf;

    // Compressor miscelaneous state
    BOOL                m_bInpuTypeSet;
    BOOL                m_bOutpuTypeSet;

    BOOL                m_bFinished;
    int                 m_frameCount;

    unsigned char *     m_outFrameBuf;
    int                 m_outOffset;
    int                 m_outReadOffset;

    CCritSec            m_lock;

#endif // !defined(AFX_VITECENCODER_H__40DC8A44_B937_11D2_A381_A2FD7C37FA15__INCLUDED_)

Generated by  Doxygen 1.6.0   Back to index