HRESULT STDMETHODCALLTYPE XnVideoStream::GetStreamCaps(int iIndex, AM_MEDIA_TYPE **pmt, BYTE *pSCC) { XN_METHOD_START; XN_METHOD_CHECK_POINTER(pmt); XN_METHOD_CHECK_POINTER(pSCC); xnDumpFileWriteString(m_Dump, "\tCalling %s for %d\n", __FUNCTION__, iIndex); CMediaType mediaType; VIDEO_STREAM_CONFIG_CAPS* pvscc = (VIDEO_STREAM_CONFIG_CAPS*)pSCC; HRESULT hr = GetStreamCapability(iIndex, mediaType, *pvscc); if (FAILED(hr)) XN_METHOD_RETURN(hr); xnDumpFileWriteString(m_Dump, "\tReturning %dx%d@%d using %s\n", m_aSupportedModes[iIndex].OutputMode.nXRes, m_aSupportedModes[iIndex].OutputMode.nYRes, m_aSupportedModes[iIndex].OutputMode.nFPS, xnPixelFormatToString(m_aSupportedModes[iIndex].Format)); *pmt = CreateMediaType(&mediaType); XN_METHOD_RETURN(S_OK); }
XnStatus XnSensorImageGenerator::SetPixelFormat(XnPixelFormat Format) { if (GetPixelFormat() == Format) { return (XN_STATUS_OK); } XN_PROPERTY_SET_CREATE_ON_STACK(props); XnStatus nRetVal = XnPropertySetAddModule(&props, m_strModule); XN_IS_STATUS_OK(nRetVal); XnOutputFormats OutputFormat; XnUInt32* anAllowedInputFormats = NULL; XnUInt32 nAllowedInputFormats = 0; switch (Format) { case XN_PIXEL_FORMAT_RGB24: OutputFormat = XN_OUTPUT_FORMAT_RGB24; anAllowedInputFormats = g_anAllowedRGBFormats; nAllowedInputFormats = sizeof(g_anAllowedRGBFormats)/sizeof(XnUInt32); break; case XN_PIXEL_FORMAT_YUV422: OutputFormat = XN_OUTPUT_FORMAT_YUV422; anAllowedInputFormats = g_anAllowedYUVFormats; nAllowedInputFormats = sizeof(g_anAllowedYUVFormats)/sizeof(XnUInt32); break; case XN_PIXEL_FORMAT_GRAYSCALE_8_BIT: OutputFormat = XN_OUTPUT_FORMAT_GRAYSCALE8; anAllowedInputFormats = g_anAllowedGray8Formats; nAllowedInputFormats = sizeof(g_anAllowedGray8Formats)/sizeof(XnUInt32); break; case XN_PIXEL_FORMAT_MJPEG: OutputFormat = XN_OUTPUT_FORMAT_JPEG; anAllowedInputFormats = g_anAllowedJPEGFormats; nAllowedInputFormats = sizeof(g_anAllowedJPEGFormats)/sizeof(XnUInt32); break; default: return XN_STATUS_INVALID_OPERATION; } XnUInt32 nInputFormat = FindSupportedInputFormat(anAllowedInputFormats, nAllowedInputFormats); if (nInputFormat == INVALID_INPUT_FORMAT) { XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Cannot set pixel format to %s - no matching input format.", xnPixelFormatToString(Format)); } XnPropertySetAddIntProperty(&props, m_strModule, XN_STREAM_PROPERTY_INPUT_FORMAT, (XnUInt64)nInputFormat); XnPropertySetAddIntProperty(&props, m_strModule, XN_STREAM_PROPERTY_OUTPUT_FORMAT, (XnUInt64)OutputFormat); return m_pSensor->BatchConfig(&props); }