1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
/**********************************************************************
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()
};
|