Skip to content

Commit d51a7f1

Browse files
committed
src/player/playeradapter: make tracks values rather than pointers
Make tracks allocated in QList rather than allocated invididually. This should simplify memory mangement since it isn't necessary.
1 parent f2bde38 commit d51a7f1

File tree

8 files changed

+83
-72
lines changed

8 files changed

+83
-72
lines changed

src/gui/widgets/overlay/playermenu.cpp

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,8 @@ PlayerMenu::PlayerMenu(QPointer<Context> context, QWidget *parent) :
161161
m_context, &Context::playerFileLoaded, this,
162162
[this]
163163
{
164-
QList<const Track *> tracks =
165-
m_context->getPlayerAdapter()->getTracks();
164+
QList<Track> tracks = m_context->getPlayerAdapter()->getTracks();
166165
setTracks(tracks);
167-
for (const Track *track : tracks)
168-
{
169-
delete track;
170-
}
171166
}
172167
);
173168

@@ -395,19 +390,19 @@ void PlayerMenu::clearTracks()
395390

396391
#define MAX_LENGTH 45
397392

398-
QAction *PlayerMenu::createTrackAction(const Track *track) const
393+
QAction *PlayerMenu::createTrackAction(const Track &track) const
399394
{
400395
QAction *action = new QAction;
401396
action->setCheckable(true);
402397

403-
QString actionText = "Track " + QString::number(track->id);
404-
if (!track->lang.isEmpty())
398+
QString actionText = "Track " + QString::number(track.id);
399+
if (!track.lang.isEmpty())
405400
{
406-
actionText += " [" + track->lang + "]";
401+
actionText += " [" + track.lang + "]";
407402
}
408-
if (!track->title.isEmpty())
403+
if (!track.title.isEmpty())
409404
{
410-
actionText += " - " + track->title;
405+
actionText += " - " + track.title;
411406
}
412407
if (actionText.length() > MAX_LENGTH)
413408
{
@@ -421,26 +416,26 @@ QAction *PlayerMenu::createTrackAction(const Track *track) const
421416

422417
#undef MAX_LENGTH
423418

424-
void PlayerMenu::setTracks(const QList<const Track *> &tracks)
419+
void PlayerMenu::setTracks(const QList<Track> &tracks)
425420
{
426421
clearTracks();
427422

428423
m_actionGroups.audio->blockSignals(true);
429424
m_actionGroups.subtitle->blockSignals(true);
430425
m_actionGroups.subtitleTwo->blockSignals(true);
431426

432-
for (const Track *track : tracks)
427+
for (const Track &track : tracks)
433428
{
434429
QAction *action = createTrackAction(track);
435-
const int64_t id = track->id;
436-
switch (track->type)
430+
const int64_t id = track.id;
431+
switch (track.type)
437432
{
438433
case Track::Type::audio:
439434
m_ui->menuAudio->addAction(action);
440435
action->setActionGroup(m_actionGroups.audio);
441436
m_actionGroups.audioActions.append(action);
442437

443-
if (track->selected)
438+
if (track.selected)
444439
{
445440
action->setChecked(true);
446441
m_ui->actionAudioNone->setChecked(false);
@@ -469,13 +464,13 @@ void PlayerMenu::setTracks(const QList<const Track *> &tracks)
469464
actionSubTwo->setActionGroup(m_actionGroups.subtitleTwo);
470465
m_actionGroups.subtitleTwoActions.append(actionSubTwo);
471466

472-
if (track->selected && track->mainSelection == 0)
467+
if (track.selected && track.mainSelection == 0)
473468
{
474469
action->setChecked(true);
475470
m_ui->actionSubtitleNone->setChecked(false);
476471
actionSubTwo->setEnabled(false);
477472
}
478-
else if (track->selected && track->mainSelection == 1)
473+
else if (track.selected && track.mainSelection == 1)
479474
{
480475
actionSubTwo->setChecked(true);
481476
m_ui->actionSubtitleTwoNone->setChecked(false);

src/gui/widgets/overlay/playermenu.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ private Q_SLOTS:
9393
* Updates the menu with the currently available tracks.
9494
* @param tracks A list of the currently available tracks.
9595
*/
96-
void setTracks(const QList<const Track *> &tracks);
96+
void setTracks(const QList<Track> &tracks);
9797

9898
/**
9999
* Changes audio track to the one specified.
@@ -196,7 +196,7 @@ private Q_SLOTS:
196196
* @param track The track to create an action for.
197197
* @return A QAction corresponding to the track. Belongs to the caller.
198198
*/
199-
QAction *createTrackAction(const Track *track) const;
199+
QAction *createTrackAction(const Track &track) const;
200200

201201
/**
202202
* Toggles pausing on subtitle end in response to the menu option.

src/gui/widgets/subtitlelistwidget.cpp

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -342,13 +342,8 @@ void SubtitleListWidget::initRegex()
342342

343343
if (m_context->getPlayerAdapter())
344344
{
345-
QList<const Track *> tracks =
346-
m_context->getPlayerAdapter()->getTracks();
345+
QList<Track> tracks = m_context->getPlayerAdapter()->getTracks();
347346
handleTracklistChange(tracks);
348-
for (const Track *track : tracks)
349-
{
350-
delete track;
351-
}
352347
}
353348
}
354349

@@ -417,33 +412,32 @@ void SubtitleListWidget::resizeEvent(QResizeEvent *event)
417412
/* End Event Handlers */
418413
/* Begin Adder Methods */
419414

420-
void SubtitleListWidget::handleTracklistChange(
421-
const QList<const Track *> &tracks)
415+
void SubtitleListWidget::handleTracklistChange(const QList<Track> &tracks)
422416
{
423417
int64_t primarySid = -1;
424418
int64_t secondarySid = -1;
425419
QStringList extTracks;
426420
QList<int64_t> extSids;
427-
for (const Track *track : tracks)
421+
for (const Track &track : tracks)
428422
{
429-
if (track->type == Track::subtitle)
423+
if (track.type == Track::subtitle)
430424
{
431-
if (track->selected)
425+
if (track.selected)
432426
{
433-
if (track->mainSelection == 0)
427+
if (track.mainSelection == 0)
434428
{
435-
primarySid = track->id;
429+
primarySid = track.id;
436430
}
437431
else
438432
{
439-
secondarySid = track->id;
433+
secondarySid = track.id;
440434
}
441435
}
442436

443-
if (track->external)
437+
if (track.external)
444438
{
445-
extTracks << track->externalFilename;
446-
extSids << track->id;
439+
extTracks.emplaceBack(track.externalFilename);
440+
extSids.emplaceBack(track.id);
447441
}
448442
}
449443
}

src/gui/widgets/subtitlelistwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,9 @@ private Q_SLOTS:
153153

154154
/**
155155
* Handles the track list changing.
156+
* @param tracks The new tracklist.
156157
*/
157-
void handleTracklistChange(const QList<const Track *> &tracks);
158+
void handleTracklistChange(const QList<Track> &tracks);
158159

159160
/**
160161
* Refreshes the contents of the subtitle list.

src/player/mpvadapter.cpp

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,8 @@ MpvAdapter::MpvAdapter(
6262
m_mpv, &MpvWidget::tracklistChanged, this,
6363
[this] (const mpv_node *node)
6464
{
65-
QList<const Track *> tracks = processTracks(node);
65+
QList<Track> tracks = processTracks(node);
6666
emit m_context->playerTracksChanged(tracks);
67-
for (const Track *track : tracks)
68-
{
69-
delete track;
70-
}
7167
}
7268
);
7369
connect(
@@ -493,15 +489,15 @@ double MpvAdapter::getAudioDelay() const
493489
return delay;
494490
}
495491

496-
QList<const Track *> MpvAdapter::getTracks()
492+
QList<Track> MpvAdapter::getTracks()
497493
{
498494
mpv_node node;
499495
if (mpv_get_property(m_handle, "track-list", MPV_FORMAT_NODE, &node) < 0)
500496
{
501497
qDebug() << "Could not get track-list property";
502-
return QList<const Track *>();
498+
return {};
503499
}
504-
QList<const Track *> tracks = processTracks(&node);
500+
QList<Track> tracks = processTracks(&node);
505501
mpv_free_node_contents(&node);
506502
return tracks;
507503
}
@@ -1251,88 +1247,113 @@ void MpvAdapter::mouseWheelMoved(const QWheelEvent *event)
12511247

12521248
/* Code modified from loadTracks() */
12531249
/* https://github.com/u8sand/Baka-MPlayer/blob/master/src/mpvhandler.cpp */
1254-
QList<const Track *> MpvAdapter::processTracks(const mpv_node *node)
1250+
QList<Track> MpvAdapter::processTracks(const mpv_node *node)
12551251
{
1256-
QList<const Track *> tracks;
1252+
QList<Track> tracks;
12571253
if (node->format == MPV_FORMAT_NODE_ARRAY)
12581254
{
12591255
for (int i = 0; i < node->u.list->num; i++)
12601256
{
1261-
Track *track = new Track;
1257+
tracks.emplaceBack(Track{});
12621258
if (node->u.list->values[i].format == MPV_FORMAT_NODE_MAP)
12631259
{
12641260
for (int n = 0; n < node->u.list->values[i].u.list->num; n++)
12651261
{
12661262
if (QString(node->u.list->values[i].u.list->keys[n]) == "id")
12671263
{
12681264
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_INT64)
1269-
track->id = node->u.list->values[i].u.list->values[n].u.int64;
1265+
tracks.back().id = node->u.list->values[i].u.list->values[n].u.int64;
12701266
}
12711267
else if (QString(node->u.list->values[i].u.list->keys[n]) == "type")
12721268
{
12731269
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_STRING)
12741270
{
12751271
QString type = node->u.list->values[i].u.list->values[n].u.string;
12761272
if (type == "audio")
1277-
track->type = Track::Type::audio;
1273+
{
1274+
tracks.back().type = Track::Type::audio;
1275+
}
12781276
else if (type == "video")
1279-
track->type = Track::Type::video;
1277+
{
1278+
tracks.back().type = Track::Type::video;
1279+
}
12801280
else if (type == "sub")
1281-
track->type = Track::Type::subtitle;
1281+
{
1282+
tracks.back().type = Track::Type::subtitle;
1283+
}
12821284
}
12831285
}
12841286
else if (QString(node->u.list->values[i].u.list->keys[n]) == "src-id")
12851287
{
12861288
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_INT64)
1287-
track->srcId = node->u.list->values[i].u.list->values[n].u.int64;
1289+
{
1290+
tracks.back().srcId = node->u.list->values[i].u.list->values[n].u.int64;
1291+
}
12881292
}
12891293
else if (QString(node->u.list->values[i].u.list->keys[n]) == "title")
12901294
{
12911295
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_STRING)
1292-
track->title = node->u.list->values[i].u.list->values[n].u.string;
1296+
{
1297+
tracks.back().title = node->u.list->values[i].u.list->values[n].u.string;
1298+
}
12931299
}
12941300
else if (QString(node->u.list->values[i].u.list->keys[n]) == "lang")
12951301
{
12961302
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_STRING)
1297-
track->lang = node->u.list->values[i].u.list->values[n].u.string;
1303+
{
1304+
tracks.back().lang = node->u.list->values[i].u.list->values[n].u.string;
1305+
}
12981306
}
12991307
else if (QString(node->u.list->values[i].u.list->keys[n]) == "albumart")
13001308
{
13011309
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_FLAG)
1302-
track->albumart = node->u.list->values[i].u.list->values[n].u.flag != 0;
1310+
{
1311+
tracks.back().albumart = node->u.list->values[i].u.list->values[n].u.flag != 0;
1312+
}
13031313
}
13041314
else if (QString(node->u.list->values[i].u.list->keys[n]) == "default")
13051315
{
13061316
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_FLAG)
1307-
track->def = node->u.list->values[i].u.list->values[n].u.flag != 0;
1317+
{
1318+
tracks.back().def = node->u.list->values[i].u.list->values[n].u.flag != 0;
1319+
}
13081320
}
13091321
else if (QString(node->u.list->values[i].u.list->keys[n]) == "selected")
13101322
{
13111323
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_FLAG)
1312-
track->selected = node->u.list->values[i].u.list->values[n].u.flag != 0;
1324+
{
1325+
tracks.back().selected = node->u.list->values[i].u.list->values[n].u.flag != 0;
1326+
}
13131327
}
13141328
else if (QString(node->u.list->values[i].u.list->keys[n]) == "main-selection")
13151329
{
13161330
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_INT64)
1317-
track->mainSelection = node->u.list->values[i].u.list->values[n].u.int64;
1331+
{
1332+
tracks.back().mainSelection = node->u.list->values[i].u.list->values[n].u.int64;
1333+
}
13181334
}
13191335
else if (QString(node->u.list->values[i].u.list->keys[n]) == "external")
13201336
{
13211337
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_FLAG)
1322-
track->external = node->u.list->values[i].u.list->values[n].u.flag != 0;
1338+
{
1339+
tracks.back().external = node->u.list->values[i].u.list->values[n].u.flag != 0;
1340+
}
13231341
}
13241342
else if (QString(node->u.list->values[i].u.list->keys[n]) == "external-filename")
13251343
{
13261344
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_STRING)
1327-
track->externalFilename = node->u.list->values[i].u.list->values[n].u.string;
1345+
{
1346+
tracks.back().externalFilename = node->u.list->values[i].u.list->values[n].u.string;
1347+
}
13281348
}
13291349
else if (QString(node->u.list->values[i].u.list->keys[n]) == "codec")
13301350
{
13311351
if (node->u.list->values[i].u.list->values[n].format == MPV_FORMAT_STRING)
1332-
track->codec = node->u.list->values[i].u.list->values[n].u.string;
1352+
{
1353+
tracks.back().codec = node->u.list->values[i].u.list->values[n].u.string;
1354+
}
13331355
}
13341356
}
1335-
tracks.push_back(track);
13361357
}
13371358
}
13381359
}

src/player/mpvadapter.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class MpvAdapter : public PlayerAdapter
6666

6767
double getAudioDelay() const override;
6868

69-
QList<const Track *> getTracks() override;
69+
QList<Track> getTracks() override;
7070

7171
int64_t getAudioTrack() const override;
7272

@@ -147,7 +147,8 @@ private Q_SLOTS:
147147
* @param node The mpv_node containing the raw track-list.
148148
* @return A list containing the tracks.
149149
*/
150-
QList<const Track *> processTracks(const mpv_node *node);
150+
[[nodiscard]]
151+
static QList<Track> processTracks(const mpv_node *node);
151152

152153
private:
153154
/* Node in the command line argument multi-tree. */

src/player/playeradapter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ class PlayerAdapter : public QObject
109109

110110
/**
111111
* Returns a list of the current tracks.
112-
* @return A list of the current tracks. Tracks belong to the callee.
112+
* @return A list of the current tracks.
113113
*/
114-
virtual QList<const Track *> getTracks() = 0;
114+
virtual QList<Track> getTracks() = 0;
115115

116116
/**
117117
* Get the id of the current audio track starting.

src/state/context.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,9 @@ class Context : public QObject
175175

176176
/**
177177
* Emitted when the player tracks change.
178-
* @param tracks A list of player tracks. All tracks are deleted when
179-
* callees return.
178+
* @param tracks A list of player tracks.
180179
*/
181-
void playerTracksChanged(const QList<const Track *> &tracks) const;
180+
void playerTracksChanged(const QList<Track> &tracks) const;
182181

183182
/**
184183
* Emitted when the player chapters change.

0 commit comments

Comments
 (0)