summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-08-20 23:44:50 +0200
committerCarl Hetherington <cth@carlh.net>2020-09-13 20:23:29 +0200
commit259c976e8277879b5b8d70f66bd68591643598a5 (patch)
treec7e14d5d0167b965bf2801ff11c009f303e2f99f
parent09a40cb0997c4fb1958cc98409613cf8dfd0d932 (diff)
Fix encoding, perhaps.
-rw-r--r--src/lib/j2k_encoder.cc4
-rw-r--r--src/lib/j2k_encoder_fastvideo_backend.cc34
-rw-r--r--src/lib/player_video.h4
-rw-r--r--src/lib/writer.cc3
4 files changed, 31 insertions, 14 deletions
diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc
index 8c915b567..82e9ba76c 100644
--- a/src/lib/j2k_encoder.cc
+++ b/src/lib/j2k_encoder.cc
@@ -284,6 +284,7 @@ try
vector<shared_ptr<DCPVideo> > video;
for (int i = 0; i < backend->quantity(); ++i) {
video.push_back (_queue.front());
+ _queue.pop_front();
}
/* We're about to commit to either encoding these frame(s) or putting them back onto the queue,
@@ -294,9 +295,6 @@ try
boost::this_thread::disable_interruption dis;
LOG_TIMING ("encoder-pop thread=%1 frames=%2 eyes=%3", thread_id(), video.size());
- for (int i = 0; i < backend->quantity(); ++i) {
- _queue.pop_front ();
- }
lock.unlock ();
diff --git a/src/lib/j2k_encoder_fastvideo_backend.cc b/src/lib/j2k_encoder_fastvideo_backend.cc
index c27b970e1..d7124e2aa 100644
--- a/src/lib/j2k_encoder_fastvideo_backend.cc
+++ b/src/lib/j2k_encoder_fastvideo_backend.cc
@@ -29,13 +29,14 @@ J2KEncoderFastvideoBackend::J2KEncoderFastvideoBackend ()
if (r != FAST_OK) {
throw FastvideoError ("DecoderJ2kLibraryInit", r);
}
+ fastTraceCreate("/home/carl/trace.log");
}
J2KEncoderFastvideoBackend::~J2KEncoderFastvideoBackend ()
{
if (_setup_done) {
- delete[] _xyz_buffer;
+ fastFree (_xyz_buffer);
fastEncoderJ2kDestroy (_encoder);
fastImportFromHostDestroy (_adapter);
}
@@ -57,12 +58,12 @@ J2KEncoderFastvideoBackend::setup (dcp::Size size)
parameters.pcrdEnabled = true;
parameters.dwtLevels = 6;
parameters.codeblockSize = 32;
- parameters.maxQuality = 50;
- parameters.compressionRatio = 0.5;
+ parameters.maxQuality = 0.5;
+ parameters.compressionRatio = 2;
parameters.info = false;
parameters.tier2Threads = 4;
- parameters.tileWidth = size.width;
- parameters.tileHeight = size.height;
+ parameters.tileWidth = 0;//size.width;
+ parameters.tileHeight = 0;//size.height;
parameters.noMCT = false;
parameters.ss1_x = 1;
parameters.ss1_y = 1;
@@ -88,7 +89,10 @@ J2KEncoderFastvideoBackend::setup (dcp::Size size)
_xyz_buffer_stride = size.width * 6;
_xyz_buffer_stride += 4 - (_xyz_buffer_stride % 4);
- _xyz_buffer = new uint16_t[_xyz_buffer_stride * size.height];
+ r = fastMalloc(reinterpret_cast<void**>(&_xyz_buffer), _xyz_buffer_stride * size.height);
+ if (r != FAST_OK) {
+ throw FastvideoError ("Malloc", r);
+ }
}
@@ -99,7 +103,7 @@ J2KEncoderFastvideoBackend::encode (vector<shared_ptr<DCPVideo> > video)
std::cout << "FV: " << video.size() << " from " << video.front()->index() << "\n";
if (!_setup_done) {
- setup (video.front()->frame()->inter_size());
+ setup (video.front()->frame()->out_size());
_setup_done = true;
}
@@ -118,7 +122,6 @@ J2KEncoderFastvideoBackend::encode (vector<shared_ptr<DCPVideo> > video)
/* XXX */
}
-
fastStatus_t r = fastImportFromHostCopy(
_adapter,
_xyz_buffer,
@@ -131,7 +134,7 @@ J2KEncoderFastvideoBackend::encode (vector<shared_ptr<DCPVideo> > video)
}
fastEncoderJ2kDynamicParameters_t dynamic_parameters;
- dynamic_parameters.targetStreamSize = 0;
+ dynamic_parameters.targetStreamSize = _xyz_buffer_stride * image->size().width / 2;
dynamic_parameters.quality = 0.5;
dynamic_parameters.writeHeader = false;
@@ -149,15 +152,26 @@ J2KEncoderFastvideoBackend::encode (vector<shared_ptr<DCPVideo> > video)
DCPOMATIC_ASSERT (free_slots == 0);
fastEncoderJ2kReport_t report;
+
fastEncoderJ2kOutput_t output;
+ int const max_j2k_size = 1024 * 1024 * 2;
+ output.bufferSize = max_j2k_size;
+ dcp::Data data(output.bufferSize);
+ output.byteStream = data.data().get();
+
fastStatus_t r = fastEncoderJ2kTransformBatch(_encoder, &output, &report);
if (r != FAST_OK) {
+ fastTraceClose();
throw FastvideoError ("EncoderJ2KTransformBatch", r);
}
vector<Data> encoded;
for (size_t i = 0; i < video.size(); ++i) {
- encoded.push_back (Data(output.byteStream, output.streamSize));
+ std::cout << "\tframe " << output.streamSize << "\n";
+ data.set_size (output.streamSize);
+ encoded.push_back (data);
+ data = dcp::Data(output.bufferSize);
+ output.byteStream = data.data().get();
int images_left = 0;
r = fastEncoderJ2kGetNextEncodedImage (_encoder, &output, &report, &images_left);
}
diff --git a/src/lib/player_video.h b/src/lib/player_video.h
index 65d25bfd9..f05df83c4 100644
--- a/src/lib/player_video.h
+++ b/src/lib/player_video.h
@@ -105,6 +105,10 @@ public:
return _inter_size;
}
+ dcp::Size out_size () const {
+ return _out_size;
+ }
+
bool same (boost::shared_ptr<const PlayerVideo> other) const;
size_t memory_used () const;
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index dc552e6cb..fc6fb83d4 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -764,7 +764,8 @@ void
Writer::set_encoder_threads (int threads)
{
boost::mutex::scoped_lock lm (_state_mutex);
- _maximum_frames_in_memory = lrint (threads * Config::instance()->frames_in_memory_multiplier());
+ /* XXX: add some to cope with the FV encoder returning lots */
+ _maximum_frames_in_memory = lrint (threads * Config::instance()->frames_in_memory_multiplier()) + 32;
_maximum_queue_size = threads * 16;
}