Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
215 changes: 215 additions & 0 deletions HoloLensForCV.sln
100644 → 100755

Large diffs are not rendered by default.

Empty file modified Shared/Audio/Audio.props
100644 → 100755
Empty file.
Empty file modified Shared/Audio/Audio.vcxproj
100644 → 100755
Empty file.
Empty file modified Shared/Audio/Audio.vcxproj.filters
100644 → 100755
Empty file.
Empty file modified Shared/Audio/AudioFileReader.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Audio/AudioStreamReader.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Audio/BasicListeningEarcon.wav
100644 → 100755
Empty file.
Empty file modified Shared/Audio/BasicResultsEarcon.wav
100644 → 100755
Empty file.
Empty file modified Shared/Audio/Include/Audio/All.h
100644 → 100755
Empty file.
Empty file modified Shared/Audio/Include/Audio/AudioFileReader.h
100644 → 100755
Empty file.
Empty file modified Shared/Audio/Include/Audio/AudioStreamReader.h
100644 → 100755
Empty file.
Empty file modified Shared/Audio/Include/Audio/OmnidirectionalSound.h
100644 → 100755
Empty file.
Empty file modified Shared/Audio/Include/Audio/XAudio2Helpers.h
100644 → 100755
Empty file.
Empty file modified Shared/Audio/OmnidirectionalSound.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Audio/README.md
100644 → 100755
Empty file.
Empty file modified Shared/Audio/pch.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Audio/pch.h
100644 → 100755
Empty file.
Empty file modified Shared/Audio/targetver.h
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Debugging.props
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Debugging.vcxproj
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Debugging.vcxproj.filters
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Include/Debugging/All.h
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Include/Debugging/CodeContracts.h
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Include/Debugging/Timer.h
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Include/Debugging/TimerGuard.h
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Include/Debugging/Trace.h
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/README.md
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Timer.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/TimerGuard.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/Trace.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/pch.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/pch.h
100644 → 100755
Empty file.
Empty file modified Shared/Debugging/targetver.h
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/CameraResources.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/DeviceResources.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Graphics.props
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Graphics.vcxproj
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Graphics.vcxproj.filters
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Include/Graphics/All.h
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Include/Graphics/CameraResources.h
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Include/Graphics/DeviceResources.h
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Include/Graphics/DirectXHelper.h
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/Include/Graphics/StepTimer.h
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/README.md
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/packages.config
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/pch.cpp
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/pch.h
100644 → 100755
Empty file.
Empty file modified Shared/Graphics/targetver.h
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/CameraIntrinsics.cpp
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/CameraIntrinsics.h
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/CsvWriter.cpp
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/CsvWriter.h
100644 → 100755
Empty file.
1 change: 1 addition & 0 deletions Shared/HoloLensForCV/HoloLensForCV.vcxproj
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@
<DisableSpecificWarnings>28204</DisableSpecificWarnings>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<AdditionalIncludeDirectories>$(SolutionDir)packages\Eigen.3.3.3\build\native\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
Expand Down
Empty file modified Shared/HoloLensForCV/HoloLensForCV.vcxproj.filters
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/ICameraIntrinsics.h
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/ISensorFrameSink.h
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/ISensorFrameSinkGroup.h
100644 → 100755
Empty file.
16 changes: 14 additions & 2 deletions Shared/HoloLensForCV/MediaFrameReaderContext.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,23 @@ namespace HoloLensForCV
Windows::Graphics::Imaging::SoftwareBitmap^ softwareBitmap =
frame->VideoMediaFrame->SoftwareBitmap;

Windows::Media::Devices::Core::CameraIntrinsics^ cameraIntrinsics = frame->VideoMediaFrame->CameraIntrinsics;

//
// Finally, wrap all of the above information in a SensorFrame object and pass it
// down to the sensor frame sink. We'll also retain a reference to the latest sensor
// frame on this object for immediate consumption by the app.
//
SensorFrame^ sensorFrame =
ref new SensorFrame(_sensorType, timestamp, softwareBitmap);
SensorFrame^ sensorFrame =
// ref new SensorFrame(_sensorType, timestamp, softwareBitmap);
// ref new SensorFrame(_sensorType, timestamp, softwareBitmap, frame);
ref new SensorFrame(
_sensorType
,timestamp
,softwareBitmap
// ,cameraIntrinsics
);


//
// Extract the frame-to-origin transform, if the MFT exposed it:
Expand Down Expand Up @@ -178,6 +188,8 @@ namespace HoloLensForCV
zero;
}


//frame->Properties->Lookup()
//
// Extract camera view transform, if the MFT exposed it:
//
Expand Down
Empty file modified Shared/HoloLensForCV/MediaFrameReaderContext.h
100644 → 100755
Empty file.
84 changes: 84 additions & 0 deletions Shared/HoloLensForCV/MediaFrameSourceGroup.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,87 @@ namespace HoloLensForCV
}, Concurrency::task_continuation_context::get_current_winrt_context());
}

//CameraIntrinsics^



// ADDED : ARJUN

Windows::Media::Devices::Core::CameraIntrinsics^ MediaFrameSourceGroup::GetCameraIntrinsics(SensorType inputSensorType) { //Async??

Windows::Media::Capture::Frames::MediaFrameSource^ selectedMediaFrameSource;
Windows::Media::Devices::Core::CameraIntrinsics^ output;

for (Windows::Foundation::Collections::IKeyValuePair<Platform::String^, Windows::Media::Capture::Frames::MediaFrameSource^>^ kvp : _mediaCapture->FrameSources)
{
Windows::Media::Capture::Frames::MediaFrameSource^ source =
kvp->Value;

SensorType sensorType =
GetSensorType(
source);

if (IsEnabled(sensorType) && sensorType == inputSensorType) {

selectedMediaFrameSource = source;

break;

}

}


/*Platform::String^ requestedSubtype =
nullptr;

auto found =
std::find_if(
begin(selectedMediaFrameSource->SupportedFormats),
end(selectedMediaFrameSource->SupportedFormats),
[&](Windows::Media::Capture::Frames::MediaFrameFormat^ format)
{
requestedSubtype =
GetSubtypeForFrameReader(
selectedMediaFrameSource->Info->SourceKind,
format);

return requestedSubtype != nullptr;

});

output = selectedMediaFrameSource->TryGetCameraIntrinsics(*found);
*/

output = selectedMediaFrameSource->TryGetCameraIntrinsics(selectedMediaFrameSource->CurrentFormat);
if (output == nullptr) {
auto found = std::find_if(begin(selectedMediaFrameSource->SupportedFormats),
end(selectedMediaFrameSource->SupportedFormats),
[&](Windows::Media::Capture::Frames::MediaFrameFormat^ format)
{
output = selectedMediaFrameSource->TryGetCameraIntrinsics(format);

if (output == nullptr) {
dbg::trace(
L"MediaFrameSourceGroup::GetCameraIntrinsics: format %s-%s @%i/%iHz intrinsics nullptr",
format->MajorType->Data(),
format->Subtype->Data(),
format->FrameRate->Numerator,
format->FrameRate->Denominator);
}
return output != nullptr;

});

}

return output;

}




SensorType MediaFrameSourceGroup::GetSensorType(
Windows::Media::Capture::Frames::MediaFrameSource^ source)
{
Expand Down Expand Up @@ -709,4 +790,7 @@ namespace HoloLensForCV

return cleanupTask;
}



}
5 changes: 5 additions & 0 deletions Shared/HoloLensForCV/MediaFrameSourceGroup.h
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ namespace HoloLensForCV
SensorFrame^ GetLatestSensorFrame(
SensorType sensorType);

Windows::Media::Devices::Core::CameraIntrinsics^ GetCameraIntrinsics(SensorType sensorType);


private:
/// <summary>
/// Returns true if the sensor was explicitly enabled by the user.
Expand Down Expand Up @@ -75,6 +78,8 @@ namespace HoloLensForCV
concurrency::task<bool> TryInitializeMediaCaptureAsync(
Windows::Media::Capture::Frames::MediaFrameSourceGroup^ group);



private:
MediaFrameSourceGroupType _mediaFrameSourceGroupType;
SpatialPerception^ _spatialPerception;
Expand Down
Empty file modified Shared/HoloLensForCV/MediaFrameSourceGroupType.h
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/MultiFrameBuffer.cpp
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/MultiFrameBuffer.h
100644 → 100755
Empty file.
Empty file modified Shared/HoloLensForCV/README.md
100644 → 100755
Empty file.
194 changes: 185 additions & 9 deletions Shared/HoloLensForCV/SensorFrame.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,189 @@

namespace HoloLensForCV
{
SensorFrame::SensorFrame(
_In_ SensorType frameType,
_In_ Windows::Foundation::DateTime timestamp,
_In_ Windows::Graphics::Imaging::SoftwareBitmap^ softwareBitmap)
{
FrameType = frameType;
Timestamp = timestamp;
SoftwareBitmap = softwareBitmap;
}
SensorFrame::SensorFrame(
_In_ SensorType frameType,
_In_ Windows::Foundation::DateTime timestamp,
_In_ Windows::Graphics::Imaging::SoftwareBitmap^ softwareBitmap)
{
FrameType = frameType;
Timestamp = timestamp;
SoftwareBitmap = softwareBitmap;

}

/*SensorFrame::SensorFrame(
_In_ SensorType frameType,
_In_ Windows::Foundation::DateTime timestamp,
_In_ Windows::Graphics::Imaging::SoftwareBitmap^ softwareBitmap,
_In_ Windows::Media::Capture::Frames::MediaFrameReference^ frame)
{
FrameType = frameType;
Timestamp = timestamp;
SoftwareBitmap = softwareBitmap;

CoreCameraIntrinsics = frame->VideoMediaFrame->CameraIntrinsics;
if (CoreCameraIntrinsics == nullptr) {
dbg::trace(L"SensorFrame:VideoMediaFrame CameraIntrinsics null.");
}
else {
dbg::trace(L"SensorFrame:VideoMediaFrame CameraIntrinsics not null!");
}

}*/

SensorFrame::SensorFrame(
_In_ SensorType frameType,
_In_ Windows::Foundation::DateTime timestamp,
_In_ Windows::Graphics::Imaging::SoftwareBitmap^ softwareBitmap,
_In_ Windows::Media::Devices::Core::CameraIntrinsics^ cameraIntrinsics)
{

FrameType = frameType;
Timestamp = timestamp;
SoftwareBitmap = softwareBitmap;
CoreCameraIntrinsics = cameraIntrinsics;
if (CoreCameraIntrinsics == nullptr) {
dbg::trace(L"SensorFrame:VideoMediaFrame CameraIntrinsics null.");
}
else {
dbg::trace(L"SensorFrame:VideoMediaFrame CameraIntrinsics not null!");
}


}

Platform::Array<uint8_t>^
/*void*/ SensorFrame::sensorFrameToImageBuffer() {

Windows::Graphics::Imaging::SoftwareBitmap^ bitmap;
Windows::Graphics::Imaging::BitmapBuffer^ bitmapBuffer;
Windows::Foundation::IMemoryBufferReference^ bitmapBufferReference;

int32_t imageWidth = 0;
int32_t imageHeight = 0;
int32_t pixelStride = 1;
int32_t rowStride = 0;

Platform::Array<uint8_t>^ imageBufferAsPlatformArray;
int32_t imageBufferSize = 0;

{
#if DBG_ENABLE_INFORMATIONAL_LOGGING
dbg::TimerGuard timerGuard(
L"AppMain::sensorFrameToImageBuffer: buffer preparation",
4.0 /* minimum_time_elapsed_in_milliseconds */);
#endif /* DBG_ENABLE_INFORMATIONAL_LOGGING */
imageWidth = SoftwareBitmap->PixelWidth;
imageHeight = SoftwareBitmap->PixelHeight;

bitmap =
SoftwareBitmap;

imageWidth = bitmap->PixelWidth;
imageHeight = bitmap->PixelHeight;

bitmapBuffer =
SoftwareBitmap->LockBuffer(
Windows::Graphics::Imaging::BitmapBufferAccessMode::Read);

bitmapBufferReference =
bitmapBuffer->CreateReference();

uint32_t bitmapBufferDataSize = 0;

uint8_t* bitmapBufferData =
Io::GetTypedPointerToMemoryBuffer<uint8_t>(
bitmapBufferReference,
bitmapBufferDataSize);

switch (SoftwareBitmap->BitmapPixelFormat)
{
case Windows::Graphics::Imaging::BitmapPixelFormat::Bgra8:
pixelStride = 4;
break;

case Windows::Graphics::Imaging::BitmapPixelFormat::Gray16:
pixelStride = 2;
break;

case Windows::Graphics::Imaging::BitmapPixelFormat::Gray8:
pixelStride = 1;
break;

default:
#if DBG_ENABLE_INFORMATIONAL_LOGGING
dbg::trace(
L"SensorFrame::sensorFrameToImageBuffer: unrecognized bitmap pixel format, assuming 1 byte per pixel");
#endif /* DBG_ENABLE_INFORMATIONAL_LOGGING */

break;
}

rowStride =
imageWidth * pixelStride;

imageBufferSize =
imageHeight * rowStride;

ASSERT(
imageBufferSize == (int32_t)bitmapBufferDataSize);

imageBufferAsPlatformArray =
ref new Platform::Array<uint8_t>(
bitmapBufferData,
imageBufferSize);

return imageBufferAsPlatformArray;

}

}
/*
Windows::Foundation::Numerics::float4x4 SensorFrame::GetAbsoluteCameraPose() {

Windows::Foundation::Numerics::float4x4^ output =
ref new Windows::Foundation::Numerics::float4x4(
1, 0, 0, 0,
0, -1, 0, 0,
0, 0, -1, 0,
0, 0, 0, 1);

Windows::Foundation::Numerics::float4x4 InvFrameToOrigin;
Windows::Foundation::Numerics::invert(FrameToOrigin, &InvFrameToOrigin);

output = output * (CameraViewTransform*InvFrameToOrigin);

return output;

}

Windows::Foundation::Numerics::float4x4 SensorFrame::GetCamToOrigin() {

Windows::Foundation::Numerics::float4x4 camToRef;
Windows::Foundation::Numerics::invert(CameraViewTransform, &camToRef);

Windows::Foundation::Numerics::float4x4 camToOrigin = camToRef * FrameToOrigin;


Eigen::Vector3f camPinhole(camToOrigin.m41, camToOrigin.m42, camToOrigin.m43);

Eigen::Matrix3f camToOriginR;

camToOriginR(0, 0) = camToOrigin.m11;
camToOriginR(0, 1) = camToOrigin.m12;
camToOriginR(0, 2) = camToOrigin.m13;
camToOriginR(1, 0) = camToOrigin.m21;
camToOriginR(1, 1) = camToOrigin.m22;
camToOriginR(1, 2) = camToOrigin.m23;
camToOriginR(2, 0) = camToOrigin.m31;
camToOriginR(2, 1) = camToOrigin.m32;
camToOriginR(2, 2) = camToOrigin.m33;



return camToOrigin;

}
*/
}
Loading