|
32 | 32 | #include <libusb.h> |
33 | 33 | #include <limits> |
34 | 34 | #include <cmath> |
| 35 | +#include <cstdlib> |
35 | 36 | #define WRITE_LIBUSB_ERROR(__RESULT) libusb_error_name(__RESULT) << " " << libusb_strerror((libusb_error)__RESULT) |
36 | 37 |
|
37 | 38 | #include <libfreenect2/libfreenect2.hpp> |
|
46 | 47 | #include <libfreenect2/protocol/command_transaction.h> |
47 | 48 | #include <libfreenect2/logging.h> |
48 | 49 |
|
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 | | - |
57 | 50 | namespace libfreenect2 |
58 | 51 | { |
59 | 52 | using namespace libfreenect2; |
@@ -661,8 +654,31 @@ bool Freenect2DeviceImpl::open() |
661 | 654 | return false; |
662 | 655 | } |
663 | 656 |
|
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); |
666 | 682 |
|
667 | 683 | state_ = Open; |
668 | 684 |
|
@@ -753,14 +769,14 @@ bool Freenect2DeviceImpl::startStreams(bool enable_rgb, bool enable_depth) |
753 | 769 | { |
754 | 770 | LOG_INFO << "submitting rgb transfers..."; |
755 | 771 | rgb_transfer_pool_.enableSubmission(); |
756 | | - if (!rgb_transfer_pool_.submit(20)) return false; |
| 772 | + if (!rgb_transfer_pool_.submit()) return false; |
757 | 773 | } |
758 | 774 |
|
759 | 775 | if (enable_depth) |
760 | 776 | { |
761 | 777 | LOG_INFO << "submitting depth transfers..."; |
762 | 778 | ir_transfer_pool_.enableSubmission(); |
763 | | - if (!ir_transfer_pool_.submit(NUM_XFERS)) return false; |
| 779 | + if (!ir_transfer_pool_.submit()) return false; |
764 | 780 | } |
765 | 781 |
|
766 | 782 | state_ = Streaming; |
|
0 commit comments