Files
tenacity/modules/import-export/mod-ffmpeg/ExportFFmpegOptions.h
Avery King dc4467d2bc Replace codebase with modified Audacity 3.7.1
Some of our basic changes remained, but a lot of work still needs to be
done. At least it builds though!

I have a few notes off the top of my head writing this:

- Our build system was kept and modified to work with the new codebase.
  Similarly, the codebase was modified to work with our build system.
- We don't support Audacity's full wxBase restrictions, so I just
  replaced it with wxWidgets::wxWidgets for now. (See above).
- There are still networking features, which are to be removed in the
  next commit.
- pffft was added as a library in lib-src, and I wrote a new
  CMakeLists.txt for it.
- I modified WrapAllegro.h to use our allegro.h shim instead.

Signed-off-by: Avery King <avery98@pm.me>
2025-01-04 14:54:13 -08:00

167 lines
5.2 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
ExportFFmpegOptions.h
Audacity(R) is copyright (c) 1999-2010 Audacity Team.
License: GPL v2 or later. See License.txt.
LRN
Vitaly Sverchinsky split from ExportFFmpegDialogs.h
**********************************************************************/
#pragma once
#include "FFmpegFunctions.h"
#include "wxPanelWrapper.h"
class FFmpegPresets;
class ShuttleGui;
class wxListBox;
class wxStaticText;
class wxComboBox;
/// Identifiers for pre-set export types.
enum FFmpegExposedFormat
{
FMT_M4A,
FMT_AC3,
FMT_AMRNB,
#ifdef SHOW_FFMPEG_OPUS_EXPORT
FMT_OPUS,
#endif
FMT_WMA2,
FMT_OTHER,
FMT_LAST
};
/// Entry for the Applicability table
struct ApplicableFor
{
bool enable; //!< true if this control should be enabled, false otherwise
int control; //!< control ID
AudacityAVCodecID codec; //!< Codec ID
const char *format; //!< Format short name
};
/// Describes format-codec compatibility
struct CompatibilityEntry
{
const wxChar *fmt; //!< format, recognizable by guess_format()
AudacityAVCodecID codec; //!< codec ID
};
/// Describes export type
struct ExposedFormat
{
FFmpegExposedFormat fmtid; //!< one of the FFmpegExposedFormat
const wxChar *name; //!< format name (internal, should be unique; if not - export dialog may show unusual behaviour)
const FileExtension extension; //!< default extension for this format. More extensions may be added later via AddExtension.
const wxChar *shortname; //!< used to guess the format
unsigned maxchannels; //!< how many channels this format could handle
const int canmetadata; //!< !=0 if format supports metadata, AV_CANMETA any avformat version, otherwise version support added
bool canutf8; //!< true if format supports metadata in UTF-8, false otherwise
const TranslatableString description; //!< format description (will be shown in export dialog)
AudacityAVCodecID codecid; //!< codec ID (see libavcodec/avcodec.h)
bool compiledIn; //!< support for this codec/format is compiled in (checked at runtime)
};
/// Custom FFmpeg export dialog
class ExportFFmpegOptions final : public wxDialogWrapper
{
public:
ExportFFmpegOptions(wxWindow *parent);
~ExportFFmpegOptions();
void PopulateOrExchange(ShuttleGui & S);
void OnOK(wxCommandEvent& event);
void OnGetURL(wxCommandEvent& event);
void OnFormatList(wxCommandEvent& event);
void DoOnFormatList();
void OnCodecList(wxCommandEvent& event);
void DoOnCodecList();
void OnAllFormats(wxCommandEvent& event);
void OnAllCodecs(wxCommandEvent& event);
void OnSavePreset(wxCommandEvent& event);
void OnLoadPreset(wxCommandEvent& event);
void OnDeletePreset(wxCommandEvent& event);
void OnImportPresets(wxCommandEvent& event);
void OnExportPresets(wxCommandEvent& event);
bool SavePreset( bool bCheckForOverwrite);
// Static tables
static CompatibilityEntry CompatibilityList[];
static ExposedFormat fmts[];
static const int iAACSampleRates[];
static ApplicableFor apptable[];
private:
wxArrayString mShownFormatNames;
wxArrayString mShownFormatLongNames;
wxArrayString mShownCodecNames;
wxArrayString mShownCodecLongNames;
wxArrayStringEx mFormatNames;
wxArrayString mFormatLongNames;
wxArrayStringEx mCodecNames;
wxArrayString mCodecLongNames;
wxListBox *mFormatList;
wxListBox *mCodecList;
wxStaticText *mFormatName;
wxStaticText *mCodecName;
wxComboBox *mPresetCombo;
int mBitRateFromChoice;
int mSampleRateFromChoice;
std::unique_ptr<FFmpegPresets> mPresets;
wxArrayStringEx mPresetNames;
std::shared_ptr<FFmpegFunctions> mFFmpeg;
/// Finds the format currently selected and returns its name and description
void FindSelectedFormat(wxString **name, wxString **longname);
/// Finds the codec currently selected and returns its name and description
void FindSelectedCodec(wxString **name, wxString **longname);
/// Retrieves format list from libavformat
void FetchFormatList();
/// Retrieves a list of formats compatible to codec
///\param id Codec ID
///\param selfmt format selected at the moment
///\return index of the selfmt in NEW format list or -1 if it is not in the list
int FetchCompatibleFormatList(AudacityAVCodecID id, wxString* selfmt);
/// Retrieves codec list from libavcodec
void FetchCodecList();
/// Retrieves a list of codecs compatible to format
///\param fmt Format short name
///\param id id of the codec selected at the moment
///\return index of the id in NEW codec list or -1 if it is not in the list
int FetchCompatibleCodecList(const wxChar* fmt, AudacityAVCodecID id);
/// Retrieves list of presets from configuration file
void FetchPresetList();
bool ReportIfBadCombination();
// Enables/disables controls based on format/codec combination,
// leaving only relevant controls enabled.
// Hiding the controls may have been a better idea,
// but it's hard to hide their text labels too
void EnableDisableControls(AVCodecWrapper *cdc, wxString *selfmt);
DECLARE_EVENT_TABLE()
};