diff --git a/SDK/C/src/streams.cpp b/SDK/C/src/streams.cpp index abf8a5f990ef58a1488a3ac12789ad1df57a319b..3c8b309ba0d42dbbc85eca3a5ebd2cf5fb689744 100644 --- a/SDK/C/src/streams.cpp +++ b/SDK/C/src/streams.cpp @@ -106,12 +106,15 @@ ftlError_t ftlImageWrite( return FTLERROR_STREAM_DUPLICATE; stream->sender->set("encoder_device", 2); // Software encoder + stream->sender->set("lossless", true); try { auto &frame = stream->video_fs.frames[sourceId]; auto &img = frame.create<cv::cuda::GpuMat>(static_cast<ftl::codecs::Channel>(channel)); auto &intrin = frame.getLeft(); + LOG(INFO) << "INTRIN: " << intrin.width << "x" << intrin.height << " for " << sourceId << ", " << (int)channel; + if (intrin.width == 0) { return FTLERROR_STREAM_NO_INTRINSICS; } @@ -182,6 +185,8 @@ ftlError_t ftlIntrinsicsWriteLeft(ftlStream_t stream, int32_t sourceId, int32_t stream->video_fs.frames[sourceId].setLeft(cam); stream->has_fresh_data = true; + LOG(INFO) << "INTRIN " << f << "," << cx << "," << cy << "," << baseline; + return FTLERROR_OK; } @@ -207,6 +212,8 @@ ftlError_t ftlIntrinsicsWriteRight(ftlStream_t stream, int32_t sourceId, int32_t stream->video_fs.frames[sourceId].setRight(cam); stream->has_fresh_data = true; + LOG(INFO) << "INTRINR " << f << "," << cx << "," << cy << "," << baseline; + return FTLERROR_OK; } diff --git a/SDK/Python/blender_script.py b/SDK/Python/blender_script.py index ce562f8622ce9d5e3b9f85b86c7dc598a2b2500e..753cabe50b33be598e1c55868ae0f29de14a5913 100644 --- a/SDK/Python/blender_script.py +++ b/SDK/Python/blender_script.py @@ -152,7 +152,7 @@ def render(): # set invalid depth values to 0.0 im[:,:,3][im[:,:,3] >= _d_max] = 0.0 - return (im[:,:,0:2] * 255.0).astype(np.uint8), im[:,:,3] + return (im[:,:,0:3]*255.0).astype(np.uint8), (im[:,:,3]).astype(np.float32) def render_stereo(camera, baseline=0.15): bpy.context.scene.camera = camera @@ -169,6 +169,7 @@ def render_stereo(camera, baseline=0.15): return StereoImage(np.array(K), pose, baseline, imL, depthL, imR, depthR) + from ctypes import * ftl = CDLL('/home/nick/git-repos/ftl/build/SDK/C/libftl-dev.so.0') @@ -180,6 +181,10 @@ ftlIntrinsicsWriteLeft = ftl.ftlIntrinsicsWriteLeft ftlIntrinsicsWriteLeft.restype = c_int ftlIntrinsicsWriteLeft.argtypes = [c_void_p, c_int, c_int, c_int, c_float, c_float, c_float, c_float, c_float, c_float] +ftlIntrinsicsWriteRight = ftl.ftlIntrinsicsWriteRight +ftlIntrinsicsWriteRight.restype = c_int +ftlIntrinsicsWriteRight.argtypes = [c_void_p, c_int, c_int, c_int, c_float, c_float, c_float, c_float, c_float, c_float] + ftlImageWrite = ftl.ftlImageWrite ftlImageWrite.restype = c_int ftlImageWrite.argtypes = [c_void_p, c_int, c_int, c_int, c_int, c_void_p] @@ -196,9 +201,14 @@ resolution_x_in_px = scale * bpy.context.scene.render.resolution_x resolution_y_in_px = scale * bpy.context.scene.render.resolution_y err = ftlIntrinsicsWriteLeft(c_void_p(stream), c_int(0), c_int(int(resolution_x_in_px)), c_int(int(resolution_y_in_px)), c_float(300.0), c_float(-resolution_x_in_px/2), c_float(-resolution_y_in_px/2), c_float(0.1), c_float(0.1), c_float(8.0)) +err = ftlIntrinsicsWriteRight(c_void_p(stream), c_int(0), c_int(int(resolution_x_in_px)), c_int(int(resolution_y_in_px)), c_float(300.0), c_float(-resolution_x_in_px/2), c_float(-resolution_y_in_px/2), c_float(0.1), c_float(0.1), c_float(8.0)) print(err) err = ftlImageWrite(stream, 0, 0, 3, 0, image.imL.ctypes.data_as(c_void_p)) print(err) +err = ftlImageWrite(stream, 0, 2, 3, 0, image.imR.ctypes.data_as(c_void_p)) +print(err) +#err = ftlImageWrite(stream, 0, 1, 0, 0, image.depthL.ctypes.data_as(c_void_p)) +#print(err) err = ftlDestroyStream(stream) print(err) diff --git a/components/codecs/src/opencv_decoder.cpp b/components/codecs/src/opencv_decoder.cpp index 416b7d90f72a4d8e5f9513de9a1ec9a9c4559db4..be3c800d63611b940b0c1f2f4032b3681bdf6585 100644 --- a/components/codecs/src/opencv_decoder.cpp +++ b/components/codecs/src/opencv_decoder.cpp @@ -21,7 +21,7 @@ bool OpenCVDecoder::accepts(const ftl::codecs::Packet &pkt) { bool OpenCVDecoder::decode(const ftl::codecs::Packet &pkt, cv::cuda::GpuMat &out) { //CHECK(cv::Size(ftl::codecs::getWidth(pkt.definition), ftl::codecs::getHeight(pkt.definition)) == out.size()); - int chunk_dim = std::sqrt(pkt.frame_count); + int chunk_dim = 1; //std::sqrt(pkt.frame_count); int chunk_width = out.cols / chunk_dim; int chunk_height = out.rows / chunk_dim; diff --git a/components/codecs/src/opencv_encoder.cpp b/components/codecs/src/opencv_encoder.cpp index b930d04294878f9c3a43d5187a82e9725841a5ca..2d2e19b5698d10ee8fae1478d74d2eebaee43ebc 100644 --- a/components/codecs/src/opencv_encoder.cpp +++ b/components/codecs/src/opencv_encoder.cpp @@ -36,12 +36,19 @@ bool OpenCVEncoder::encode(const cv::cuda::GpuMat &in, ftl::codecs::Packet &pkt) return false; } - pkt.definition = (pkt.definition == definition_t::Any) ? ftl::codecs::findDefinition(in.cols, in.rows) : pkt.definition; + auto [tx,ty] = ftl::codecs::chooseTileConfig(pkt.frame_count); + pkt.definition = (pkt.definition == definition_t::Any) ? ftl::codecs::findDefinition(in.cols/tx, in.rows/ty) : pkt.definition; + if (pkt.definition == definition_t::Invalid || pkt.definition == definition_t::Any) { + LOG(ERROR) << "Could not find appropriate definition"; + return false; + } + + /*pkt.definition = (pkt.definition == definition_t::Any) ? ftl::codecs::findDefinition(in.cols, in.rows) : pkt.definition; if (pkt.definition == definition_t::Invalid || pkt.definition == definition_t::Any) { LOG(ERROR) << "Invalid definition"; return false; - } + }*/ // Ensure definition does not exceed max current_definition_ = pkt.definition; //((int)pkt.definition < (int)max_definition) ? max_definition : pkt.definition; @@ -62,7 +69,7 @@ bool OpenCVEncoder::encode(const cv::cuda::GpuMat &in, ftl::codecs::Packet &pkt) } else { }*/ - if (width != in.cols || height != in.rows) { + if (tx*width != in.cols || ty*height != in.rows) { LOG(ERROR) << "Input does not match requested definition"; return false; }