Enumerating MPEG2 Format Compatible Compressors Example for C

The following code demonstrates enumerates the valid audio and video compressors for the MPEG2 target format. A recommended compressor is also retrieved.

void EnumMPEG2CompressorsExample (IltmmConvert *pConvert)
{
   IltmmCompressors *pCompressors;
   IltmmCompressor *pCompressor;
   IltmmTargetFormats *pTargetformats;
   IltmmTargetFormat* pTargetformat;
   long lCount, lIndex;
   BSTR Name;

   /* set the target format to MPEG2 */
   IltmmConvert_put_TargetFormat(pConvert, ltmmCapture_TargetFormat_MPEG2_PROGRAM);

   IltmmConvert_get_TargetFormats(pConvert, &pTargetformats);
   IltmmTargetFormats_Item(pTargetformats, ltmmCapture_TargetFormat_MPEG2_PROGRAM, &pTargetformat);   
   IUnknown_Release(pTargetformats);

   /* Audio */
   /* get the compressors collection */
   IltmmConvert_get_AudioCompressors(pConvert, &pCompressors);
   IltmmCompressors_get_Count(pCompressors, &lCount);

   for(lIndex = 0; lIndex < lCount; lIndex++)
   {
      long lValid;
      IltmmCompressors_Item(pCompressors, lIndex, &pCompressor);
      IltmmCompressor_get_Name(pCompressor, &Name);
      IltmmTargetFormat_IsValidCompressor(pTargetformat, Name, &lValid);
      if( lValid != ltmmTargetFormat_Compressor_Invalid )
      {
         // do whatever needed with the valid compressor (i.e. add it to some list)
      }

      SysFreeString(Name);

      IUnknown_Release(pCompressor);
   }

   // get the recommended compressor for the current format
   IltmmTargetFormat_get_RecommendedAudioCompressor(pTargetformat, &Name);
   if( Name )
   {
      // do whatever needed with the recommended compressor (i.e. select it)
   }

   IUnknown_Release(pCompressors);

   /*Video*/
   /* get the compressors collection */
   IltmmConvert_get_VideoCompressors(pConvert, &pCompressors);
   IltmmCompressors_get_Count(pCompressors, &lCount);

   for(lIndex = 0; lIndex < lCount; lIndex++)
   {
      long lValid;
      IltmmCompressors_Item(pCompressors, lIndex, &pCompressor);
      IltmmCompressor_get_Name(pCompressor, &Name);
      IltmmTargetFormat_IsValidCompressor(pTargetformat, Name, &lValid);
      if( lValid != ltmmTargetFormat_Compressor_Invalid )
      {
         // do whatever needed with the valid compressor (i.e. add it to some list)
      }
      
      SysFreeString(Name);

      IUnknown_Release(pCompressor);
   }

   // get the recommended compressor for the current format
   IltmmTargetFormat_get_RecommendedVideoCompressor(pTargetformat, &Name);
   if( Name )
   {
      // do whatever needed with the recommended compressor (i.e. select it)
   }

   IUnknown_Release(pCompressors);
   IUnknown_Release(pTargetformat);
}