Infognition forum
February 08, 2012, 10:43:29 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: Last GraphEditPlus version: 1.4.0   Last Video Enhancer version: 1.9.7
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: What do I do with GUID1 in the generated source?  (Read 12 times)
jneuhaus
Newbie
*

Karma: +0/-0
Posts: 1


View Profile
« on: February 07, 2012, 07:56:43 PM »

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;
}
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006-2011, Simple Machines LLC Valid XHTML 1.0! Valid CSS!