I've generated C++ from a graph that includes LEADTOOLS H.264 filters, and the generated source includes a reference to 'GUID1' which appears to be a placeholder of some kind since upon compilation it's not resolved. Any hints or suggestions for what GUID1 should be? The Graph image and generated source are below.

Here is the generated source. The object of concern is Sample Grabber 0002:
//Don't forget to change project settings:
//1. C++: add include path to DirectShow include folder (such as c:\dxsdk\include)
//2. Link: add link path to DirectShow lib folder (such as c:\dxsdk\lib).
//3. Link: add strmiids.lib and quartz.lib
#include "stdafx.h"
#include <DShow.h>
#include <atlbase.h>
#include <initguid.h>
#include <dvdmedia.h>
BOOL hrcheck(HRESULT hr, TCHAR* errtext)
{
if (hr >= S_OK)
return FALSE;
TCHAR szErr[MAX_ERROR_TEXT_LEN];
DWORD res = AMGetErrorText(hr, szErr, MAX_ERROR_TEXT_LEN);
if (res)
printf("Error %x: %s\n%s\n",hr, errtext,szErr);
else
printf("Error %x: %s\n", hr, errtext);
return TRUE;
}
//change this macro to fit your style of error handling
#define CHECK_HR(hr, msg) if (hrcheck(hr, msg)) return hr;
CComPtr<IPin> GetPin(IBaseFilter *pFilter, LPCOLESTR pinname)
{
CComPtr<IEnumPins> pEnum;
CComPtr<IPin> pPin;
HRESULT hr = pFilter->EnumPins(&pEnum);
if (hrcheck(hr, "Can't enumerate pins."))
return NULL;
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_INFO pinfo;
pPin->QueryPinInfo(&pinfo);
BOOL found = !wcsicmp(pinname, pinfo.achName);
if (pinfo.pFilter) pinfo.pFilter->Release();
if (found)
return pPin;
pPin.Release();
}
printf("Pin not found!\n");
return NULL;
}
// {E2B7DF1A-38C5-11D5-91F6-00104BDB8FF9}
DEFINE_GUID(CLSID_LEADMPEG2TransportDemultiplexer,
0xE2B7DF1A, 0x38C5, 0x11D5, 0x91, 0xF6, 0x00, 0x10, 0x4B, 0xDB, 0x8F, 0xF9); //LMMpgDmxT.dll
// {E2B7DF25-38C5-11D5-91F6-00104BDB8FF9}
DEFINE_GUID(CLSID_LEADH264Decoder30,
0xE2B7DF25, 0x38C5, 0x11D5, 0x91, 0xF6, 0x00, 0x10, 0x4B, 0xDB, 0x8F, 0xF9); //LDecH2643.dll
// {C1F400A0-3F08-11D3-9F0B-006008039E37}
DEFINE_GUID(CLSID_SampleGrabber,
0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37); //qedit.dll
HRESULT BuildGraph(IGraphBuilder *pGraph, LPCOLESTR srcFile1)
{
HRESULT hr = S_OK;
//graph builder
CComPtr<ICaptureGraphBuilder2> pBuilder;
hr = pBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder2);
CHECK_HR(hr, "Can't create Capture Graph Builder");
hr = pBuilder->SetFiltergraph(pGraph);
CHECK_HR(hr, "Can't SetFiltergraph");
//add File Source (Async.)
CComPtr<IBaseFilter> pFileSourceAsync;
hr = pFileSourceAsync.CoCreateInstance(CLSID_AsyncReader);
CHECK_HR(hr, "Can't create File Source (Async.)");
hr = pGraph->AddFilter(pFileSourceAsync, L"File Source (Async.)");
CHECK_HR(hr, "Can't add File Source (Async.) to graph");
//set source filename
CComQIPtr<IFileSourceFilter, &IID_IFileSourceFilter> pFileSourceAsync_src(pFileSourceAsync);
if (!pFileSourceAsync_src)
CHECK_HR(E_NOINTERFACE, "Can't get IFileSourceFilter");
hr = pFileSourceAsync_src->Load(srcFile1, NULL);
CHECK_HR(hr, "Can't load file");
//add LEAD MPEG2 Transport Demultiplexer
CComPtr<IBaseFilter> pLEADMPEG2TransportDemultiplexer;
hr = pLEADMPEG2TransportDemultiplexer.CoCreateInstance(CLSID_LEADMPEG2TransportDemultiplexer);
CHECK_HR(hr, "Can't create LEAD MPEG2 Transport Demultiplexer");
hr = pGraph->AddFilter(pLEADMPEG2TransportDemultiplexer, L"LEAD MPEG2 Transport Demultiplexer");
CHECK_HR(hr, "Can't add LEAD MPEG2 Transport Demultiplexer to graph");
//connect File Source (Async.) and LEAD MPEG2 Transport Demultiplexer
hr = pGraph->ConnectDirect(GetPin(pFileSourceAsync, L"Output"), GetPin(pLEADMPEG2TransportDemultiplexer, L"Input 01"), NULL);
CHECK_HR(hr, "Can't connect File Source (Async.) and LEAD MPEG2 Transport Demultiplexer");
//add LEAD H264 Decoder (3.0)
CComPtr<IBaseFilter> pLEADH264Decoder30;
hr = pLEADH264Decoder30.CoCreateInstance(CLSID_LEADH264Decoder30);
CHECK_HR(hr, "Can't create LEAD H264 Decoder (3.0)");
hr = pGraph->AddFilter(pLEADH264Decoder30, L"LEAD H264 Decoder (3.0)");
CHECK_HR(hr, "Can't add LEAD H264 Decoder (3.0) to graph");
//add Infinite Pin Tee Filter
CComPtr<IBaseFilter> pInfinitePinTeeFilter;
hr = pInfinitePinTeeFilter.CoCreateInstance(CLSID_InfTee);
CHECK_HR(hr, "Can't create Infinite Pin Tee Filter");
hr = pGraph->AddFilter(pInfinitePinTeeFilter, L"Infinite Pin Tee Filter");
CHECK_HR(hr, "Can't add Infinite Pin Tee Filter to graph");
//connect LEAD H264 Decoder (3.0) and Infinite Pin Tee Filter
hr = pGraph->ConnectDirect(GetPin(pLEADH264Decoder30, L"XForm Out"), GetPin(pInfinitePinTeeFilter, L"Input"), NULL);
CHECK_HR(hr, "Can't connect LEAD H264 Decoder (3.0) and Infinite Pin Tee Filter");
//add SampleGrabber
CComPtr<IBaseFilter> pSampleGrabber2;
hr = pSampleGrabber2.CoCreateInstance(CLSID_SampleGrabber);
CHECK_HR(hr, "Can't create SampleGrabber");
hr = pGraph->AddFilter(pSampleGrabber2, L"SampleGrabber");
CHECK_HR(hr, "Can't add SampleGrabber to graph");
AM_MEDIA_TYPE pSampleGrabber2_pmt;
ZeroMemory(&pSampleGrabber2_pmt, sizeof(AM_MEDIA_TYPE));
pSampleGrabber2_pmt.majortype = MEDIATYPE_Video;
pSampleGrabber2_pmt.subtype = MEDIASUBTYPE_RGB32;
pSampleGrabber2_pmt.formattype = FORMAT_VideoInfo;
pSampleGrabber2_pmt.bFixedSizeSamples = TRUE;
pSampleGrabber2_pmt.cbFormat = 88;
pSampleGrabber2_pmt.lSampleSize = 3686400;
pSampleGrabber2_pmt.bTemporalCompression = FALSE;
VIDEOINFOHEADER pSampleGrabber2_format;
ZeroMemory(&pSampleGrabber2_format, sizeof(VIDEOINFOHEADER));
pSampleGrabber2_format.rcSource.right = 1280;
pSampleGrabber2_format.rcSource.bottom = 720;
pSampleGrabber2_format.AvgTimePerFrame = 333666;
pSampleGrabber2_format.bmiHeader.biSize = 40;
pSampleGrabber2_format.bmiHeader.biWidth = 1280;
pSampleGrabber2_format.bmiHeader.biHeight = 720;
pSampleGrabber2_format.bmiHeader.biPlanes = 1;
pSampleGrabber2_format.bmiHeader.biBitCount = 32;
pSampleGrabber2_format.bmiHeader.biSizeImage = 3686400;
pSampleGrabber2_pmt.pbFormat = (BYTE*)&pSampleGrabber2_format;
CComQIPtr<ISampleGrabber, &IID_ISampleGrabber> pSampleGrabber2_isg(pSampleGrabber2);
hr = pSampleGrabber2_isg->SetMediaType(&pSampleGrabber2_pmt);
CHECK_HR(hr, "Can't set media type to sample grabber");
//add SampleGrabber
CComPtr<IBaseFilter> pSampleGrabber;
hr = pSampleGrabber.CoCreateInstance(CLSID_SampleGrabber);
CHECK_HR(hr, "Can't create SampleGrabber");
hr = pGraph->AddFilter(pSampleGrabber, L"SampleGrabber");
CHECK_HR(hr, "Can't add SampleGrabber to graph");
AM_MEDIA_TYPE pSampleGrabber_pmt;
ZeroMemory(&pSampleGrabber_pmt, sizeof(AM_MEDIA_TYPE));
pSampleGrabber_pmt.majortype = MEDIATYPE_Video;
pSampleGrabber_pmt.subtype = MEDIASUBTYPE_RGB32;
pSampleGrabber_pmt.formattype = FORMAT_VideoInfo;
pSampleGrabber_pmt.bFixedSizeSamples = TRUE;
pSampleGrabber_pmt.cbFormat = 88;
pSampleGrabber_pmt.lSampleSize = 3686400;
pSampleGrabber_pmt.bTemporalCompression = FALSE;
VIDEOINFOHEADER pSampleGrabber_format;
ZeroMemory(&pSampleGrabber_format, sizeof(VIDEOINFOHEADER));
pSampleGrabber_format.rcSource.right = 1280;
pSampleGrabber_format.rcSource.bottom = 720;
pSampleGrabber_format.AvgTimePerFrame = 333666;
pSampleGrabber_format.bmiHeader.biSize = 40;
pSampleGrabber_format.bmiHeader.biWidth = 1280;
pSampleGrabber_format.bmiHeader.biHeight = 720;
pSampleGrabber_format.bmiHeader.biPlanes = 1;
pSampleGrabber_format.bmiHeader.biBitCount = 32;
pSampleGrabber_format.bmiHeader.biSizeImage = 3686400;
pSampleGrabber_pmt.pbFormat = (BYTE*)&pSampleGrabber_format;
CComQIPtr<ISampleGrabber, &IID_ISampleGrabber> pSampleGrabber_isg(pSampleGrabber);
hr = pSampleGrabber_isg->SetMediaType(&pSampleGrabber_pmt);
CHECK_HR(hr, "Can't set media type to sample grabber");
//connect Infinite Pin Tee Filter and SampleGrabber
hr = pGraph->ConnectDirect(GetPin(pInfinitePinTeeFilter, L"Output1"), GetPin(pSampleGrabber2, L"Input"), NULL);
CHECK_HR(hr, "Can't connect Infinite Pin Tee Filter and SampleGrabber");
//connect Infinite Pin Tee Filter and SampleGrabber
hr = pGraph->ConnectDirect(GetPin(pInfinitePinTeeFilter, L"Output2"), GetPin(pSampleGrabber, L"Input"), NULL);
CHECK_HR(hr, "Can't connect Infinite Pin Tee Filter and SampleGrabber");
//add Video Renderer
CComPtr<IBaseFilter> pVideoRenderer;
hr = pVideoRenderer.CoCreateInstance(CLSID_VideoRenderer);
CHECK_HR(hr, "Can't create Video Renderer");
hr = pGraph->AddFilter(pVideoRenderer, L"Video Renderer");
CHECK_HR(hr, "Can't add Video Renderer to graph");
//connect SampleGrabber and Video Renderer
hr = pGraph->ConnectDirect(GetPin(pSampleGrabber2, L"Output"), GetPin(pVideoRenderer, L"Input"), NULL);
CHECK_HR(hr, "Can't connect SampleGrabber and Video Renderer");
//add SampleGrabber
CComPtr<IBaseFilter> pSampleGrabber3;
hr = pSampleGrabber3.CoCreateInstance(CLSID_SampleGrabber);
CHECK_HR(hr, "Can't create SampleGrabber");
hr = pGraph->AddFilter(pSampleGrabber3, L"SampleGrabber");
CHECK_HR(hr, "Can't add SampleGrabber to graph");
AM_MEDIA_TYPE pSampleGrabber3_pmt;
ZeroMemory(&pSampleGrabber3_pmt, sizeof(AM_MEDIA_TYPE));
pSampleGrabber3_pmt.majortype = MEDIATYPE_Video;
pSampleGrabber3_pmt.subtype = GUID1; //// Where is GUID1 defined?
pSampleGrabber3_pmt.formattype = FORMAT_VideoInfo;
pSampleGrabber3_pmt.bFixedSizeSamples = TRUE;
pSampleGrabber3_pmt.cbFormat = 176;
pSampleGrabber3_pmt.lSampleSize = 1;
pSampleGrabber3_pmt.bTemporalCompression = TRUE;
VIDEOINFOHEADER pSampleGrabber3_format;
ZeroMemory(&pSampleGrabber3_format, sizeof(VIDEOINFOHEADER));
pSampleGrabber3_format.AvgTimePerFrame = 333666;
pSampleGrabber3_format.bmiHeader.biSize = 128;
pSampleGrabber3_format.bmiHeader.biWidth = 1280;
pSampleGrabber3_format.bmiHeader.biHeight = 720;
pSampleGrabber3_format.bmiHeader.biPlanes = 1;
pSampleGrabber3_format.bmiHeader.biBitCount = 24;
pSampleGrabber3_format.bmiHeader.biCompression = 875967052;
pSampleGrabber3_format.bmiHeader.biSizeImage = 2764800;
pSampleGrabber3_pmt.pbFormat = (BYTE*)&pSampleGrabber3_format;
CComQIPtr<ISampleGrabber, &IID_ISampleGrabber> pSampleGrabber3_isg(pSampleGrabber3);
hr = pSampleGrabber3_isg->SetMediaType(&pSampleGrabber3_pmt);
CHECK_HR(hr, "Can't set media type to sample grabber");
//connect LEAD MPEG2 Transport Demultiplexer and SampleGrabber
hr = pGraph->ConnectDirect(GetPin(pLEADMPEG2TransportDemultiplexer, L"H.264 Video"), GetPin(pSampleGrabber3, L"Input"), NULL);
CHECK_HR(hr, "Can't connect LEAD MPEG2 Transport Demultiplexer and SampleGrabber");
//connect SampleGrabber and LEAD H264 Decoder (3.0)
hr = pGraph->ConnectDirect(GetPin(pSampleGrabber3, L"Output"), GetPin(pLEADH264Decoder30, L"XForm In"), NULL);
CHECK_HR(hr, "Can't connect SampleGrabber and LEAD H264 Decoder (3.0)");
return S_OK;
}
//int _tmain(int argc, _TCHAR* argv[]) //use this line in VS2008
int main(int argc, char* argv[])
{
CoInitialize(NULL);
CComPtr<IGraphBuilder> graph;
graph.CoCreateInstance(CLSID_FilterGraph);
printf("Building graph...\n");
HRESULT hr = BuildGraph(graph, L"C:\\work\\emsidv3\\emsidv3\\Data\\CAM-EMSI-vid_user.ts");
if (hr==S_OK) {
printf("Running");
CComQIPtr<IMediaControl, &IID_IMediaControl> mediaControl(graph);
hr = mediaControl->Run();
CHECK_HR(hr, "Can't run the graph");
CComQIPtr<IMediaEvent, &IID_IMediaEvent> mediaEvent(graph);
BOOL stop = FALSE;
MSG msg;
while(!stop)
{
long ev=0, p1=0, p2=0;
Sleep(500);
printf(".");
while(PeekMessage(&msg, NULL, 0,0, PM_REMOVE))
DispatchMessage(&msg);
while (mediaEvent->GetEvent(&ev, &p1, &p2, 0)==S_OK)
{
if (ev == EC_COMPLETE || ev == EC_USERABORT)
{
printf("Done!\n");
stop = TRUE;
}
else
if (ev == EC_ERRORABORT)
{
printf("An error occured: HRESULT=%x\n", p1);
mediaControl->Stop();
stop = TRUE;
}
mediaEvent->FreeEventParams(ev, p1, p2);
}
}
}
CoUninitialize();
return 0;
}