1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
#include "XnLinkInputStream.h"
#include "XnLinkControlEndpoint.h"
//Link msg parsers
#include "XnLinkMsgParser.h"
namespace xn
{
LinkInputStream::LinkInputStream()
{
Reset();
}
LinkInputStream::~LinkInputStream()
{
Shutdown();
}
void LinkInputStream::Shutdown()
{
}
XnStatus LinkInputStream::Init(LinkControlEndpoint* pLinkControlEndpoint,
XnStreamType streamType,
XnUInt16 nStreamID,
IConnection* pConnection)
{
XnStatus nRetVal = XN_STATUS_OK;
XN_VALIDATE_INPUT_PTR(pLinkControlEndpoint);
XN_VALIDATE_INPUT_PTR(pConnection);
if (!pLinkControlEndpoint->IsConnected())
{
xnLogError(XN_MASK_LINK, "Link control endpoint is not connected");
XN_ASSERT(FALSE);
return XN_STATUS_ERROR;
}
m_pLinkControlEndpoint = pLinkControlEndpoint;
m_streamType = streamType;
m_nStreamID = nStreamID;
m_pConnection = pConnection;
m_streamingRefcount = 0;
/***** Get all stream properties *****/
nRetVal = m_pLinkControlEndpoint->GetSupportedInterfaces(nStreamID, m_supportedInterfaces);
XN_IS_STATUS_OK_LOG_ERROR("Get stream supported interfaces", nRetVal);
if (IsInterfaceSupported(XN_LINK_INTERFACE_MIRROR))
{
nRetVal = m_pLinkControlEndpoint->GetMirror(nStreamID, m_bMirror);
XN_IS_STATUS_OK_LOG_ERROR("Get mirror", nRetVal);
}
switch (m_streamType)
{
case XN_LINK_STREAM_TYPE_SHIFTS:
m_outputFormat = ONI_PIXEL_FORMAT_DEPTH_1_MM;
break;
case XN_LINK_STREAM_TYPE_COLOR:
m_outputFormat = ONI_PIXEL_FORMAT_YUV422;
break;
case XN_LINK_STREAM_TYPE_IR:
m_outputFormat = ONI_PIXEL_FORMAT_GRAY16;
break;
default:
m_outputFormat = XN_FORMAT_PASS_THROUGH_UNPACK;
break;
}
return XN_STATUS_OK;
}
void LinkInputStream::Reset()
{
m_pLinkControlEndpoint = NULL;
m_pConnection = NULL;
m_nStreamID = XN_LINK_STREAM_ID_INVALID;
m_bMirror = FALSE;
m_streamType = XN_LINK_STREAM_TYPE_NONE;
m_outputFormat = XN_FORMAT_PASS_THROUGH_UNPACK;
}
XnStatus LinkInputStream::Start()
{
if(++m_streamingRefcount == 1)
{
return StartImpl();
}
return XN_STATUS_OK;
}
XnStatus LinkInputStream::Stop()
{
if(--m_streamingRefcount == 0)
{
return StopImpl();
}
return XN_STATUS_OK;
}
XnBool LinkInputStream::IsStreaming() const
{
return m_bStreaming;
}
XnUInt16 LinkInputStream::GetStreamID() const
{
return m_nStreamID;
}
XnBool LinkInputStream::IsInterfaceSupported(XnUInt8 nInterfaceID) const
{
return m_supportedInterfaces.IsSet(nInterfaceID);
}
XnBool LinkInputStream::GetMirror() const
{
return m_bMirror;
}
XnStatus LinkInputStream::SetMirror(XnBool bMirror)
{
XnStatus nRetVal = m_pLinkControlEndpoint->SetMirror(m_nStreamID, bMirror);
XN_IS_STATUS_OK_LOG_ERROR("Set mirror", nRetVal);
m_bMirror = bMirror;
return XN_STATUS_OK;
}
LinkMsgParser* LinkInputStream::CreateLinkMsgParser()
{
if (m_outputFormat == XN_FORMAT_PASS_THROUGH_RAW)
{
return XN_NEW(LinkMsgParser);
} else {
xnLogError(XN_MASK_LINK, "Unknown output format: %d", m_outputFormat);
XN_ASSERT(FALSE);
return NULL;
}
}
XnBool LinkInputStream::IsOutputFormatSupported(OniPixelFormat format) const
{
return format == XN_FORMAT_PASS_THROUGH_RAW;
}
OniPixelFormat LinkInputStream::GetOutputFormat() const
{
return m_outputFormat;
}
XnStatus LinkInputStream::SetOutputFormat(OniPixelFormat format)
{
if (!IsOutputFormatSupported(format))
{
XN_ASSERT(FALSE);
return XN_STATUS_BAD_PARAM;
}
if (m_bStreaming)
{
xnLogWarning(XN_MASK_LINK, "Can't change output format while streaming!");
return XN_STATUS_INVALID_OPERATION;
}
m_outputFormat = format;
return XN_STATUS_OK;
}
}
|