diff options
author | Lucas Eckels <eckels@google.com> | 2012-08-06 15:14:50 -0700 |
---|---|---|
committer | Lucas Eckels <eckels@google.com> | 2012-08-08 09:29:09 -0700 |
commit | c4cbe47910d2ece1617411206c6b5e4ffbe09360 (patch) | |
tree | 5ade735d6b818e13f41d523cd07c13768ada3886 /ACM/AEncodeProperties.h | |
parent | 5d9259c157d3ee5fbab29f938483ebe95675c4d8 (diff) | |
download | lame-c4cbe47910d2ece1617411206c6b5e4ffbe09360.tar.gz |
Add lame source.
Change-Id: I6b66611fa10c094331b48bc84d3f82fe15603817
Diffstat (limited to 'ACM/AEncodeProperties.h')
-rw-r--r-- | ACM/AEncodeProperties.h | 448 |
1 files changed, 448 insertions, 0 deletions
diff --git a/ACM/AEncodeProperties.h b/ACM/AEncodeProperties.h new file mode 100644 index 0000000..4d2e1db --- /dev/null +++ b/ACM/AEncodeProperties.h @@ -0,0 +1,448 @@ +/** + * + * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows + * + * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> + * + * 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.1 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 + * + */ + +/*! + \author Steve Lhomme + \version \$Id: AEncodeProperties.h,v 1.5 2002/04/07 13:31:35 robux4 Exp $ +*/ + +#if !defined(_AENCODEPROPERTIES_H__INCLUDED_) +#define _AENCODEPROPERTIES_H__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include <windows.h> +#include <string> + +#include "ADbg/ADbg.h" +//#include "BladeMP3EncDLL.h" +#include "tinyxml/tinyxml.h" +//#include "AParameters/AParameters.h" + +typedef const struct { + UINT id; + const char *tip; +} ToolTipItem; +/** + \class AEncodeProperties + \brief the AEncodeProperties class is responsible for handling all the encoding properties +*/ +class AEncodeProperties +{ +public: + /** + \brief default constructor + + \param the windows module with which you can retrieve many informations + */ + AEncodeProperties(HMODULE hModule); + + /** + \brief default destructor + */ + virtual ~AEncodeProperties() {} + + /** + \enum BRMode + \brief A bitrate mode (CBR, VBR, ABR) + */ + enum BRMode { BR_CBR, BR_VBR, BR_ABR }; + + /** + \brief Handle all the commands that occur in the Config dialog box + */ + bool HandleDialogCommand(const HWND parentWnd, const WPARAM wParam, const LPARAM lParam); + /** + \brief check wether 2 instances are equal, ie have the same encoding parameters + */ + bool operator != (const AEncodeProperties & the_instance) const; + + /** + \brief Check wether the Encode process should use the Copyright bit + */ + inline const bool GetCopyrightMode() const { return bCopyright; } + /** + \brief Check wether the Encode process should use the CRC bit + */ + inline const bool GetCRCMode() const { return bCRC; } + /** + \brief Check wether the Encode process should use the Original bit + */ + inline const bool GetOriginalMode() const { return bOriginal; } + /** + \brief Check wether the Encode process should use the Private bit + */ + inline const bool GetPrivateMode() const { return bPrivate; } + /** + \brief Check wether the Encode process should use the Smart Bitrate output + */ + inline const bool GetSmartOutputMode() const { return bSmartOutput; } + /** + \brief Check wether the Encode process should allow Average Bitrate output + */ + inline const bool GetAbrOutputMode() const { return bAbrOutput; } + + /** + \brief Check wether the Encode process shouldn't use the Bit Reservoir + */ + inline const bool GetNoBiResMode() const { return bNoBitRes; } + + /** + \brief Check wether the Encode process should force the channel mode (stereo or mono resampling) + */ + inline const bool GetForceChannelMode() const { return bForceChannel; } + + /** + \brief Check wether the Encode process should use the VBR mode + */ + inline const BRMode GetVBRUseMode() const { return mBRmode; } + /** + \brief Check wether the Encode process should use the Xing frame in the VBR mode + \note the Xing frame is a silent frame at the beginning that contain VBR statistics about the file. + */ + inline const bool GetXingFrameMode() const { return bXingFrame; } + + /** + \brief Check wether the Encode process should resample before encoding + */ + inline const bool GetResampleMode() const { return bResample; } + + /** + \brief Set wether the Encode process should use the Copyright bit + */ + inline void SetCopyrightMode(const bool bMode) { bCopyright = bMode; } + /** + \brief Set wether the Encode process should use the CRC bit + */ + inline void SetCRCMode(const bool bMode) { bCRC = bMode; } + /** + \brief Set wether the Encode process should use the Original bit + */ + inline void SetOriginalMode(const bool bMode) { bOriginal = bMode; } + /** + \brief Set wether the Encode process should use the Private bit + */ + inline void SetPrivateMode(const bool bMode) { bPrivate = bMode; } + + /** + \brief Set wether the Encode process should use the Smart Bitrate output + */ + inline void SetSmartOutputMode(const bool bMode) { bSmartOutput = bMode; } + /** + \brief Set wether the Encode process should use the Average Bitrate output + */ + inline void SetAbrOutputMode(const bool bMode) { bAbrOutput = bMode; } + + + /** + \brief Set wether the Encode process shouldn't use the Bit Reservoir + */ + inline void SetNoBiResMode(const bool bMode) { bNoBitRes = bMode; } + + /** + \brief Set wether the Encode process should force the channel mode (stereo or mono resampling) + */ + inline void SetForceChannelMode(const bool bMode) { bForceChannel = bMode; } + + /** + \brief Set wether the Encode process should use the VBR mode + */ + inline void SetVBRUseMode(const BRMode mode) { mBRmode = mode; } + + /** + \brief Set wether the Encode process should use the Xing frame in the VBR mode + \note the Xing frame is a silent frame at the beginning that contain VBR statistics about the file. + */ + inline void SetXingFrameMode(const bool bMode) { bXingFrame = bMode; } + + /** + \brief CBR : Get the bitrate to use / + VBR : Get the minimum bitrate value + */ + const unsigned int GetBitrateValue() const; + + /** + \brief Get the current (VBR:min) bitrate for the specified MPEG version + + \param bitrate the data that will be filled with the bitrate + \param MPEG_Version The MPEG version (MPEG1 or MPEG2) + + \return 0 if the bitrate is not found, 1 if the bitrate is found + */ + const int GetBitrateValue(DWORD & bitrate, const DWORD MPEG_Version) const; + /** + \brief Get the current (VBR:min) bitrate for MPEG I + + \param bitrate the data that will be filled with the bitrate + + \return 0 if the bitrate is not found, 1 if the bitrate is found + */ + const int GetBitrateValueMPEG1(DWORD & bitrate) const; + /** + \brief Get the current (VBR:min) bitrate for MPEG II + + \param bitrate the data that will be filled with the bitrate + + \return 0 if the bitrate is not found, 1 if the bitrate is found + */ + const int GetBitrateValueMPEG2(DWORD & bitrate) const; + + /** + \brief Get the current (VBR:min) bitrate in the form of a string + + \param string the string that will be filled + \param string_size the size of the string + + \return -1 if the bitrate is not found, and the number of char copied otherwise + */ + inline const int GetBitrateString(char * string, int string_size) const {return GetBitrateString(string,string_size,nMinBitrateIndex); } + + /** + \brief Get the (VBR:min) bitrate corresponding to the specified index in the form of a string + + \param string the string that will be filled + \param string_size the size of the string + \param a_bitrateID the index in the Bitrate table + + \return -1 if the bitrate is not found, and the number of char copied otherwise + */ + const int GetBitrateString(char * string, int string_size, int a_bitrateID) const; + + /** + \brief Get the number of possible bitrates + */ + inline const int GetBitrateLentgh() const { return sizeof(the_Bitrates) / sizeof(unsigned int); } + /** + \brief Get the number of possible sampling frequencies + */ + inline const unsigned int GetResampleFreq() const { return the_SamplingFreqs[nSamplingFreqIndex]; } + /** + \brief Get the max compression ratio allowed (1:15 default) + */ + inline double GetSmartRatio() const { return SmartRatioMax;} + /** + \brief Get the min ABR bitrate possible + */ + inline unsigned int GetAbrBitrateMin() const { return AverageBitrate_Min;} + /** + \brief Get the max ABR bitrate possible + */ + inline unsigned int GetAbrBitrateMax() const { return AverageBitrate_Max;} + /** + \brief Get the step between ABR bitrates + */ + inline unsigned int GetAbrBitrateStep() const { return AverageBitrate_Step;} + + /** + \brief Get the VBR attributes for a specified MPEG version + + \param MaxBitrate receive the maximum bitrate possible in the VBR mode + \param Quality receive the quality value (0 to 9 see Lame doc for more info) + \param VBRHeader receive the value that indicates wether the VBR/Xing header should be filled + \param MPEG_Version The MPEG version (MPEG1 or MPEG2) + + \return the VBR mode (Old, New, ABR, MTRH, Default or None) + */ +// VBRMETHOD GetVBRValue(DWORD & MaxBitrate, int & Quality, DWORD & AbrBitrate, BOOL & VBRHeader, const DWORD MPEG_Version) const; + + /** + \brief Get the Lame DLL Location + */ +// const char * GetDllLocation() const { return DllLocation.c_str(); } + /** + \brief Set the Lame DLL Location + */ +// void SetDllLocation( const char * the_string ) { DllLocation = the_string; } + + /** + \brief Get the output directory for encoding + */ +// const char * GetOutputDirectory() const { return OutputDir.c_str(); } + /** + \brief Set the output directory for encoding + */ +// void SetOutputDirectory( const char * the_string ) { OutputDir = the_string; } + + /** + \brief Get the current channel mode to use + */ + const unsigned int GetChannelModeValue() const; + /** + \brief Get the current channel mode in the form of a string + */ + inline const char * GetChannelModeString() const {return GetChannelModeString(nChannelIndex); } + /** + \brief Get the channel mode in the form of a string for the specified Channel mode index + + \param a_channelID the Channel mode index (see GetChannelLentgh()) + */ + const char * GetChannelModeString(const int a_channelID) const; + /** + \brief Get the number of possible channel mode + */ + inline const int GetChannelLentgh() const { return 3; } + + /** + \brief Get the current preset to use, see lame documentation/code for more info on the possible presets + */ +// const LAME_QUALTIY_PRESET GetPresetModeValue() const; + /** + \brief Get the preset in the form of a string for the specified Channel mode index + + \param a_presetID the preset index (see GetPresetLentgh()) + */ + const char * GetPresetModeString(const int a_presetID) const; + /** + \brief Get the number of possible presets + */ +// inline const int GetPresetLentgh() const { return sizeof(the_Presets) / sizeof(LAME_QUALTIY_PRESET); } + + /** + \brief Start the user configuration process (called by AOut::config()) + */ + bool Config(const HINSTANCE hInstance, const HWND HwndParent); + + /** + \brief Init the config dialog box with the right texts and choices + */ + bool InitConfigDlg(HWND hDialog); + + /** + \brief Update the instance parameters from the config dialog box + */ + bool UpdateValueFromDlg(HWND hDialog); + /** + \brief Update the config dialog box from the instance parameters + */ + bool UpdateDlgFromValue(HWND hDialog); + + /** + \brief Update the config dialog box with the BitRate mode + */ + static void DisplayVbrOptions(const HWND hDialog, const BRMode the_mode); + + /** + \brief Handle the saving of parameters when something has changed in the config dialog box + */ + void SaveParams(const HWND hDialog); + + /** + \brief Save the current parameters (current config in use) + */ + void ParamsSave(void); + /** + \brief Load the parameters (current config in use) + */ + void ParamsRestore(void); + + /** + \brief Select the specified config name as the new default one + */ + void SelectSavedParams(const std::string config_name); + /** + \brief Save the current parameters to the specified config name + */ + void SaveValuesToStringKey(const std::string & config_name); + /** + \brief Rename the current config name to something else + */ + bool RenameCurrentTo(const std::string & new_config_name); + /** + \brief Delete the config name from the saved configs + */ + bool DeleteConfig(const std::string & config_name); + + ADbg my_debug; + + /** + \brief Update the slides value (on scroll) + */ + void UpdateDlgFromSlides(HWND parent_window) const; + + static ToolTipItem Tooltips[13]; +private: + + bool bCopyright; + bool bCRC; + bool bOriginal; + bool bPrivate; + bool bNoBitRes; + BRMode mBRmode; + bool bXingFrame; + bool bForceChannel; + bool bResample; + bool bSmartOutput; + bool bAbrOutput; + + int VbrQuality; + unsigned int AverageBitrate_Min; + unsigned int AverageBitrate_Max; + unsigned int AverageBitrate_Step; + + double SmartRatioMax; + + static const unsigned int the_ChannelModes[3]; + int nChannelIndex; + + static const unsigned int the_Bitrates[18]; + static const unsigned int the_MPEG1_Bitrates[14]; + static const unsigned int the_MPEG2_Bitrates[14]; + int nMinBitrateIndex; // CBR and VBR + int nMaxBitrateIndex; // only used in VBR mode + + static const unsigned int the_SamplingFreqs[9]; + int nSamplingFreqIndex; + +// static const LAME_QUALTIY_PRESET the_Presets[17]; + int nPresetIndex; + +// char DllLocation[512]; +// std::string DllLocation; +// char OutputDir[MAX_PATH]; +// std::string OutputDir; + +// AParameters my_base_parameters; + TiXmlDocument my_stored_data; + std::string my_store_location; + std::string my_current_config; + +// HINSTANCE hDllInstance; + + void SaveValuesToElement(TiXmlElement * the_element) const; + inline void SetAttributeBool(TiXmlElement * the_elt,const std::string & the_string, const bool the_value) const; + void UpdateConfigs(const HWND HwndDlg); + void EnableAbrOptions(HWND hDialog, bool enable); + + HMODULE my_hModule; + + /** + \brief + + \param config_name + \param parentNode + */ + void GetValuesFromKey(const std::string & config_name, const TiXmlNode & parentNode); +}; + +#endif // !defined(_AENCODEPROPERTIES_H__INCLUDED_) |