Skip to content
Snippets Groups Projects
Commit 77f572e1 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Fixes for opencv encode/decode

parent 77fbd662
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
......@@ -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)
......@@ -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;
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment