Skip to content

Commit 5a01e1b

Browse files
committed
[新增目标色彩空间设置功能]:在播放器中增加了目标色彩空间的设置选项,允许用户根据需要选择不同的色彩空间。
- 在`ffmpegplayer`和`mpvplayer`的`mainwindow`中新增了`createTargetPrimariesMenu`函数,用于创建目标色彩空间的菜单选项。 - 为`ffmpegplayer`的`MainWindow`类新增了连接,当用户选择不同的目标色彩空间时,会更新视频渲染器的色彩空间设置。 - 为`mpvplayer`的`MpvPlayer`类新增了获取、设置目标色彩空间的函数,并在`mpvplayer`的`MainWindow`中使用了这些新函数来响应用户的选择。 - 移除了`ffmpegplayer`中旧的`destPrimarisMenu`函数,并用新的功能替换。 - 更新了`mpvplayer`的`MpvPlayer`类头文件,添加了目标色彩空间相关的公共成员函数声明。
1 parent e9dfc6a commit 5a01e1b

File tree

5 files changed

+85
-32
lines changed

5 files changed

+85
-32
lines changed

examples/ffmpegplayer/mainwindow.cpp

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,35 @@ class MainWindow::MainWindowPrivate
106106
return menu;
107107
}
108108

109+
auto createTargetPrimariesMenu() -> QMenu *
110+
{
111+
auto *group = new QActionGroup(q_ptr);
112+
group->setExclusive(true);
113+
auto *menu = new QMenu(QCoreApplication::translate("MainWindowPrivate", "Target Primaries"),
114+
q_ptr);
115+
auto primaris = QMetaEnum::fromType<Ffmpeg::ColorUtils::Primaries::Type>();
116+
for (int i = 0; i < primaris.keyCount(); ++i) {
117+
auto value = primaris.value(i);
118+
auto *action = new QAction(primaris.key(i), q_ptr);
119+
action->setCheckable(true);
120+
action->setData(value);
121+
group->addAction(action);
122+
menu->addAction(action);
123+
if (value == Ffmpeg::ColorUtils::Primaries::Type::AUTO) {
124+
action->setChecked(true);
125+
}
126+
}
127+
q_ptr->connect(group, &QActionGroup::triggered, q_ptr, [this](QAction *action) {
128+
primarisType = static_cast<Ffmpeg::ColorUtils::Primaries::Type>(action->data().toInt());
129+
if (videoRender.isNull()) {
130+
return;
131+
}
132+
videoRender->setDestPrimaries(primarisType);
133+
});
134+
group->checkedAction()->trigger();
135+
return menu;
136+
}
137+
109138
void resetTrackMenu()
110139
{
111140
auto actions = audioTracksGroup->actions();
@@ -682,8 +711,7 @@ void MainWindow::initMenu()
682711
d_ptr->videoMenu->addAction(equalizerAction);
683712

684713
d_ptr->videoMenu->addMenu(d_ptr->createtoneMappingMenu());
685-
686-
destPrimarisMenu();
714+
d_ptr->videoMenu->addMenu(d_ptr->createTargetPrimariesMenu());
687715

688716
connect(d_ptr->audioTracksGroup, &QActionGroup::triggered, this, [this](QAction *action) {
689717
d_ptr->playerPtr->addEvent(Ffmpeg::EventPtr(
@@ -704,35 +732,6 @@ void MainWindow::initMenu()
704732
connect(d_ptr->mediaInfoAction, &QAction::triggered, this, &MainWindow::onShowMediaInfo);
705733
}
706734

707-
void MainWindow::destPrimarisMenu()
708-
{
709-
auto *destPrimarisGroup = new QActionGroup(this);
710-
destPrimarisGroup->setExclusive(true);
711-
auto *destPrimarisMenu = new QMenu(tr("Dest Primaris"), this);
712-
auto destPrimaris = QMetaEnum::fromType<Ffmpeg::ColorUtils::Primaries::Type>();
713-
for (int i = 0; i < destPrimaris.keyCount(); ++i) {
714-
auto value = destPrimaris.value(i);
715-
auto *action = new QAction(destPrimaris.key(i), this);
716-
action->setCheckable(true);
717-
action->setData(value);
718-
destPrimarisGroup->addAction(action);
719-
destPrimarisMenu->addAction(action);
720-
if (value == Ffmpeg::ColorUtils::Primaries::Type::AUTO) {
721-
action->setChecked(true);
722-
}
723-
}
724-
d_ptr->videoMenu->addMenu(destPrimarisMenu);
725-
connect(destPrimarisGroup, &QActionGroup::triggered, this, [this](QAction *action) {
726-
d_ptr->primarisType = static_cast<Ffmpeg::ColorUtils::Primaries::Type>(
727-
action->data().toInt());
728-
if (d_ptr->videoRender.isNull()) {
729-
return;
730-
}
731-
d_ptr->videoRender->setDestPrimaries(d_ptr->primarisType);
732-
});
733-
destPrimarisGroup->checkedAction()->trigger();
734-
}
735-
736735
void MainWindow::renderMenu()
737736
{
738737
auto *widgetAction = new QAction(tr("Widget"), this);

examples/ffmpegplayer/mainwindow.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ private slots:
3838
void setupUI();
3939
void buildConnect();
4040
void initMenu();
41-
void destPrimarisMenu();
4241
void renderMenu();
4342
void initPlayListMenu();
4443
void addToPlaylist(const QList<QUrl> &urls);

examples/mpvplayer/mainwindow.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,27 @@ class MainWindow::MainWindowPrivate
9898
return menu;
9999
}
100100

101+
auto createTargetPrimariesMenu() -> QMenu *
102+
{
103+
auto *group = new QActionGroup(q_ptr);
104+
group->setExclusive(true);
105+
auto *menu = new QMenu(QCoreApplication::translate("MainWindowPrivate", "Target Primaries"),
106+
q_ptr);
107+
auto targetPrimaries = mpvPlayer->targetPrimaries();
108+
for (const auto &targetPrimary : std::as_const(targetPrimaries)) {
109+
auto *action = new QAction(targetPrimary, q_ptr);
110+
action->setCheckable(true);
111+
group->addAction(action);
112+
menu->addAction(action);
113+
}
114+
group->actions().at(0)->setChecked(true);
115+
q_ptr->connect(group, &QActionGroup::triggered, q_ptr, [this](QAction *action) {
116+
mpvPlayer->setTargetPrimaries(action->text());
117+
});
118+
119+
return menu;
120+
}
121+
101122
void resetTrackMenu()
102123
{
103124
auto actions = audioTracksGroup->actions();
@@ -730,6 +751,7 @@ void MainWindow::initMenu()
730751
connect(equalizerAction, &QAction::triggered, this, &MainWindow::onEqualizer);
731752
d_ptr->videoMenu->addAction(equalizerAction);
732753
d_ptr->videoMenu->addMenu(d_ptr->createtoneMappingMenu());
754+
d_ptr->videoMenu->addMenu(d_ptr->createTargetPrimariesMenu());
733755

734756
connect(d_ptr->videoTracksGroup, &QActionGroup::triggered, this, [this](QAction *action) {
735757
auto data = action->data().value<Mpv::TraskInfo>();

src/mpv/mpvplayer.cc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,35 @@ auto MpvPlayer::toneMapping() const -> QString
468468
return mpv::qt::get_property(d_ptr->mpv, "tone-mapping").toString();
469469
}
470470

471+
QStringList MpvPlayer::targetPrimaries() const
472+
{
473+
static QStringList list{"auto",
474+
"bt.470m",
475+
"bt.601-525",
476+
"bt.601-625",
477+
"bt.709",
478+
"bt.2020",
479+
"apple",
480+
"adobe",
481+
"prophoto",
482+
"cie1931",
483+
"dci-p3",
484+
"v-gamut",
485+
"s-gamut"};
486+
return list;
487+
}
488+
489+
void MpvPlayer::setTargetPrimaries(const QString &targetPrimaries)
490+
{
491+
qInfo() << "target-prim: " << targetPrimaries;
492+
mpv::qt::set_property_async(d_ptr->mpv, "target-prim", targetPrimaries);
493+
}
494+
495+
QString MpvPlayer::targetPrimariesName() const
496+
{
497+
return mpv::qt::get_property(d_ptr->mpv, "target-prim").toString();
498+
}
499+
471500
void MpvPlayer::pauseAsync()
472501
{
473502
auto state = !isPaused();

src/mpv/mpvplayer.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ class MPV_LIB_EXPORT MpvPlayer : public QObject
9999
void setToneMapping(const QString &toneMapping);
100100
[[nodiscard]] auto toneMapping() const -> QString;
101101

102+
[[nodiscard]] auto targetPrimaries() const -> QStringList;
103+
void setTargetPrimaries(const QString &targetPrimaries);
104+
[[nodiscard]] auto targetPrimariesName() const -> QString;
105+
102106
void pauseAsync();
103107
void pauseSync(bool state);
104108
auto isPaused() -> bool;

0 commit comments

Comments
 (0)