Point Cloud Library (PCL) 1.12.1
openni_device_oni.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2011 Willow Garage, Inc.
5 *
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * * Neither the name of the copyright holder(s) nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 *
35 */
36
37#pragma once
38
39#include <pcl/pcl_config.h>
40#include <pcl/memory.h>
41#ifdef HAVE_OPENNI
42
43#include "openni_device.h"
44#include "openni_driver.h"
45
46#include <pcl/io/openni_camera/openni_image.h>
47
48#include <condition_variable>
49#include <mutex>
50
51namespace openni_wrapper
52{
53
54 /**
55 * @brief Concrete implementation of the interface OpenNIDevice for a virtual device playing back an ONI file.
56 * @author Suat Gedikli
57 * @date 19. june 2011
58 * @ingroup io
59 */
60 class DeviceONI : public OpenNIDevice
61 {
62 friend class OpenNIDriver;
63 public:
64
65 using Ptr = pcl::shared_ptr<DeviceONI>;
66 using ConstPtr = pcl::shared_ptr<const DeviceONI>;
67
68 DeviceONI (xn::Context& context, const std::string& file_name, bool repeat = false, bool streaming = true);
69 ~DeviceONI () noexcept;
70
71 void startImageStream () override;
72 void stopImageStream () override;
73
74 void startDepthStream () override;
75 void stopDepthStream () override;
76
77 void startIRStream () override;
78 void stopIRStream () override;
79
80 bool isImageStreamRunning () const throw () override;
81 bool isDepthStreamRunning () const throw () override;
82 bool isIRStreamRunning () const throw () override;
83
84 bool isImageResizeSupported (unsigned input_width, unsigned input_height, unsigned output_width, unsigned output_height) const throw () override;
85
86 /** \brief Trigger a new frame in the ONI stream.
87 * \param[in] relative_offset the relative offset in case we want to seek in the file
88 */
89 bool
90 trigger (int relative_offset = 0);
91
92 bool isStreaming () const throw ();
93
94 /** \brief Check if there is any data left in the ONI file to process. */
95 inline bool
97 {
98 return (!player_.IsEOF ());
99 }
100
101 protected:
102 Image::Ptr getCurrentImage (pcl::shared_ptr<xn::ImageMetaData> image_meta_data) const throw () override;
103
105 static void __stdcall NewONIDepthDataAvailable (xn::ProductionNode& node, void* cookie) noexcept;
106 static void __stdcall NewONIImageDataAvailable (xn::ProductionNode& node, void* cookie) noexcept;
107 static void __stdcall NewONIIRDataAvailable (xn::ProductionNode& node, void* cookie) noexcept;
108
109 xn::Player player_;
110 std::thread player_thread_;
111 mutable std::mutex player_mutex_;
112 std::condition_variable player_condition_;
117 };
118} //namespace openni_wrapper
119#endif //HAVE_OPENNI
Concrete implementation of the interface OpenNIDevice for a virtual device playing back an ONI file.
void stopIRStream() override
stops the IR stream.
void startIRStream() override
starts the IR stream.
static void __stdcall NewONIIRDataAvailable(xn::ProductionNode &node, void *cookie) noexcept
bool isDepthStreamRunning() const override
void stopDepthStream() override
stops the depth stream.
void startDepthStream() override
starts the depth stream.
bool trigger(int relative_offset=0)
Trigger a new frame in the ONI stream.
bool isImageStreamRunning() const override
static void __stdcall NewONIImageDataAvailable(xn::ProductionNode &node, void *cookie) noexcept
bool hasDataLeft()
Check if there is any data left in the ONI file to process.
DeviceONI(xn::Context &context, const std::string &file_name, bool repeat=false, bool streaming=true)
void startImageStream() override
starts the image stream.
bool isIRStreamRunning() const override
Image::Ptr getCurrentImage(pcl::shared_ptr< xn::ImageMetaData > image_meta_data) const override
std::condition_variable player_condition_
static void __stdcall NewONIDepthDataAvailable(xn::ProductionNode &node, void *cookie) noexcept
void stopImageStream() override
stops the image stream.
bool isImageResizeSupported(unsigned input_width, unsigned input_height, unsigned output_width, unsigned output_height) const override
pcl::shared_ptr< Image > Ptr
Definition: openni_image.h:61
Class representing an astract device for OpenNI devices: Primesense PSDK, Microsoft Kinect,...
Definition: openni_device.h:72
pcl::shared_ptr< OpenNIDevice > Ptr
Definition: openni_device.h:80
pcl::shared_ptr< const OpenNIDevice > ConstPtr
Definition: openni_device.h:81
Driver class implemented as Singleton.
Definition: openni_driver.h:66
Defines functions, macros and traits for allocating and using memory.