Click here to Skip to main content
13,148,214 members (59,468 online)
Click here to Skip to main content
Add your own
alternative version

Stats

143.9K views
28.9K downloads
270 bookmarked
Posted 11 Aug 2015

CaptureManager SDK

, 20 Aug 2017
Rate this:
Please Sign up or sign in to vote.
Simple SDK for capturing, recording and streaming video and audio from web-cams on Windows OS by Windows Media Foundation.

CaptureManager SDK Versions:

The Commercial version:

Capture Manager Video Renderer Factory:

CaptureManager SDK Demo programs:

NuGet CaptureManager SDK package

Capture Manager Topology Editor - Capture Manager Store

Updates:

Introduction

This article presents my project for capturing of video and audio sources on Windows OS by Microsoft Media Foundation.

I have spent much time on resolving of different tasks with processing of video and audio data, and researched techniques for capturing of video and audio on Windows family OSs. DirectShow was the main technique for capturing live-video on Windows family OSs for long time. However, since Vista OS Microsoft has introduced a new framework for working with video and audio - Microsoft Media Foundation, and since Windows7 OS it has features for working with web-cam via USB Video Class driver and line audio input. I included that technology into many projects and wrote two articles about it: Capturing Live-video from Web-camera on Windows 7 and Windows 8 and Capturing Video from Web-camera on Windows 7 and 8 by using Media Foundation. Those articles present simple libraries for capturing web-cams and grabbing of image frames, but Microsoft Media Foundation is much more powerful framework. After some thinking, I have decided to write a new solution for working with live-video and audio which can be more flexible than my previous solutions, and can take much more power (or force :)) of Microsoft Media Foundation. The solution, which can compete with Microsoft solution. The solution, which can be called the best anyone have seen before by any developer. 

Background

I had got an idea to write a new solution for working with web-cams on basement of Microsoft Media Foundation while faced with one unusual task. So, the task was not resolved, but I had wrote some code and had decided to continue development of the solution.

At beginning the solution included only few classes and allowed to execute only few functions, but after adding of some demands for this solution I had decided to write a simple SDK which allows to make capture configuration for the new tasks easy and to inject a new developed code into it by implementation of the Microsoft Media Foundation's and CaptureManager's interfaces. 

As a result, I have got this SDK for capturing, recording and steaming of live-video and audio from web-cams only by Microsoft Media Foundation.

Using the code

CaptureManager SDK Demo programs

 

OpenGLWebCamViewerViaCOMServer

This demo program presents only simple configuration of the web-cam capturing and viewing via OpenGL rendering.

For using of Capture Manager it needs call the suitable interfaces from CaptureManager COM server. For setting of print output log destination it needs to get ILogPrintOutControl interface:

// get COM log interface
CComPtrCustom<iclassfactory> lCoLogPrintOut;

HRESULT lhresult = CoGetClassObject(CLSID_CoLogPrintOut, CLSCTX_INPROC_SERVER, nullptr, IID_PPV_ARGS(&lCoLogPrintOut));

if (FAILED(lhresult))
    return lhresult;

CComPtrCustom<ilogprintoutcontrol> lLogPrintOutControl;

lCoLogPrintOut->LockServer(true);

lhresult = lCoLogPrintOut->CreateInstance(
    nullptr,
    IID_PPV_ARGS(&lLogPrintOutControl));

if (FAILED(lhresult))
    return lhresult;

// set log file for info
lhresult = lLogPrintOutControl->addPrintOutDestination(
    (DWORD)INFO_LEVEL,
    L"Log.txt");

if (FAILED(lhresult))
    return lhresult;

For getting main methods of the CaptureManager it needs get ICaptureManagerControl interface:

CComPtrCustom<IClassFactory> lCoCaptureManager;

lhresult = CoGetClassObject(CLSID_CoCaptureManager, CLSCTX_INPROC_SERVER, nullptr, IID_PPV_ARGS(&lCoCaptureManager));

if (FAILED(lhresult))
    return lhresult;

lCoCaptureManager->LockServer(true);

// get ICaptureManagerControl interfrace
CComPtrCustom<ICaptureManagerControl> lCaptureManagerControl;

lhresult = lCoCaptureManager->CreateInstance(
    nullptr,
    IID_PPV_ARGS(&lCaptureManagerControl));

if (FAILED(lhresult))
    return lhresult;

The topology of this demo program is presented in the next schema:

This demo program can be gotten by link: Download OpenGLWebCamViewerViaCOMServer.zip

 

EVRWebCapViewerViaCOMServer

This demo program presents the way of using of Enhanced Video Renderer for rendering of live video via CaptureManager COM server. 

This code allows easy integrate this CaptureManager SDK into already created Windows application - it needs only handler on element of GUI which is used as web-cam display. This code controls resizing of GUI element and modify renderer for changing of video size and proportion.

This demo program can be gotten by link: Download EVRWebCapViewerViaCOMServer.zip

 

CaptureManagerToCSharpProxy

This demo program presents the way of linking CaptureManager.dll with C# project. In this project CaptureManagerSDK is wrapped by C# class CaptureManager. This class hides direct working with COM interface and marshaling of image data from unmanaged code. For flexibility of solutions the class upload CaptureManager.dll directly into the process and get COM objects WITHOUT of calling of COM's infrastructure - it allows to use CaptureManager COM server WITHOUT any registration in system.

This demo program can be gotten by link: Download CaptureManagerToCSharpProxy.zip

 

WPFSourceInfoViewer

This demo program presents the way of collecting information from sources and presenting it in the readable form. Information from the sources is presented in form of XML document. There are some reasons for using of XML format for transfering infofmation from COM server:

1. simple structure - Microsoft Media Foundation uses huge amount of GUID constant and types which need to know for understanding of the info, but in this solution all of them presented into the friendly form;

2. easy transfare from COM server;

3. easy parsing - XPath expression allows to get almost any needed information and present it, it is more easy than working with static defined classes and lists of info;

4. In the most cases, user needs to read which features are supported by source and select one of it;

5. XML document is easy integrated source into code of different presentation models (for instance - MVVM).  

This demo program can be gotten by link: Download WPFSourceInfoViewer.zip

 

WPFWebViewerCall

This demo program presents the way viewing live video from web cam via COM Sever on C# - WPF by calling of video frames from WPF thread. This code gets XML document from CaptureManager and pares it for getting some information: name of device, type of data stream and list of supported resolutions. The code launchs grabbing of video frames via ISampleGrabber interface and works in sync mode.

This demo program can be gotten by link: Download WPFWebViewerCall.zip

 

WPFWebViewerCallback

This demo program presents the way viewing live video from web cam via COM Sever on C# - WPF by calling of video frames from CaptureManager thread. This code gets XML document from CaptureManager and pares it for getting some information: name of device, type of data stream and list of supported resolutions. The code registers update method into the class with ISampleGrabberCallback interface and inject this class into COM Server. While CaptureManager gets new video frame it calls WPF update method and post message to update of frame. In this case, the thread of WPF is not overloaded by grabbing task.

This demo program can be gotten by link: Download WPFWebViewerCallback.zip

 

WPFWebViewerEVR

This demo program presents the way viewing live video from web cam via COM Sever on C# - WPF by using of Enhanced Video Renderer from CaptureManager thread. This code gets XML document from CaptureManager and pares it for getting some information: name of device, type of data stream and list of supported resolutions. The code gets EVR node from CaptureManager by setting of HWND of the integrated WindowForms panel. In this case, all working with video frames is executed behind of WPF thread.

This demo program can be gotten by link: Download WPFWebViewerEVR.zip

 

WPFRecorder

This demo program presents the way of working with CaptureManager SDK for capturing, encodring and recording / broadcasting video - audio from web cameras, microphones, desktop screens and speakers via COM Sever on C# - WPF. 

Code of this demo program presents the correct algorithm of working with CaptureManager SDK via COM Server interfaces. The final point of data stream can be file sink or byte stream sink. The last one is more interesting opportunity then simple saving into the file. In this demo program byte stream sink is implemented in form of TCP Server with Loopback address and http port: 8080. The simular implementation can be find in demo proram on C++, but this one has one significant difference - in this demo program the TCP Server is implemented on C#-dotNet framework. CaptureManager SDK is written on C++ and uses Windows Media Foundation on C, however, there is a good news - CaptureManager SDK needs implementation Windows Media Foundation interface IMFByteStream for streaming of bytes. Implementation C interface IMFByteStream on C# does not need any specific Windows Media Foundation function - it needs defining interfaces: IMFByteStreamIMFAsyncCallbackIMFAsyncResult; and enum constants: 

  • MFAsyncCallbackQueue
  • MFASync
  • MFByteStreamSeekingFlags
  • MFByteStreamSeekOrigin
  • MFByteStreamCapabilities
  • UnmanagedNameAttribute.  

Implementation of those interfaces can be found in file NetworkStreamSink.cs, but I would like to point your attention on the next moments:

1. in IMFByteStream interface there are four implemented methods: GetCapabilitiesWriteBeginWriteEndWrite. In the first one the code sets type of implementation of  IMFByteStream interface - writteable, but not seekable. Method  Write is used for sync writing data into the stream, while methods BeginWriteEndWrite are used for async writing. However, there are some important moments: method  Write is called once ant the start - it writes the head of medta streams: type of encoder, amount of streams, names of streams and other metadata. Async writing needs to execute the methods in the next order:  BeginWrite, argument IMFAsyncCallback pCallback.InvokeEndWrite, but Calling of methods BeginWriteEndWrite can be locked by the same mutex. It means that argument IMFAsyncCallback pCallback.Invoke must be executed in the separated thread - for example by ThreadPool.QueueUserWorkItem.  

2. In the implementation of TCP Server I have used async calling BeginAcceptTcpClient, and writing head data at the start of each connection - it allows to connect any mount of client to the media stream server. 

public void Start()
{
try
{
tcpListener = new TcpListener(Configuration.IPAddress, Configuration.Port);
tcpListener.Start();
tcpListener.BeginAcceptTcpClient(
new AsyncCallback(callBack),
tcpListener);
}
catch (Exception e)
{
}
}

/// <summary>
/// Stops the WebServer thread
/// </summary>

public void Stop()
{
try
{
tcpListener.Stop();
foreach (var item in mClientBag)
{
item.Value.Client.Close();
item.Value.Client.Dispose();
item.Value.Close();
}
tcpListener.Server.Dispose();
}
catch (Exception e)
{
}
}

private void callBack(IAsyncResult aIAsyncResult)
{
TcpListener ltcpListener = (TcpListener)aIAsyncResult.AsyncState;
if (ltcpListener == null)
return;
TcpClient lclient = null;
try
{
lclient = ltcpListener.EndAcceptTcpClient(aIAsyncResult);
}
catch (Exception exc)
{
return;
}
if (lclient != null && lclient.Client.Connected)
{
StreamReader streamReader = new StreamReader(lclient.GetStream());

// Read full request with client header
StringBuilder receivedData = new StringBuilder();
while (streamReader.Peek() > -1)
receivedData.Append(streamReader.ReadLine());
string request = GetRequest(receivedData.ToString());
if (!SuportedMethod(request))
{
SendError(StatusCode.BadRequest, "Only GET is supported.", lclient);
lclient.Client.Close();
lclient.Close();
}
else
{
Socket socket = lclient.Client;
if (socket.Connected)
{
SendHeader(StatusCode.OK, lclient);
lock (this)
{
if (mHeaderMemory != null)
{
int sentBytes = socket.Send(mHeaderMemory);
}
mClientBag[lclient] = lclient;
}
}
}
}
ltcpListener.BeginAcceptTcpClient(
new AsyncCallback(callBack),
ltcpListener);
}

3. The head includes MIME type of byte stream, which allows to use in the future release the same solution for any type of media container - ASF, MP4, MKV.

private void SendHeader(string mimeType, long totalBytes, StatusCode statusCode, TcpClient aTcpClient)
{
StringBuilder header = new StringBuilder();
header.Append(string.Format("HTTP/1.1 {0}\r\n", GetStatusCode(statusCode)));
header.Append(string.Format("Content-Type: {0}\r\n", mimeType));
header.Append(string.Format("Accept-Ranges: bytes\r\n"));
header.Append(string.Format("Server: {0}\r\n", Configuration.ServerName));
header.Append(string.Format("Connection: close\r\n"));
header.Append(string.Format("Content-Length: {0}\r\n", totalBytes));
header.Append("\r\n");

SendToClient(header.ToString(), aTcpClient);
}

This demo program can be gotten by link: Download WPFRecording.zip

 

QtMinGWDemo

This demo program presents the way of working with CaptureManager SDK for capturing, encoding and recording / broadcasting live video and audio from web cameras, microphones, desktop screens and speakers via COM Sever on Qt framework. On Windows OS there is a version of Qt for Visual Studio Compiler, but this demo presents using of CaptureManager SDK with Qt version for MinGW Compiler. Of course, this demo can be recompiled for Visual Studio Compiler, but version for MinGW Compiler shows flexibility of this SDK and compaliblness with many other compilers. This demo include code for capturing live video from web cameras and viewing by calling of samples, by callback of view update code from Capture Manager SDK inner thread or by direct drawing image via HWND of widget.

Another example in this demo presents way for connection of sources, encoders and sinks into the one pipe line of processing. This demo presents way for recording video and audio into the file and real code for writing of network stream broadcasting into the Internet code by Qt framework QTcpServer  and QTcpSocket classes.

This demo program can be gotten by link: Download QtMinGWDemo

 

CaptureManagerSDKPythonDemo

This demo program presents the way of working with CaptureManager SDK for capturing of live video from web cameras in Python application on Windows OS. CaptureManager is built with using of Microsoft Media Foundation on Desktop Windows OSs and COM technology. As any COM server CaptureManager can be intergated into the project via direct calling interfaces or type library. However, dynamic type programming languages have some problems with correct using type libraries. For resolving such problems I have included IDispatch and wrote implementation for many classes, but some projects need working with pointers on massive of memory and it could be a problem with dynamic types. For simplifing solution I have implemented IDispatch interface only for limited functionality. This demo program presents functionality for selections of sources, encoders and rendering video via HWND and saving into the file,      

This demo program can be gotten by link: Download CaptureManagerSDKPythonDemo

 

WPFScreenStreamer

This demo program presents the way of working with CaptureManager SDK for streaming live video of desktop screen and audio loop back of speaker's audio stream. This implementation is founded on MP4 media container. The modern web browsers support playing media content of format MP4 with video encoding by H264 and audio encoding by AAC and MP3. Since presenting Windows 8, Microsoft Media Foundation allows create MP4 media container which can be transmitted via LAN in format which compalible with HTML5. Such unique opportunity is implemented in this demo in the form of the simplest screen streaming web server.  After launching of demo program it ready to connect with the client browser. 

Working of this demo can be tested via HTML5 page. For example like this:

<html>
<video controls><source src="http://localhost:8080/anyfile.mp4" type="video/mp4" /> I'm sorry; your browser doesn't support HTML5 video in MP4 with H.264.</video></html>
 

This demo program can be gotten by link: Download ScreenStreaming_Bin.zip and Download WPFScreenStreaming.zip

For preventing of questions about licensing for using of the format MP4 I can say that CaptureManager SDK DOES NOT INCLUDE code for working with MP4 container. It DOES NOT read or write MP4 container. All these actions are executed by modules of Windows OS which is written by Microsoft. As  a result, all licensed royalty for using of MP4 is already paid by Microsoft and users of Windows OSs have already paid for using those modules as part of Windows OSs. So, In my view, It allows to use Microsoft Media Foundation implementation MP4 writer in commercial projects without any problems.

 

WPFWebCamShot

This demo program presents the way of working with CaptureManager SDK for capturing single frame from video stream. CaptureManager SDK includes new mode for SampleGrabberCallSinkFactory - PULL.

This mode is differ from SYNC and ASYNC modes. SYNC and ASYNC modes work in continues mode - they send request for next sample after receiving of the current one in automatic mode without blocking. It leads queue of requests and samples like on image:

This type is useful for presenting of video, but the task of capturing the single frame has faced with the next dificulty - 99 percents of frames are captured, decoded and delivered to the sink, but customer's code does not take it from sink. This task can be in reality - for example, taking single frame each one second while camera produces 30 frames per second - it this case CPU wastes time and power on 29 frames which will throw out into the garbge. For such task new mode - PULL can be more useful. The sink sends request only while customer's code calls for the new single frame:

It allows utilize CPU power more effective only for one task. The new mode can be useful also for many projects of image recognition - such projects usually process frames with frame rate low than it can be produced by cameras, but video pipeline will spend much CPU power on frames, which will not be processed.  PULL mode allows release some CPU power from video pipeline for other parts of program.    

This demo program can be gotten by link: Download WPFWebCamShot.zip

 

WPFWebCamSerialShots

This demo program presents the way of working with CaptureManager SDK for capturing the last serial frames from video stream. CaptureManager SDK 1.2.0 includes new type of stream control node - sample accumulator node: 

It includes two sample accumulator nodes on 5 and 10 samples which collect/accumulate 5 or 10 LAST SAMPLES. Idea is that in the real world taking of photo does not executed in the moment of viewing of event. Human reaction on event, process of pressing on take photo button, sending event from hardware layer into layer of customer's code and requesting of the single frame take some time - from 500 ms til 1 second. It leads to loose of important moment which was the reason of taking of photo. Sample accumulator nodes can compensate such time delay by accumulating the last samples in video stream. These samples can be gotten by PULL mode of SampleGrabberCallSinkFactory. It sends the request:

and receives the last samples:

It can be useful for resolving of some problems, but accumulation of samples needs memory buffer which can be expanded fast - for example for keeping of 10 last samples of RGB32 image of 1080p format it needs about 60 MByte - one second accumulation in such video can need about 200 MByte or more. Of course, it is possible create sample accumulator with different schema - for example one by third - it means keeping only each third sample from video stream.

This demo program can be gotten by link: Download WPFWebCamSerialShots.zip

 

CaptureManagerToJavaProxy

This demo program presents the way of linking CaptureManager.dll with Java VM. This project presents Java wrapper of COM CaptureManager via calling JNI functions. It includes CaptureManagerToJavaProxy framework for reflection Java code on C code of CaptureManagerNativeProxy.dll. CaptureManagerToJavaProxy framework includes code for calling native code from JAR - it allows build runnable JAR file with packed CaptureManagerNativeProxy.dll and CaptureManager.dll. This project uses Microsoft Media Foundation - it limitates Java projects ONLY Windows OSs since from Windows 7.  

This proxy programs can be gotten by links: 

Download CaptureManagerToJavaProxy.zip,

Download CaptureManagerJNIProxy.zip

 

CaptureManagerSDKJavaxDemo

This demo program presents the way of working with web camera on WindowsOSs via Java VM. This demo program allows present live video from web camera via Javax.swing GUI framework. It allows get HWND descriptor of GUI component and use EVR for rendering without marshaling images via Java VM JNI - it allows safe much CPU power:

In addition, this demo program includes functionality for recording video from web camera into the ASF video file:

You can test this demo program by compiling runnable JAR file or downloading CaptureManagerSDKJavaxDemo.jar.zip which contains CaptureManagerSDKJavaxDemo.jar. It could be important point your attention on architecte of VM - x86 and x86-64. In the most situations Java compiled code can be executed on both architectes. However, CaptureManagerToJavaProxy calls native code via JNI - it leads the next problems: Native DLL with JNI for x86 cannot be uploaded into x86-64 Java VM, and Native DLL with JNI for x86-64 cannot be uploaded into x86 Java VM. These problems are resolved by finding of Java VM architecte at runtime and uploading CaptureManagerNativeProxy.dll of the suitable architecte into the Java VM. It means that JAR includes TWO CaptureManagerNativeProxy.dll and TWO CaptureManager.dll.

I think that you will find its very suitable - of course, it is workable ONLY on WindowsOSs since Windows 7.

This demo program can be gotten by links: 

Download CaptureManagerSDKJavaxDemo.zip

Download CaptureManagerSDKJavaxDemo.jar.zip

 

WindowsFormsDemo:

This demo program presents the way of working with web camera on WindowsOSs on WindowsForms GUI.

This demo program allows present live video from web camera via WindowsForms GUI framework. It allows get HWND descriptor of GUI component and use EVR for rendering without marshaling data via C# - it allows safe much CPU power: 

This demo shows how to select different types of sources. At the present time, CaptureManager supports three source types: Webcam, Screen, DirectShow Crossbar. These sources are different, and it is possible have connected some of these source type devices at the same time. It leads to need a solution for flexible selecting the suitable group of source type. The next code of generating XPath query implements such functionality in this demo:

string lXPath = "//*[";

if(toolStripMenuItem1.Checked)
{

    lXPath += "Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY']/SingleValue[@Value='CLSID_WebcamInterfaceDeviceCategory']";
}
                        
if (toolStripMenuItem2.Checked)
{
    if (toolStripMenuItem1.Checked)
        lXPath += "or ";

    lXPath += "Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE']/SingleValue[@Value='Software device']";
}

if (dSCrossbarToolStripMenuItem.Checked)
{
    if (toolStripMenuItem1.Checked || toolStripMenuItem2.Checked)
        lXPath += "or ";

        lXPath += "Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY']/SingleValue[@Value='CLSID_VideoInputDeviceCategory']";
}                      
            
lXPath += "]";

In addition, this demo includes code for recording video and audio from media sources:

This demo program can be gotten by link: Download WindowsFormsDemo.zip

 

WaterMarkInjectorDemo:

This demo program presents the way of working of custom Microsoft Media Foundation Transform with CaptureManager. This demo program allows 'inject' image into the live video via special custom Microsoft Media Foundation Transform which works like 'effect filter'. 

 

This demo program can be gotten by link: Download WaterMarkInjector.zip

 

TextInjectorDemo:

This demo program presents the way of working of custom Microsoft Media Foundation Transform with CaptureManager. This demo program allows 'inject' text string into the live video via special custom Microsoft Media Foundation Transform which works like 'effect filter' and change its content. 

The text string content can be changed from application side in continues mode with displaying result immediately. In this demo program it is done by the next code:

wchar_t ltext[MAXBYTE];

/* program main loop */
while (!bQuit)
{
	/* check for messages */
	if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
	{
		/* handle or dispatch messages */
		if (msg.message == WM_QUIT)
		{
			bQuit = TRUE;
		}
		else
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}

	_itow_s(++lFrameCount, ltext, 10);

	lITextWriter->writeText(ltext);

	Sleep(200);
}

This demo program can be gotten by link: Download TextInjector.zip

 

WPFImageViewer:

This demo program presents the way of working with ICaptureProcessor, IInitilaizeCaptureSource,  ICurrentMediaType, ISourceRequestResult interfaces of CaptureManagerToCSharpProxy. This demo program implements ICaptureProcessor interface in ImageCaptureProcessor class - this class allows 'inject' customized data into the capture session. ICaptureProcessor interface has methods: 

void initilaize(IInitilaizeCaptureSource IInitilaizeCaptureSource),

void pause(),

void setCurrentMediaType(ICurrentMediaType aICurrentMediaType),

void shutdown(),

void sourceRequest(ISourceRequestResult aISourceRequestResult),

void start(long aStartPositionInHundredNanosecondUnits, ref Guid aGUIDTimeFormat),

void stop().

Method void initilaize(IInitilaizeCaptureSource IInitilaizeCaptureSource) must set in IInitilaizeCaptureSource argument XML text string with the description of capture source - this data is got from image info. Method void setCurrentMediaType(ICurrentMediaType aICurrentMediaType)  allows select correct stream index and correct media type. Method void sourceRequest(ISourceRequestResult aISourceRequestResult) is executed by CaptureManage SDK for getting of raw data in format which is defined in XML text string with the description. The format of such XML document has the next form:

<!--?xml version='1.0' encoding='UTF-8'?-->
<presentationdescriptor streamcount="1">
	<presentationdescriptor.attributes title="Attributes of Presentation"> 
		<attribute description="Contains the unique symbolic link for a video capture driver." guid="{58F0AAD8-22BF-4F8A-BB3D-D2C4978C6E2F}" name="MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK" title="The symbolic link for a video capture driver.">
			<singlevalue value="ImageCaptureProcessor">
		</singlevalue></attribute>
		<attribute description="The display name is a human-readable string, suitable for display in a user interface." guid="{60D0E559-52F8-4FA2-BBCE-ACDB34A8EC01}" name="MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME" title="The display name for a device."> 
			<singlevalue value="Image Capture Processor">
		</singlevalue></attribute>
	</presentationdescriptor.attributes> 
	<streamdescriptor index="0" majortype="MFMediaType_Video" majortypeguid="{73646976-0000-0010-8000-00AA00389B71}"> 
		<mediatypes typecount="1"> 
			<mediatype index="0">
				<mediatypeitem description="Width and height of a video frame, in pixels." guid="{1652C33D-D6B2-4012-B834-72030849A37D}" name="MF_MT_FRAME_SIZE" title="Width and height of the video frame."> 
					<value.valueparts> 
						<valuepart title="Width" value="Temp_Width"> 
						<valuepart title="Height" value="Temp_Height"> 
					</valuepart></valuepart></value.valueparts>
				</mediatypeitem>
				<mediatypeitem description="Approximate data rate of the video stream, in bits per second, for a video media type." guid="{20332624-FB0D-4D9E-BD0D-CBF6786C102E}" name="MF_MT_AVG_BITRATE" title="Approximate data rate of the video stream."> 
					<singlevalue value="33570816">
				</singlevalue></mediatypeitem>
				<mediatypeitem description="The major type defines the overall category of the media data." guid="{48EBA18E-F8C9-4687-BF11-0A74C9F96A8F}" name="MF_MT_MAJOR_TYPE" title="Major type GUID for a media type."> 
					<singlevalue guid="{73646976-0000-0010-8000-00AA00389B71}" value="MFMediaType_Video"> 
				</singlevalue></mediatypeitem>
				<mediatypeitem description="Default surface stride, for an uncompressed video media type. Stride is the number of bytes needed to go from one row of pixels to the next." guid="{644B4E48-1E02-4516-B0EB-C01CA9D49AC6}" name="MF_MT_DEFAULT_STRIDE" title="Default surface stride."> 
					<singlevalue value="Temp_Stride"> 
				</singlevalue></mediatypeitem>
				<mediatypeitem description="Specifies for a media type whether the samples have a fixed size." guid="{B8EBEFAF-B718-4E04-B0A9-116775E3321B}" name="MF_MT_FIXED_SIZE_SAMPLES" title="The fixed size of samples in stream."> 
					<singlevalue value="True"> 
				</singlevalue></mediatypeitem>
				<mediatypeitem description="Frame rate of a video media type, in frames per second." guid="{C459A2E8-3D2C-4E44-B132-FEE5156C7BB0}" name="MF_MT_FRAME_RATE" title="Frame rate."> 
					<ratiovalue value="10.0"> 
						<value.valueparts> 
							<valuepart title="Numerator" value="10">  
							<valuepart title="Denominator" value="1">  
						</valuepart></valuepart></value.valueparts> 
					</ratiovalue> 
				</mediatypeitem>
				<mediatypeitem description="Pixel aspect ratio for a video media type." guid="{C6376A1E-8D0A-4027-BE45-6D9A0AD39BB6}" name="MF_MT_PIXEL_ASPECT_RATIO" title="Pixel aspect ratio."> 
					<ratiovalue value="1"> 
						<value.valueparts> 
							<valuepart title="Numerator" value="1">  
							<valuepart title="Denominator" value="1">  
						</valuepart></valuepart></value.valueparts> 
					</ratiovalue> 
				</mediatypeitem>
				<mediatypeitem description="Specifies for a media type whether each sample is independent of the other samples in the stream." guid="{C9173739-5E56-461C-B713-46FB995CB95F}" name="MF_MT_ALL_SAMPLES_INDEPENDENT" title="Independent of samples."> 
					<singlevalue value="True">  
				</singlevalue></mediatypeitem>
				<mediatypeitem description="Specifies the size of each sample, in bytes, in a media type." guid="{DAD3AB78-1990-408B-BCE2-EBA673DACC10}" name="MF_MT_SAMPLE_SIZE" title="The fixed size of each sample in stream."> 
					<singlevalue value="Temp_SampleSize">  
				</singlevalue></mediatypeitem>
				<mediatypeitem description="Describes how the frames in a video media type are interlaced." guid="{E2724BB8-E676-4806-B4B2-A8D6EFB44CCD}" name="MF_MT_INTERLACE_MODE" title="Describes how the frames are interlaced."> 
					<singlevalue value="MFVideoInterlace_Progressive">  
				</singlevalue></mediatypeitem>
				<mediatypeitem description="The subtype GUID defines a specific media format type within a major type." guid="{F7E34C9A-42E8-4714-B74B-CB29D72C35E5}" name="MF_MT_SUBTYPE" title="Subtype GUID for a media type."> 
					<singlevalue guid="{Temp_SubTypeGUID}">
				</singlevalue></mediatypeitem>
			</mediatype>
		</mediatypes>
    </streamdescriptor>
</presentationdescriptor>

Temp_SubTypeGUID defines image format, Temp_SampleSize is byte size of image, Temp_Stride is stride in byte or 0 for compressed formats, Temp_Width and Temp_Height are pixel width and height of image.

This demo program can be gotten by link: Download WPFImageViewer.zip

 

WPFIPCameraMJPEGViewer:

This demo program presents the way of working with ICaptureProcessor, IInitilaizeCaptureSource,  ICurrentMediaType, ISourceRequestResult interfaces of CaptureManagerToCSharpProxy. This demo program implements ICaptureProcessor interface in IPCameraMJPEGCaptureProcessor class - this class allows 'inject' MJPEG frames from IP camera. This class connects to the selected web camera by HTTP web socket and redirect the received data into the capture session. ICaptureProcessor inteface has methods: 

void initilaize(IInitilaizeCaptureSource IInitilaizeCaptureSource),

void pause(),

void setCurrentMediaType(ICurrentMediaType aICurrentMediaType),

void shutdown(),

void sourceRequest(ISourceRequestResult aISourceRequestResult),

void start(long aStartPositionInHundredNanosecondUnits, ref Guid aGUIDTimeFormat),

void stop().

 Method void initilaize(IInitilaizeCaptureSource IInitilaizeCaptureSource) must set in IInitilaizeCaptureSource argument XML text string with the description of capture source - this data is got from image. Method void setCurrentMediaType(ICurrentMediaType aICurrentMediaType)  allows select correct stream index and correct media type. Method void sourceRequest(ISourceRequestResult aISourceRequestResult) is executed by CaptureManage SDK for getting of raw data in format which is defined in XML text string with the description. 

This demo program can be gotten by link: Download WPFIPCameraMJPEGViewer.zip

 

WPFViewerEVRDisplay:

This demo program presents the way of working with  IEVRMultiSinkFactory   and IEVRStreamControl interfaces of CaptureManagerToCSharpProxy. This demo program shows way for creating of the EVR sink from Direct3DSurface9 inteface. WPF allows present DirectX texture as regular image via System.Windows.Interop.D3DImage class. However, the demand for compatibility on wide range Windows OSs allows use only old DirectX technique - DirectX9. This code creates render target texture of Direct3DSurface9 inteface and CaptureManager uses this texture a destination surface. This solution allows easy integrate rendering result with the WPF GUI components. 

This demo program shows how to use scaling and setSrcPosition method of IEVRStreamControl interface for effective implementation of zooming and defining Region Of Interest (ROI) and controlling of them.

setSrcPosition method has argumets Left, Right, Top, Bottom which define corners of ROI Rectangle in relative value from 0.0f to 1.0f. This demo uses Screen Capture source for correct working without accessable USB cameras. 

 

This demo program can be gotten by link: Download WPFViewerEVRDisplay.zip

 

WPFMultiSourceViewer:

This demo program presents the way of working with  IEVRMultiSinkFactory and IEVRStreamControl interfaces of CaptureManagerToCSharpProxy. This demo program shows way for creating of two EVR sinks and controlling of them.

This demo shows how connect them with different capture sessions and control of destination: size, position, scale, flush. This demo uses Screen Capture sources for correct working without accessable USB cameras. 

This demo program can be gotten by link: Download WPFMultiSourceViewer.zip

 

WPFIPCameraMJPEGMultiSourceViewer:

This demo program presents the way of working with ICaptureProcessor, IInitilaizeCaptureSource, ICurrentMediaType, ISourceRequestResult,  IEVRMultiSinkFactory and IEVRStreamControl interfaces of CaptureManagerToCSharpProxy. This demo program shows way for creating of two EVR sinks, controlling of them and connecting of them with two instances of IPCameraMJPEGCaptureProcessor class.

 

This demo program can be gotten by link: Download WPFIPCameraMJPEGMultiSourceViewer.zip

 

EVRVieweingAndRecording:

This demo program presents the way of working with CaptureManager SDK for capturing of live video and audio from sources, encoding them and recording them into the file with preview of live video. Connecting of components is presented on the next schema:

 Demo program has consol inteface:

This demo program can be gotten by link: Download EVRVieweingAndRecording.zip

 

WPFVideoAndAudioRecorder:

This demo program presents the way of working with CaptureManager SDK for capturing of live video and audio from sources, encoding them and recording them into the file with preview of live video. Connecting of components is presented on the next schema:

Demo program has WPF GUI and allows to control more correctly:

This demo program can be gotten by link: Download WPFVideoAndAudioRecorder.zip

 

NativeMediaFoundationPlayer:

This demo program presents the way of working with CaptureManager SDK for rendering video from media file by connecting it to the code of MediaFoundation player. The original video renderer of MediaFoundation has a limited functionality and can be used for simple programms,  but for more complex solutions it needs develop a renderer with the needed functionality. CaptureManager version 1.7.0 Freeware has supporting video rendering with the next functionality:

1. MultiSink video rendering - it means that it is possible render more than one video stream on the one video context. Each video rendering sink has independent control from others. 

2. It can use one of three video context:

      2.1 Handler on window which is rendering target:

 

      2.2 DirectX9 Texture - render target texture which can be used for texturing of mesh for final rendering:

      2.3 DirectX9 SwapChain - render target texture from swap chain of DirectX9 renderer:

3. it allows control position, size and background color of rendering.

CaptureManager version 1.7.0 freeware supports only 2 video rendering sinks on the one video rendering context. For more expanding of functionality there is commercial version of MultiSink Factory: CMVRMultiSinkFactory.dll - it has supporing of 8 video rendering sinks on the one video rendering context and presented in form of independent library:

This demo program can be gotten by link: Download NativeMediaFoundationPlayer.zip

Commercial version of Capture Manager Video Renderer Factory can be gotten by link: Capture Manager Video Renderer Factory

 

WPFMediaFoundationPlayer:

This demo program presents the way of working with CaptureManager SDK for rendering video from media file by connecting it to the code of MediaFoundation player.

This demo program has WPF interface and show how correct create group of MediaFoundation players with CaptureManager MultiSink video renderers. It supports CaptureManager version 1.7.0 Freeware:

and CMVRMultiSinkFactory.dll with 8 video rendering sinks on the one video rendering context:

This demo program can be gotten by link: Download WPFMediaFoundationPlayer.zip

Commercial version of Capture Manager Video Renderer Factory can be gotten by link: Capture Manager Video Renderer Factory

 

UnityWebCamViewer

This demo program presents the way of working with CaptureManager SDK in Unity Game Development SDK on Windows OSs. CaptureManager SDK is included into the Unity Game Development SDK by plugin which allows move pointer of DirectX9 Rendering Texture into the C++ code for setting it like rendering target. C# code of the Unity Game Development SDK gets text string from CaptureManager SDK and displays information about sources.   

This demo program can be gotten by link: Download CaptureManagerSDK-UnityDemos.zip

 

WPFMultiSourceRecorder

This demo program presents the way for recording of video and audio data from many sources into the one file. CaptureManager supports flexible management of connection of many sources to many sinks. ASF sink implements Windows OS supporting of ASF Microsoft media format - special format for Microsoft platforms with many features. This demo program allows test one of these features - multi stream recording. It is possible select many sources for recording. More over, these sources can include more than one video source. It allows record syncronized video from many live video sources into the one media file.

Schema of source connection has the next view:

VideoLAN player can open such multi video stream file:

This demo program can be gotten by link: Download WPFMultiSourceRecorder.zip

 

CaptureManager SDK Versions:

Version 1.0.0

Capture Manager SDK v1.0.0 – open release. I include interfaces with the stable definition:

via class CoLogPrintOut – interface ILogPrintOut

via class CoCaptureManager – interface ICaptureManagerControl:

method createControl – create the main control objects with interfaces:

  • ISourceControl,
  • ISinkColtrol,
  • IEncoderControl,
  • ISessionControl,
  • IStreamControl;

method createMisc – create a miscellaneous object with interfaces:

  • IMediaTypeParser,
  • IStrideForBitmap,
  • IVersionControl;

via object with interface ISourceControl:

  • IWebCamControl;

via object with interface ISinkControl:

  • IFileSinkFactory,
  • ISampleGrabberCallSinkFactory,
  • IEVRSinkFactory,
  • ISampleGrabberCallbackSinkFactory,
  • IByteStreamSinkFactory;

via object with interface ISession:

  • ISessionCallback;

via object with interface ISampleGrabberCallSinkFactory:

  • ISampleGrabberCall;

via object with interface ISampleGrabberCallbackSinkFactory:

  • ISampleGrabberCallback;

These interfaces do the next work:

  • ILogPrintOut – it manages writing of log information;
  • ICaptureManagerControl – it manages creating of all capturing controls and miscellaneous objects;
  • ISourceControl – it manages and creates sources of video and audio signals;
  • ISinkColtrol – it manages and creates sinks of video and audio streams;
  • IEncoderControl – it manages and creates video and audio encoders;
  • ISessionControl – it creates object for management of recording session;
  • IStreamControl – it creates object for controlling of media streams;
  • IMediaTypeParser – it creates text representation of media type in XML format;
  • IStrideForBitmap – it computes stride of memory for the specific bitmap format;
  • IVersionControl – it manages information about current version of CaptureManager;
  • IWebCamControl – it manages options of web camera;
  • IFileSinkFactory – it creates media sink nodes which are linked with media file;
  • ISampleGrabberCallSinkFactory – it creates media sink for grabbing of one sample by direct calling object with interface ISessionCallback;
  • ISampleGrabberCall – it manages grabbing of one sample;
  • ISampleGrabberCallbackSinkFactory – it creates media sink for grabbing of one sample by calling object with interface ISampleGrabberCallback from CaptureManager inner thread;
  • ISampleGrabberCallback – it manages grabbing of one sample from CaptureManager inner thread;
  • IEVRSinkFactory – it creates media sink for rendering of video stream;
  • IByteStreamSinkFactory – it creates media sink nodes which are linked with customised byte stream object with interface IMFByteStream;
  • ISession – it manages the recording session;
  • ISessionCallback – it manages the result state of current recording session from CaptureManager inner thread;

The definitions of these interfaces are presented in SDK files and in CaptureManagerToCSharpProxy project. For effective marshalling information via border of unmanaged-managed code CaptureManager uses eight simple XML documents with the next structures:

<!--?xml version="1.0" ?-->
<!--XML Document of sources-->

These documents contain information about sources, encoders, sinks, stream controls. Most types and GUID is taken from Microsoft Media Foundation MSDN: Microsoft Media Foundation, but there are some rules for definition of nodes in these XML documents: SingleValue - node for presenting only one value - name, integer, type; RatioValue - node for presenting of value in float point format with Numerator and Denominator; Value.ValueParts - node for storing collection of ValuePart nodes with the same type. Examples of parsing of these XML documents can be found in code of WPF examples.

Capture Manager SDK can be downloaded by link: Download CaptureManagerSDK.zip

 

Version 1.1.0 with HEVC(H265) encoder

Capture Manager SDK v1.1.0 – open release. This release includes the next changings:

  • Add supporting of automating registration CaptureManager as COM server with Type Library
  • Add supporting of dynamic language Python 2.7
  • Add supporting of HEVC(H265) encoder in Windows 10: Download HEVCEncoder_Windows10

Capture Manager SDK v1.1.0 can be downloaded by link: Download CaptureManagerSDK-110.zip

 

Version 1.2.0 Beta

Capture Manager SDK v1.2.0 – beta release. This release includes the next changings:

  • Deleted old functionality of working with CaptureManager via library linking. Old demo programs are moved in old demos.
  • Lazy binding of Microsoft Media Foundation functions.
  • Replace web camera properties functionality from DirectShow on DeviceIoControl
  • Add resizing in EVR. 

Lazy binding of functions is implemented by loading of Microsoft Media Foundation libraries at runtime. Functions which cannot be found in Microsoft Media Foundation libraries are replaced by stub functions. It allows prevent crushing of applications by using of unsupported functions of Microsoft Media Foundation libraries.

Using of DeviceIoControl for changing of web camera properties allows resolve problem with delay of web camera driver initialization. It allows expand workable set of web camera properties by : "Amount of digital zoom", "Upper limit for the amount of digital zoom", "Power line frequency".

Resizing in EVR resolves problem with unchanging image size of rendered video. The new implementation controls current image size of renderer GUI and changes image size and position for keeping proportion of video.

Capture Manager SDK v1.2.0 – beta release can be downloaded by link: Download CaptureManagerSDK-1.2.0_beta.zip

 

Version 1.2.0

Capture Manager SDK v1.2.0 – release. This release includes the next changings:

  • Deleted old functionality of working with CaptureManager via library linking. Old demo programs are moved in old demos.
  • Lazy binding of Microsoft Media Foundation functions.
  • Replace web camera properties functionality from DirectShow on DeviceIoControl
  • Add resizing in EVR.
  • Add PULL mode in SampleGrabberCallSinkFactory - the new mode which allows to take a single sample.
  • Add sample accumulator nodes for storing of 5 or 10 last samples in media stream.

Lazy binding of functions is implemented by loading of Microsoft Media Foundation libraries at runtime. Functions which cannot be found in Microsoft Media Foundation libraries are replaced by stub functions. It allows prevent crushing of applications by using of unsupported functions of Microsoft Media Foundation libraries.

Using of DeviceIoControl for changing of web camera properties allows resolve problem with delay of web camera driver initialization. It allows expand workable set of web camera properties by : "Amount of digital zoom", "Upper limit for the amount of digital zoom", "Power line frequency".

Resizing in EVR resolves problem with unchanging image size of rendered video. The new implementation controls current image size of renderer GUI and changes image size and position for keeping proportion of video.

Capture Manager SDK v1.2.0 – release can be downloaded by link: Download CaptureManagerSDK-1.2.0-Freeware.zip

 

Version 1.3.0 Beta with DirectShow Crossbar capture

Capture Manager SDK v1.3.0 – beta. This release includes the next changings:

  • Add supporting of video capturing via DirectShow Crossbar technique for the next inputs:                                  Composite,
         SVideo,
         USB,
         1394 (FireWire).

On MSDN - Audio/Video Capture in Media Foundation you can find that "Video capture devices are supported through the UVC class driver and must be compatible with UVC 1.1". It means that Microsoft Media Foundation can capture video only from devices with supporting of UVC driver - USB Video Class driver. It is usually USB web cameras - other types of video capture devices are not supported. From my experience I can say that the target platform of Microsoft Media Foundation is WindowsStore applications. WindowsStore applications are originally targeted on portable devices like "Pad" - "Surface" - such devices DO NOT have external ports for connecting of capturing cards. They can work only with embedded web cameras which are connected via inner USB ports. I think that it is a correct idea, but I have got many questions about using of CaptureManager with capture cards which support DirectShow Crossbar and answered that it is impossible. However, it is not full answer - the full answer is that it is possible see capture card which supports DirectShow Crossbar via Microsoft Media Foundation functionality, but captured video is not accessable. After some research I found the way to get access for such capture cards. Info for working with capture card can be selected from XML string of sources via checking of attributes nodes of Source with name 'MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY': "Source.Attributes/Attribute[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY']

/SingleValue[@Value='CLSID_VideoInputDeviceCategory']" - Microsoft Media Foundation define CLSID_WebcamInterfaceDeviceCategory - {E5323777-F976-4F5B-9B55-B94699C46E44} for device with UVC supporting and CLSID_VideoInputDeviceCategory - {860BB310-5D01-11D0-BD3B-00A0C911CE86} for DirectShow capture devices. It allows easy select only DirectShow video capture devices. Input connection of DirectShow according to physical type can be selected by chosing of the suitable media type - each media type node has child MediaTypeItem node with name DirectShowPhysicalType - {09FCAE6B-8F00-4C0A-BBCA-C6820B576C99}. It allows to group the meda types according physical type of input connection.

<MediaTypeItem Name="DirectShowPhysicalType" GUID="{09FCAE6B-8F00-4C0A-BBCA-C6820B576C99}" Title="Physical type of input pin of Crossbar." Description="Physical type of input pin of Crossbar.">
  <SingleValue Value="PhysConn_Video_Composite" /> 
  </MediaTypeItem>

Capture Manager SDK v1.3.0 – beta can be downloaded by link: Download CaptureManagerSDK-1.3.0-Freeware-beta.zip

 

Version 1.3.0 with DirectShow Crossbar capture

Capture Manager SDK v1.3.0. This release includes the next changings:

  • Add supporting of video capturing via DirectShow Crossbar technique for the next inputs:                                  Composite,
         SVideo,
         USB,
         1394 (FireWire);
  • COM ThreadingModel has been changed from Apartment on Both.

Capture Manager SDK v1.3.0 can be downloaded by link: Download CaptureManagerSDK-1.3.0-Freeware.zip

 

Version 1.4.0 Beta

Capture Manager SDK v1.4.0 – beta. This release includes the next changings:

  • Add supporting for changing of cursor presenting in Screen Capture source: make cursor invisible and add drawing additional image for current cursor's image: 

This functionality is gotten by adding " --options=" into the symbolic link. Options is set by XML format:

<!--?xml version='1.0' encoding='UTF-8'?-->
<Options>
    <Option Type="Cursor" Visiblity="True">
        <Option.Extensions>
            <Extension Fill="0x7055ff55" Height="100" Type="BackImage" Width="100"/>
        </Option.Extensions>
    </Option>
</Options>

Selection of cursor option is done by "Type='Cursor'" attribute. Attribute "Visiblity='True'" makes current type - Cursor visible, and attribute "Visiblity='False'" sets current type - Cursor invisible - it allows capture screen without drawing of cursor. XML node "Option.Extensions" allows add extensions.  At the present time, Screen capture source supports the next extexnsion: 

"<Extension Type='BackImage' Height='100' Width='100' Fill='0x7055ff55' />"

Attribute "Type='BackImage'" defines drawing before cursor's image 'marker' image:

Size of 'BackImage' is defined by attributes "Height='100' Width='100'", color is defined by attribute "Fill='0x7055ff55'" with ARGB format. In code, it can be implemented by this way:

string lextendSymbolicLink = lSymbolicLink + " --options=" +
    "<?xml version='1.0' encoding='UTF-8'?>" +
        "<Options>" +
            "<Option Type='Cursor' Visiblity='True'>" +
                "<Option.Extensions>" +
                    "<Extension Fill='0x7055ff55' Height='100' Type='BackImage' Width='100'>" +
                    "</Extension> +
                    </Option.Extensions>" +
            "</Option>" +
        "</Options>";

Capture Manager SDK v1.4.0 – beta can be downloaded by link: Download CaptureManagerSDK-1.4.0-Freeware-beta.zip

 

Version 1.4.0

Capture Manager SDK v1.4.0. This release includes the next changings:

  • Add supporting for changing of cursor presenting in Screen Capture source: make cursor invisible and add drawing additional image for current cursor's image.
  • Add supporting for using of custom Microsoft Media Foundation Transform for implementation custom effects (for example - WaterMarkInjectorDemo, TextInjectorDemo).

Capture Manager SDK v1.4.0 can be downloaded by link: Download CaptureManagerSDK-1.4.0-Freeware.zip

 

Version 1.5.0

Capture Manager SDK v1.5.0. This release includes the next changings:

  • Add supporting of multidisplay outputs on: 

 

  • Add supporting of DirectShow software filters.

Capture Manager SDK v1.5.0 can be downloaded by link: Download CaptureManagerSDK-1.5.0-Freeware.zip

 

Version 1.6.0

Capture Manager SDK v1.6.0. This release includes the next changings:

  • Add IEVRMultiSinkFactory, IEVRStreamControl interfaces: IEVRMultiSinkFactory allows create two separated Topology Nodes for the one rendering contex - HWND of Window, Direct3DSurface9 or IDXGISwapChain. IEVRStreamControl allows control of rendering result - position rendering, Z-order rendering, flushing of stream buffer, filters and features.
  • IInitilaizeCaptureSource, ICurrentMediaType, ISourceRequestResult, ICaptureProcessor interfaces:  IInitilaizeCaptureSource receives configuration of Capture Processsor. ICurrentMediaType contains info of the selected Media Type. ISourceRequestResult receives raw data in format which is defined in IInitilaizeCaptureSource. ICaptureProcessor controls the capturing process.     

CaptureManager has implementation of multisink rendering via sharing context. This solution is different from common implementation of Microsoft Media Foundation. Original solution uses 'Session' pattern - working with sources, decoders, encoders and sinks in the one session. As a result, it leads to syncronize of many stream pipelines from the one session and they can be controlled by one command `Start`, `Stop`, `Pause`.  It works fine in case of playing of one video file. Microsoft Media Foundation has function for creating one source from many others - MFCreateAggregateSource - it allows to implement effect `Picture in Picture` for rendering two and more video files. However, it has limitating - it is workble only in context of the one session - it means that all sources of the session started, stopped and paused at the same time.

It can be OK for playing of video from files, but what to do in the situation of sources with different latency - for two sources - one from local webcam and another from IP camera by HTTP. Another problem - if we want stop only one source the code stops ALL sources in the session. The solution of these problems can be using of DIFFERENT INDEPENDENT sessions for each source, but common implementation of Microsoft Media Foundation DOES NOT allows share video rendering sink via many sessions. CaptureManager resolves such problems by adding one level abstraction - while common implementation of Microsoft Media Foundation creates ONE Video Rendering Media Sink from the one video context, CaptureManager creates Many Video Rendering Media Sinks from Controller which shares the one video context.

Additional level allows manage rendering more flexible. Demo program for testing of such functionality can be found by link WPFMultiSourceViewer. CaptureManager Freeware supports maximum 2 rendering sinks from the one rendering context. MultiRendering presented in `Sink Factories` by new `Sink Factory` node:

<sinkfactory guid="{10E52132-A73F-4A9E-A91B-FE18C91D6837}" name="EVRMultiSinkFactory" title="Enhanced Video Renderer multi sink factory">
  <value.valueparts>
   <valuepart description="Default EVR implementation" guid="{E926E7A7-7DD0-4B15-88D7-413704AF865F}" maxportcount="2" mime="" title="Container format" value="Default"> 
  </valuepart>
  </value.valueparts>
</sinkfactory>

Rendering can be controlled by IEVRStreamControl interface:

  • setPosition method allows positioning of rendering on the shared rendering context in relative values from 0.0f to 1.0f;
  • getPosition method allows get positioning of rendering on the shared rendering context in relative values from 0.0f to 1.0f;
  • setZOrder method allows set rendering order of stream from 0 to max rendering sinks;
  • getZOrder method allows get endering order of stream from 0 to max rendering sinks;
  • flush method allows clear rendering buffer of the rendering sink;
  • setSrcPosition method allows set rectangle in the input stream for selection of Region Of Interest;
  • getSrcPosition method allows get rectangle in the input stream for selection of Region Of Interest;
  • getCollectionOfFilters method allows get XML string with list of filters for current rendering sink:
<!--?xml version="1.0" ?--> 
<!-- XML Document of render stream filters --> 
  <filters> 
    <filter currentvalue="" max="" min="" step="" title=""> 
  </filter></filters> 
  • setFilterParametr method allows set filter for current rendering sink;
  • getCollectionOfOutputFeatures method allows get XML string with list of output features for rendering context:
<!--?xml version="1.0" ?-->
<!-- XML Document of render stream output features -->
<features>
<feature title="Background Color">
<color>
<channel currentvalue="0" index="1" max="255" min="0" step="1" title="Red">
<channel currentvalue="0" index="2" max="255" min="0" step="1" title="Green">
<channel currentvalue="0" index="3" max="255" min="0" step="1" title="Blue">
</channel></channel></channel></color>
</feature>
</features>
  • setOutputFeatureParametr method allows set output feature for rendering context;

CaptureManager has functionality for capturing data from custom Capture Processor. It includes ICaptureProcessor interface for implemeting custom CaptureProcessor class. The needed configuration is set in argument of initilaize method with IInitilaizeCaptureSource interface. The selected configuration is set in argument of setCurrentMediaType method with ICurrentMediaType interface. The needed data is requested in sourceRequest method by argument with ISourceRequestResult inteface. It allows to develop solutions for capturing of raw data WPFImageViewer or WPFIPCameraMJPEGViewer.

CaptureManager SDK v1.6.0 can be downloaded by link: Download CaptureManagerSDK-1.6.0-Freeware.zip

 

Version 1.7.0

Capture Manager SDK v1.7.0. This release includes the next changings:

  • Add CaptureManager Video Renderer Factory which is compatable with MediaFoundation player. It supports  IEVRMultiSinkFactory, IEVRStreamControl interfaces via additional sink factory:  
<SinkFactory Name="CaptureManagerVRMultiSinkFactory" GUID="{A2224D8D-C3C1-4593-8AC9-C0FCF318FF05}" Title="CaptureManager Video Renderer multi sink factory">
<Value.ValueParts>
<ValuePart Title="Container format" Value="Default" MIME="" Description="Default EVR implementation" MaxPortCount="2" GUID="{E926E7A7-7DD0-4B15-88D7-413704AF865F}" /> 
 </Value.ValueParts>
</SinkFactory>

Add the new demo programs:

CaptureManager Video Renderer Factory can be used for implementing of video sink for rendering video from media file in many solutions

CaptureManager SDK v1.7.0 can be downloaded by link: Download CaptureManagerSDK-1.7.0-Freeware.zip

 

Capture Manager Topology Editor

This example of implementation of CaptureManager SDK can be found by link: Capture Manager Store. It presents simple program for capturin live video and audio from web cameras via building simple graph by "Visual Programming" way. This solution has name - Capture Manager Topology Editor.

Capture Manager SDK v1.4.0 – beta can be downloaded by link: Download CaptureManagerSDK-1.4.0-Freeware-beta.zip

 

The commercial versions:

Version 1.0.0

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. It includes video encoder:

  • Microsoft H264;

and audio encoders:

  • Microsoft MP3,
  • Microsoft MPEG2 Audio,
  • Microsoft AAC,
  • Microsoft DolbyDigital;

File container includes:

  • AVI format.

All these features are base on the libraries which already exist in core of Windows 7 and Windows 8. It allows develop simple solution with supporting of the most popular formats.

However, there are two disadvantages of using of these features:

  1. poor campatibility Microsoft implementation of encoders with some decoders. Testing on Linux "Mint" showed that only combinations H264 with MP3 or MPEG 2 Audio have good campatibility. With the other codecs there are some problems;
  2. poor campatibility of AVI container with some live video sources. The problem is that many web cameras have unstable frame rate video stream. At the moment of changing the brightness of scene many web cameras change inner options of frame capture and it leads to increase of the duration of frames. However, in AVI container the frame duration is computed on base of general frame per second rate of video stream and duration of presenting each frame is defined as constant. As a result, it is possible to view the problem with sync recording video and audio.

Of course, using of encoders and file container which are campatibile with other OSs is useful (especially AVI container, because it is possible to write raw video data of YVY2 or RGB24 into the file and easy extracts seperated frames without decoding with using of very simple code), but it needs to pay attention on some limitations.

The features of commercial version can be tested on commercial trial version which is limitated only by 30 seconds duration of capturing session.

 

Version 1.1.0 with MP4 streaming

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. It includes video encoder:

  • Microsoft H264;
  • Microsoft HEVC(H264) - Windows 10 (64-bit);

and audio encoders:

  • Microsoft MP3,
  • Microsoft MPEG2 Audio,
  • Microsoft AAC,
  • Microsoft DolbyDigital;

File container includes:

  • AVI format,
  • MP4 format

Webcamera properties are extended:

  • Power line frequency

All these features are base on the libraries which already exist in core of Windows 7, Windows 8 and Windows 10. It allows develop simple solution with supporting of the most popular formats.

This version supports using MP4 writer of Windows 8 and Windows 10 for writing of MP4 files and streaming. This implementation supports writing only one video stream and one audio stream, but it can be enough for most purposes - Download ScreenStreaming_Bin.zip, WPFScreenStreamer.

The features of commercial version can be tested on CaptureManagerSDK-110_trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

Version 1.2.0

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. It includes video encoder:

  • Microsoft H264;
  • Microsoft HEVC(H265) - Windows 10 (64-bit);

and audio encoders:

  • Microsoft MP3,
  • Microsoft MPEG2 Audio,
  • Microsoft AAC,
  • Microsoft DolbyDigital;

File container includes:

  • AVI format,
  • MP4 format

Webcamera properties are extended:

  • Power line frequency.
  • Amount of digital zoom.
  • Upper limit for the amount of digital zoom.

This release includes the next changings:

  • Deleted old functionality of working with CaptureManager via library linking. Old demo programs are moved in old demos.
  • Lazy binding of Microsoft Media Foundation functions.
  • Replace web camera properties functionality from DirectShow on DeviceIoControl
  • Add resizing in EVR.
  • Add PULL mode in SampleGrabberCallSinkFactory - the new mode which allows to take a single sample.
  • Add sample accumulator nodes for storing of 5 or 10 last samples in media stream.

Lazy binding of functions is implemented by loading of Microsoft Media Foundation libraries at runtime. Functions which cannot be found in Microsoft Media Foundation libraries are replaced by stub functions. It allows prevent crushing of applications by using of unsupported functions of Microsoft Media Foundation libraries.

Using of DeviceIoControl for changing of web camera properties allows resolve problem with delay of web camera driver initialization. It allows expand workable set of web camera properties by : "Amount of digital zoom", "Upper limit for the amount of digital zoom", "Power line frequency".

Resizing in EVR resolves problem with unchanging image size of rendered video. The new implementation controls current image size of renderer GUI and changes image size and position for keeping proportion of video.

All these features are base on the libraries which already exist in core of Windows 7, Windows 8 and Windows 10. It allows develop simple solution with supporting of the most popular formats.

This version supports using MP4 writer of Windows 8 and Windows 10 for writing of MP4 files and streaming. This implementation supports writing only one video stream and one audio stream, but it can be enough for most purposes.

The features of commercial version can be tested on CaptureManagerSDK-1.2.0-Commercial-Trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

Version 1.3.0 with DirectShow Crossbar capture

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. It includes video encoder:

  • Microsoft H264;
  • Microsoft HEVC(H265) - Windows 10 (64-bit);

and audio encoders:

  • Microsoft MP3,
  • Microsoft MPEG2 Audio,
  • Microsoft AAC,
  • Microsoft DolbyDigital;

File container includes:

  • AVI format,
  • MP4 format

Webcamera properties are extended:

  • Replace web camera properties functionality from DirectShow on DeviceIoControl
  • Power line frequency.
  • Amount of digital zoom.
  • Upper limit for the amount of digital zoom.

Other properties:

  • Lazy binding of Microsoft Media Foundation functions.
  • Add resizing in EVR.
  • Add PULL mode in SampleGrabberCallSinkFactory - the new mode which allows to take a single sample.
  • Add sample accumulator nodes for storing of 5 or 10 last samples in media stream.

This release includes the next changings:

  • Add supporting of video capturing via DirectShow Crossbar technique for the next inputs:                                  Composite,
         SVideo,
         USB,
         1394 (FireWire);
  • COM ThreadingModel has been changed from Apartment on Both.

The features of commercial version can be tested on CaptureManagerSDK-1.3.0-Commercial-Trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

Version 1.4.0 with H264 Intel® Quick Sync Video encoder:

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. 

This release includes the next changings:

  • Add supporting for changing of cursor presenting in Screen Capture source: make cursor invisible and add drawing additional image for current cursor's image.
  • Add supporting for using of custom Microsoft Media Foundation Transform for implementation custom effects (for example - WaterMarkInjectorDemo, TextInjectorDemo).
  • Add supporting for H264 Intel® Quick Sync Video hardware encoder - (supporting only since Intel® Haswell CPU and with installed Intel® driver pack).

The features of commercial version can be tested on CaptureManagerSDK-1.4.0-Commercial-Trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

Version 1.5.0 

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. 

This release includes the next changings:

  • Add supporting of multidisplay outputs.
  • Add supporting of DirectShow software filters.
  • Resolved losing of frames while storing video in AVI file.

The features of commercial version can be tested on CaptureManagerSDK-1.5.0-Commercial_Trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

Version 1.6.0 

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. 

This release includes the next changings:

  • Add IEVRMultiSinkFactory, IEVRStreamControl interfaces: IEVRMultiSinkFactory allows create of the separated Topology Nodes for the one rendering contex - HWND of Window, Direct3DSurface9 or IDXGISwapChain. IEVRStreamControl allows control of rendering - position rendering, Z-order rendering, flushing of stream buffer, filters and features. Commercial version supports maximum 8 rendering sinks from the one rendering context.
  • IInitilaizeCaptureSource, ICurrentMediaType, ISourceRequestResult, ICaptureProcessor interfaces:  IInitilaizeCaptureSource receives configuration of Capture Processsor. ICurrentMediaType contains info of the selected Media Type. ISourceRequestResult receives raw data in format which is defined in IInitilaizeCaptureSource. ICaptureProcessor controls the capturing process.     

The features of commercial version can be tested on CaptureManagerSDK-1.6.0-Commercial_Trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

Version 1.7.0

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers. 

  • Add CaptureManager Video Renderer Factory which is compatable with MediaFoundation player. It supports  IEVRMultiSinkFactory, IEVRStreamControl interfaces via additional sink factory:  
<SinkFactory Name="CaptureManagerVRMultiSinkFactory" GUID="{A2224D8D-C3C1-4593-8AC9-C0FCF318FF05}" Title="CaptureManager Video Renderer multi sink factory">
<Value.ValueParts>
<ValuePart Title="Container format" Value="Default" MIME="" Description="Default EVR implementation" MaxPortCount="8" GUID="{E926E7A7-7DD0-4B15-88D7-413704AF865F}" /> 
 </Value.ValueParts>
</SinkFactory>

The features of commercial version can be tested on CaptureManagerSDK-1.7.0-Commercial_Trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

 

Points of Interest

Previously I wrote that the was one unusual task which was the reason to start of development of CaptureManager. The task included recording live-video of industrial process from two sources and recording of data from two sensors. I have started to write a new solution for Microsoft Media Foundation and thought to use Microsoft ASF format due to existence of MFMediaType_Binary Major Type. However, after some time I found that implementation of Microsoft ASF format for Microsoft Media Foundation for recording supports only MFMediaType_Video,  MFMediaType_Audio,  and MFMediaType_Script. It was the main reason for stopping to resolve that task.           

Updates:

The first update on 21/08/2015:

improved quality of the AudioLoopback capture;

resolved problem with syncronization of the Screen Capture Source - GDIScreenCapture and AudioLoopback;

added new Media Types for Screen Capture Source - GDIScreenCapture with the next frame rates: 20 fps, 25 fps and 30 fps;

added into Screen Capture Source - GDIScreenCapture supporting for capturing of cursor and drawing it into the captured video.

The second update on 31/08/2015:

fixed loosing of samples in the AudioLoopback capture;

added new Media Types for Screen Capture Source - GDIScreenCapture with the next frame rates: 1 fps, 5 fps and 10 fps;

added supporting of WM Speech Encoder DMO;

added supporting of WMVideo9 Screen Encoder MFT - FOURCC "MSS2";

added version of CaptureManager SDK for x64 Windows OS.

The third update on 14/09/2015:

added new Screen Capture Source - DirectX9ScreenCapture with the next frame rates: 1 fps, 5 fps, 10 fps, 15fps, 20 fps, 25 fps, 30 fps;

added library CaptureManagerProxy.dll for calling CaptureManagerSDK descriptors in "C" style;

added supporting of 3rdParty MediaSink solutions - RecordInto3rdPartyMediaSink;

added demo program for capturing of screen in DirectX9 video games - ScreenCaptureWithDirect3D9APIHooks;

The fourth update on 30/09/2015:

added supporting of Enhanced Video Renderer - the demo program: EnhancedVideoRendererWebCapViewer

The fifth update on 13/11/2015:

added limited supporting of COM Server;

added CaptureManager.tlb;

added demo programs for presenting of working with CaptureManagerSDK via COM on C#-WPF: 

CaptureManagerToCSharpProxy,

WPFSourceInfoViewer,

WPFWebViewerCall,

WPFWebViewerCallback,

WPFWebViewerEVR

The sixth update on 07/03/2016:

first stable release 1.0.0;

implemented supporting of all SDK functionality in COM Server;

wrote new COM Server interface;

stopped development of C interface;

replace GDIScreenCapture and DirectX9ScreenCapture on the Screen Capture;

included full support of play, pause, stop and close functinality;

updated code of demo programs for presenting of working with CaptureManagerSDK via COM on C#-WPF: 

CaptureManagerToCSharpProxy,

WPFSourceInfoViewer,

WPFWebViewerCall,

WPFWebViewerCallback,

WPFWebViewerEVR

added new demo program for demonstration of functinality of recording and network streaming media content:

WPFRecorder;

added freeware software for creating of the suitable video and audio capture configuration for recording and network broadcatsing - Capture Manager Topology Editor - Capture Manager Store;

developed commercial version of CaptureManager SDK Capture Manager Store:  with supporting the next encoders:

H264,

MP3,

MPEG2 Audio,

AAC,

DolbyDigital;

added supporing of AVI container into the commercial version of CaptureManager SDK;

added commercial trial version of CaptureManager SDK with 30 second duration of capture session - Download Commercial_trial.zip.

The seventh update on 21/03/2016:

Add demo program for working with Capture Manager SDK in Qt framework programs on MinGW compiler: QtMinGWDemo

The eighth update on 12/04/2016

Add demo program for working with CaptureManager SDK in Windows Store application

The nineth update on 13/06/2016

Stable release 1.1.0:

  • Add supporting of automating registration CaptureManager as COM server with Type Library
  • Add supporting of dynamic language Python 2.7
  • Add supporting of HEVC(H265) encoder in Windows 10: Download HEVCEncoder_Windows10

Capture Manager SDK 1.1.0 can be downloaded by link: Download CaptureManagerSDK-110.zip

In addition for version of SDK under CodeProject policy, there is a commercial version with additional features. The commercial version is based on the same COM interfaces as freeware CaptureManager SDK, but includes additional encoders and media containers.

All these features are base on the libraries which already exist in core of Windows 7, Windows 8 and Windows 10. It allows develop simple solution with supporting of the most popular formats.

This version supports using MP4 writer of Windows 8 and Windows 10 for writing of MP4 files and streaming. This implementation supports writing only one video stream and one audio stream, but it can be enough for most purposes.

The features of commercial version can be tested on CaptureManagerSDK-110_trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

The tenth update on 01/08/2016

Beta release 1.2.0:

  • Deleted old functionality of working with CaptureManager via library linking. Old demo programs are moved in old demos.
  • Lazy binding of Microsoft Media Foundation functions.
  • Replace web camera properties functionality from DirectShow on DeviceIoControl
  • Add resizing in EVR. 

Capture Manager SDK v1.2.0 beta can be downloaded by link: Download CaptureManagerSDK-1.2.0_beta.zip

 

The eleventh update on 05/09/2016:

Release 1.2.0:

  • Deleted old functionality of working with CaptureManager via library linking. Old demo programs are moved in old demos.
  • Lazy binding of Microsoft Media Foundation functions.
  • Replace web camera properties functionality from DirectShow on DeviceIoControl
  • Add resizing in EVR. 
  • Add PULL mode in SampleGrabberCallSinkFactory - the new mode which allows to take a single sample.
  • Add sample accumulator nodes for storing of 5 or 10 last samples in media stream.
  • Add four new demo programms:

Capture Manager SDK v1.2.0 can be downloaded by link: Download CaptureManagerSDK-1.2.0-Freeware.zip

 

The twelveth update on 03/10/2016:

Beta release 1.3.0:

  • Add supporting of video capturing via DirectShow Crossbar technique for the next inputs:                                  Composite,
         SVideo,
         USB,
         1394 (FireWire).

Capture Manager SDK v1.3.0 – beta can be downloaded by link: Download CaptureManagerSDK-1.3.0-Freeware-beta.zip

 

The thirteenth update on 19/12/2016:

Add two new demo programms for Java programing language:

 

The fourteenth update on 02/01/2017:

Add NuGet CaptureManager SDK package - package for Net 4.0 projects. It is based on CaptureManagerToCSharpProxy, but there is a one difference - package includes CaptureManager.dll as embedded resource. It allows unpack CaptureManager.dll into the Temp folder at Runtime and upload it into the application process. It is more simple then register CaptureManager.dll as COM server module in system - it does not need admin privileges. This package supports both CaptureManager.dll for x86 and x64 arch CPU and select the suitable at Runtime.

 

The fifteenth update on 09/01/2017:

Release 1.3.0. This release includes the next changings:

  • Add supporting of video capturing via DirectShow Crossbar technique for the next inputs:                                  Composite,
         SVideo,
         USB,
         1394 (FireWire);
  • COM ThreadingModel has been changed from Apartment on Both.

Capture Manager SDK v1.3.0 can be downloaded by link: Download CaptureManagerSDK-1.3.0-Freeware.zip

The features of commercial version can be tested on CaptureManagerSDK-1.3.0-Commercial-Trial.zip which is limitated only by 60 second duration of capturing session.

Capture Manager Store: Application License - $149.99

 

The sixteenth update on 16/01/2017:

Add the new demo program for on WindowsFroms GDI with supporting of source type selecting:

Beta release 1.4.0 - Version 1.4.0 Beta:

  • Add supporting for changing of cursor presenting in Screen Capture source: make cursor invisible and add drawing additional image for current cursor's image.

Capture Manager SDK v1.4.0 – beta can be downloaded by link: Download CaptureManagerSDK-1.4.0-Freeware-beta.zip

 

The seventeenth update on 06/02/2017:

Add the new demo programs:

Release 1.4.0 - Version 1.4.0. This release includes the next changings:

  • Add supporting for changing of cursor presenting in Screen Capture source: make cursor invisible and add drawing additional image for current cursor's image.
  • Add supporting for using of custom Microsoft Media Foundation Transform for implementation custom effects.

Capture Manager SDK v1.4.0 can be downloaded by link: Download CaptureManagerSDK-1.4.0-Freeware.zip

Commercial Release 1.4.0 - Version 1.4.0 with H264 Intel® Quick Sync Video encoder.

 

The eighteenth update on 13/03/2017:

Release 1.5.0 - Version 1.5.0. This release includes the next changings:

  • Add supporting of multidisplay outputs.
  • Add supporting of DirectShow software filters.

Capture Manager SDK v1.5.0 can be downloaded by link: Download CaptureManagerSDK-1.5.0-Freeware.zip

Commercial Release 1.5.0 - Version 1.5.0.

 

The nineteenth update on 01/05/2017:

Add the new demo programs:

Release 1.6.0 - Version 1.6.0. This release includes the next changings:

  • Add IEVRMultiSinkFactory, IEVRStreamControl interfaces: IEVRMultiSinkFactory allows create two separated Topology Nodes for the one rendering contex - HWND of Window, Direct3DSurface9 or IDXGISwapChain. IEVRStreamControl allows control of rendering - position rendering, Z-order rendering, flushing of stream buffer, filters and features.
  • IInitilaizeCaptureSource, ICurrentMediaType, ISourceRequestResult, ICaptureProcessor interfaces:  IInitilaizeCaptureSource receives configuration of Capture Processsor. ICurrentMediaType contains info of the selected Media Type. ISourceRequestResult receives raw data in format which is defined in IInitilaizeCaptureSource. ICaptureProcessor controls the capturing process.  

Capture Manager SDK v1.6.0 can be downloaded by link: Download CaptureManagerSDK-1.6.0-Freeware.zip

Commercial Release 1.6.0 - Version 1.6.0.

 

The twentyth update on 10/07/2017:

Add the new demo programs:

Release 1.7.0 - Version 1.7.0. This release includes the next changings:

  • Add CaptureManager Video Renderer Factory which is compatable with MediaFoundation player.

Capture Manager SDK v1.7.0 can be downloaded by link: Download CaptureManagerSDK-1.7.0-Freeware.zip

Commercial Release 1.7.0 - Version 1.7.0.

 

The twenty first update on 31/07/2017:

Add the new demo programs:

 

The twenty second update on 21/08/2017:

Add the new demo programs:

 

History

The first version was published on 11/08/2015.

The second version was published on 21/08/2015.

The third version was published on 31/08/2015.

The fifth version was published on 13/11/2015.

The sixth version was published on 07/03/2016.

The seventh version was published on 21/03/2016.

The eighth version was published on 12/04/2016.

The nineth version was published on 13/06/2016.

The tenth version was published on 01/08/2016.

The eleventh version was published on 05/09/2016.

The twelveth version was published on 03/10/2016.

The thirteenth version was published on 19/12/2016.

The fourteenth version was published on 02/01/2017.

The fifteenth version was published on 09/01/2017.

The sixteenth version was published on 16/01/2017.

The seventeenth version was published on 06/02/2017.

The eighteenth version was published on 13/03/2017.

The nineteenth version was published on 01/05/2017.

The twentyth version was published on 10/07/2017.

The twenty first version was published on 31/07/2017.

The twenty second version was published on 21/08/2017.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Evgeny Pereguda
Software Developer
Australia Australia
No Biography provided

You may also be interested in...

Comments and Discussions

 
BugRGB24 looks wrong, the other formats are perfect Pin
Member 128387918-Aug-17 19:30
memberMember 128387918-Aug-17 19:30 
GeneralRe: RGB24 looks wrong, the other formats are perfect Pin
Evgeny Pereguda12-Aug-17 17:22
memberEvgeny Pereguda12-Aug-17 17:22 
QuestionI can't build the CaptureManagerToCSharpProxy Pin
Member 317861131-Jul-17 18:49
memberMember 317861131-Jul-17 18:49 
AnswerRe: I can't build the CaptureManagerToCSharpProxy Pin
Evgeny Pereguda31-Jul-17 19:40
memberEvgeny Pereguda31-Jul-17 19:40 
QuestionAspect ratio Pin
Member 1327327330-Jun-17 4:50
memberMember 1327327330-Jun-17 4:50 
AnswerRe: Aspect ratio Pin
Evgeny Pereguda6-Jul-17 15:07
memberEvgeny Pereguda6-Jul-17 15:07 
BugQt Example, error deallocating BSTR Pin
gghelli20-Mar-17 1:54
membergghelli20-Mar-17 1:54 
QuestionWPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 1297626710-Feb-17 5:58
memberMember 1297626710-Feb-17 5:58 
AnswerRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda10-Feb-17 14:27
memberEvgeny Pereguda10-Feb-17 14:27 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 129762671-Mar-17 2:00
memberMember 129762671-Mar-17 2:00 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda1-Mar-17 11:50
memberEvgeny Pereguda1-Mar-17 11:50 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 129762671-Mar-17 17:01
memberMember 129762671-Mar-17 17:01 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda1-Mar-17 16:26
memberEvgeny Pereguda1-Mar-17 16:26 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 129762672-Mar-17 3:51
memberMember 129762672-Mar-17 3:51 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda2-Mar-17 11:19
memberEvgeny Pereguda2-Mar-17 11:19 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 129762673-Mar-17 4:56
memberMember 129762673-Mar-17 4:56 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda3-Mar-17 11:20
memberEvgeny Pereguda3-Mar-17 11:20 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 129762673-Mar-17 13:44
memberMember 129762673-Mar-17 13:44 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda5-Mar-17 11:44
memberEvgeny Pereguda5-Mar-17 11:44 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 129762677-Mar-17 4:38
memberMember 129762677-Mar-17 4:38 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda7-Mar-17 17:00
memberEvgeny Pereguda7-Mar-17 17:00 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 1297626724-Mar-17 6:44
memberMember 1297626724-Mar-17 6:44 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Evgeny Pereguda5-Mar-17 13:59
memberEvgeny Pereguda5-Mar-17 13:59 
GeneralRe: WPFSourceInfoViewer not seeing my AJA Kona capture card Pin
Member 129762677-Mar-17 5:28
memberMember 129762677-Mar-17 5:28 
QuestionFlash control (WPFWebCamShot) Pin
Member 129847455-Feb-17 23:15
memberMember 129847455-Feb-17 23:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170924.2 | Last Updated 20 Aug 2017
Article Copyright 2015 by Evgeny Pereguda
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid