decoder/Control: wrap DetachedSong* in std::unique_ptr
This commit is contained in:
parent
9a8a3beae4
commit
28fdf1e9ed
@ -38,8 +38,6 @@ DecoderControl::DecoderControl(Mutex &_mutex, Cond &_client_cond,
|
|||||||
DecoderControl::~DecoderControl() noexcept
|
DecoderControl::~DecoderControl() noexcept
|
||||||
{
|
{
|
||||||
ClearError();
|
ClearError();
|
||||||
|
|
||||||
delete song;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -92,7 +90,7 @@ DecoderControl::IsCurrentSong(const DetachedSong &_song) const noexcept
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DecoderControl::Start(DetachedSong *_song,
|
DecoderControl::Start(std::unique_ptr<DetachedSong> _song,
|
||||||
SongTime _start_time, SongTime _end_time,
|
SongTime _start_time, SongTime _end_time,
|
||||||
MusicBuffer &_buffer, MusicPipe &_pipe) noexcept
|
MusicBuffer &_buffer, MusicPipe &_pipe) noexcept
|
||||||
{
|
{
|
||||||
@ -101,8 +99,7 @@ DecoderControl::Start(DetachedSong *_song,
|
|||||||
assert(_song != nullptr);
|
assert(_song != nullptr);
|
||||||
assert(_pipe.IsEmpty());
|
assert(_pipe.IsEmpty());
|
||||||
|
|
||||||
delete song;
|
song = std::move(_song);
|
||||||
song = _song;
|
|
||||||
start_time = _start_time;
|
start_time = _start_time;
|
||||||
end_time = _end_time;
|
end_time = _end_time;
|
||||||
buffer = &_buffer;
|
buffer = &_buffer;
|
||||||
|
@ -31,8 +31,8 @@
|
|||||||
#include "ReplayGainMode.hxx"
|
#include "ReplayGainMode.hxx"
|
||||||
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -130,11 +130,8 @@ struct DecoderControl {
|
|||||||
* The song currently being decoded. This attribute is set by
|
* The song currently being decoded. This attribute is set by
|
||||||
* the player thread, when it sends the #DecoderCommand::START
|
* the player thread, when it sends the #DecoderCommand::START
|
||||||
* command.
|
* command.
|
||||||
*
|
|
||||||
* This is a duplicate, and must be freed when this attribute
|
|
||||||
* is cleared.
|
|
||||||
*/
|
*/
|
||||||
DetachedSong *song = nullptr;
|
std::unique_ptr<DetachedSong> song;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The initial seek position, e.g. to the start of a sub-track
|
* The initial seek position, e.g. to the start of a sub-track
|
||||||
@ -382,7 +379,8 @@ public:
|
|||||||
* @param pipe the pipe which receives the decoded chunks (owned by
|
* @param pipe the pipe which receives the decoded chunks (owned by
|
||||||
* the caller)
|
* the caller)
|
||||||
*/
|
*/
|
||||||
void Start(DetachedSong *song, SongTime start_time, SongTime end_time,
|
void Start(std::unique_ptr<DetachedSong> song,
|
||||||
|
SongTime start_time, SongTime end_time,
|
||||||
MusicBuffer &buffer, MusicPipe &pipe) noexcept;
|
MusicBuffer &buffer, MusicPipe &pipe) noexcept;
|
||||||
|
|
||||||
void Stop() noexcept;
|
void Stop() noexcept;
|
||||||
|
@ -360,7 +360,7 @@ Player::StartDecoder(MusicPipe &_pipe)
|
|||||||
|
|
||||||
SongTime start_time = pc.next_song->GetStartTime() + pc.seek_time;
|
SongTime start_time = pc.next_song->GetStartTime() + pc.seek_time;
|
||||||
|
|
||||||
dc.Start(new DetachedSong(*pc.next_song),
|
dc.Start(std::make_unique<DetachedSong>(*pc.next_song),
|
||||||
start_time, pc.next_song->GetEndTime(),
|
start_time, pc.next_song->GetEndTime(),
|
||||||
buffer, _pipe);
|
buffer, _pipe);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user