projects
/
dcpomatic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3d93dcc
)
Remove some unnecessary use of shared_ptr.
author
Carl Hetherington
<cth@carlh.net>
Fri, 14 Oct 2022 19:21:36 +0000
(21:21 +0200)
committer
Carl Hetherington
<cth@carlh.net>
Sun, 16 Oct 2022 22:10:59 +0000
(
00:10
+0200)
src/lib/dcp_encoder.cc
patch
|
blob
|
history
src/lib/dcp_encoder.h
patch
|
blob
|
history
src/lib/j2k_encoder.cc
patch
|
blob
|
history
src/lib/j2k_encoder.h
patch
|
blob
|
history
src/lib/writer.h
patch
|
blob
|
history
diff --git
a/src/lib/dcp_encoder.cc
b/src/lib/dcp_encoder.cc
index e4cb76d792712064498be8f858573c271fd6b7be..16a99e79e0ff28563c8d9546641b83ee10014d50 100644
(file)
--- a/
src/lib/dcp_encoder.cc
+++ b/
src/lib/dcp_encoder.cc
@@
-56,12
+56,15
@@
using namespace boost::placeholders;
#endif
using namespace dcpomatic;
#endif
using namespace dcpomatic;
+
/** Construct a DCP encoder.
* @param film Film that we are encoding.
* @param job Job that this encoder is being used in.
*/
DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job)
: Encoder (film, job)
/** Construct a DCP encoder.
* @param film Film that we are encoding.
* @param job Job that this encoder is being used in.
*/
DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job)
: Encoder (film, job)
+ , _writer(film, job)
+ , _j2k_encoder(film, _writer)
, _finishing (false)
, _non_burnt_subtitles (false)
{
, _finishing (false)
, _non_burnt_subtitles (false)
{
@@
-91,11
+94,8
@@
DCPEncoder::~DCPEncoder ()
void
DCPEncoder::go ()
{
void
DCPEncoder::go ()
{
- _writer = make_shared<Writer>(_film, _job);
- _writer->start ();
-
- _j2k_encoder = make_shared<J2KEncoder>(_film, _writer);
- _j2k_encoder->begin ();
+ _writer.start();
+ _j2k_encoder.begin();
{
auto job = _job.lock ();
{
auto job = _job.lock ();
@@
-104,30
+104,30
@@
DCPEncoder::go ()
}
if (_non_burnt_subtitles) {
}
if (_non_burnt_subtitles) {
- _writer
->
write(_player->get_subtitle_fonts());
+ _writer
.
write(_player->get_subtitle_fonts());
}
while (!_player->pass ()) {}
for (auto i: get_referenced_reel_assets(_film, _film->playlist())) {
}
while (!_player->pass ()) {}
for (auto i: get_referenced_reel_assets(_film, _film->playlist())) {
- _writer
->write
(i);
+ _writer
.write
(i);
}
_finishing = true;
}
_finishing = true;
- _j2k_encoder
->end
();
- _writer
->finish
(_film->dir(_film->dcp_name()));
+ _j2k_encoder
.end
();
+ _writer
.finish
(_film->dir(_film->dcp_name()));
}
void
DCPEncoder::video (shared_ptr<PlayerVideo> data, DCPTime time)
{
}
void
DCPEncoder::video (shared_ptr<PlayerVideo> data, DCPTime time)
{
- _j2k_encoder
->encode
(data, time);
+ _j2k_encoder
.encode
(data, time);
}
void
DCPEncoder::audio (shared_ptr<AudioBuffers> data, DCPTime time)
{
}
void
DCPEncoder::audio (shared_ptr<AudioBuffers> data, DCPTime time)
{
- _writer
->write
(data, time);
+ _writer
.write
(data, time);
auto job = _job.lock ();
DCPOMATIC_ASSERT (job);
auto job = _job.lock ();
DCPOMATIC_ASSERT (job);
@@
-138,7
+138,7
@@
void
DCPEncoder::text (PlayerText data, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period)
{
if (type == TextType::CLOSED_CAPTION || _non_burnt_subtitles) {
DCPEncoder::text (PlayerText data, TextType type, optional<DCPTextTrack> track, DCPTimePeriod period)
{
if (type == TextType::CLOSED_CAPTION || _non_burnt_subtitles) {
- _writer
->write
(data, type, track, period);
+ _writer
.write
(data, type, track, period);
}
}
}
}
@@
-146,26
+146,18
@@
DCPEncoder::text (PlayerText data, TextType type, optional<DCPTextTrack> track,
void
DCPEncoder::atmos (shared_ptr<const dcp::AtmosFrame> data, DCPTime time, AtmosMetadata metadata)
{
void
DCPEncoder::atmos (shared_ptr<const dcp::AtmosFrame> data, DCPTime time, AtmosMetadata metadata)
{
- _writer
->write
(data, time, metadata);
+ _writer
.write
(data, time, metadata);
}
optional<float>
DCPEncoder::current_rate () const
{
}
optional<float>
DCPEncoder::current_rate () const
{
- if (!_j2k_encoder) {
- return {};
- }
-
- return _j2k_encoder->current_encoding_rate ();
+ return _j2k_encoder.current_encoding_rate();
}
Frame
DCPEncoder::frames_done () const
{
}
Frame
DCPEncoder::frames_done () const
{
- if (!_j2k_encoder) {
- return 0;
- }
-
- return _j2k_encoder->video_frames_enqueued ();
+ return _j2k_encoder.video_frames_enqueued();
}
}
diff --git
a/src/lib/dcp_encoder.h
b/src/lib/dcp_encoder.h
index e7514be98716ef48636cb3cc0479d03f8fa3d2bd..a78ea1a9066a89d9d8a2738e2bbff878ddafd19e 100644
(file)
--- a/
src/lib/dcp_encoder.h
+++ b/
src/lib/dcp_encoder.h
@@
-24,17
+24,17
@@
#include "dcpomatic_time.h"
#include "encoder.h"
#include "player_text.h"
#include "dcpomatic_time.h"
#include "encoder.h"
#include "player_text.h"
+#include "j2k_encoder.h"
#include "types.h"
#include "types.h"
+#include "writer.h"
#include <dcp/atmos_frame.h>
class AudioBuffers;
class Film;
#include <dcp/atmos_frame.h>
class AudioBuffers;
class Film;
-class J2KEncoder;
class Job;
class Player;
class PlayerVideo;
class Job;
class Player;
class PlayerVideo;
-class Writer;
/** @class DCPEncoder */
/** @class DCPEncoder */
@@
-61,8
+61,8
@@
private:
void text (PlayerText, TextType, boost::optional<DCPTextTrack>, dcpomatic::DCPTimePeriod);
void atmos (std::shared_ptr<const dcp::AtmosFrame>, dcpomatic::DCPTime, AtmosMetadata metadata);
void text (PlayerText, TextType, boost::optional<DCPTextTrack>, dcpomatic::DCPTimePeriod);
void atmos (std::shared_ptr<const dcp::AtmosFrame>, dcpomatic::DCPTime, AtmosMetadata metadata);
-
std::shared_ptr<Writer>
_writer;
-
std::shared_ptr<J2KEncoder>
_j2k_encoder;
+
Writer
_writer;
+
J2KEncoder
_j2k_encoder;
bool _finishing;
bool _non_burnt_subtitles;
bool _finishing;
bool _non_burnt_subtitles;
diff --git
a/src/lib/j2k_encoder.cc
b/src/lib/j2k_encoder.cc
index daba87c5986ee6a62240ac78ecb1ec609df1da3a..d2e840f85f2a87ce647789321525fb5a14782bad 100644
(file)
--- a/
src/lib/j2k_encoder.cc
+++ b/
src/lib/j2k_encoder.cc
@@
-57,7
+57,7
@@
using namespace dcpomatic;
/** @param film Film that we are encoding.
* @param writer Writer that we are using.
*/
/** @param film Film that we are encoding.
* @param writer Writer that we are using.
*/
-J2KEncoder::J2KEncoder
(shared_ptr<const Film> film, shared_ptr<Writer>
writer)
+J2KEncoder::J2KEncoder
(shared_ptr<const Film> film, Writer&
writer)
: _film (film)
, _history (200)
, _writer (writer)
: _film (film)
, _history (200)
, _writer (writer)
@@
-68,6
+68,8
@@
J2KEncoder::J2KEncoder (shared_ptr<const Film> film, shared_ptr<Writer> writer)
J2KEncoder::~J2KEncoder ()
{
J2KEncoder::~J2KEncoder ()
{
+ _server_found_connection.disconnect();
+
boost::mutex::scoped_lock lm (_threads_mutex);
terminate_threads ();
}
boost::mutex::scoped_lock lm (_threads_mutex);
terminate_threads ();
}
@@
-76,27
+78,12
@@
J2KEncoder::~J2KEncoder ()
void
J2KEncoder::begin ()
{
void
J2KEncoder::begin ()
{
- weak_ptr<J2KEncoder> wp = shared_from_this ();
- _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect (
- boost::bind (&J2KEncoder::call_servers_list_changed, wp)
+ _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect(
+ boost::bind(&J2KEncoder::servers_list_changed, this)
);
}
);
}
-/* We don't want the servers-list-changed callback trying to do things
- during destruction of J2KEncoder, and I think this is the neatest way
- to achieve that.
-*/
-void
-J2KEncoder::call_servers_list_changed (weak_ptr<J2KEncoder> encoder)
-{
- auto e = encoder.lock ();
- if (e) {
- e->servers_list_changed ();
- }
-}
-
-
void
J2KEncoder::end ()
{
void
J2KEncoder::end ()
{
@@
-137,7
+124,7
@@
J2KEncoder::end ()
for (auto const& i: _queue) {
LOG_GENERAL(N_("Encode left-over frame %1"), i.index());
try {
for (auto const& i: _queue) {
LOG_GENERAL(N_("Encode left-over frame %1"), i.index());
try {
- _writer
->write
(
+ _writer
.write
(
make_shared<dcp::ArrayData>(i.encode_locally()),
i.index(),
i.eyes()
make_shared<dcp::ArrayData>(i.encode_locally()),
i.index(),
i.eyes()
@@
-210,7
+197,7
@@
J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
LOG_TIMING ("decoder-wake queue=%1 threads=%2", _queue.size(), threads);
}
LOG_TIMING ("decoder-wake queue=%1 threads=%2", _queue.size(), threads);
}
- _writer
->rethrow
();
+ _writer
.rethrow
();
/* Re-throw any exception raised by one of our threads. If more
than one has thrown an exception, only one will be rethrown, I think;
but then, if that happens something has gone badly wrong.
/* Re-throw any exception raised by one of our threads. If more
than one has thrown an exception, only one will be rethrown, I think;
but then, if that happens something has gone badly wrong.
@@
-219,19
+206,19
@@
J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
auto const position = time.frames_floor(_film->video_frame_rate());
auto const position = time.frames_floor(_film->video_frame_rate());
- if (_writer
->can_fake_write
(position)) {
+ if (_writer
.can_fake_write
(position)) {
/* We can fake-write this frame */
LOG_DEBUG_ENCODE("Frame @ %1 FAKE", to_string(time));
/* We can fake-write this frame */
LOG_DEBUG_ENCODE("Frame @ %1 FAKE", to_string(time));
- _writer
->fake_write
(position, pv->eyes ());
+ _writer
.fake_write
(position, pv->eyes ());
frame_done ();
} else if (pv->has_j2k() && !_film->reencode_j2k()) {
LOG_DEBUG_ENCODE("Frame @ %1 J2K", to_string(time));
/* This frame already has J2K data, so just write it */
frame_done ();
} else if (pv->has_j2k() && !_film->reencode_j2k()) {
LOG_DEBUG_ENCODE("Frame @ %1 J2K", to_string(time));
/* This frame already has J2K data, so just write it */
- _writer
->write
(pv->j2k(), position, pv->eyes ());
+ _writer
.write
(pv->j2k(), position, pv->eyes ());
frame_done ();
frame_done ();
- } else if (_last_player_video[pv->eyes()] && _writer
->
can_repeat(position) && pv->same(_last_player_video[pv->eyes()])) {
+ } else if (_last_player_video[pv->eyes()] && _writer
.
can_repeat(position) && pv->same(_last_player_video[pv->eyes()])) {
LOG_DEBUG_ENCODE("Frame @ %1 REPEAT", to_string(time));
LOG_DEBUG_ENCODE("Frame @ %1 REPEAT", to_string(time));
- _writer
->repeat (position, pv->eyes
());
+ _writer
.repeat(position, pv->eyes
());
} else {
LOG_DEBUG_ENCODE("Frame @ %1 ENCODE", to_string(time));
/* Queue this new frame for encoding */
} else {
LOG_DEBUG_ENCODE("Frame @ %1 ENCODE", to_string(time));
/* Queue this new frame for encoding */
@@
-357,7
+344,7
@@
try
}
if (encoded) {
}
if (encoded) {
- _writer
->write
(encoded, vf.index(), vf.eyes());
+ _writer
.write
(encoded, vf.index(), vf.eyes());
frame_done ();
} else {
lock.lock ();
frame_done ();
} else {
lock.lock ();
@@
-420,5
+407,5
@@
J2KEncoder::servers_list_changed ()
}
}
}
}
- _writer
->set_encoder_threads
(_threads->size());
+ _writer
.set_encoder_threads
(_threads->size());
}
}
diff --git
a/src/lib/j2k_encoder.h
b/src/lib/j2k_encoder.h
index 4bdedb0604d17ae40cd2f1437c15a407c3e31500..ce362f3862871db7d00d4bb557c36b7054bb2c6d 100644
(file)
--- a/
src/lib/j2k_encoder.h
+++ b/
src/lib/j2k_encoder.h
@@
-33,6
+33,7
@@
#include "event_history.h"
#include "exception_store.h"
#include "util.h"
#include "event_history.h"
#include "exception_store.h"
#include "util.h"
+#include "writer.h"
#include <boost/optional.hpp>
#include <boost/signals2.hpp>
#include <boost/thread.hpp>
#include <boost/optional.hpp>
#include <boost/signals2.hpp>
#include <boost/thread.hpp>
@@
-47,7
+48,6
@@
class EncodeServerDescription;
class Film;
class Job;
class PlayerVideo;
class Film;
class Job;
class PlayerVideo;
-class Writer;
/** @class J2KEncoder
/** @class J2KEncoder
@@
-59,7
+59,7
@@
class Writer;
class J2KEncoder : public ExceptionStore, public std::enable_shared_from_this<J2KEncoder>
{
public:
class J2KEncoder : public ExceptionStore, public std::enable_shared_from_this<J2KEncoder>
{
public:
- J2KEncoder
(std::shared_ptr<const Film> film, std::shared_ptr<Writer>
writer);
+ J2KEncoder
(std::shared_ptr<const Film> film, Writer&
writer);
~J2KEncoder ();
J2KEncoder (J2KEncoder const&) = delete;
~J2KEncoder ();
J2KEncoder (J2KEncoder const&) = delete;
@@
-81,8
+81,6
@@
public:
private:
private:
- static void call_servers_list_changed (std::weak_ptr<J2KEncoder> encoder);
-
void frame_done ();
void encoder_thread (boost::optional<EncodeServerDescription>);
void frame_done ();
void encoder_thread (boost::optional<EncodeServerDescription>);
@@
-103,7
+101,7
@@
private:
/** condition to manage thread wakeups when we have too much to do */
boost::condition _full_condition;
/** condition to manage thread wakeups when we have too much to do */
boost::condition _full_condition;
-
std::shared_ptr<Writer>
_writer;
+
Writer&
_writer;
Waker _waker;
EnumIndexedVector<std::shared_ptr<PlayerVideo>, Eyes> _last_player_video;
Waker _waker;
EnumIndexedVector<std::shared_ptr<PlayerVideo>, Eyes> _last_player_video;
diff --git
a/src/lib/writer.h
b/src/lib/writer.h
index 1ae761dea83656073d4d03abb45c1ef6b8a9e5f7..b4cc3ecaaae8e5d7fcc82259697ab35fd54e24d9 100644
(file)
--- a/
src/lib/writer.h
+++ b/
src/lib/writer.h
@@
-19,6
+19,10
@@
*/
*/
+#ifndef DCPOMATIC_WRITER_H
+#define DCPOMATIC_WRITER_H
+
+
/** @file src/lib/writer.h
* @brief Writer class.
*/
/** @file src/lib/writer.h
* @brief Writer class.
*/
@@
-225,3
+229,7
@@
private:
std::vector<HangingText> _hanging_texts;
};
std::vector<HangingText> _hanging_texts;
};
+
+
+#endif
+