Esempio n. 1
0
//指定されたフォーマットに対応する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 );
                }
            }
        }
    }