"Fossies" - the Fresh Open Source Software Archive

Member "ssr-0.4.2/src/GUI/PageOutput.h" (18 May 2020, 9147 Bytes) of package /linux/privat/ssr-0.4.2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "PageOutput.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 0.4.1_vs_0.4.2.

    1 /*
    2 Copyright (c) 2012-2020 Maarten Baert <maarten-baert@hotmail.com>
    3 
    4 This file is part of SimpleScreenRecorder.
    5 
    6 SimpleScreenRecorder is free software: you can redistribute it and/or modify
    7 it under the terms of the GNU General Public License as published by
    8 the Free Software Foundation, either version 3 of the License, or
    9 (at your option) any later version.
   10 
   11 SimpleScreenRecorder is distributed in the hope that it will be useful,
   12 but WITHOUT ANY WARRANTY; without even the implied warranty of
   13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   14 GNU General Public License for more details.
   15 
   16 You should have received a copy of the GNU General Public License
   17 along with SimpleScreenRecorder.  If not, see <http://www.gnu.org/licenses/>.
   18 */
   19 
   20 #pragma once
   21 #include "Global.h"
   22 
   23 #include "ProfileBox.h"
   24 
   25 class MainWindow;
   26 
   27 class PageOutput : public QWidget {
   28     Q_OBJECT
   29 
   30 public:
   31     enum enum_container {
   32         CONTAINER_MKV,
   33         CONTAINER_MP4,
   34         CONTAINER_WEBM,
   35         CONTAINER_OGG,
   36         CONTAINER_OTHER,
   37         CONTAINER_COUNT // must be last
   38     };
   39     enum enum_video_codec {
   40         VIDEO_CODEC_H264,
   41         VIDEO_CODEC_VP8,
   42         VIDEO_CODEC_THEORA,
   43         VIDEO_CODEC_OTHER,
   44         VIDEO_CODEC_COUNT // must be last
   45     };
   46     enum enum_audio_codec {
   47         AUDIO_CODEC_VORBIS,
   48         AUDIO_CODEC_MP3,
   49         AUDIO_CODEC_AAC,
   50         AUDIO_CODEC_UNCOMPRESSED,
   51         AUDIO_CODEC_OTHER,
   52         AUDIO_CODEC_COUNT // must be last
   53     };
   54     enum enum_h264_preset {
   55         H264_PRESET_ULTRAFAST,
   56         H264_PRESET_SUPERFAST,
   57         H264_PRESET_VERYFAST,
   58         H264_PRESET_FASTER,
   59         H264_PRESET_FAST,
   60         H264_PRESET_MEDIUM,
   61         H264_PRESET_SLOW,
   62         H264_PRESET_SLOWER,
   63         H264_PRESET_VERYSLOW,
   64         H264_PRESET_PLACEBO,
   65         H264_PRESET_COUNT // must be last
   66     };
   67 
   68 private:
   69     struct ContainerData {
   70         QString name, avname;
   71         QStringList suffixes;
   72         QString filter;
   73         std::set<enum_video_codec> supported_video_codecs;
   74         std::set<enum_audio_codec> supported_audio_codecs;
   75         inline bool operator<(const ContainerData& other) const { return (avname < other.avname); }
   76     };
   77     struct VideoCodecData {
   78         QString name, avname;
   79         inline bool operator<(const VideoCodecData& other) const { return (avname < other.avname); }
   80     };
   81     struct AudioCodecData {
   82         QString name, avname;
   83         inline bool operator<(const AudioCodecData& other) const { return (avname < other.avname); }
   84     };
   85 
   86 private:
   87     MainWindow *m_main_window;
   88 
   89     enum_container m_old_container;
   90     unsigned int m_old_container_av;
   91 
   92     std::vector<ContainerData> m_containers, m_containers_av;
   93     std::vector<VideoCodecData> m_video_codecs, m_video_codecs_av;
   94     std::vector<AudioCodecData> m_audio_codecs, m_audio_codecs_av;
   95 
   96     ProfileBox *m_profile_box;
   97 
   98     QComboBox *m_combobox_profiles;
   99     QPushButton *m_pushbutton_profile_save, *m_pushbutton_profile_new, *m_pushbutton_profile_delete;
  100 
  101     QLineEdit *m_lineedit_file;
  102     QCheckBox *m_checkbox_separate_files, *m_checkbox_add_timestamp;
  103     QComboBox *m_combobox_container;
  104     QLabel *m_label_container_av;
  105     QComboBox *m_combobox_container_av;
  106     QLabel *m_label_container_warning;
  107 
  108     QComboBox *m_combobox_video_codec;
  109     QLabel *m_label_video_codec_av;
  110     QComboBox *m_combobox_video_codec_av;
  111     QLabel *m_label_video_kbit_rate;
  112     QLineEdit *m_lineedit_video_kbit_rate;
  113     QLabel *m_label_h264_crf;
  114     QSlider *m_slider_h264_crf;
  115     QLabel *m_label_h264_crf_value;
  116     QLabel *m_label_h264_preset;
  117     QComboBox *m_combobox_h264_preset;
  118     QLabel *m_label_vp8_cpu_used;
  119     QComboBox *m_combobox_vp8_cpu_used;
  120     QLabel *m_label_video_options;
  121     QLineEdit *m_lineedit_video_options;
  122     QCheckBox *m_checkbox_video_allow_frame_skipping;
  123 
  124     QGroupBox *m_groupbox_audio;
  125     QComboBox *m_combobox_audio_codec;
  126     QLabel *m_label_audio_codec_av;
  127     QComboBox *m_combobox_audio_codec_av;
  128     QLabel *m_label_audio_kbit_rate;
  129     QLineEdit *m_lineedit_audio_kbit_rate;
  130     QLabel *m_label_audio_options;
  131     QLineEdit *m_lineedit_audio_options;
  132 
  133 public:
  134     PageOutput(MainWindow* main_window);
  135 
  136     void LoadSettings(QSettings* settings);
  137     void SaveSettings(QSettings* settings);
  138 
  139 private:
  140     static void LoadProfileSettingsCallback(QSettings* settings, void* userdata);
  141     static void SaveProfileSettingsCallback(QSettings* settings, void* userdata);
  142     void LoadProfileSettings(QSettings* settings);
  143     void SaveProfileSettings(QSettings* settings);
  144 
  145 public:
  146     void StartPage();
  147     bool Validate();
  148 
  149     QString GetFileProtocol();
  150     QString GetContainerAVName();
  151     QString GetVideoCodecAVName();
  152     QString GetAudioCodecAVName();
  153 
  154 private:
  155     unsigned int FindContainerAV(const QString& name);
  156     unsigned int FindVideoCodecAV(const QString& name);
  157     unsigned int FindAudioCodecAV(const QString& name);
  158 
  159 private:
  160     void LoadProfiles();
  161     void LoadProfilesFromDir(const QString& path, bool can_delete);
  162     void UpdateProfileFields();
  163 
  164 public slots:
  165     void OnUpdateSuffixAndContainerFields();
  166     void OnUpdateContainerFields();
  167     void OnUpdateVideoCodecFields();
  168     void OnUpdateAudioCodecFields();
  169 
  170 private slots:
  171     void OnBrowse();
  172     void OnContinue();
  173 
  174 public:
  175     inline unsigned int GetProfile() { return m_profile_box->GetProfile(); }
  176     inline QString GetFile() { return m_lineedit_file->text(); }
  177     inline bool GetSeparateFiles() { return m_checkbox_separate_files->isChecked(); }
  178     inline bool GetAddTimestamp() { return m_checkbox_add_timestamp->isChecked(); }
  179     inline enum_container GetContainer() { return (enum_container) clamp(m_combobox_container->currentIndex(), 0, CONTAINER_COUNT - 1); }
  180     inline unsigned int GetContainerAV() { return clamp(m_combobox_container_av->currentIndex(), 0, (int) m_containers_av.size() - 1); }
  181     inline enum_video_codec GetVideoCodec() { return (enum_video_codec) clamp(m_combobox_video_codec->currentIndex(), 0, VIDEO_CODEC_COUNT - 1); }
  182     inline unsigned int GetVideoCodecAV() { return clamp(m_combobox_video_codec_av->currentIndex(), 0, (int) m_video_codecs_av.size() - 1); }
  183     inline unsigned int GetVideoKBitRate() { return m_lineedit_video_kbit_rate->text().toUInt(); }
  184     inline unsigned int GetH264CRF() { return m_slider_h264_crf->value(); }
  185     inline enum_h264_preset GetH264Preset() { return (enum_h264_preset) clamp(m_combobox_h264_preset->currentIndex(), 0, H264_PRESET_COUNT - 1); }
  186     inline unsigned int GetVP8CPUUsed() { return clamp(5 - m_combobox_vp8_cpu_used->currentIndex(), 0, 5); }
  187     inline QString GetVideoOptions() { return m_lineedit_video_options->text(); }
  188     inline bool GetVideoAllowFrameSkipping() { return m_checkbox_video_allow_frame_skipping->isChecked(); }
  189     inline enum_audio_codec GetAudioCodec() { return (enum_audio_codec) clamp(m_combobox_audio_codec->currentIndex(), 0, AUDIO_CODEC_COUNT - 1); }
  190     inline unsigned int GetAudioCodecAV() { return clamp(m_combobox_audio_codec_av->currentIndex(), 0, (int) m_audio_codecs_av.size() - 1); }
  191     inline unsigned int GetAudioKBitRate() { return m_lineedit_audio_kbit_rate->text().toUInt(); }
  192     inline QString GetAudioOptions() { return m_lineedit_audio_options->text(); }
  193 
  194     inline void SetProfile(unsigned int profile) { m_profile_box->SetProfile(profile); }
  195     inline void SetContainer(enum_container container) { m_combobox_container->setCurrentIndex(clamp((unsigned int) container, 0u, (unsigned int) CONTAINER_COUNT - 1)); }
  196     inline void SetContainerAV(unsigned int container) { m_combobox_container_av->setCurrentIndex(clamp(container, 0u, (unsigned int) m_containers_av.size() - 1)); }
  197     inline void SetFile(const QString& file) { m_lineedit_file->setText(file); }
  198     inline void SetSeparateFiles(bool separate_files) { m_checkbox_separate_files->setChecked(separate_files); }
  199     inline void SetAddTimestamp(bool add_timestamp) { m_checkbox_add_timestamp->setChecked(add_timestamp); }
  200     inline void SetVideoCodec(enum_video_codec video_codec) { m_combobox_video_codec->setCurrentIndex(clamp((unsigned int) video_codec, 0u, (unsigned int) VIDEO_CODEC_COUNT - 1)); }
  201     inline void SetVideoCodecAV(unsigned int video_codec_av) { m_combobox_video_codec_av->setCurrentIndex(clamp(video_codec_av, 0u, (unsigned int) m_video_codecs_av.size() - 1)); }
  202     inline void SetVideoKBitRate(unsigned int kbit_rate) { m_lineedit_video_kbit_rate->setText(QString::number(kbit_rate)); }
  203     inline void SetH264CRF(unsigned int crf) { m_slider_h264_crf->setValue(crf); }
  204     inline void SetH264Preset(enum_h264_preset preset) { m_combobox_h264_preset->setCurrentIndex(clamp((unsigned int) preset, 0u, (unsigned int) H264_PRESET_COUNT - 1)); }
  205     inline void SetVP8CPUUsed(unsigned int cpu_used) { m_combobox_vp8_cpu_used->setCurrentIndex(clamp(5 - (int) cpu_used, 0, 5)); }
  206     inline void SetVideoOptions(const QString& options) { m_lineedit_video_options->setText(options); }
  207     inline void SetVideoAllowFrameSkipping(bool allow_frame_skipping) { return m_checkbox_video_allow_frame_skipping->setChecked(allow_frame_skipping); }
  208     inline void SetAudioCodec(enum_audio_codec audio_codec) { m_combobox_audio_codec->setCurrentIndex(clamp((unsigned int) audio_codec, 0u, (unsigned int) AUDIO_CODEC_COUNT - 1)); }
  209     inline void SetAudioCodecAV(unsigned int audio_codec_av) { m_combobox_audio_codec_av->setCurrentIndex(clamp(audio_codec_av, 0u, (unsigned int) m_audio_codecs_av.size() - 1)); }
  210     inline void SetAudioKBitRate(unsigned int kbit_rate) { m_lineedit_audio_kbit_rate->setText(QString::number(kbit_rate)); }
  211     inline void SetAudioOptions(const QString& options) { m_lineedit_audio_options->setText(options); }
  212 
  213 };