Click here to Skip to main content
13,196,730 members (72,211 online)
Rate this:
Please Sign up or sign in to vote.
Hi guys, i wonder how to make my programm work in mode without debugging(Ctrl+F5). When i start my programm that captures video and audio to asf file from web-cam in debug (F5) it works good i can see a video in small window and everything is good. But when i start it in Ctrl+F5 it still writes a video and audio to file, but i can't see a preview video in small window (the window is getting wite and not responding) Please help me to find the problem

My programm code:

int main(int argc, char* argv[])
	boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();	
    ICaptureGraphBuilder2 *pCaptureGraph = NULL;	// Capture graph builder object
	IGraphBuilder *pGraph = NULL;	// Graph builder object
    IMediaControl *pControl = NULL;	// Media control object
	IFileSinkFilter *pSink = NULL;	// File sink object
	IBaseFilter *pAudioInputFilter = NULL; // Audio Capture filter
	IBaseFilter *pVideoInputFilter = NULL; // Video Capture filter
	IBaseFilter *pASFWriter = NULL;	// WM ASF File config interface
    // Initialize the COM library.
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr))
	     // We’ll send our error messages to the console.
        printf("ERROR - Could not initialize COM library");
        return hr;
    // Create the filter graph manager and query for interfaces.
    hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER,
                          IID_ICaptureGraphBuilder2, (void **)&pCaptureGraph);
    if (FAILED(hr))	// FAILED is a macro that tests the return value
        printf("ERROR - Could not create the Filter Graph Manager.");
        return hr;
	// Use a method of the capture graph builder
	// To create an output path for the stream 
	hr = pCaptureGraph->SetOutputFileName(&MEDIASUBTYPE_Asf, 
		L"C:\\MyWebcam.ASF", &pASFWriter, &pSink);
	// Now configure the ASF Writer
	// Present the property pages for this filter
	hr = ShowFilterPropertyPages(pASFWriter);
	// Now get the filter graph manager
	// That's part of the capture graph builder
	hr = pCaptureGraph->GetFiltergraph(&pGraph);
	 // Using QueryInterface on the graph builder, 
    // Get the Media Control object.
    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    if (FAILED(hr))
        printf("ERROR - Could not create the Media Control object.");
        pGraph->Release();	// Clean up after ourselves.
		CoUninitialize();  // And uninitalize COM
        return hr;
	// Now create the video input filter from the webcam
	hr = EnumerateAudioInputFilters((void**) &pAudioInputFilter);
	hr = EnumerateAudioInputPins(pAudioInputFilter);
	// Add the audio capture filter to the filter graph. 
	hr = pGraph->AddFilter(pAudioInputFilter, L"Audio");
	hr = GetVideoInputFilter(&pVideoInputFilter, L"HP Webcam");
	if (SUCCEEDED(hr)) {
		hr = pGraph->AddFilter(pVideoInputFilter, L"Video");
	// Add a video renderer
	//IBaseFilter *pVideoRenderer = NULL;
	//hr = AddFilterByCLSID(pGraph, CLSID_VideoRenderer, L"Video Renderer", &pVideoRenderer);
	// Use another method of the capture graph builder
	// To provide a render path for video preview
	IBaseFilter *pIntermediate = NULL;
	hr = pCaptureGraph->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,
		pVideoInputFilter, NULL, NULL);
	// Now add the video capture to the output file
	hr = pCaptureGraph->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
		pVideoInputFilter, NULL, pASFWriter);
	// And do the same for the audio
	hr = pCaptureGraph->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Audio,
		pAudioInputFilter, NULL, pASFWriter);
    if (SUCCEEDED(hr))
        // Run the graph.
        hr = pControl->Run();
        if (SUCCEEDED(hr))
			// Wait patiently for completion of the recording
			wprintf(L"Started Enter to stop recording.\n");
			// Wait for completion.
			boost::chrono::duration<double> sec = boost::chrono::system_clock::now() - start;
			std::cout << "took " << sec.count() << " seconds\n";
			char ch;
			ch = getchar();		// We wait for keyboard input
		// And let's stop the filter graph
		hr = pControl->Stop();
		wprintf(L"Stopped recording.\n");	// To the console
		// Before we finish up, save the filter graph to a file.
		SaveGraphFile(pGraph, L"C:\\MyGraph.GRF");
	// Now release everything, and clean up.
	return 0;

This is my video screen picture :[
Posted 17-Mar-12 5:39am
Updated 17-Mar-12 5:59am

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

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy |
Web04 | 2.8.171019.1 | Last Updated 17 Mar 2012
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100