//指定されたフォーマットに対応するEncoderのCLSIDを取得する bool GetEncoderClassID(const std::wstring& MimeType,CLSID* ClassID) { typedef Gdiplus::ImageCodecInfo CodecInfo; unsigned EncoderCount,Size; Gdiplus::GetImageEncodersSize(&EncoderCount,&Size); if(!Size) return false; std::vector<unsigned char> Codecs(Size,0); Gdiplus::GetImageEncoders(EncoderCount,Size,(CodecInfo*)Codecs.data()); auto Codec=std::find_if((CodecInfo*)Codecs.data(),(CodecInfo*)Codecs.data()+EncoderCount, [&](CodecInfo& Codec){return !MimeType.compare(Codec.MimeType);}); std::memcpy(ClassID,&(*Codec).Clsid,sizeof(CLSID)); return true; }
// ----------------------------------------------------------------------------- // CMceComAudioStream::UpdateDefaultCodecL // ----------------------------------------------------------------------------- // void CMceComAudioStream::UpdateDefaultCodecL() { CMceComCodec* highestPrioritySendCodec = NULL; CMceComCodec* codec = NULL; const RPointerArray< CMceComCodec >& allCodecs = reinterpret_cast< const RPointerArray<CMceComCodec>& >( Codecs() ); CMceComCodec::TIterator codecs( allCodecs, CMceComCodec::TIterator::EFilterIsNegotiated ); MCE_ITERATOR_FIND_NEXT( codecs, highestPrioritySendCodec, highestPrioritySendCodec->SendSupported() ); // If no negotiated send codecs, disable all. // If send codec changed, enable new one and disable other send codecs. if ( !highestPrioritySendCodec || ( highestPrioritySendCodec && !highestPrioritySendCodec->iIsEnabled ) ) { TBool newDefaultCodecSet( EFalse ); codecs.Reset(); codecs.SetFilter( CMceComCodec::TIterator::EFilterNone ); while( codecs.Next( codec ) ) { if ( !newDefaultCodecSet && codec->iIsNegotiated && codec->SendSupported() ) { codec->SetEnabled( ETrue ); newDefaultCodecSet = ETrue; } else { codec->SetEnabled( EFalse ); } } } }