diff --git a/GstreamerHelper/GstreamerHelper.vcxproj b/GstreamerHelper/GstreamerHelper.vcxproj
index 70d35fea..4ae10323 100644
--- a/GstreamerHelper/GstreamerHelper.vcxproj
+++ b/GstreamerHelper/GstreamerHelper.vcxproj
@@ -164,6 +164,8 @@
+
+
@@ -184,6 +186,8 @@
+
+
Create
Create
diff --git a/GstreamerHelper/GstreamerHelper.vcxproj.filters b/GstreamerHelper/GstreamerHelper.vcxproj.filters
index f0255fed..342e0d36 100644
--- a/GstreamerHelper/GstreamerHelper.vcxproj.filters
+++ b/GstreamerHelper/GstreamerHelper.vcxproj.filters
@@ -27,6 +27,12 @@
Headerdateien
+
+ Headerdateien
+
+
+ Headerdateien
+
@@ -41,5 +47,11 @@
Quelldateien
+
+ Quelldateien
+
+
+ Quelldateien
+
\ No newline at end of file
diff --git a/GstreamerHelper/GstreamerVideo.cpp b/GstreamerHelper/GstreamerVideo.cpp
new file mode 100644
index 00000000..f84837c6
--- /dev/null
+++ b/GstreamerHelper/GstreamerVideo.cpp
@@ -0,0 +1,133 @@
+#include "stdafx.h"
+#include "GstreamerVideo.h"
+#include "GstreamerVideoStream.h"
+
+map VideoStreams;
+queue VideoIDs;
+
+DllExport void SetVideoLogCallback (LogCallback Callback)
+{
+ Log = Callback;
+}
+
+DllExport bool InitVideo()
+{
+ for(int i = 0; i < 1000; i++)
+ {
+ VideoIDs.push(i);
+ }
+#if _WIN64
+ SetDllDirectory(L".\\x64\\gstreamer");
+#else
+ SetDllDirectory(L".\\x86\gstreamer");
+#endif
+
+ gst_init(NULL, NULL);
+ GstRegistry* registry = gst_registry_get();
+
+#if _WIN64
+ gst_registry_scan_path(registry, ".\\x64\\gstreamer");
+#else
+ gst_registry_scan_path(registry, ".\\x86\\gstreamer");
+#endif
+
+ return true;
+}
+
+DllExport void CloseAllVideos(void)
+{
+ map::iterator p;
+
+ for(p = VideoStreams.begin(); p != VideoStreams.end(); p++) {
+ p->second->CloseVideo();
+ }
+}
+
+DllExport int LoadVideo(const wchar_t* Media)
+{
+ GstreamerVideoStream *s = new GstreamerVideoStream(VideoIDs.front());
+ VideoStreams.insert(pair (VideoIDs.front(), s));
+ VideoIDs.pop();
+ return s->LoadVideo(Media);
+}
+
+DllExport bool CloseVideo(int Stream)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ return it->second->CloseVideo();
+ }
+ else return false;
+}
+
+DllExport int GetVideoNumStreams()
+{
+ return VideoStreams.size();
+}
+
+DllExport float GetVideoLength(int Stream)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ return it->second->GetVideoLength();
+ }
+ else return -1.0;
+}
+
+DllExport UINT8* GetFrame(int Stream, float Time, float &VideoTime)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ return it->second->GetFrame(Time, VideoTime);
+ }
+}
+
+DllExport bool Skip(int Stream, float Start, float Gap)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ return it->second->Skip(Start, Gap);
+ }
+ else return false;
+}
+
+DllExport void SetVideoLoop(int Stream, bool Loop)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ it->second->SetVideoLoop(Loop);
+ }
+}
+
+DllExport void PauseVideo(int Stream)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ it->second->PauseVideo();
+ }
+}
+
+DllExport void ResumeVideo(int Stream)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ it->second->ResumeVideo();
+ }
+}
+
+DllExport bool Finished(int Stream)
+{
+ map::iterator it = VideoStreams.find(Stream);
+ if(it != VideoStreams.end())
+ {
+ return it->second->Finished();
+ }
+ else return true;
+}
diff --git a/GstreamerHelper/GstreamerVideo.h b/GstreamerHelper/GstreamerVideo.h
new file mode 100644
index 00000000..57930064
--- /dev/null
+++ b/GstreamerHelper/GstreamerVideo.h
@@ -0,0 +1,32 @@
+#pragma once
+#include
+#include