| /** |
| * |
| * 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_) |