Skip to content

Commit 4cb9fc0

Browse files
committed
usb: Use envvars to control transfer pool size
LIBFREENECT2_RGB_TRANSFER_SIZE (default 0x4000) LIBFREENECT2_RGB_TRANSFERS (default 20) LIBFREENECT2_IR_PACKETS (default 8) LIBFREENECT2_IR_TRANSFERS (default 60)
1 parent b167284 commit 4cb9fc0

File tree

3 files changed

+32
-22
lines changed

3 files changed

+32
-22
lines changed

include/internal/libfreenect2/usb/transfer_pool.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class TransferPool
5353

5454
bool enabled();
5555

56-
bool submit(size_t num_parallel_transfers);
56+
bool submit();
5757

5858
void cancel();
5959

src/libfreenect2.cpp

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <libusb.h>
3333
#include <limits>
3434
#include <cmath>
35+
#include <cstdlib>
3536
#define WRITE_LIBUSB_ERROR(__RESULT) libusb_error_name(__RESULT) << " " << libusb_strerror((libusb_error)__RESULT)
3637

3738
#include <libfreenect2/libfreenect2.hpp>
@@ -46,14 +47,6 @@
4647
#include <libfreenect2/protocol/command_transaction.h>
4748
#include <libfreenect2/logging.h>
4849

49-
#ifdef __APPLE__
50-
#define PKTS_PER_XFER 128
51-
#define NUM_XFERS 4
52-
#else
53-
#define PKTS_PER_XFER 8
54-
#define NUM_XFERS 60
55-
#endif
56-
5750
namespace libfreenect2
5851
{
5952
using namespace libfreenect2;
@@ -661,8 +654,31 @@ bool Freenect2DeviceImpl::open()
661654
return false;
662655
}
663656

664-
rgb_transfer_pool_.allocate(20, 0x4000);
665-
ir_transfer_pool_.allocate(NUM_XFERS, PKTS_PER_XFER, max_iso_packet_size);
657+
unsigned rgb_xfer_size = 0x4000;
658+
unsigned rgb_num_xfers = 20;
659+
unsigned ir_pkts_per_xfer = 8;
660+
unsigned ir_num_xfers = 60;
661+
662+
#ifdef __APPLE__
663+
ir_pkts_per_xfer = 128;
664+
ir_num_xfers = 4;
665+
#endif
666+
667+
const char *xfer_str;
668+
xfer_str = std::getenv("LIBFREENECT2_RGB_TRANSFER_SIZE");
669+
if(xfer_str) rgb_xfer_size = std::atoi(xfer_str);
670+
xfer_str = std::getenv("LIBFREENECT2_RGB_TRANSFERS");
671+
if(xfer_str) rgb_num_xfers = std::atoi(xfer_str);
672+
xfer_str = std::getenv("LIBFREENECT2_IR_PACKETS");
673+
if(xfer_str) ir_pkts_per_xfer = std::atoi(xfer_str);
674+
xfer_str = std::getenv("LIBFREENECT2_IR_TRANSFERS");
675+
if(xfer_str) ir_num_xfers = std::atoi(xfer_str);
676+
677+
LOG_INFO << "transfer pool sizes"
678+
<< " rgb: " << rgb_num_xfers << "*" << rgb_xfer_size
679+
<< " ir: " << ir_num_xfers << "*" << ir_pkts_per_xfer << "*" << max_iso_packet_size;
680+
rgb_transfer_pool_.allocate(rgb_num_xfers, rgb_xfer_size);
681+
ir_transfer_pool_.allocate(ir_num_xfers, ir_pkts_per_xfer, max_iso_packet_size);
666682

667683
state_ = Open;
668684

@@ -753,14 +769,14 @@ bool Freenect2DeviceImpl::startStreams(bool enable_rgb, bool enable_depth)
753769
{
754770
LOG_INFO << "submitting rgb transfers...";
755771
rgb_transfer_pool_.enableSubmission();
756-
if (!rgb_transfer_pool_.submit(20)) return false;
772+
if (!rgb_transfer_pool_.submit()) return false;
757773
}
758774

759775
if (enable_depth)
760776
{
761777
LOG_INFO << "submitting depth transfers...";
762778
ir_transfer_pool_.enableSubmission();
763-
if (!ir_transfer_pool_.submit(NUM_XFERS)) return false;
779+
if (!ir_transfer_pool_.submit()) return false;
764780
}
765781

766782
state_ = Streaming;

src/transfer_pool.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,22 +82,16 @@ void TransferPool::deallocate()
8282
}
8383
}
8484

85-
bool TransferPool::submit(size_t num_parallel_transfers)
85+
bool TransferPool::submit()
8686
{
8787
if(!enable_submit_)
8888
{
8989
LOG_WARNING << "transfer submission disabled!";
9090
return false;
9191
}
9292

93-
if(transfers_.size() < num_parallel_transfers)
94-
{
95-
LOG_ERROR << "too few idle transfers!";
96-
return false;
97-
}
98-
9993
size_t failcount = 0;
100-
for(size_t i = 0; i < num_parallel_transfers; ++i)
94+
for(size_t i = 0; i < transfers_.size(); ++i)
10195
{
10296
libusb_transfer *transfer = transfers_[i].transfer;
10397
transfers_[i].setStopped(false);
@@ -112,7 +106,7 @@ bool TransferPool::submit(size_t num_parallel_transfers)
112106
}
113107
}
114108

115-
if (failcount == num_parallel_transfers)
109+
if (failcount == transfers_.size())
116110
{
117111
LOG_ERROR << "all submissions failed. Try debugging with environment variable: LIBUSB_DEBUG=3.";
118112
return false;

0 commit comments

Comments
 (0)