DirectShow Insanity

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Roulette (Roulette_at_Roulette.com)
Date: 01/20/05

  • Next message: Phil Taylor: "Re: DirectShow Insanity"
    Date: Wed, 19 Jan 2005 21:16:47 -0600
    
    

         Can someone tell me why the following small snippet of DirectShow code
    causes a number of "First-chance exception"s to occur? The code actually
    seems to work fine - the music plays for a couple of seconds before exiting.
    In the full application, the music plays fine, I receive a callback (after
    setting it up) and reset the music to loop when its finished, etc..

         In other words...as far as I can tell on my machine, the code works
    exactly like it should, but those exceptions (that you can see in the Debug
    window when running the program from MSDEV) are making me worry that there
    might be a problem on some other machine.

         Thanks in advance for any help....

    - Roulette

    int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR
    lpcmdline,int ncmdshow)
    {
      // No clean-up is done since this code is just demonstrating a problem.

      CoInitialize(NULL);
      IGraphBuilder *pGraph=NULL;
      IMediaControl *pMediaControl=NULL;
      const char *filename="Test.wma";

      HRESULT
    returnValue=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void
    **)&pGraph);

      if (FAILED(returnValue))
        return 0;

      if (pGraph)
        {
        pGraph->QueryInterface(IID_IMediaControl,(void **)&pMediaControl);

        if (pMediaControl)
          {
          WCHAR *wfile;
          int length;
          length=strlen(filename)+1;
          wfile=new WCHAR[length];
          MultiByteToWideChar(CP_ACP,0,filename,-1,wfile,length);

          returnValue=pGraph->RenderFile(wfile,NULL);

          if (FAILED(returnValue))
            return 0;

          pMediaControl->Run(); // This line causes several exceptions to
    occur - you can see the debug output when running in MSDEV.

          Sleep(2000); // Give the music a chance to play for a couple of
    seconds before exiting the program.
          }
        }

      return 0;
    }


  • Next message: Phil Taylor: "Re: DirectShow Insanity"