mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-02 17:09:26 +02:00
Should fix bugs 763 and 896
This commit is contained in:
parent
913cfe23b4
commit
436fc86159
@ -401,15 +401,12 @@ void ExportFFmpegWMAOptions::OnOK(wxCommandEvent& WXUNUSED(event))
|
|||||||
|
|
||||||
FFmpegPreset::FFmpegPreset(wxString &name)
|
FFmpegPreset::FFmpegPreset(wxString &name)
|
||||||
{
|
{
|
||||||
mPresetName = new wxString(name);
|
mPresetName = name;
|
||||||
mControlState = new wxArrayString();
|
mControlState.SetCount(FELastID - FEFirstID);
|
||||||
mControlState->SetCount(FELastID - FEFirstID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FFmpegPreset::~FFmpegPreset()
|
FFmpegPreset::~FFmpegPreset()
|
||||||
{
|
{
|
||||||
delete mPresetName;
|
|
||||||
delete mControlState;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WX_DEFINE_LIST(FFmpegPresetList);
|
WX_DEFINE_LIST(FFmpegPresetList);
|
||||||
@ -437,6 +434,8 @@ FFmpegPresets::~FFmpegPresets()
|
|||||||
|
|
||||||
void FFmpegPresets::ImportPresets(wxString &filename)
|
void FFmpegPresets::ImportPresets(wxString &filename)
|
||||||
{
|
{
|
||||||
|
mPreset = NULL;
|
||||||
|
|
||||||
XMLFileReader xmlfile;
|
XMLFileReader xmlfile;
|
||||||
xmlfile.Parse(this,filename);
|
xmlfile.Parse(this,filename);
|
||||||
}
|
}
|
||||||
@ -457,7 +456,7 @@ wxArrayString *FFmpegPresets::GetPresetList()
|
|||||||
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
|
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
|
||||||
{
|
{
|
||||||
FFmpegPreset *preset = *iter;
|
FFmpegPreset *preset = *iter;
|
||||||
list->Add(*preset->mPresetName);
|
list->Add(preset->mPresetName);
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -468,7 +467,7 @@ void FFmpegPresets::DeletePreset(wxString &name)
|
|||||||
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
|
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
|
||||||
{
|
{
|
||||||
FFmpegPreset *preset = *iter;
|
FFmpegPreset *preset = *iter;
|
||||||
if (!preset->mPresetName->CmpNoCase(name))
|
if (!preset->mPresetName.CmpNoCase(name))
|
||||||
{
|
{
|
||||||
mPresets->erase(iter);
|
mPresets->erase(iter);
|
||||||
break;
|
break;
|
||||||
@ -483,7 +482,7 @@ FFmpegPreset *FFmpegPresets::FindPreset(wxString &name)
|
|||||||
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
|
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
|
||||||
{
|
{
|
||||||
FFmpegPreset *current = *iter;
|
FFmpegPreset *current = *iter;
|
||||||
if (!current->mPresetName->CmpNoCase(name))
|
if (!current->mPresetName.CmpNoCase(name))
|
||||||
preset = current;
|
preset = current;
|
||||||
}
|
}
|
||||||
return preset;
|
return preset;
|
||||||
@ -491,6 +490,8 @@ FFmpegPreset *FFmpegPresets::FindPreset(wxString &name)
|
|||||||
|
|
||||||
void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
|
void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
|
||||||
{
|
{
|
||||||
|
wxString format;
|
||||||
|
wxString codec;
|
||||||
FFmpegPreset *preset = FindPreset(name);
|
FFmpegPreset *preset = FindPreset(name);
|
||||||
if (preset)
|
if (preset)
|
||||||
{
|
{
|
||||||
@ -510,6 +511,7 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
|
|||||||
wxMessageBox(_("Please select format before saving a profile"));
|
wxMessageBox(_("Please select format before saving a profile"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
format = lb->GetStringSelection();
|
||||||
|
|
||||||
wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(FECodecID,parent);
|
wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(FECodecID,parent);
|
||||||
lb = dynamic_cast<wxListBox*>(wnd);
|
lb = dynamic_cast<wxListBox*>(wnd);
|
||||||
@ -518,6 +520,8 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
|
|||||||
wxMessageBox(_("Please select codec before saving a profile"));
|
wxMessageBox(_("Please select codec before saving a profile"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
codec = lb->GetStringSelection();
|
||||||
|
|
||||||
preset = new FFmpegPreset(name);
|
preset = new FFmpegPreset(name);
|
||||||
mPresets->push_front(preset);
|
mPresets->push_front(preset);
|
||||||
}
|
}
|
||||||
@ -535,8 +539,10 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
|
|||||||
switch(id)
|
switch(id)
|
||||||
{
|
{
|
||||||
case FEFormatID:
|
case FEFormatID:
|
||||||
|
preset->mControlState.Item(id - FEFirstID) = format;
|
||||||
break;
|
break;
|
||||||
case FECodecID:
|
case FECodecID:
|
||||||
|
preset->mControlState.Item(id - FEFirstID) = codec;
|
||||||
break;
|
break;
|
||||||
// Spin control
|
// Spin control
|
||||||
case FEBitrateID:
|
case FEBitrateID:
|
||||||
@ -554,26 +560,26 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
|
|||||||
case FEMuxRateID:
|
case FEMuxRateID:
|
||||||
case FEPacketSizeID:
|
case FEPacketSizeID:
|
||||||
sc = dynamic_cast<wxSpinCtrl*>(wnd);
|
sc = dynamic_cast<wxSpinCtrl*>(wnd);
|
||||||
preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),sc->GetValue());
|
preset->mControlState.Item(id - FEFirstID) = wxString::Format(wxT("%d"),sc->GetValue());
|
||||||
break;
|
break;
|
||||||
// Text control
|
// Text control
|
||||||
case FELanguageID:
|
case FELanguageID:
|
||||||
case FETagID:
|
case FETagID:
|
||||||
tc = dynamic_cast<wxTextCtrl*>(wnd);
|
tc = dynamic_cast<wxTextCtrl*>(wnd);
|
||||||
preset->mControlState->Item(id - FEFirstID) = tc->GetValue();
|
preset->mControlState.Item(id - FEFirstID) = tc->GetValue();
|
||||||
break;
|
break;
|
||||||
// Choice
|
// Choice
|
||||||
case FEProfileID:
|
case FEProfileID:
|
||||||
case FEPredOrderID:
|
case FEPredOrderID:
|
||||||
ch = dynamic_cast<wxChoice*>(wnd);
|
ch = dynamic_cast<wxChoice*>(wnd);
|
||||||
preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),ch->GetSelection());
|
preset->mControlState.Item(id - FEFirstID) = wxString::Format(wxT("%d"),ch->GetSelection());
|
||||||
break;
|
break;
|
||||||
// Check box
|
// Check box
|
||||||
case FEUseLPCID:
|
case FEUseLPCID:
|
||||||
case FEBitReservoirID:
|
case FEBitReservoirID:
|
||||||
case FEVariableBlockLenID:
|
case FEVariableBlockLenID:
|
||||||
cb = dynamic_cast<wxCheckBox*>(wnd);
|
cb = dynamic_cast<wxCheckBox*>(wnd);
|
||||||
preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),cb->GetValue());
|
preset->mControlState.Item(id - FEFirstID) = wxString::Format(wxT("%d"),cb->GetValue());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -609,7 +615,7 @@ void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name)
|
|||||||
case FEFormatID:
|
case FEFormatID:
|
||||||
case FECodecID:
|
case FECodecID:
|
||||||
lb = dynamic_cast<wxListBox*>(wnd);
|
lb = dynamic_cast<wxListBox*>(wnd);
|
||||||
readstr = preset->mControlState->Item(id - FEFirstID);
|
readstr = preset->mControlState.Item(id - FEFirstID);
|
||||||
readlong = lb->FindString(readstr);
|
readlong = lb->FindString(readstr);
|
||||||
if (readlong > -1) lb->Select(readlong);
|
if (readlong > -1) lb->Select(readlong);
|
||||||
break;
|
break;
|
||||||
@ -629,20 +635,20 @@ void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name)
|
|||||||
case FEMuxRateID:
|
case FEMuxRateID:
|
||||||
case FEPacketSizeID:
|
case FEPacketSizeID:
|
||||||
sc = dynamic_cast<wxSpinCtrl*>(wnd);
|
sc = dynamic_cast<wxSpinCtrl*>(wnd);
|
||||||
preset->mControlState->Item(id - FEFirstID).ToLong(&readlong);
|
preset->mControlState.Item(id - FEFirstID).ToLong(&readlong);
|
||||||
sc->SetValue(readlong);
|
sc->SetValue(readlong);
|
||||||
break;
|
break;
|
||||||
// Text control
|
// Text control
|
||||||
case FELanguageID:
|
case FELanguageID:
|
||||||
case FETagID:
|
case FETagID:
|
||||||
tc = dynamic_cast<wxTextCtrl*>(wnd);
|
tc = dynamic_cast<wxTextCtrl*>(wnd);
|
||||||
tc->SetValue(preset->mControlState->Item(id - FEFirstID));
|
tc->SetValue(preset->mControlState.Item(id - FEFirstID));
|
||||||
break;
|
break;
|
||||||
// Choice
|
// Choice
|
||||||
case FEProfileID:
|
case FEProfileID:
|
||||||
case FEPredOrderID:
|
case FEPredOrderID:
|
||||||
ch = dynamic_cast<wxChoice*>(wnd);
|
ch = dynamic_cast<wxChoice*>(wnd);
|
||||||
preset->mControlState->Item(id - FEFirstID).ToLong(&readlong);
|
preset->mControlState.Item(id - FEFirstID).ToLong(&readlong);
|
||||||
if (readlong > -1) ch->Select(readlong);
|
if (readlong > -1) ch->Select(readlong);
|
||||||
break;
|
break;
|
||||||
// Check box
|
// Check box
|
||||||
@ -650,7 +656,7 @@ void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name)
|
|||||||
case FEBitReservoirID:
|
case FEBitReservoirID:
|
||||||
case FEVariableBlockLenID:
|
case FEVariableBlockLenID:
|
||||||
cb = dynamic_cast<wxCheckBox*>(wnd);
|
cb = dynamic_cast<wxCheckBox*>(wnd);
|
||||||
preset->mControlState->Item(id - FEFirstID).ToLong(&readlong);
|
preset->mControlState.Item(id - FEFirstID).ToLong(&readlong);
|
||||||
if (readlong) readbool = true; else readbool = false;
|
if (readlong) readbool = true; else readbool = false;
|
||||||
cb->SetValue(readbool);
|
cb->SetValue(readbool);
|
||||||
break;
|
break;
|
||||||
@ -677,23 +683,19 @@ bool FFmpegPresets::HandleXMLTag(const wxChar *tag, const wxChar **attrs)
|
|||||||
|
|
||||||
if (!wxStrcmp(attr,wxT("name")))
|
if (!wxStrcmp(attr,wxT("name")))
|
||||||
{
|
{
|
||||||
FFmpegPreset *newpreset = FindPreset(value);
|
mPreset = FindPreset(value);
|
||||||
if (!newpreset)
|
if (!mPreset)
|
||||||
mPresets->push_front(new FFmpegPreset(value));
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
mPresets->remove(newpreset);
|
mPreset = new FFmpegPreset(value);
|
||||||
mPresets->push_front(newpreset);
|
mPresets->push_front(mPreset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (!wxStrcmp(tag,wxT("setctrlstate")))
|
else if (!wxStrcmp(tag,wxT("setctrlstate")) && mPreset)
|
||||||
{
|
{
|
||||||
FFmpegPreset *preset = mPresets->front();
|
|
||||||
long id = -1;
|
long id = -1;
|
||||||
if (!preset) return false;
|
|
||||||
while (*attrs)
|
while (*attrs)
|
||||||
{
|
{
|
||||||
const wxChar *attr = *attrs++;
|
const wxChar *attr = *attrs++;
|
||||||
@ -711,7 +713,7 @@ bool FFmpegPresets::HandleXMLTag(const wxChar *tag, const wxChar **attrs)
|
|||||||
else if (!wxStrcmp(attr,wxT("state")))
|
else if (!wxStrcmp(attr,wxT("state")))
|
||||||
{
|
{
|
||||||
if (id > FEFirstID && id < FELastID)
|
if (id > FEFirstID && id < FELastID)
|
||||||
preset->mControlState->Item(id - FEFirstID) = wxString(value);
|
mPreset->mControlState.Item(id - FEFirstID) = wxString(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -760,12 +762,12 @@ void FFmpegPresets::WriteXML(XMLWriter &xmlFile)
|
|||||||
{
|
{
|
||||||
FFmpegPreset *preset = *iter;
|
FFmpegPreset *preset = *iter;
|
||||||
xmlFile.StartTag(wxT("preset"));
|
xmlFile.StartTag(wxT("preset"));
|
||||||
xmlFile.WriteAttr(wxT("name"),*preset->mPresetName);
|
xmlFile.WriteAttr(wxT("name"),preset->mPresetName);
|
||||||
for (long i = FEFirstID + 1; i < FELastID; i++)
|
for (long i = FEFirstID + 1; i < FELastID; i++)
|
||||||
{
|
{
|
||||||
xmlFile.StartTag(wxT("setctrlstate"));
|
xmlFile.StartTag(wxT("setctrlstate"));
|
||||||
xmlFile.WriteAttr(wxT("id"),wxString(FFmpegExportCtrlIDNames[i - FEFirstID]));
|
xmlFile.WriteAttr(wxT("id"),wxString(FFmpegExportCtrlIDNames[i - FEFirstID]));
|
||||||
xmlFile.WriteAttr(wxT("state"),preset->mControlState->Item(i - FEFirstID));
|
xmlFile.WriteAttr(wxT("state"),preset->mControlState.Item(i - FEFirstID));
|
||||||
xmlFile.EndTag(wxT("setctrlstate"));
|
xmlFile.EndTag(wxT("setctrlstate"));
|
||||||
}
|
}
|
||||||
xmlFile.EndTag(wxT("preset"));
|
xmlFile.EndTag(wxT("preset"));
|
||||||
|
@ -290,8 +290,8 @@ public:
|
|||||||
FFmpegPreset(wxString &name);
|
FFmpegPreset(wxString &name);
|
||||||
~FFmpegPreset();
|
~FFmpegPreset();
|
||||||
|
|
||||||
wxString *mPresetName;
|
wxString mPresetName;
|
||||||
wxArrayString *mControlState;
|
wxArrayString mControlState;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -320,6 +320,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
FFmpegPresetList *mPresets;
|
FFmpegPresetList *mPresets;
|
||||||
|
FFmpegPreset *mPreset; // valid during XML parsing only
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user