14 QString idTag(
":WHEREID");
15 QString query(
"id = " + idTag);
27 const QString& name) :
43 QString profileTag(
":SETPROFILE");
44 QString nameTag(
":SETNAME");
45 QString valueTag(
":SETVALUE");
47 QString query(
"profile = " + profileTag +
", name = " + nameTag
48 +
", value = " + valueTag);
59 QString profileTag(
":WHEREPROFILE");
60 QString nameTag(
":WHERENAME");
62 QString query(
"profile = " + profileTag +
" AND name = " + nameTag);
89 setLabel(QObject::tr(
"MP3 quality"));
91 setHelpText(QObject::tr(
"The higher the slider number, the lower the "
92 "quality of the audio. Better quality audio (lower "
93 "numbers) requires more CPU."));
104 setLabel(QObject::tr(
"Volume (%)"));
106 setHelpText(QObject::tr(
"Recording volume of the capture card."));
116 setLabel(QObject::tr(
"Sampling rate"));
117 setHelpText(QObject::tr(
"Sets the audio sampling rate for your DSP. "
118 "Ensure that you choose a sampling rate appropriate "
119 "for your device. btaudio may only allow 32000."));
126 for (
uint i = 0; analog && (i <
m_rates.size()); i++)
151 const QString& value = QString(),
154 QString val = value.isEmpty() ? label : value;
155 uint rate = val.toUInt();
162 LOG(VB_GENERAL, LOG_ERR, QString(
"SampleRate: ") +
163 QString(
"Attempted to add a rate %1 Hz, which is "
164 "not in the list of allowed rates.").arg(rate));
176 bool layer1,
bool layer2,
bool layer3) :
189 uint allowed_cnt = 0;
194 if (1 == allowed_cnt)
267 setHelpText(QObject::tr(
"Sets the audio bitrate"));
295 setHelpText(QObject::tr(
"Sets the audio bitrate"));
323 setHelpText(QObject::tr(
"Sets the audio bitrate"));
335 setLabel(QObject::tr(
"Volume (%)"));
337 setHelpText(QObject::tr(
"Volume of the recording "));
345 bool layer1,
bool layer2,
bool layer3,
348 const std::array<const QString,3> layers {
"Layer I",
"Layer II",
"Layer III", };
350 setLabel(QObject::tr(
"Bitrate Settings"));
352 auto *audType =
new MPEG2audType(parent, layer1, layer2, layer3);
361 int which = audType->getValueIndex(layers[desired_layer]);
363 audType->setValue(which);
373 setLabel(QObject::tr(
"SAP/Bilingual"));
381 "Chooses the language(s) to record when "
382 "two languages are broadcast. Only Layer II "
383 "supports the recording of two languages (Dual)."
384 "Requires ivtv 0.4.0 or later."));
392 const QString& setting =
"mpeg2bitratemode") :
396 setLabel(QObject::tr(
"Bitrate Mode"));
413 setName(QObject::tr(
"Audio Quality"));
417 QString label(
"MP3");
422 label =
"MPEG-2 Hardware Encoder";
430 label =
"Uncompressed";
454 for (
const auto & option : std::as_const(
options))
458 for (
const auto & Imenu : std::as_const(option.m_menu))
460 if (!Imenu.isEmpty())
468 for (
const auto & option : std::as_const(
options))
475 else if (option.m_category ==
481 else if (option.m_category ==
493 for (
const auto & Imenu : std::as_const(option.m_menu))
495 if (Imenu.indexOf(
"Layer III") >= 0)
497 else if (Imenu.indexOf(
"Layer II") >= 0)
499 else if (Imenu.indexOf(
"Layer I") >= 0)
503 if (layer1 || layer2 || layer3)
526 if (!groupType.isNull())
528 if (groupType ==
"MPEG")
530 else if (groupType ==
"HDPVR")
535 else if (groupType.startsWith(
"V4L2:"))
579 setLabel(QObject::tr(
"RTjpeg Quality"));
581 setHelpText(QObject::tr(
"Higher is better quality."));
592 setLabel(QObject::tr(
"Luma filter"));
605 setLabel(QObject::tr(
"Chroma filter"));
618 setLabel(QObject::tr(
"Bitrate (kb/s)"));
620 setHelpText(QObject::tr(
"Bitrate in kilobits/second. As a guide, "
621 "2200 kb/s is approximately 1 GB/hr."));
632 setLabel(QObject::tr(
"Scale bitrate for frame size"));
634 setHelpText(QObject::tr(
"If set, the bitrate specified will be used "
635 "for 640x480. If other resolutions are used, the "
636 "bitrate will be scaled appropriately."));
647 setLabel(QObject::tr(
"Minimum quality"));
649 setHelpText(QObject::tr(
"Modifying the default may have severe "
661 setLabel(QObject::tr(
"Maximum quality"));
663 setHelpText(QObject::tr(
"Modifying the default may have severe "
676 setLabel(QObject::tr(
"Max quality difference between frames"));
678 setHelpText(QObject::tr(
"Modifying the default may have severe "
690 setLabel(QObject::tr(
"Enable interlaced DCT encoding"));
692 setHelpText(QObject::tr(
"If set, the MPEG4 encoder will use "
693 "interlaced DCT encoding. You may want this when encoding "
694 "interlaced video; however, this is experimental and may "
695 "cause damaged video."));
706 setLabel(QObject::tr(
"Enable interlaced motion estimation"));
708 setHelpText(QObject::tr(
"If set, the MPEG4 encoder will use "
709 "interlaced motion estimation. You may want this when "
710 "encoding interlaced video; however, this is experimental "
711 "and may cause damaged video."));
722 setLabel(QObject::tr(
"Enable high-quality encoding"));
724 setHelpText(QObject::tr(
"If set, the MPEG4 encoder will use "
725 "'high-quality' encoding options. This requires much "
726 "more processing, but can result in better video."));
737 setLabel(QObject::tr(
"Enable 4MV encoding"));
739 setHelpText(QObject::tr(
"If set, the MPEG4 encoder will use '4MV' "
740 "motion-vector encoding. This requires "
741 "much more processing, but can result in better "
742 "video. It is highly recommended that the HQ option is "
743 "enabled if 4MV is enabled."));
755 setLabel(QObject::tr(
"Number of threads"));
758 QObject::tr(
"Threads to use for software encoding.") +
" " +
759 QObject::tr(
"Set to a value less than or equal to the "
760 "number of processors on the backend that "
761 "will be doing the encoding."));
769 const QString& setting =
"mpeg2bitrate",
770 uint min_br = 1000,
uint max_br = 16000,
771 uint default_br = 4500,
uint increment = 100,
772 QString label = QString()) :
777 label = QObject::tr(
"Avg. Bitrate (kb/s)");
781 "Average bitrate in kilobits/second. As a guide, "
782 "2200 kb/s is approximately 1 GB/hour."));
790 const QString& setting =
"mpeg2maxbitrate",
791 uint min_br = 1000,
uint max_br = 16000,
792 uint default_br = 6000,
uint increment = 100,
793 QString label = QString()) :
798 label = QObject::tr(
"Max. Bitrate (kb/s)");
801 setHelpText(QObject::tr(
"Maximum bitrate in kilobits/second. "
802 "As a guide, 2200 kb/s is approximately 1 GB/hour."));
814 maxopt = std::min<uint>(maxopt, 8);
816 setLabel(QObject::tr(
"Stream Type"));
818 const std::array<const QString,9>
options {
"MPEG-2 PS",
"MPEG-2 TS",
819 "MPEG-1 VCD",
"PES AV",
821 "DVD",
"DVD-Special 1",
"DVD-Special 2" };
823 for (
uint idx = minopt; idx <= maxopt; ++idx)
827 setHelpText(QObject::tr(
"Sets the type of stream generated by "
840 maxopt = std::min<uint>(maxopt, 3);
842 setLabel(QObject::tr(
"Aspect Ratio"));
844 const std::array<const QString,4>
options { QObject::tr(
"Square"),
"4:3",
847 for (
uint idx = minopt; idx <= maxopt; ++idx)
851 setHelpText(QObject::tr(
"Sets the aspect ratio of stream generated "
876 setLabel(QObject::tr(
"Horizontal Decimation"));
891 setLabel(QObject::tr(
"Vertical Decimation"));
907 setName(QObject::tr(
"Video Compression"));
911 QString label(
"RTjpeg");
940 label =
"Hardware MJPEG";
945 label =
"MPEG-2 Hardware Encoder";
951 label =
"MPEG-4 AVC Hardware Encoder";
953 h0->setLabel(QObject::tr(
"Low Resolution"));
955 1000, 13500, 4500, 500));
957 1100, 20200, 6000, 500));
961 h1->setLabel(QObject::tr(
"Medium Resolution"));
963 1000, 13500, 9000, 500));
965 1100, 20200, 11000, 500));
969 h2->setLabel(QObject::tr(
"High Resolution"));
971 1000, 13500, 13500, 500));
973 1100, 20200, 20200, 500));
987 for (
const auto & option : std::as_const(
options))
991 for (
const auto & Imenu : std::as_const(option.m_menu))
993 if (!Imenu.isEmpty())
1004 bool dynamic_res = !v4l2->UserAdjustableResolution();
1014 option.m_defaultValue));
1022 option.m_defaultValue));
1024 else if (option.m_category ==
1030 "low_mpegbitratemode"));
1032 "medium_mpegbitratemode"));
1034 "medium_mpegbitratemode"));
1045 bit_low->setLabel(QObject::tr(
"Low Resolution"));
1047 "low_mpegavgbitrate",
1048 option.m_minimum / 1000,
1049 option.m_maximum / 1000,
1050 option.m_defaultValue / 1000,
1051 option.m_step / 1000));
1053 bit_medium->setLabel(QObject::
1054 tr(
"Medium Resolution"));
1056 "medium_mpegavgbitrate",
1057 option.m_minimum / 1000,
1058 option.m_maximum / 1000,
1059 option.m_defaultValue / 1000,
1060 option.m_step / 1000));
1062 bit_high->setLabel(QObject::
1063 tr(
"High Resolution"));
1065 "high_mpegavgbitrate",
1066 option.m_minimum / 1000,
1067 option.m_maximum / 1000,
1068 option.m_defaultValue / 1000,
1069 option.m_step / 1000));
1073 bit_low->setLabel(QObject::tr(
"Bitrate"));
1076 option.m_minimum / 1000,
1077 option.m_maximum / 1000,
1078 option.m_defaultValue / 1000,
1079 option.m_step / 1000));
1082 else if (option.m_category ==
1088 "low_mpegpeakbitrate",
1089 option.m_minimum / 1000,
1090 option.m_maximum / 1000,
1091 option.m_defaultValue / 1000,
1092 option.m_step / 1000));
1094 "medium_mpegpeakbitrate",
1095 option.m_minimum / 1000,
1096 option.m_maximum / 1000,
1097 option.m_defaultValue / 1000,
1098 option.m_step / 1000));
1100 "high_mpegpeakbitrate",
1101 option.m_minimum / 1000,
1102 option.m_maximum / 1000,
1103 option.m_defaultValue / 1000,
1104 option.m_step / 1000));
1110 option.m_minimum / 1000,
1111 option.m_maximum / 1000,
1112 option.m_defaultValue / 1000,
1113 option.m_step / 1000));
1138 if (!groupType.isNull())
1140 if (groupType ==
"HDPVR")
1142 else if (groupType.startsWith(
"V4L2:"))
1147 else if (groupType ==
"MPEG")
1151 else if (groupType ==
"MJPEG")
1155 else if (groupType ==
"GO7007")
1189 setLabel(QObject::tr(
"Enable auto-transcode after recording"));
1191 setHelpText(QObject::tr(
"Automatically transcode when a recording is "
1192 "made using this profile and the recording's "
1193 "schedule is configured to allow transcoding."));
1204 setLabel(QObject::tr(
"Resize video while transcoding"));
1206 setHelpText(QObject::tr(
"Allows the transcoder to "
1207 "resize the video during transcoding."));
1218 setLabel(QObject::tr(
"Lossless transcoding"));
1220 setHelpText(QObject::tr(
"Only reencode where absolutely needed "
1221 "(normally only around cutpoints). Otherwise "
1222 "keep audio and video formats identical to "
1223 "the source. This should result in the "
1224 "highest quality, but won't save as much "
1235 setLabel(QObject::tr(
"Recording Type"));
1237 QString msg = QObject::tr(
1238 "This option allows you to filter out unwanted streams. "
1239 "'Normal' will record all relevant streams including "
1240 "interactive television data. 'TV Only' will record only "
1241 "audio, video and subtitle streams. ");
1257 setLabel(QObject::tr(
"Record Full TS?"));
1259 QString msg = QObject::tr(
1260 "If set, extra files will be created for each recording with "
1261 "the name of the recording followed by '.ts.raw'. "
1262 "These extra files represent the full contents of the transport "
1263 "stream used to generate the recording. (For debugging purposes)");
1279 setLabel(QObject::tr(
"Custom filters"));
1280 setHelpText(QObject::tr(
"Filters used when transcoding with this "
1281 "profile. This value must be blank to perform "
1282 "lossless transcoding. Format: "
1283 "[[<filter>=<options>,]...]"
1296 bool transcoding =
false) :
1299 transcoding ? QObject::tr(
"Auto") : QString()),
1305 QString
help = (transcoding) ?
1306 QObject::tr(
"If the width is set to 'Auto', the width "
1307 "will be calculated based on the height and "
1308 "the recording's physical aspect ratio.") :
1309 QObject::tr(
"Width to use for encoding. "
1310 "Note: PVR-x50 cards may produce ghosting if "
1311 "this is not set to 720 or 768 for NTSC and "
1312 "PAL, respectively.");
1322 uint defaultheight,
uint maxheight,
1323 bool transcoding =
false):
1326 transcoding ? QObject::tr(
"Auto") : QString()),
1332 QString
help = (transcoding) ?
1333 QObject::tr(
"If the height is set to 'Auto', the height "
1334 "will be calculated based on the width and "
1335 "the recording's physical aspect ratio.") :
1336 QObject::tr(
"Height to use for encoding. "
1337 "Note: PVR-x50 cards may produce ghosting if "
1338 "this is not set to 480 or 576 for NTSC and "
1339 "PAL, respectively.");
1346 const QString& tvFormat,
const QString& profName)
1348 setLabel(QObject::tr(
"Image size"));
1350 QSize defaultsize(768, 576);
1351 QSize maxsize(768, 576);
1352 bool transcoding = profName.startsWith(
"Transcoders");
1353 bool ivtv = profName.startsWith(
"IVTV MPEG-2 Encoders");
1357 maxsize = QSize(1920, 1088);
1358 if (tvFormat.toLower() ==
"ntsc" || tvFormat.toLower() ==
"atsc")
1359 defaultsize = QSize(480, 480);
1361 defaultsize = QSize(480, 576);
1363 else if (tvFormat.startsWith(
"ntsc", Qt::CaseInsensitive))
1365 maxsize = QSize(720, 480);
1366 defaultsize = (ivtv) ? QSize(720, 480) : QSize(480, 480);
1368 else if (tvFormat.toLower() ==
"atsc")
1370 maxsize = QSize(1920, 1088);
1371 defaultsize = QSize(1920, 1088);
1375 maxsize = QSize(768, 576);
1376 defaultsize = (ivtv) ? QSize(720, 576) : QSize(480, 576);
1380 maxsize.width(), transcoding));
1382 maxsize.height(), transcoding));
1389 m_name(new
Name(*this)),
1390 m_profileName(profName)
1398 if (!profName.isEmpty())
1400 if (profName.startsWith(
"Transcoders"))
1456 "SELECT cardtype, profilegroups.name "
1457 "FROM profilegroups, recordingprofiles "
1458 "WHERE profilegroups.id = recordingprofiles.profilegroup AND "
1459 " recordingprofiles.id = :PROFILEID");
1460 result.
bindValue(
":PROFILEID", profileId);
1468 else if (result.
next())
1471 name = result.
value(1).toString();
1480 if (!val.trimmed().isEmpty())
1492 [[maybe_unused]]
const QString &videodev)
1495 QString cardtype = card;
1499 if (cardtype ==
"V4L2ENC")
1509 "SELECT recordingprofiles.id, profilegroups.hostname, "
1510 " profilegroups.is_default "
1511 "FROM recordingprofiles, profilegroups "
1512 "WHERE profilegroups.id = recordingprofiles.profilegroup AND "
1513 " profilegroups.cardtype = :CARDTYPE AND "
1514 " recordingprofiles.name = :NAME");
1515 result.
bindValue(
":CARDTYPE", cardtype);
1524 while (result.
next())
1528 profileId = result.
value(0).toUInt();
1530 else if (result.
value(2).toInt() == 1)
1532 profileId = result.
value(0).toUInt();
1550 "SELECT recordingprofiles.id, cardtype "
1551 "FROM recordingprofiles, profilegroups "
1552 "WHERE recordingprofiles.profilegroup = profilegroups.id AND "
1553 " profilegroups.name = :GROUPNAME AND "
1554 " recordingprofiles.name = :NAME");
1566 uint profileId = result.
value(0).toUInt();
1567 QString
type = result.
value(1).toString();
1577 const QString &name)
1587 if (
type.startsWith(
"V4L2:"))
1590 if (!devices.isEmpty())
1592 for (
const auto & device : std::as_const(devices))
1608 if (
type !=
"HDPVR" &&
1660 m_group(id), m_labelName(
std::move(profName))
1680 tr(
"Enter the name of the new profile"));
1682 if (settingdialog->Create())
1690 delete settingdialog;
1698 "INSERT INTO recordingprofiles "
1699 "(name, videocodec, audiocodec, profilegroup) "
1701 "(:NAME, :VIDEOCODEC, :AUDIOCODEC, :PROFILEGROUP);");
1703 query.
bindValue(
":VIDEOCODEC",
"MPEG-4");
1714 "FROM recordingprofiles "
1715 "WHERE name = :NAME AND profilegroup = :PROFILEGROUP;");
1738 bool foldautodetect)
1754 "FROM recordingprofiles "
1755 "WHERE profilegroup = :GROUP "
1765 while (result.
next())
1767 if ((result.
at() == 0) && foldautodetect &&
1771 autodetect->setLabel(QObject::tr(
"Autodetect"));
1775 QString name = result.
value(0).toString();
1776 QString
id = result.
value(1).toString();
1779 (name ==
"RTjpeg/MPEG4" || name ==
"MPEG2") &&
1781 name = QObject::tr(
"Autodetect from %1").arg(name);
1785 profile->loadByID(
id.toInt());
1793 QMap<int, QString> profiles;
1805 "FROM recordingprofiles "
1806 "WHERE profilegroup = :GROUPID "
1816 while (query.
next())
1821 profiles[id] = QObject::tr(
"Transcode using Autodetect");
1824 QString name = query.
value(0).toString();
1825 int id = query.
value(1).toInt();
1830 if (name !=
"RTjpeg/MPEG4" && name !=
"MPEG2")
1832 QString lbl = QObject::tr(
"Transcode using \"%1\"").arg(name);
1838 QString lbl = QObject::tr(
"Record using the \"%1\" profile").arg(name);
1842 if (query.
at() == QSql::BeforeFirstRow)
1844 LOG(VB_GENERAL, LOG_WARNING,
1845 "RecordingProfile::fillselections, Warning: "
1846 "Failed to locate recording id for recording group.");
1861 "SELECT profilegroups.cardtype "
1862 "FROM profilegroups, recordingprofiles "
1863 "WHERE profilegroups.id = recordingprofiles.profilegroup AND "
1864 " recordingprofiles.id = :ID");
1869 else if (result.
next())
1870 return result.
value(0).toString();
1880 "FROM recordingprofiles "
1887 else if (result.
next())
1888 return result.
value(0).toString();
1903 "FROM recordingprofiles "
AudioCodecName(const RecordingProfile &parent)
AudioCodecName * m_codecName
const RecordingProfile & m_parent
void selectCodecs(const QString &groupType)
AudioCompressionSettings(const RecordingProfile &parentProfile, V4L2util *v4l2)
AutoTranscode(const RecordingProfile &parent)
AverageBitrate(const RecordingProfile &parent, const QString &setting="mpeg2bitrate", uint min_br=1000, uint max_br=16000, uint default_br=4500, uint increment=100, QString label=QString())
BTTVVolume(const RecordingProfile &parent)
BitrateMode(const RecordingProfile &parent, const QString &setting="mpeg2bitratemode")
static bool IsTunerSharingCapable(const QString &rawtype)
static QStringList GetVideoDevices(const QString &rawtype, QString hostname=QString())
Returns the videodevices of the matching inputs, duplicates removed.
static bool IsEITCapable(const QString &rawtype)
static bool IsEncoder(const QString &rawtype)
const RecordingProfile & m_parent
QString GetSetClause(MSqlBindings &bindings) const override
QString GetWhereClause(MSqlBindings &bindings) const override
CodecParamStorage(StandardSetting *_setting, const RecordingProfile &parentProfile, const QString &name)
EncodingThreadCount(const RecordingProfile &parent)
HardwareMJPEGHDecimation(const RecordingProfile &parent)
HardwareMJPEGQuality(const RecordingProfile &parent)
HardwareMJPEGVDecimation(const RecordingProfile &parent)
Height(const RecordingProfile &parent, uint defaultheight, uint maxheight, bool transcoding=false)
Width(const RecordingProfile &parent, uint defaultwidth, uint maxwidth, bool transcoding=false)
ImageSize(const RecordingProfile &parent, const QString &tvFormat, const QString &profName)
MP3Quality(const RecordingProfile &parent)
MPEG2AudioBitrateSettings(const RecordingProfile &parent, bool layer1, bool layer2, bool layer3, uint default_layer)
MPEG2Language(const RecordingProfile &parent)
MPEG2aspectRatio(const RecordingProfile &parent, uint minopt=0, uint maxopt=8, uint defopt=0)
MPEG2audBitrateL1(const RecordingProfile &parent)
MPEG2audBitrateL2(const RecordingProfile &parent)
MPEG2audBitrateL3(const RecordingProfile &parent)
MPEG2audType(const RecordingProfile &parent, bool layer1, bool layer2, bool layer3)
MPEG2audVolume(const RecordingProfile &parent)
MPEG2streamType(const RecordingProfile &parent, uint minopt=0, uint maxopt=8, uint defopt=0)
MPEG4MaxQuality(const RecordingProfile &parent)
MPEG4MinQuality(const RecordingProfile &parent)
MPEG4Option4MV(const RecordingProfile &parent)
MPEG4OptionIDCT(const RecordingProfile &parent)
MPEG4OptionIME(const RecordingProfile &parent)
MPEG4OptionVHQ(const RecordingProfile &parent)
MPEG4QualDiff(const RecordingProfile &parent)
MPEG4bitrate(const RecordingProfile &parent)
QSqlQuery wrapper that fetches a DB connection from the connection pool.
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
QVariant value(int i) const
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
QString GetHostName(void)
QString GetSetting(const QString &key, const QString &defaultval="")
static void DBError(const QString &where, const MSqlQuery &query)
MythScreenStack * GetStack(const QString &Stackname)
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Dialog prompting the user to enter a text string.
void setValue(const QString &newValue) override
void addSelection(const QString &label, QString value=QString(), bool select=false)
void setValue(int value) override
int getValueIndex(const QString &value) const
PeakBitrate(const RecordingProfile &parent, const QString &setting="mpeg2maxbitrate", uint min_br=1000, uint max_br=16000, uint default_br=6000, uint increment=100, QString label=QString())
RTjpegChromaFilter(const RecordingProfile &parent)
RTjpegLumaFilter(const RecordingProfile &parent)
RTjpegQuality(const RecordingProfile &parent)
RecordFullTSStream(const RecordingProfile &parent)
void CreateNewProfile(const QString &profName)
void ShowNewProfileDialog() const
RecordingProfileEditor(int id, QString profName)
QString GetWhereClause(MSqlBindings &bindings) const override
const RecordingProfile & m_parent
~RecordingProfile(void) override
int getProfileNum(void) const
static const uint kTranscoderAutodetect
sentinel value
void FiltersChanged(const QString &val)
QString getName(void) const
RecordingProfile(const QString &profName=QString())
TranscodeResize * m_trResize
bool canDelete(void) override
void SetLosslessTranscode(const QString &val)
virtual void CompleteLoad(int profileId, const QString &type, const QString &name)
static QMap< int, QString > GetTranscodingProfiles()
virtual bool loadByType(const QString &name, const QString &cardtype, const QString &videodev)
TranscodeFilters * m_trFilters
static QMap< int, QString > GetProfiles(RecProfileGroup group=AllGroups)
static void fillSelections(GroupSetting *setting, int group, bool foldautodetect=false)
void ResizeTranscode(const QString &val)
TranscodeLossless * m_trLossless
VideoCompressionSettings * m_videoSettings
virtual void loadByID(int id)
QString groupType(void) const
AudioCompressionSettings * m_audioSettings
virtual bool loadByGroup(const QString &name, const QString &group)
void deleteEntry(void) override
RecordingTypeStream(const RecordingProfile &parent)
QMap< uint, bool > m_allowedRate
void addSelection(const QString &label, const QString &value=QString(), bool select=false)
SampleRate(const RecordingProfile &parent, bool analog=true)
std::vector< uint > m_rates
ScaleBitrate(const RecordingProfile &parent)
virtual void addChild(StandardSetting *child)
virtual void setName(const QString &name)
void addTargetedChild(const QString &value, StandardSetting *setting)
virtual void clearSettings()
void settingsChanged(StandardSetting *selectedSetting=nullptr)
virtual void setHelpText(const QString &str)
virtual void setValue(const QString &newValue)
void valueChanged(const QString &newValue)
virtual QString getValue(void) const
virtual void setEnabled(bool enabled)
virtual void setLabel(QString str)
virtual QString GetDBValue(void) const =0
TranscodeFilters(const RecordingProfile &parent)
TranscodeLossless(const RecordingProfile &parent)
TranscodeResize(const RecordingProfile &parent)
bool UserAdjustableResolution(void) const
QString DriverName(void) const
QString ProfileName(void) const
VideoCodecName(const RecordingProfile &parent)
VideoCompressionSettings(const RecordingProfile &parentProfile, V4L2util *v4l2)
VideoCodecName * m_codecName
void selectCodecs(const QString &groupType)
const RecordingProfile & m_parent
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
MythMainWindow * GetMythMainWindow(void)
static eu8 clamp(eu8 value, eu8 low, eu8 high)
const std::array< QString, 4 > kAvailProfiles
QMap< category_t, DriverOption > Options