I am new to the Windows Media Encoder SDK and I am facing a strange problem.
I have successfully called put_AutoStop() and yet the encoder doesn't seem
to stop. I am just encoding a small PCM WAVE file to a WMA. The following is
my code. Can someone help me out?


CODE
void main()
{
   HRESULT hr;
   IWMEncoder* pEncoder;
   IWMEncSourceGroupCollection* pSrcGrpColl;
   IWMEncSourceGroup* pSrcGrp;
   IWMEncSource* pSrcAud;
   IWMEncFile* pFile;

   // Initialize the COM library
   hr = CoInitialize(NULL);

   // Retrieve a pointer to an IWMEncoder interface
   if (SUCCEEDED(hr))
   {
       hr = CoCreateInstance(CLSID_WMEncoder,
           NULL,
           CLSCTX_INPROC_SERVER,
           IID_IWMEncoder,
           (void**) &pEncoder);
   }

   // Set up the input
   if (SUCCEEDED(hr))
       hr = pEncoder->get_SourceGroupCollection(&pSrcGrpColl);
   if (SUCCEEDED(hr))
       hr = pSrcGrpColl->Add(CComBSTR("SG_1"), &pSrcGrp);
   if (SUCCEEDED(hr))
       hr = pSrcGrp->AddSource(WMENC_AUDIO, &pSrcAud);
   if (SUCCEEDED(hr))
       hr = pSrcAud->SetInput(CComBSTR("c:\\test\\in.wav"));
   if (SUCCEEDED(hr))
       hr = pSrcGrp->put_Profile(CComVariant("c:\\test\\in.prx"));

   // Set up the output
   if (SUCCEEDED(hr))
       hr = pEncoder->get_File(&pFile);
   if (SUCCEEDED(hr))
       hr = pFile->put_LocalFileName(CComBSTR("c:\\test\\out.wma"));

   // Set auto-stop and start encoding
   if (SUCCEEDED(hr))
       hr = pEncoder->put_AutoStop(VARIANT_TRUE);
   if (SUCCEEDED(hr))
       hr = pEncoder->PrepareToEncode(VARIANT_TRUE);
   if (SUCCEEDED(hr))
       hr = pEncoder->Start();

   WMENC_ENCODER_STATE enumState = WMENC_ENCODER_RUNNING;

   // **  Infinite loop - the state never changes! **
   while (enumState == WMENC_ENCODER_RUNNING)
   {
       pEncoder->get_RunState(&enumState);
       printf("Current state %d.\n", enumState);
       Sleep(500);
   }

   // Stop the encoder manually
   pEncoder->Stop();

   // Release pointers.
   if (pSrcGrpColl)
   {
       pSrcGrpColl->Release();
       pSrcGrpColl = NULL;
   }
   if (pSrcGrp)
   {
       pSrcGrp->Release();
       pSrcGrp = NULL;
   }
   if (pFile)
   {
       pFile->Release();
       pFile = NULL;
   }
   if (pSrcAud)
   {
       pSrcAud->Release();
       pSrcAud = NULL;
   }
   if (pEncoder)
   {
       pEncoder->Release();
       pEncoder = NULL;
   }
}