Main Page   Compound List   Header Files   Compound Members  

strawberry_mpegheader.h

This is the verbatim text of the strawberry_mpegheader.h include file.
/* 
 * strawberry_mpegheader.h last updated by David Parker <david@neongoat.com>
 * $Id: strawberry_mpegheader.h,v 1.4 2000/02/08 03:07:29 dap24 Exp $
 *
 * Strawberry Library - A class for MPEG header extraction and ID3 tag manipulation
 * Copyright (C) 1999-2000 David Parker, Neon Goat Productions. All rights reserved.
 * http://www.neongoat.com - david@neongoat.com
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser 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
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser 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.
 */

// strawberry_mpegheader.h: interface for the SB_MPEGHeader class.
//

#if !defined(AFX_STRAWBERRY_MPEGHEADER_H__806D7661_1AB0_11D3_B3F8_00A0CC3D7E01__INCLUDED_)
#define AFX_STRAWBERRY_MPEGHEADER_H__806D7661_1AB0_11D3_B3F8_00A0CC3D7E01__INCLUDED_

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


class SB_MPEGHeader  
{
public:
    SB_MPEGHeader(); 
    ~SB_MPEGHeader(); 

    enum SB_MPEG_VERSION {MPEG_VERSION_UNDEF=0, MPEG_VERSION_1, MPEG_VERSION_2, MPEG_VERSION_25};
    enum SB_MPEG_LAYER {MPEG_LAYER_UNDEF=0, MPEG_LAYER_1, MPEG_LAYER_2, MPEG_LAYER_3};
    enum SB_MPEG_CHANNELMODE {MPEG_MODE_UNDEF=0, MPEG_MODE_STEREO, MPEG_MODE_JOINTSTEREO, MPEG_MODE_DUALCHANNEL, MPEG_MODE_SINGLECHANNEL};
    enum SB_MPEG_CHANNELEXTENSION {MPEG_EXTENSION_UNDEF=0, MPEG_EXTENSION_12_4_31, MPEG_EXTENSION_12_8_31, MPEG_EXTENSION_12_12_31, MPEG_EXTENSION_12_16_31, MPEG_EXTENSION_3_NI_NM, MPEG_EXTENSION_3_YI_NM, MPEG_EXTENSION_3_NI_YM, MPEG_EXTENSION_3_YI_YM}; //obfuscated, i know... you know a better way? :)
    enum SB_MPEG_EMPHASIS {MPEG_EMPH_UNDEF=0, MPEG_EMPH_NONE, MPEG_EMPH_5015MS, MPEG_EMPH_CCITT_J17};

    bool Open(CFile *openfile); 
    bool Open(const CString &filename); 
    bool ExtractHeader(); 
    bool Close(); 
    void EraseAllFields(); 
    CString GenerateReport(); 

//accessors:
    bool IsFrameSynced() {return m_Sync;};
    SB_MPEG_VERSION GetVersion() {return m_Version;};
    CString GetVersionString();
    SB_MPEG_LAYER GetLayer() {return m_Layer;};
    CString GetLayerString();
    bool IsCRCs() {return m_CRC;};
    int GetBitrate() {return m_Bitrate;};
    CString GetBitrateString();
    int GetSamplingRate() {return m_SamplingRate;};
    CString GetSamplingRateString();
    bool IsPadded() {return m_Padding;};
    bool IsPrivate() {return m_Private;};
    SB_MPEG_CHANNELMODE GetChannelMode() {return m_ChannelMode;};
    CString GetChannelModeString();
    SB_MPEG_CHANNELEXTENSION GetChannelModeExtension() {return m_ChannelModeExtension;};
    CString GetChannelModeExtensionString();
    bool IsCopyrighted() {return m_Copyright;};
    bool IsOriginal() {return m_Original;};
    SB_MPEG_EMPHASIS GetEmphasis() {return m_Emphasis;};
    CString GetEmphasisString();
    long GetNumFrames() {return m_numframes;};
    long GetNumSeconds() {return m_numseconds;};

    //10-330

protected:
    DWORD SwapEndian(DWORD binary);
    int ExtractBinary(DWORD binary, int leastSig, int mostSig);
    bool ExtractHeader(long offset);
    void ScanFrames();

//MPEG header items:
    bool m_Sync;
    SB_MPEG_VERSION m_Version;
    SB_MPEG_LAYER m_Layer;
    bool m_CRC;
    int m_Bitrate;
    int m_SamplingRate;
    bool m_Padding;
    bool m_Private; //not defined, available for private use
    SB_MPEG_CHANNELMODE m_ChannelMode;
    SB_MPEG_CHANNELEXTENSION m_ChannelModeExtension; // unimplemented, here as a placeholder
    bool m_Copyright;
    bool m_Original;
    SB_MPEG_EMPHASIS m_Emphasis;
//MPEG general information: 
    long m_numbytes;
    long m_numseconds;
    long m_numframes;

private:
    DWORD *rawdata;
    CFile *openfile;
    bool myOpenfile;
    CString filename;
    long m_framesize;

/**************************************
  BEGIN DOXYGEN DOCUMENTATION COMMENTS
 **************************************/

};

const int bitrates[5][16] = 
{
    // 0  = free (application specific)
    // -1 = undefined
    /* MPEG 1.0 Layer 1 */       {0,  32,  64,  96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1},
    /* MPEG 1.0 Layer 2 */       {0,  32,  48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, -1},
    /* MPEG 1.0 Layer 3 */       {0,  32,  40,  48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, -1},
    /* MPEG 2.x Layer 1 */       {0,  32,  48,  56,  64,  80,  96, 112, 128, 144, 160, 176, 192, 224, 256, -1},
    /* MPEG 2.x Layer 2 and 3 */ {0,   8,  16,  24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, -1}
};

const int samplingrates[3][4] =
{
    // -1 = undef
    /* MPEG 1.0 */ {44100, 48000, 32000, -1},
    /* MPEG 2.0 */ {22050, 24000, 16000, -1},
    /* MPEG 2.5 */ {11025, 12000,  8000, -1}
};

#endif // !defined(AFX_STRAWBERRY_MPEGHEADER_H__806D7661_1AB0_11D3_B3F8_00A0CC3D7E01__INCLUDED_)

Generated at Mon Feb 7 19:10:13 2000 for Strawberry by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999