Audacity 3.2.0
Public Member Functions | Private Attributes | List of all members
FFmpegPresets Class Reference

#include <ExportFFmpegDialogs.h>

Inheritance diagram for FFmpegPresets:
[legend]
Collaboration diagram for FFmpegPresets:
[legend]

Public Member Functions

 FFmpegPresets ()
 
 ~FFmpegPresets ()
 
void GetPresetList (wxArrayString &list)
 
void LoadPreset (ExportFFmpegOptions *parent, wxString &name)
 
bool SavePreset (ExportFFmpegOptions *parent, wxString &name)
 
void DeletePreset (wxString &name)
 
bool OverwriteIsOk (wxString &name)
 
FFmpegPresetFindPreset (wxString &name)
 
void ImportPresets (wxString &filename)
 
void ExportPresets (wxString &filename)
 
bool HandleXMLTag (const std::string_view &tag, const AttributesList &attrs) override
 
XMLTagHandlerHandleXMLChild (const std::string_view &tag) override
 
void WriteXMLHeader (XMLWriter &xmlFile) const
 
void WriteXML (XMLWriter &xmlFile) const
 

Private Attributes

FFmpegPresetMap mPresets
 
FFmpegPresetmPreset
 
bool mAbortImport
 

Additional Inherited Members

- Private Member Functions inherited from XMLTagHandler
 XMLTagHandler ()
 
virtual ~XMLTagHandler ()
 
virtual bool HandleXMLTag (const std::string_view &tag, const AttributesList &attrs)=0
 
virtual void HandleXMLEndTag (const std::string_view &WXUNUSED(tag))
 
virtual void HandleXMLContent (const std::string_view &WXUNUSED(content))
 
virtual XMLTagHandlerHandleXMLChild (const std::string_view &tag)=0
 
void ReadXMLEndTag (const char *tag)
 
void ReadXMLContent (const char *s, int len)
 
XMLTagHandlerReadXMLChild (const char *tag)
 

Detailed Description

Definition at line 318 of file ExportFFmpegDialogs.h.

Constructor & Destructor Documentation

◆ FFmpegPresets()

FFmpegPresets::FFmpegPresets ( )

Definition at line 862 of file ExportFFmpegDialogs.cpp.

863{
864 mPreset = NULL;
865 mAbortImport = false;
866
867 XMLFileReader xmlfile;
868 wxFileName xmlFileName(FileNames::DataDir(), wxT("ffmpeg_presets.xml"));
869 xmlfile.Parse(this,xmlFileName.GetFullPath());
870}
wxT("CloseDown"))
FFmpegPreset * mPreset
Reads a file and passes the results through an XMLTagHandler.
Definition: XMLFileReader.h:19
bool Parse(XMLTagHandler *baseHandler, const FilePath &fname)
FILES_API FilePath DataDir()
Audacity user data directory.

References FileNames::DataDir(), mAbortImport, mPreset, XMLFileReader::Parse(), and wxT().

Here is the call graph for this function:

◆ ~FFmpegPresets()

FFmpegPresets::~FFmpegPresets ( )

Definition at line 872 of file ExportFFmpegDialogs.cpp.

873{
874 // We're in a destructor! Don't let exceptions out!
875 GuardedCall( [&] {
876 wxFileName xmlFileName{ FileNames::DataDir(), wxT("ffmpeg_presets.xml") };
877 XMLFileWriter writer{
878 xmlFileName.GetFullPath(), XO("Error Saving FFmpeg Presets") };
879 WriteXMLHeader(writer);
880 WriteXML(writer);
881 writer.Commit();
882 } );
883}
R GuardedCall(const F1 &body, const F2 &handler=F2::Default(), F3 delayedHandler=DefaultDelayedHandlerAction) noexcept(noexcept(handler(std::declval< AudacityException * >())) &&noexcept(handler(nullptr)) &&noexcept(std::function< void(AudacityException *)>{std::move(delayedHandler)}))
Execute some code on any thread; catch any AudacityException; enqueue error report on the main thread...
XO("Cut/Copy/Paste")
void WriteXMLHeader(XMLWriter &xmlFile) const
void WriteXML(XMLWriter &xmlFile) const
Wrapper to output XML data to files.
Definition: XMLWriter.h:84

References FileNames::DataDir(), GuardedCall(), WriteXML(), WriteXMLHeader(), wxT(), and XO().

Here is the call graph for this function:

Member Function Documentation

◆ DeletePreset()

void FFmpegPresets::DeletePreset ( wxString &  name)

Definition at line 921 of file ExportFFmpegDialogs.cpp.

922{
923 FFmpegPresetMap::iterator iter = mPresets.find(name);
924 if (iter != mPresets.end())
925 {
926 mPresets.erase(iter);
927 }
928}
const TranslatableString name
Definition: Distortion.cpp:76
FFmpegPresetMap mPresets

References mPresets, and name.

◆ ExportPresets()

void FFmpegPresets::ExportPresets ( wxString &  filename)

Definition at line 899 of file ExportFFmpegDialogs.cpp.

900{
901 GuardedCall( [&] {
902 XMLFileWriter writer{ filename, XO("Error Saving FFmpeg Presets") };
903 WriteXMLHeader(writer);
904 WriteXML(writer);
905 writer.Commit();
906 } );
907}

References GuardedCall(), WriteXML(), WriteXMLHeader(), and XO().

Here is the call graph for this function:

◆ FindPreset()

FFmpegPreset * FFmpegPresets::FindPreset ( wxString &  name)

Definition at line 930 of file ExportFFmpegDialogs.cpp.

931{
932 FFmpegPresetMap::iterator iter = mPresets.find(name);
933 if (iter != mPresets.end())
934 {
935 return &iter->second;
936 }
937
938 return NULL;
939}

References mPresets, and name.

Referenced by HandleXMLTag(), LoadPreset(), and OverwriteIsOk().

Here is the caller graph for this function:

◆ GetPresetList()

void FFmpegPresets::GetPresetList ( wxArrayString &  list)

Definition at line 909 of file ExportFFmpegDialogs.cpp.

910{
911 list.clear();
912 FFmpegPresetMap::iterator iter;
913 for (iter = mPresets.begin(); iter != mPresets.end(); ++iter)
914 {
915 list.push_back(iter->second.mPresetName);
916 }
917
918 std::sort( list.begin(), list.end() );
919}

References mPresets.

◆ HandleXMLChild()

XMLTagHandler * FFmpegPresets::HandleXMLChild ( const std::string_view &  tag)
overridevirtual

Implements XMLTagHandler.

Definition at line 1211 of file ExportFFmpegDialogs.cpp.

1212{
1213 if (mAbortImport)
1214 {
1215 return NULL;
1216 }
1217
1218 if (tag == "preset")
1219 {
1220 return this;
1221 }
1222 else if (tag == "setctrlstate")
1223 {
1224 return this;
1225 }
1226 return NULL;
1227}

References mAbortImport.

◆ HandleXMLTag()

bool FFmpegPresets::HandleXMLTag ( const std::string_view &  tag,
const AttributesList attrs 
)
overridevirtual

Implements XMLTagHandler.

Definition at line 1131 of file ExportFFmpegDialogs.cpp.

1132{
1133 if (mAbortImport)
1134 {
1135 return false;
1136 }
1137
1138 if (tag == "ffmpeg_presets")
1139 {
1140 return true;
1141 }
1142
1143 if (tag == "preset")
1144 {
1145 for (auto pair : attrs)
1146 {
1147 auto attr = pair.first;
1148 auto value = pair.second;
1149
1150 if (attr == "name")
1151 {
1152 wxString strValue = value.ToWString();
1153 mPreset = FindPreset(strValue);
1154
1155 if (mPreset)
1156 {
1157 auto query = XO("Replace preset '%s'?").Format( strValue );
1158 int action = AudacityMessageBox(
1159 query,
1160 XO("Confirm Overwrite"),
1161 wxYES_NO | wxCANCEL | wxCENTRE);
1162 if (action == wxCANCEL)
1163 {
1164 mAbortImport = true;
1165 return false;
1166 }
1167 if (action == wxNO)
1168 {
1169 mPreset = NULL;
1170 return false;
1171 }
1172 *mPreset = FFmpegPreset();
1173 }
1174 else
1175 {
1176 mPreset = &mPresets[strValue];
1177 }
1178
1179 mPreset->mPresetName = strValue;
1180 }
1181 }
1182 return true;
1183 }
1184
1185 if (tag == "setctrlstate" && mPreset)
1186 {
1187 long id = -1;
1188 for (auto pair : attrs)
1189 {
1190 auto attr = pair.first;
1191 auto value = pair.second;
1192
1193 if (attr == "id")
1194 {
1195 for (long i = FEFirstID; i < FELastID; i++)
1196 if (!wxStrcmp(FFmpegExportCtrlIDNames[i - FEFirstID], value.ToWString()))
1197 id = i;
1198 }
1199 else if (attr == "state")
1200 {
1201 if (id > FEFirstID && id < FELastID)
1202 mPreset->mControlState[id - FEFirstID] = value.ToWString();
1203 }
1204 }
1205 return true;
1206 }
1207
1208 return false;
1209}
int AudacityMessageBox(const TranslatableString &message, const TranslatableString &caption, long style, wxWindow *parent, int x, int y)
static const wxChar * FFmpegExportCtrlIDNames[]
wxArrayString mControlState
FFmpegPreset * FindPreset(wxString &name)

References AudacityMessageBox(), FFmpegExportCtrlIDNames, FindPreset(), mAbortImport, FFmpegPreset::mControlState, mPreset, FFmpegPreset::mPresetName, mPresets, and XO().

Here is the call graph for this function:

◆ ImportPresets()

void FFmpegPresets::ImportPresets ( wxString &  filename)

Definition at line 885 of file ExportFFmpegDialogs.cpp.

886{
887 mPreset = NULL;
888 mAbortImport = false;
889
890 FFmpegPresetMap savePresets = mPresets;
891
892 XMLFileReader xmlfile;
893 bool success = xmlfile.Parse(this,filename);
894 if (!success || mAbortImport) {
895 mPresets = savePresets;
896 }
897}
std::unordered_map< wxString, FFmpegPreset > FFmpegPresetMap

References mAbortImport, mPreset, mPresets, and XMLFileReader::Parse().

Here is the call graph for this function:

◆ LoadPreset()

void FFmpegPresets::LoadPreset ( ExportFFmpegOptions parent,
wxString &  name 
)

Definition at line 1052 of file ExportFFmpegDialogs.cpp.

1053{
1055 if (!preset)
1056 {
1057 AudacityMessageBox( XO("Preset '%s' does not exist." ).Format(name));
1058 return;
1059 }
1060
1061 wxListBox *lb;
1062 wxSpinCtrl *sc;
1063 wxTextCtrl *tc;
1064 wxCheckBox *cb;
1065 wxChoice *ch;
1066
1067 for (int id = FEFirstID; id < FELastID; id++)
1068 {
1069 wxWindow *wnd = parent->FindWindowById(id,parent);
1070 if (wnd != NULL)
1071 {
1072 wxString readstr;
1073 long readlong;
1074 bool readbool;
1075 switch(id)
1076 {
1077 // Listbox
1078 case FEFormatID:
1079 case FECodecID:
1080 lb = dynamic_cast<wxListBox*>(wnd);
1081 readstr = preset->mControlState[id - FEFirstID];
1082 readlong = lb->FindString(readstr);
1083 if (readlong > -1) lb->Select(readlong);
1084 break;
1085 // Spin control
1086 case FEBitrateID:
1087 case FEQualityID:
1088 case FESampleRateID:
1089 case FECutoffID:
1090 case FEFrameSizeID:
1091 case FEBufSizeID:
1092 case FECompLevelID:
1093 case FELPCCoeffsID:
1094 case FEMinPredID:
1095 case FEMaxPredID:
1096 case FEMinPartOrderID:
1097 case FEMaxPartOrderID:
1098 case FEMuxRateID:
1099 case FEPacketSizeID:
1100 sc = dynamic_cast<wxSpinCtrl*>(wnd);
1101 preset->mControlState[id - FEFirstID].ToLong(&readlong);
1102 sc->SetValue(readlong);
1103 break;
1104 // Text control
1105 case FELanguageID:
1106 case FETagID:
1107 tc = dynamic_cast<wxTextCtrl*>(wnd);
1108 tc->SetValue(preset->mControlState[id - FEFirstID]);
1109 break;
1110 // Choice
1111 case FEProfileID:
1112 case FEPredOrderID:
1113 ch = dynamic_cast<wxChoice*>(wnd);
1114 preset->mControlState[id - FEFirstID].ToLong(&readlong);
1115 if (readlong > -1) ch->Select(readlong);
1116 break;
1117 // Check box
1118 case FEUseLPCID:
1119 case FEBitReservoirID:
1120 case FEVariableBlockLenID:
1121 cb = dynamic_cast<wxCheckBox*>(wnd);
1122 preset->mControlState[id - FEFirstID].ToLong(&readlong);
1123 if (readlong) readbool = true; else readbool = false;
1124 cb->SetValue(readbool);
1125 break;
1126 }
1127 }
1128 }
1129}
EffectReverbSettings preset
Definition: Reverb.cpp:44
Abstract base class used in importing a file.

References AudacityMessageBox(), FindPreset(), name, preset, and XO().

Here is the call graph for this function:

◆ OverwriteIsOk()

bool FFmpegPresets::OverwriteIsOk ( wxString &  name)

Definition at line 942 of file ExportFFmpegDialogs.cpp.

943{
945 if (preset)
946 {
947 auto query = XO("Overwrite preset '%s'?").Format(name);
948 int action = AudacityMessageBox(
949 query,
950 XO("Confirm Overwrite"),
951 wxYES_NO | wxCENTRE);
952 if (action == wxNO) return false;
953 }
954 return true;
955}

References AudacityMessageBox(), FindPreset(), name, preset, and XO().

Here is the call graph for this function:

◆ SavePreset()

bool FFmpegPresets::SavePreset ( ExportFFmpegOptions parent,
wxString &  name 
)

Definition at line 958 of file ExportFFmpegDialogs.cpp.

959{
960 wxString format;
961 wxString codec;
963
964 {
965 wxWindow *wnd;
966 wxListBox *lb;
967
968 wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(FEFormatID,parent);
969 lb = dynamic_cast<wxListBox*>(wnd);
970 if (lb->GetSelection() < 0)
971 {
972 AudacityMessageBox( XO("Please select format before saving a profile") );
973 return false;
974 }
975 format = lb->GetStringSelection();
976
977 wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(FECodecID,parent);
978 lb = dynamic_cast<wxListBox*>(wnd);
979 if (lb->GetSelection() < 0)
980 {
981 /* i18n-hint: "codec" is short for a "coder-decoder" algorithm */
982 AudacityMessageBox( XO("Please select codec before saving a profile") );
983 return false;
984 }
985 codec = lb->GetStringSelection();
986 }
987
988 preset = &mPresets[name];
989 preset->mPresetName = name;
990
991 wxSpinCtrl *sc;
992 wxTextCtrl *tc;
993 wxCheckBox *cb;
994 wxChoice *ch;
995
996 for (int id = FEFirstID; id < FELastID; id++)
997 {
998 wxWindow *wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(id,parent);
999 if (wnd != NULL)
1000 {
1001 switch(id)
1002 {
1003 case FEFormatID:
1004 preset->mControlState[id - FEFirstID] = format;
1005 break;
1006 case FECodecID:
1007 preset->mControlState[id - FEFirstID] = codec;
1008 break;
1009 // Spin control
1010 case FEBitrateID:
1011 case FEQualityID:
1012 case FESampleRateID:
1013 case FECutoffID:
1014 case FEFrameSizeID:
1015 case FEBufSizeID:
1016 case FECompLevelID:
1017 case FELPCCoeffsID:
1018 case FEMinPredID:
1019 case FEMaxPredID:
1020 case FEMinPartOrderID:
1021 case FEMaxPartOrderID:
1022 case FEMuxRateID:
1023 case FEPacketSizeID:
1024 sc = dynamic_cast<wxSpinCtrl*>(wnd);
1025 preset->mControlState[id - FEFirstID] = wxString::Format(wxT("%d"),sc->GetValue());
1026 break;
1027 // Text control
1028 case FELanguageID:
1029 case FETagID:
1030 tc = dynamic_cast<wxTextCtrl*>(wnd);
1031 preset->mControlState[id - FEFirstID] = tc->GetValue();
1032 break;
1033 // Choice
1034 case FEProfileID:
1035 case FEPredOrderID:
1036 ch = dynamic_cast<wxChoice*>(wnd);
1037 preset->mControlState[id - FEFirstID] = wxString::Format(wxT("%d"),ch->GetSelection());
1038 break;
1039 // Check box
1040 case FEUseLPCID:
1041 case FEBitReservoirID:
1042 case FEVariableBlockLenID:
1043 cb = dynamic_cast<wxCheckBox*>(wnd);
1044 preset->mControlState[id - FEFirstID] = wxString::Format(wxT("%d"),cb->GetValue());
1045 break;
1046 }
1047 }
1048 }
1049 return true;
1050}
int format
Definition: ExportPCM.cpp:53

References AudacityMessageBox(), format, mPresets, name, preset, wxT(), and XO().

Here is the call graph for this function:

◆ WriteXML()

void FFmpegPresets::WriteXML ( XMLWriter xmlFile) const

Definition at line 1249 of file ExportFFmpegDialogs.cpp.

1251{
1252 xmlFile.StartTag(wxT("ffmpeg_presets"));
1253 xmlFile.WriteAttr(wxT("version"),wxT("1.0"));
1254 FFmpegPresetMap::const_iterator iter;
1255 for (iter = mPresets.begin(); iter != mPresets.end(); ++iter)
1256 {
1257 auto preset = &iter->second;
1258 xmlFile.StartTag(wxT("preset"));
1259 xmlFile.WriteAttr(wxT("name"),preset->mPresetName);
1260 for (long i = FEFirstID + 1; i < FELastID; i++)
1261 {
1262 xmlFile.StartTag(wxT("setctrlstate"));
1263 xmlFile.WriteAttr(wxT("id"),wxString(FFmpegExportCtrlIDNames[i - FEFirstID]));
1264 xmlFile.WriteAttr(wxT("state"),preset->mControlState[i - FEFirstID]);
1265 xmlFile.EndTag(wxT("setctrlstate"));
1266 }
1267 xmlFile.EndTag(wxT("preset"));
1268 }
1269 xmlFile.EndTag(wxT("ffmpeg_presets"));
1270}
virtual void StartTag(const wxString &name)
Definition: XMLWriter.cpp:79
void WriteAttr(const wxString &name, const Identifier &value)
Definition: XMLWriter.h:36
virtual void EndTag(const wxString &name)
Definition: XMLWriter.cpp:102

References FFmpegExportCtrlIDNames, preset, and wxT().

Referenced by ExportPresets(), and ~FFmpegPresets().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteXMLHeader()

void FFmpegPresets::WriteXMLHeader ( XMLWriter xmlFile) const

Definition at line 1229 of file ExportFFmpegDialogs.cpp.

1231{
1232 xmlFile.Write(wxT("<?xml "));
1233 xmlFile.Write(wxT("version=\"1.0\" "));
1234 xmlFile.Write(wxT("standalone=\"no\" "));
1235 xmlFile.Write(wxT("?>\n"));
1236
1237 wxString dtdName = wxT("-//audacityffmpegpreset-1.0.0//DTD//EN");
1238 wxString dtdURI =
1239 wxT("http://audacity.sourceforge.net/xml/audacityffmpegpreset-1.0.0.dtd");
1240
1241 xmlFile.Write(wxT("<!DOCTYPE "));
1242 xmlFile.Write(wxT("project "));
1243 xmlFile.Write(wxT("PUBLIC "));
1244 xmlFile.Write(wxT("\"-//audacityffmpegpreset-1.0.0//DTD//EN\" "));
1245 xmlFile.Write(wxT("\"http://audacity.sourceforge.net/xml/audacityffmpegpreset-1.0.0.dtd\" "));
1246 xmlFile.Write(wxT(">\n"));
1247}
virtual void Write(const wxString &data)=0

References wxT().

Referenced by ExportPresets(), and ~FFmpegPresets().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ mAbortImport

bool FFmpegPresets::mAbortImport
private

Definition at line 343 of file ExportFFmpegDialogs.h.

Referenced by FFmpegPresets(), HandleXMLChild(), HandleXMLTag(), and ImportPresets().

◆ mPreset

FFmpegPreset* FFmpegPresets::mPreset
private

Definition at line 342 of file ExportFFmpegDialogs.h.

Referenced by FFmpegPresets(), HandleXMLTag(), and ImportPresets().

◆ mPresets

FFmpegPresetMap FFmpegPresets::mPresets
private

The documentation for this class was generated from the following files: