Added empty gstreamer video implementation
This commit is contained in:
1 parent
94ee25cd49
commit
2be1c021ce
12 files changed
+405
-2
No files matched your search
@@ -164,6 +164,8 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="GstreamerAudio.h" />
|
<ClInclude Include="GstreamerAudio.h" />
|
||||||
<ClInclude Include="GstreamerAudioStream.h" />
|
<ClInclude Include="GstreamerAudioStream.h" />
|
||||||
|
<ClInclude Include="GstreamerVideo.h" />
|
||||||
|
<ClInclude Include="GstreamerVideoStream.h" />
|
||||||
<ClInclude Include="stdafx.h" />
|
<ClInclude Include="stdafx.h" />
|
||||||
<ClInclude Include="targetver.h" />
|
<ClInclude Include="targetver.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -184,6 +186,8 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="GstreamerAudio.cpp" />
|
<ClCompile Include="GstreamerAudio.cpp" />
|
||||||
<ClCompile Include="GstreamerAudioStream.cpp" />
|
<ClCompile Include="GstreamerAudioStream.cpp" />
|
||||||
|
<ClCompile Include="GstreamerVideo.cpp" />
|
||||||
|
<ClCompile Include="GstreamerVideoStream.cpp" />
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='DebugWin|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='DebugWin|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='DebugWin|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='DebugWin|x64'">Create</PrecompiledHeader>
|
||||||
|
|||||||
@@ -27,6 +27,12 @@
|
|||||||
<ClInclude Include="GstreamerAudio.h">
|
<ClInclude Include="GstreamerAudio.h">
|
||||||
<Filter>Headerdateien</Filter>
|
<Filter>Headerdateien</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="GstreamerVideo.h">
|
||||||
|
<Filter>Headerdateien</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="GstreamerVideoStream.h">
|
||||||
|
<Filter>Headerdateien</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
@@ -41,5 +47,11 @@
|
|||||||
<ClCompile Include="GstreamerAudio.cpp">
|
<ClCompile Include="GstreamerAudio.cpp">
|
||||||
<Filter>Quelldateien</Filter>
|
<Filter>Quelldateien</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="GstreamerVideo.cpp">
|
||||||
|
<Filter>Quelldateien</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="GstreamerVideoStream.cpp">
|
||||||
|
<Filter>Quelldateien</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
#include "GstreamerVideo.h"
|
||||||
|
#include "GstreamerVideoStream.h"
|
||||||
|
|
||||||
|
map<int, GstreamerVideoStream*> VideoStreams;
|
||||||
|
queue<int> 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<int, GstreamerVideoStream*>::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<int, GstreamerVideoStream*> (VideoIDs.front(), s));
|
||||||
|
VideoIDs.pop();
|
||||||
|
return s->LoadVideo(Media);
|
||||||
|
}
|
||||||
|
|
||||||
|
DllExport bool CloseVideo(int Stream)
|
||||||
|
{
|
||||||
|
map<int,GstreamerVideoStream*>::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<int,GstreamerVideoStream*>::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<int,GstreamerVideoStream*>::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<int,GstreamerVideoStream*>::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<int,GstreamerVideoStream*>::iterator it = VideoStreams.find(Stream);
|
||||||
|
if(it != VideoStreams.end())
|
||||||
|
{
|
||||||
|
it->second->SetVideoLoop(Loop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DllExport void PauseVideo(int Stream)
|
||||||
|
{
|
||||||
|
map<int,GstreamerVideoStream*>::iterator it = VideoStreams.find(Stream);
|
||||||
|
if(it != VideoStreams.end())
|
||||||
|
{
|
||||||
|
it->second->PauseVideo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DllExport void ResumeVideo(int Stream)
|
||||||
|
{
|
||||||
|
map<int,GstreamerVideoStream*>::iterator it = VideoStreams.find(Stream);
|
||||||
|
if(it != VideoStreams.end())
|
||||||
|
{
|
||||||
|
it->second->ResumeVideo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DllExport bool Finished(int Stream)
|
||||||
|
{
|
||||||
|
map<int,GstreamerVideoStream*>::iterator it = VideoStreams.find(Stream);
|
||||||
|
if(it != VideoStreams.end())
|
||||||
|
{
|
||||||
|
return it->second->Finished();
|
||||||
|
}
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include <queue>
|
||||||
|
#include "gst/gst.h"
|
||||||
|
#define DllExport extern "C" __declspec(dllexport)
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
typedef void (__stdcall * LogCallback)(const char* text);
|
||||||
|
static LogCallback Log;
|
||||||
|
|
||||||
|
DllExport void SetVideoLogCallback(LogCallback Callback);
|
||||||
|
|
||||||
|
DllExport bool InitVideo();
|
||||||
|
DllExport void CloseAllVideos();
|
||||||
|
|
||||||
|
DllExport int LoadVideo(const wchar_t* Media);
|
||||||
|
DllExport bool CloseVideo(int StreamID);
|
||||||
|
DllExport int GetVideoNumStreams();
|
||||||
|
|
||||||
|
DllExport float GetVideoLength(int StreamID);
|
||||||
|
DllExport UINT8* GetFrame(int StreamID, float Time, float &VideoTime);
|
||||||
|
DllExport bool Skip(int StreamID, float Start, float Gap);
|
||||||
|
DllExport void SetVideoLoop(int StreamID, bool Loop);
|
||||||
|
DllExport void PauseVideo(int StreamID);
|
||||||
|
DllExport void ResumeVideo(int StreamID);
|
||||||
|
|
||||||
|
DllExport bool Finished(int StreamID);
|
||||||
|
|
||||||
|
void LogVideoError(const char* msg);
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
#include "GstreamerVideoStream.h"
|
||||||
|
|
||||||
|
|
||||||
|
GstreamerVideoStream::GstreamerVideoStream(int ID)
|
||||||
|
{
|
||||||
|
this->ID = ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GstreamerVideoStream::~GstreamerVideoStream(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int GstreamerVideoStream::LoadVideo(const wchar_t* Filename)
|
||||||
|
{
|
||||||
|
return ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool GstreamerVideoStream::CloseVideo()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
float GstreamerVideoStream::GetVideoLength()
|
||||||
|
{
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT8* GstreamerVideoStream::GetFrame(float Time, float &VideoTime)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GstreamerVideoStream::Skip(float Start, float Gap)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GstreamerVideoStream::SetVideoLoop(bool Loop)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void GstreamerVideoStream::PauseVideo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void GstreamerVideoStream::ResumeVideo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GstreamerVideoStream::Finished()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "gst/gst.h"
|
||||||
|
using namespace std;
|
||||||
|
class GstreamerVideoStream
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
int ID;
|
||||||
|
|
||||||
|
GstreamerVideoStream(int ID);
|
||||||
|
~GstreamerVideoStream(void);
|
||||||
|
|
||||||
|
int LoadVideo(const wchar_t* VideoFileName);
|
||||||
|
bool CloseVideo();
|
||||||
|
|
||||||
|
float GetVideoLength();
|
||||||
|
UINT8* GetFrame(float Time, float &VideoTime);
|
||||||
|
bool Skip(float Start, float Gap);
|
||||||
|
void SetVideoLoop(bool Loop);
|
||||||
|
void PauseVideo();
|
||||||
|
void ResumeVideo();
|
||||||
|
|
||||||
|
bool Finished();
|
||||||
|
};
|
||||||
|
|
||||||
Binary file not shown.
@@ -22,7 +22,9 @@ namespace Vocaluxe.Base
|
|||||||
case EVideoDecoder.FFmpeg:
|
case EVideoDecoder.FFmpeg:
|
||||||
_VideoDecoder = new CVideoDecoderFFmpeg();
|
_VideoDecoder = new CVideoDecoderFFmpeg();
|
||||||
break;
|
break;
|
||||||
|
case EVideoDecoder.Gstreamer:
|
||||||
|
_VideoDecoder = new CVideoDecoderGstreamer();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
_VideoDecoder = new CVideoDecoderFFmpeg();
|
_VideoDecoder = new CVideoDecoderFFmpeg();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using Vocaluxe.Lib.Video.Gstreamer;
|
||||||
|
|
||||||
|
namespace Vocaluxe.Lib.Video
|
||||||
|
{
|
||||||
|
class CVideoDecoderGstreamer : IVideoDecoder
|
||||||
|
{
|
||||||
|
public bool Init()
|
||||||
|
{
|
||||||
|
return CGstreamerVideoWrapper.InitVideo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CloseAll()
|
||||||
|
{
|
||||||
|
CGstreamerVideoWrapper.CloseAllVideos();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Load(string VideoFileName)
|
||||||
|
{
|
||||||
|
return CGstreamerVideoWrapper.LoadVideo(VideoFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Close(int StreamID)
|
||||||
|
{
|
||||||
|
return CGstreamerVideoWrapper.CloseVideo(StreamID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetNumStreams()
|
||||||
|
{
|
||||||
|
return CGstreamerVideoWrapper.GetVideoNumStreams();
|
||||||
|
}
|
||||||
|
|
||||||
|
public float GetLength(int StreamID)
|
||||||
|
{
|
||||||
|
return CGstreamerVideoWrapper.GetVideoLength(StreamID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetFrame(int StreamID, ref Menu.STexture Frame, float Time, ref float VideoTime)
|
||||||
|
{
|
||||||
|
IntPtr buffer = CGstreamerVideoWrapper.GetFrame(StreamID, Time, ref VideoTime);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Skip(int StreamID, float Start, float Gap)
|
||||||
|
{
|
||||||
|
return CGstreamerVideoWrapper.Skip(StreamID, Start, Gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetLoop(int StreamID, bool Loop)
|
||||||
|
{
|
||||||
|
CGstreamerVideoWrapper.SetVideoLoop(StreamID, Loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Pause(int StreamID)
|
||||||
|
{
|
||||||
|
CGstreamerVideoWrapper.PauseVideo(StreamID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Resume(int StreamID)
|
||||||
|
{
|
||||||
|
CGstreamerVideoWrapper.ResumeVideo(StreamID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Finished(int StreamID)
|
||||||
|
{
|
||||||
|
return CGstreamerVideoWrapper.Finished(StreamID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Vocaluxe.Lib.Video.Gstreamer
|
||||||
|
{
|
||||||
|
public static class CGstreamerVideoWrapper
|
||||||
|
{
|
||||||
|
#region arch
|
||||||
|
#if ARCH_X86
|
||||||
|
#if WIN
|
||||||
|
private const string Dll = "x86\\gstreamerhelper.dll";
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ARCH_X64
|
||||||
|
#if WIN
|
||||||
|
private const string Dll = "x64\\gstreamer\\gstreamerhelper.dll";
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endregion arch
|
||||||
|
public delegate void LogCallback(string message);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern void SetVideoLogCallback(LogCallback c);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern bool InitVideo();
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern void CloseAllVideos();
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern int LoadVideo(string VideoFileName);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern bool CloseVideo(int StreamID);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern int GetVideoNumStreams();
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern float GetVideoLength(int StreamID);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern IntPtr GetFrame(int StreamID, float Time, ref float VideoTime);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern bool Skip(int StreamID, float Start, float Gap);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern void SetVideoLoop(int StreamID, bool Loop);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern void PauseVideo(int StreamID);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern void ResumeVideo(int StreamID);
|
||||||
|
|
||||||
|
[DllImport(Dll)]
|
||||||
|
public static extern bool Finished(int StreamID);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -224,6 +224,8 @@
|
|||||||
<Compile Include="Lib\Video\Acinerella\CAcinerella.cs" />
|
<Compile Include="Lib\Video\Acinerella\CAcinerella.cs" />
|
||||||
<Compile Include="Lib\Video\CVideoDecoder.cs" />
|
<Compile Include="Lib\Video\CVideoDecoder.cs" />
|
||||||
<Compile Include="Lib\Video\CVideoDecoderFFmpeg.cs" />
|
<Compile Include="Lib\Video\CVideoDecoderFFmpeg.cs" />
|
||||||
|
<Compile Include="Lib\Video\CVideoDecoderGstreamer.cs" />
|
||||||
|
<Compile Include="Lib\Video\Gstreamer\CGstreamerVideoWrapper.cs" />
|
||||||
<Compile Include="Lib\Video\IVideoDecoder.cs" />
|
<Compile Include="Lib\Video\IVideoDecoder.cs" />
|
||||||
<Compile Include="Lib\Webcam\CAForgeNet.cs" />
|
<Compile Include="Lib\Webcam\CAForgeNet.cs" />
|
||||||
<Compile Include="Lib\Webcam\IWebcam.cs" />
|
<Compile Include="Lib\Webcam\IWebcam.cs" />
|
||||||
|
|||||||
@@ -657,7 +657,8 @@ namespace Vocaluxe.Menu
|
|||||||
|
|
||||||
public enum EVideoDecoder
|
public enum EVideoDecoder
|
||||||
{
|
{
|
||||||
FFmpeg
|
FFmpeg,
|
||||||
|
Gstreamer
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ESongMenu
|
public enum ESongMenu
|
||||||
|
|||||||
Reference in new issue
Block a user