void IFileContainer::write(Rels::File& rels, const CPath& curdir, const CPath& directory, ContentTypes::File& content) const
	{
		CAtlMap<CString, size_t> namepair;

		POSITION pos = m_container.GetStartPosition();
		while (NULL != pos)
		{
			const CAtlMap<CString, smart_ptr<OOX::File>>::CPair* pPair = m_container.GetNext(pos);
			
			smart_ptr<OOX::File> pFile		= pPair->m_value;
			smart_ptr<OOX::External> pExt	= pFile.smart_dynamic_cast<OOX::External>();

			if (!pExt.IsInit())
			{
				OOX::CPath defdir	= pFile->DefaultDirectory();
				OOX::CPath name		= pFile->DefaultFileName();

				CAtlMap<CString, size_t>::CPair* pNamePair = namepair.Lookup(name.m_strFilename);
				if (NULL == pNamePair)
					namepair.SetAt(name.m_strFilename, 1);
				else
					name = name + pNamePair->m_key;

				OOX::CSystemUtility::CreateDirectories(curdir / defdir);
				pFile->write(curdir / defdir / name, directory / defdir, content);
				rels.registration(pPair->m_key, pFile->type(), defdir / name);
			}
			else
			{
				
				
				rels.registration(pPair->m_key, pExt);
			}
		}
	}
	void IFileContainer::Commit(const CPath& path)
	{
		CAtlMap<CString, size_t> namepair;

		POSITION pos = m_container.GetStartPosition();
		while (NULL != pos)
		{
			CAtlMap<CString, smart_ptr<OOX::File>>::CPair* pPair = m_container.GetNext(pos);
			
			smart_ptr<OOX::File> pFile		= pPair->m_value;
			smart_ptr<OOX::External> pExt	= pFile.smart_dynamic_cast<OOX::External>();

			if (!pExt.IsInit())
			{
				OOX::CPath defdir	= pFile->DefaultDirectory();
				OOX::CPath name		= pFile->DefaultFileName();

				CAtlMap<CString, size_t>::CPair* pNamePair = namepair.Lookup(name.m_strFilename);
				if (NULL == pNamePair)
					namepair.SetAt(name.m_strFilename, 1);
				else
					name = name + pNamePair->m_key;

				OOX::CSystemUtility::CreateDirectories(path / defdir);
				
				smart_ptr<OOX::IFileBuilder> fileBuilder = pPair->m_value.smart_dynamic_cast<OOX::IFileBuilder>();
				if (fileBuilder.is_init())
					fileBuilder->Commit(path / defdir / name);
			}
		}
	}
void AsyncUpdateHandler::OnDataChange(COPCGroup & group, CAtlMap<COPCItem *, OPCItemData *> & changes)
{
	log_NOTICE("OnDataChange called, group [", group.getName(),"] change count [", pantheios::integer(changes.GetCount()),"] have callback [",(callbackFn != NULL?"Y":"N"),"]");
	
	for(POSITION pos = changes.GetStartPosition(); pos != NULL; )
	{
		CAtlMap<COPCItem *, OPCItemData *>::CPair* pPair = changes.GetNext(pos);

		ItemValueStruct itemValueStruct(pPair->m_value);		
		const ItemValue& itemValue = itemValueStruct.getItemValue();
		
		log_NOTICE("\t item [",pPair->m_key->getName(),"] value [", itemValueStruct.getItemValue().value,"]");

		if(callbackFn != NULL)
		{
			log_NOTICE("\t OnDataChange calling callback fn");			
			//Update* update = createUpdate(pPair->m_key->getName().GetString(), itemValue.value, itemValue.quality, itemValue.dataType, itemValue.timestamp);
			callbackFn(pPair->m_key->getName().GetString(), itemValue.value, itemValue.quality, itemValue.dataType, itemValue.timestamp);

			log_DEBUG("\t OnDataChange called callback fn");
/*			
			callbackFn(update);
			log_DEBUG("\t OnDataChange called callback fn");

			destroyUpdate(update);
			log_DEBUG("\t OnDataChange destroyed object");
*/
		}
	}
}
示例#4
0
文件: PeerInfo.cpp 项目: wonsch/ds
bool CPeerInfo::TryInsertPeerIDMessageID(unsigned int PeerID, unsigned MessageID)
{
	CAtlMap<unsigned int, void*> *MessageIDMap;
	if(PeerIDMessageIDMap.Lookup(PeerID, MessageIDMap) == false)
	{
		MessageIDMap = new CAtlMap<unsigned int, void*>();
		PeerIDMessageIDMap.SetAt(PeerID, MessageIDMap);
	}

	void *Temp;
	if(MessageIDMap->Lookup(MessageID, Temp) == true) return false;
	else
	{
		MessageIDMap->SetAt(MessageID, NULL);
		return true;
	}
}
示例#5
0
IDTManager* CMainDlg::GetDTMgrForPhone()
{
	if(m_pPhoneDTMgr == NULL && CreateObject != NULL)
	{
		CreateObject(__uuidof(IDTManager), (void**)&m_pPhoneDTMgr);

		if(m_pPhoneDTMgr != NULL)
		{
			CAtlMap<DtStateChangeNotifyCallBack,void*> *pCallback = new CAtlMap<DtStateChangeNotifyCallBack,void*>;
			pCallback->SetAt(PhoneSoftDownCallback, this);

			m_pPhoneDTMgr->Init(pCallback);
		}
	}

	return m_pPhoneDTMgr;
}
示例#6
0
void CFunctionManager::FillSpecFunctionArray()
{
	m_SelectedFunctions.RemoveAll();
	for (size_t i = 0;i < m_pClass->Parents.GetCount(); i++)
	{
		SpecFunctionParent SpecParent;
		if (m_sSpecFunctions.Lookup(m_pClass->Parents[i]->Name, SpecParent))
		{
			CAtlMap<int, bool> ConditionResult;
			bool bDefault = true;
			for (size_t i = 0; i < SpecParent.Conditions.GetCount(); i++)
			{
				bool bRes = CheckSpecialCondition(SpecParent.Conditions[i]);
				bDefault &= !bRes;
				ConditionResult.SetAt(SpecParent.Conditions[i], bRes);
			}
			if (SpecParent.Conditions.GetCount())
			{
				ConditionResult.SetAt(0, bDefault);
			}
			CSmartAtlArray<SpecFunctionStruct>& SpecFunctions = SpecParent.SpecFunctions;
			for (size_t i = 0; i < SpecFunctions.GetCount(); i++)
			{
				if (SpecFunctions[i].Condition == -1)
				{
					m_SelectedFunctions.Add(SpecFunctions[i]);
				}
				else
				{
					bool bRes;
					if (ConditionResult.Lookup(SpecFunctions[i].Condition, bRes))
					{
						if (bRes)
						{
							m_SelectedFunctions.Add(SpecFunctions[i]);
						}
					}
				}
			}
		}
	}
}
示例#7
0
CString CMediaTypeEx::GetVideoCodecName(const GUID& subtype, DWORD biCompression)
{
    CString str;

    static CAtlMap<DWORD, CString> names;

    if (names.IsEmpty()) {
        names['WMV1'] = _T("Windows Media Video 7");
        names['WMV2'] = _T("Windows Media Video 8");
        names['WMV3'] = _T("Windows Media Video 9");
        names['DIV3'] = _T("DivX 3");
        names['DX50'] = _T("DivX 5");
        names['MP4V'] = _T("MPEG4 Video");
        names['AVC1'] = _T("MPEG4 Video (H264)");
        names['H264'] = _T("MPEG4 Video (H264)");
        names['RV10'] = _T("RealVideo 1");
        names['RV20'] = _T("RealVideo 2");
        names['RV30'] = _T("RealVideo 3");
        names['RV40'] = _T("RealVideo 4");
        names['FLV1'] = _T("Flash Video 1");
        // names[''] = _T("");
    }

    if (biCompression) {
        BYTE* b = (BYTE*)&biCompression;

        for (int i = 0; i < 4; i++)
            if (b[i] >= 'a' && b[i] <= 'z') {
                b[i] = toupper(b[i]);
            }

        if (!names.Lookup(MAKEFOURCC(b[3], b[2], b[1], b[0]), str)) {
            if (subtype == MEDIASUBTYPE_DiracVideo) { str = _T("Dirac Video"); }
            // else if(subtype == ) str = _T("");
            else if (biCompression < 256) { str.Format(_T("%d"), biCompression); }
            else { str.Format(_T("%4.4hs"), &biCompression); }
        }
    }

    return str;
}
示例#8
0
BOOL CRegOpt::DoEnumCurrnetSubKey(HKEY hRootKey,LPCTSTR lpcKey,CAtlMap<CString,char>& vec_Key)
{
	HKEY hKey;
	LONG lResult;
	
	//打开键
	lResult = RegOpenKeyEx(hRootKey,
		lpcKey,
		NULL,
		KEY_READ,
		&hKey
		);

	if(lResult != ERROR_SUCCESS)
	{	
		m_iErrCode = lResult;
		return FALSE;
	}

	//枚举键名
	BOOL  bRet = TRUE;
	DWORD dwIndex=0;
	do 
	{	
		TCHAR szKey[MAX_PATH]={0};
		DWORD dwKey = sizeof(szKey);
		lResult =RegEnumKey(hKey,dwIndex,szKey,dwKey);

		if (lResult != ERROR_SUCCESS)
		{
			if (lResult == ERROR_NO_MORE_ITEMS)
			{	
				bRet = TRUE;
				break;
			}
			else
			{	
				bRet = FALSE;
				m_iErrCode = lResult;
				break;
			}
		}
		
		
		vec_Key.SetAt(szKey,'1');
		dwIndex++;

	} while (1);

	RegCloseKey(hKey);

	return bRet;
}
示例#9
0
CString CMediaTypeEx::GetSubtitleCodecName(const GUID& subtype)
{
	CString str;

	static CAtlMap<GUID, CString> names;

	if (names.IsEmpty()) {
		names[MEDIASUBTYPE_UTF8] = _T("UTF-8");
		names[MEDIASUBTYPE_SSA] = _T("SubStation Alpha");
		names[MEDIASUBTYPE_ASS] = _T("Advanced SubStation Alpha");
		names[MEDIASUBTYPE_ASS2] = _T("Advanced SubStation Alpha");
		names[MEDIASUBTYPE_USF] = _T("Universal Subtitle Format");
		names[MEDIASUBTYPE_VOBSUB] = _T("VobSub");
		// names[''] = _T("");
	}

	if (names.Lookup(subtype, str)) {

	}

	return str;
}
示例#10
0
__int64 CDSMSplitterFile::FindSyncPoint(REFERENCE_TIME rt)
{
	if (/*!m_sps.IsEmpty()*/ m_sps.GetCount() > 1) {
		int i = range_bsearch(m_sps, m_rtFirst + rt);
		return i >= 0 ? m_sps[i].fp : 0;
	}

	if (m_rtDuration <= 0 || rt <= m_rtFirst) {
		return 0;
	}

	// ok, do the hard way then

	dsmp_t type;
	UINT64 syncpos, len;

	// 1. find some boundaries close to rt's position (minpos, maxpos)

	__int64 minpos = 0, maxpos = GetLength();

	for (int i = 0; i < 10 && (maxpos - minpos) >= 1024*1024; i++) {
		Seek((minpos + maxpos) / 2);

		while (GetPos() < maxpos) {
			if (!Sync(syncpos, type, len)) {
				continue;
			}

			__int64 pos = GetPos();

			if (type == DSMP_SAMPLE) {
				Packet p;
				if (Read(len, &p, false) && p.rtStart != Packet::INVALID_TIME) {
					REFERENCE_TIME dt = (p.rtStart -= m_rtFirst) - rt;
					if (dt >= 0) {
						maxpos = max((__int64)syncpos - 65536, minpos);
					} else {
						minpos = syncpos;
					}
					break;
				}
			}

			Seek(pos + len);
		}
	}

	// 2. find the first packet just after rt (maxpos)

	Seek(minpos);

	while (GetRemaining()) {
		if (!Sync(syncpos, type, len)) {
			continue;
		}

		__int64 pos = GetPos();

		if (type == DSMP_SAMPLE) {
			Packet p;
			if (Read(len, &p, false) && p.rtStart != Packet::INVALID_TIME) {
				REFERENCE_TIME dt = (p.rtStart -= m_rtFirst) - rt;
				if (dt >= 0) {
					maxpos = (__int64)syncpos;
					break;
				}
			}
		}

		Seek(pos + len);
	}

	// 3. iterate backwards from maxpos and find at least one syncpoint for every stream, except for subtitle streams

	CAtlMap<BYTE,BYTE> ids;

	{
		POSITION pos = m_mts.GetStartPosition();
		while (pos) {
			BYTE id;
			CMediaType mt;
			m_mts.GetNextAssoc(pos, id, mt);
			if (mt.majortype != MEDIATYPE_Text && mt.majortype != MEDIATYPE_Subtitle) {
				ids[id] = 0;
			}
		}
	}

	__int64 ret = maxpos;

	while (maxpos > 0 && !ids.IsEmpty()) {
		minpos = max(0, maxpos - 65536);

		Seek(minpos);

		while (Sync(syncpos, type, len) && GetPos() < maxpos) {
			UINT64 pos = GetPos();

			if (type == DSMP_SAMPLE) {
				Packet p;
				if (Read(len, &p, false) && p.rtStart != Packet::INVALID_TIME && p.bSyncPoint) {
					BYTE id = (BYTE)p.TrackNumber, tmp;
					if (ids.Lookup(id, tmp)) {
						ids.RemoveKey((BYTE)p.TrackNumber);
						ret = min(ret, (__int64)syncpos);
					}
				}
			}

			Seek(pos + len);
		}

		maxpos = minpos;
	}

	return ret;
}
示例#11
0
bool CPlayerPlaylistBar::ParseMPCPlayList(CString fn)
{
    CString str;
    CAtlMap<int, CPlaylistItem> pli;
    CAtlArray<int> idx;

    CWebTextFile f;
    if (!f.Open(fn) || !f.ReadString(str) || str != _T("MPCPLAYLIST")) {
        return false;
    }

    if (f.GetEncoding() == CTextFile::ASCII) {
        f.SetEncoding(CTextFile::ANSI);
    }

    CPath base(fn);
    base.RemoveFileSpec();

    while (f.ReadString(str)) {
        CAtlList<CString> sl;
        Explode(str, sl, ',', 3);
        if (sl.GetCount() != 3) {
            continue;
        }

        if (int i = _ttoi(sl.RemoveHead())) {
            CString key = sl.RemoveHead();
            CString value = sl.RemoveHead();

            if (key == _T("type")) {
                pli[i].m_type = (CPlaylistItem::type_t)_ttol(value);
                idx.Add(i);
            } else if (key == _T("label")) {
                pli[i].m_label = value;
            } else if (key == _T("filename")) {
                value = CombinePath(base, value);
                pli[i].m_fns.AddTail(value);
            } else if (key == _T("subtitle")) {
                value = CombinePath(base, value);
                pli[i].m_subs.AddTail(value);
            } else if (key == _T("video")) {
                while (pli[i].m_fns.GetCount() < 2) {
                    pli[i].m_fns.AddTail(_T(""));
                }
                pli[i].m_fns.GetHead() = value;
            } else if (key == _T("audio")) {
                while (pli[i].m_fns.GetCount() < 2) {
                    pli[i].m_fns.AddTail(_T(""));
                }
                pli[i].m_fns.GetTail() = value;
            } else if (key == _T("vinput")) {
                pli[i].m_vinput = _ttol(value);
            } else if (key == _T("vchannel")) {
                pli[i].m_vchannel = _ttol(value);
            } else if (key == _T("ainput")) {
                pli[i].m_ainput = _ttol(value);
            } else if (key == _T("country")) {
                pli[i].m_country = _ttol(value);
            }
        }
    }

    qsort(idx.GetData(), idx.GetCount(), sizeof(int), s_int_comp);
    for (size_t i = 0; i < idx.GetCount(); i++) {
        m_pl.AddTail(pli[idx[i]]);
    }

    return pli.GetCount() > 0;
}
示例#12
0
CString CMediaTypeEx::GetAudioCodecName(const GUID& subtype, WORD wFormatTag)
{
	CString str;

	static CAtlMap<WORD, CString> names;

	if (names.IsEmpty()) {
		names[WAVE_FORMAT_PCM] = _T("PCM");
		names[WAVE_FORMAT_EXTENSIBLE] = _T("WAVE_FORMAT_EXTENSIBLE");
		names[WAVE_FORMAT_IEEE_FLOAT] = _T("IEEE Float");
		names[WAVE_FORMAT_ADPCM] = _T("MS ADPCM");
		names[WAVE_FORMAT_ALAW] = _T("aLaw");
		names[WAVE_FORMAT_MULAW] = _T("muLaw");
		names[WAVE_FORMAT_DRM] = _T("DRM");
		names[WAVE_FORMAT_OKI_ADPCM] = _T("OKI ADPCM");
		names[WAVE_FORMAT_DVI_ADPCM] = _T("DVI ADPCM");
		names[WAVE_FORMAT_IMA_ADPCM] = _T("IMA ADPCM");
		names[WAVE_FORMAT_MEDIASPACE_ADPCM] = _T("Mediaspace ADPCM");
		names[WAVE_FORMAT_SIERRA_ADPCM] = _T("Sierra ADPCM");
		names[WAVE_FORMAT_G723_ADPCM] = _T("G723 ADPCM");
		names[WAVE_FORMAT_DIALOGIC_OKI_ADPCM] = _T("Dialogic OKI ADPCM");
		names[WAVE_FORMAT_MEDIAVISION_ADPCM] = _T("Media Vision ADPCM");
		names[WAVE_FORMAT_YAMAHA_ADPCM] = _T("Yamaha ADPCM");
		names[WAVE_FORMAT_DSPGROUP_TRUESPEECH] = _T("DSP Group Truespeech");
		names[WAVE_FORMAT_DOLBY_AC2] = _T("Dolby AC2");
		names[WAVE_FORMAT_GSM610] = _T("GSM610");
		names[WAVE_FORMAT_MSNAUDIO] = _T("MSN Audio");
		names[WAVE_FORMAT_ANTEX_ADPCME] = _T("Antex ADPCME");
		names[WAVE_FORMAT_CS_IMAADPCM] = _T("Crystal Semiconductor IMA ADPCM");
		names[WAVE_FORMAT_ROCKWELL_ADPCM] = _T("Rockwell ADPCM");
		names[WAVE_FORMAT_ROCKWELL_DIGITALK] = _T("Rockwell Digitalk");
		names[WAVE_FORMAT_G721_ADPCM] = _T("G721");
		names[WAVE_FORMAT_G728_CELP] = _T("G728");
		names[WAVE_FORMAT_MSG723] = _T("MSG723");
		names[WAVE_FORMAT_MPEG] = _T("MPEG Audio");
		names[WAVE_FORMAT_MPEGLAYER3] = _T("MPEG Audio Layer 3");
		names[WAVE_FORMAT_LUCENT_G723] = _T("Lucent G723");
		names[WAVE_FORMAT_VOXWARE] = _T("Voxware");
		names[WAVE_FORMAT_G726_ADPCM] = _T("G726");
		names[WAVE_FORMAT_G722_ADPCM] = _T("G722");
		names[WAVE_FORMAT_G729A] = _T("G729A");
		names[WAVE_FORMAT_MEDIASONIC_G723] = _T("MediaSonic G723");
		names[WAVE_FORMAT_ZYXEL_ADPCM] = _T("ZyXEL ADPCM");
		names[WAVE_FORMAT_RHETOREX_ADPCM] = _T("Rhetorex ADPCM");
		names[WAVE_FORMAT_VIVO_G723] = _T("Vivo G723");
		names[WAVE_FORMAT_VIVO_SIREN] = _T("Vivo Siren");
		names[WAVE_FORMAT_DIGITAL_G723] = _T("Digital G723");
		names[WAVE_FORMAT_SANYO_LD_ADPCM] = _T("Sanyo LD ADPCM");
		names[WAVE_FORMAT_CREATIVE_ADPCM] = _T("Creative ADPCM");
		names[WAVE_FORMAT_CREATIVE_FASTSPEECH8] = _T("Creative Fastspeech 8");
		names[WAVE_FORMAT_CREATIVE_FASTSPEECH10] = _T("Creative Fastspeech 10");
		names[WAVE_FORMAT_UHER_ADPCM] = _T("UHER ADPCM");
		names[WAVE_FORMAT_DOLBY_AC3] = _T("Dolby AC3");
		names[WAVE_FORMAT_DVD_DTS] = _T("DTS");
		names[WAVE_FORMAT_AAC] = _T("AAC");
		names[WAVE_FORMAT_LATM_AAC] = _T("AAC(LATM)");
		names[WAVE_FORMAT_FLAC] = _T("FLAC");
		names[WAVE_FORMAT_TTA1] = _T("TTA");
		names[WAVE_FORMAT_14_4] = _T("RealAudio 14.4");
		names[WAVE_FORMAT_28_8] = _T("RealAudio 28.8");
		names[WAVE_FORMAT_ATRC] = _T("RealAudio ATRC");
		names[WAVE_FORMAT_COOK] = _T("RealAudio COOK");
		names[WAVE_FORMAT_DNET] = _T("RealAudio DNET");
		names[WAVE_FORMAT_RAAC] = _T("RealAudio RAAC");
		names[WAVE_FORMAT_RACP] = _T("RealAudio RACP");
		names[WAVE_FORMAT_SIPR] = _T("RealAudio SIPR");
		names[WAVE_FORMAT_PS2_PCM] = _T("PS2 PCM");
		names[WAVE_FORMAT_PS2_ADPCM] = _T("PS2 ADPCM");
		names[0x0160] = _T("Windows Media Audio");
		names[0x0161] = _T("Windows Media Audio");
		names[0x0162] = _T("Windows Media Audio");
		names[0x0163] = _T("Windows Media Audio");
		names[0x6173] = _T("AMR");
		// names[] = _T("");
	}

	if (!names.Lookup(wFormatTag, str)) {
		if (subtype == MEDIASUBTYPE_Vorbis) {
			str = _T("Vorbis (deprecated)");
		} else if (subtype == MEDIASUBTYPE_Vorbis2) {
			str = _T("Vorbis");
		} else if (subtype == MEDIASUBTYPE_MP4A) {
			str = _T("MPEG4 Audio");
		} else if (subtype == MEDIASUBTYPE_FLAC_FRAMED) {
			str = _T("FLAC (framed)");
		} else if (subtype == MEDIASUBTYPE_DOLBY_AC3) {
			str += _T("Dolby AC3");
		} else if (subtype == MEDIASUBTYPE_DTS) {
			str += _T("DTS");
		} else if (subtype == MEDIASUBTYPE_PCM_NONE || subtype == MEDIASUBTYPE_PCM_RAW ||
				   subtype == MEDIASUBTYPE_PCM_TWOS || subtype == MEDIASUBTYPE_PCM_SOWT ||
				   subtype == MEDIASUBTYPE_PCM_IN24 || subtype == MEDIASUBTYPE_PCM_IN32 ||
				   subtype == MEDIASUBTYPE_PCM_IN24_le || subtype == MEDIASUBTYPE_PCM_IN32_le ||
				   subtype == MEDIASUBTYPE_PCM_FL32 || subtype == MEDIASUBTYPE_PCM_FL32_le ||
				   subtype == MEDIASUBTYPE_PCM_FL64 || subtype == MEDIASUBTYPE_PCM_FL64_le) {
			str += _T("PCM");
		} else if (subtype == MEDIASUBTYPE_ADPCM_SWF || subtype == MEDIASUBTYPE_IMA4) {
			str += _T("ADPCM");
		} else if (subtype == MEDIASUBTYPE_ALAC) {
			str += _T("Alac");
		} else if (subtype == MEDIASUBTYPE_ALS) {
			str += _T("ALS");
		} else {
			str.Format(_T("0x%04x"), wFormatTag);
		}
	}

	if (wFormatTag == WAVE_FORMAT_PCM) {
		if (subtype == MEDIASUBTYPE_DOLBY_AC3) {
			str += _T(" (AC3)");
		} else if (subtype == MEDIASUBTYPE_DTS) {
			str += _T(" (DTS)");
		}
	}

	return str;
}
示例#13
0
CString GetGUIDString(const GUID& guid)
{
	static CAtlMap<GUID, CString> DXVA_names;
	{
		DXVA_ModeNone;

		ADDENTRY(DXVA_ModeNone);
		ADDENTRY(DXVA_ModeH261_A);
		ADDENTRY(DXVA_ModeH261_B);

		ADDENTRY(DXVA_ModeH263_A);
		ADDENTRY(DXVA_ModeH263_B);
		ADDENTRY(DXVA_ModeH263_C);
		ADDENTRY(DXVA_ModeH263_D);
		ADDENTRY(DXVA_ModeH263_E);
		ADDENTRY(DXVA_ModeH263_F);

		ADDENTRY(DXVA_ModeMPEG1_A);

		ADDENTRY(DXVA_ModeMPEG2_A);
		ADDENTRY(DXVA_ModeMPEG2_B);
		ADDENTRY(DXVA_ModeMPEG2_C);
		ADDENTRY(DXVA_ModeMPEG2_D);
		ADDENTRY(DXVA2_ModeMPEG2_MoComp);
		ADDENTRY(DXVA2_ModeMPEG2_IDCT);
		ADDENTRY(DXVA2_ModeMPEG2_VLD);
		ADDENTRY(DXVA_ModeMPEG2and1_VLD);

		ADDENTRY(DXVA_ModeH264_A);
		ADDENTRY(DXVA_ModeH264_B);
		ADDENTRY(DXVA_ModeH264_C);
		ADDENTRY(DXVA_ModeH264_D);
		ADDENTRY(DXVA_ModeH264_E);
		ADDENTRY(DXVA_ModeH264_F);

		ADDENTRY(DXVA_ModeWMV8_A);
		ADDENTRY(DXVA_ModeWMV8_B);

		ADDENTRY(DXVA_ModeWMV9_A);
		ADDENTRY(DXVA_ModeWMV9_B);
		ADDENTRY(DXVA_ModeWMV9_C);

		ADDENTRY(DXVA_ModeVC1_A);
		ADDENTRY(DXVA_ModeVC1_B);
		ADDENTRY(DXVA_ModeVC1_C);
		ADDENTRY(DXVA_ModeVC1_D);
		ADDENTRY(DXVA2_ModeVC1_D2010);

		ADDENTRY(DXVA_Intel_H264_ClearVideo);
		ADDENTRY(DXVA_Intel_VC1_ClearVideo);
		ADDENTRY(DXVA_Intel_VC1_ClearVideo_2);
		ADDENTRY(DXVA_MPEG4_ASP);

		ADDENTRY(DXVA_ModeHEVC_VLD_Main);
		ADDENTRY(DXVA_ModeHEVC_VLD_Main10);

		ADDENTRY(DXVA_NoEncrypt);
	}

	// to prevent print TIME_FORMAT_NONE for GUID_NULL
	if (guid == GUID_NULL) {
		return _T("GUID_NULL");
	}

	CString guidStr = CString(GuidNames[guid]);
	if (guidStr == _T("Unknown GUID Name")) {
		guidStr = CString(m_GuidNames[guid]);
	}
	if (guidStr == _T("Unknown GUID Name")) {
		CString str;
		if (DXVA_names.Lookup(guid, str)) {
			guidStr = str;
		}
	}

	return guidStr;
}
示例#14
0
CString CMediaTypeEx::GetAudioCodecName(const GUID& subtype, WORD wFormatTag)
{
	CString str;

	static CAtlMap<WORD, CString> names;
	if (names.IsEmpty()) {
		// MMReg.h
		names[WAVE_FORMAT_ADPCM]                 = _T("MS ADPCM");
		names[WAVE_FORMAT_IEEE_FLOAT]            = _T("IEEE Float");
		names[WAVE_FORMAT_ALAW]                  = _T("aLaw");
		names[WAVE_FORMAT_MULAW]                 = _T("muLaw");
		names[WAVE_FORMAT_DTS]                   = _T("DTS");
		names[WAVE_FORMAT_DRM]                   = _T("DRM");
		names[WAVE_FORMAT_WMAVOICE9]             = _T("WMA Voice");
		names[WAVE_FORMAT_WMAVOICE10]            = _T("WMA Voice");
		names[WAVE_FORMAT_OKI_ADPCM]             = _T("OKI ADPCM");
		names[WAVE_FORMAT_IMA_ADPCM]             = _T("IMA ADPCM");
		names[WAVE_FORMAT_MEDIASPACE_ADPCM]      = _T("Mediaspace ADPCM");
		names[WAVE_FORMAT_SIERRA_ADPCM]          = _T("Sierra ADPCM");
		names[WAVE_FORMAT_G723_ADPCM]            = _T("G723 ADPCM");
		names[WAVE_FORMAT_DIALOGIC_OKI_ADPCM]    = _T("Dialogic OKI ADPCM");
		names[WAVE_FORMAT_MEDIAVISION_ADPCM]     = _T("Media Vision ADPCM");
		names[WAVE_FORMAT_YAMAHA_ADPCM]          = _T("Yamaha ADPCM");
		names[WAVE_FORMAT_DSPGROUP_TRUESPEECH]   = _T("DSP Group Truespeech");
		names[WAVE_FORMAT_DOLBY_AC2]             = _T("Dolby AC2");
		names[WAVE_FORMAT_GSM610]                = _T("GSM610");
		names[WAVE_FORMAT_MSNAUDIO]              = _T("MSN Audio");
		names[WAVE_FORMAT_ANTEX_ADPCME]          = _T("Antex ADPCME");
		names[WAVE_FORMAT_CS_IMAADPCM]           = _T("Crystal Semiconductor IMA ADPCM");
		names[WAVE_FORMAT_ROCKWELL_ADPCM]        = _T("Rockwell ADPCM");
		names[WAVE_FORMAT_ROCKWELL_DIGITALK]     = _T("Rockwell Digitalk");
		names[WAVE_FORMAT_G721_ADPCM]            = _T("G721");
		names[WAVE_FORMAT_G728_CELP]             = _T("G728");
		names[WAVE_FORMAT_MSG723]                = _T("MSG723");
		names[WAVE_FORMAT_MPEG]                  = _T("MPEG Audio");
		names[WAVE_FORMAT_MPEGLAYER3]            = _T("MP3");
		names[WAVE_FORMAT_LUCENT_G723]           = _T("Lucent G723");
		names[WAVE_FORMAT_VOXWARE]               = _T("Voxware");
		names[WAVE_FORMAT_G726_ADPCM]            = _T("G726");
		names[WAVE_FORMAT_G722_ADPCM]            = _T("G722");
		names[WAVE_FORMAT_G729A]                 = _T("G729A");
		names[WAVE_FORMAT_MEDIASONIC_G723]       = _T("MediaSonic G723");
		names[WAVE_FORMAT_ZYXEL_ADPCM]           = _T("ZyXEL ADPCM");
		names[WAVE_FORMAT_RAW_AAC1]              = _T("AAC");
		names[WAVE_FORMAT_RHETOREX_ADPCM]        = _T("Rhetorex ADPCM");
		names[WAVE_FORMAT_VIVO_G723]             = _T("Vivo G723");
		names[WAVE_FORMAT_VIVO_SIREN]            = _T("Vivo Siren");
		names[WAVE_FORMAT_DIGITAL_G723]          = _T("Digital G723");
		names[WAVE_FORMAT_SANYO_LD_ADPCM]        = _T("Sanyo LD ADPCM");
		names[WAVE_FORMAT_MSAUDIO1]              = _T("WMA 1");
		names[WAVE_FORMAT_WMAUDIO2]              = _T("WMA 2");
		names[WAVE_FORMAT_WMAUDIO3]              = _T("WMA Pro");
		names[WAVE_FORMAT_WMAUDIO_LOSSLESS]      = _T("WMA Lossless");
		names[WAVE_FORMAT_CREATIVE_ADPCM]        = _T("Creative ADPCM");
		names[WAVE_FORMAT_CREATIVE_FASTSPEECH8]  = _T("Creative Fastspeech 8");
		names[WAVE_FORMAT_CREATIVE_FASTSPEECH10] = _T("Creative Fastspeech 10");
		names[WAVE_FORMAT_UHER_ADPCM]            = _T("UHER ADPCM");
		names[WAVE_FORMAT_DTS2]                  = _T("DTS");
		// other
		names[WAVE_FORMAT_DOLBY_AC3]             = _T("Dolby AC3");
		names[WAVE_FORMAT_LATM_AAC]              = _T("AAC(LATM)");
		names[WAVE_FORMAT_FLAC]                  = _T("FLAC");
		names[WAVE_FORMAT_TTA1]                  = _T("TTA");
		names[WAVE_FORMAT_WAVPACK4]              = _T("WavPack");
		names[WAVE_FORMAT_14_4]                  = _T("RealAudio 14.4");
		names[WAVE_FORMAT_28_8]                  = _T("RealAudio 28.8");
		names[WAVE_FORMAT_ATRC]                  = _T("RealAudio ATRC");
		names[WAVE_FORMAT_COOK]                  = _T("RealAudio COOK");
		names[WAVE_FORMAT_DNET]                  = _T("RealAudio DNET");
		names[WAVE_FORMAT_RAAC]                  = _T("RealAudio RAAC");
		names[WAVE_FORMAT_RACP]                  = _T("RealAudio RACP");
		names[WAVE_FORMAT_SIPR]                  = _T("RealAudio SIPR");
		names[WAVE_FORMAT_PS2_PCM]               = _T("PS2 PCM");
		names[WAVE_FORMAT_PS2_ADPCM]             = _T("PS2 ADPCM");
		names[WAVE_FORMAT_SPEEX]                 = _T("Speex");
		names[WAVE_FORMAT_ADX_ADPCM]             = _T("ADX ADPCM");
	}

	if (!names.Lookup(wFormatTag, str)) {
		// for wFormatTag equal to WAVE_FORMAT_UNKNOWN, WAVE_FORMAT_PCM, WAVE_FORMAT_EXTENSIBLE and other.
		if (subtype == MEDIASUBTYPE_PCM) {
			str = _T("PCM");
		} else if (subtype == MEDIASUBTYPE_IEEE_FLOAT) {
			str = _T("IEEE Float");
		} else if (subtype == MEDIASUBTYPE_DVD_LPCM_AUDIO || subtype == MEDIASUBTYPE_HDMV_LPCM_AUDIO) {
			str = _T("LPCM");
		} else if (subtype == MEDIASUBTYPE_Vorbis) {
			str = _T("Vorbis (deprecated)");
		} else if (subtype == MEDIASUBTYPE_Vorbis2) {
			str = _T("Vorbis");
		} else if (subtype == MEDIASUBTYPE_MP4A) {
			str = _T("MPEG4 Audio");
		} else if (subtype == MEDIASUBTYPE_FLAC_FRAMED) {
			str = _T("FLAC (framed)");
		} else if (subtype == MEDIASUBTYPE_DOLBY_AC3) {
			str = _T("Dolby AC3");
		} else if (subtype == MEDIASUBTYPE_DOLBY_DDPLUS) {
			str = _T("DD+");
		} else if (subtype == MEDIASUBTYPE_DOLBY_TRUEHD) {
			str = _T("TrueHD");
		} else if (subtype == MEDIASUBTYPE_DTS) {
			str = _T("DTS");
		} else if (subtype == MEDIASUBTYPE_MLP) {
			str = _T("MLP");
		} else if (subtype == MEDIASUBTYPE_PCM_NONE || subtype == MEDIASUBTYPE_PCM_RAW ||
				   subtype == MEDIASUBTYPE_PCM_TWOS || subtype == MEDIASUBTYPE_PCM_SOWT ||
				   subtype == MEDIASUBTYPE_PCM_IN24 || subtype == MEDIASUBTYPE_PCM_IN32 ||
				   subtype == MEDIASUBTYPE_PCM_FL32 || subtype == MEDIASUBTYPE_PCM_FL64) {
			str = _T("QT PCM");
		} else if (subtype == MEDIASUBTYPE_IMA4      ||
				   subtype == MEDIASUBTYPE_ADPCM_SWF ||
				   subtype == MEDIASUBTYPE_IMA_AMV) {
			str = _T("ADPCM");
		} else if (subtype == MEDIASUBTYPE_ALAC) {
			str = _T("ALAC");
		} else if (subtype == MEDIASUBTYPE_ALS) {
			str = _T("ALS");
		} else if (subtype == MEDIASUBTYPE_QDM2) {
			str = _T("QDM2");
		} else if (subtype == MEDIASUBTYPE_RoQA) {
			str += _T("ROQA");
		} else if (subtype == MEDIASUBTYPE_APE) {
			str += _T("APE");
		} else if (subtype == MEDIASUBTYPE_AMR  ||
				   subtype == MEDIASUBTYPE_SAMR ||
				   subtype == MEDIASUBTYPE_SAWB) {
			str = _T("AMR");
		} else if (subtype == MEDIASUBTYPE_OPUS) {
			str += _T("Opus");
		} else if (subtype == MEDIASUBTYPE_BINKA_DCT) {
			str += _T("BINK DCT");
		} else if (subtype == MEDIASUBTYPE_AAC_ADTS) {
			str += _T("AAC");
		} else {
			str.Format(_T("0x%04x"), wFormatTag);
		}
	}

	return str;
}
示例#15
0
CString CMediaTypeEx::GetVideoCodecName(const GUID& subtype, DWORD biCompression)
{
	CString str;

	static CAtlMap<DWORD, CString> names;
	if (names.IsEmpty()) {
		names['WMV1'] = _T("Windows Media Video 7");
		names['WMV2'] = _T("Windows Media Video 8");
		names['WMV3'] = _T("Windows Media Video 9");
		names['DIV3'] = _T("DivX 3");
		names['MP43'] = _T("MSMPEG4v3");
		names['MP42'] = _T("MSMPEG4v2");
		names['MP41'] = _T("MSMPEG4v1");
		names['DX30'] = _T("DivX 3");
		names['DX50'] = _T("DivX 5");
		names['DIVX'] = _T("DivX 6");
		names['XVID'] = _T("Xvid");
		names['MP4V'] = _T("MPEG4 Video");
		names['AVC1'] = _T("MPEG4 Video (H264)");
		names['H264'] = _T("MPEG4 Video (H264)");
		names['RV10'] = _T("RealVideo 1");
		names['RV20'] = _T("RealVideo 2");
		names['RV30'] = _T("RealVideo 3");
		names['RV40'] = _T("RealVideo 4");
		names['FLV1'] = _T("Flash Video 1");
		names['FLV4'] = _T("Flash Video 4");
		names['VP50'] = _T("On2 VP5");
		names['VP60'] = _T("On2 VP6");
		names['SVQ3'] = _T("SVQ3");
		names['SVQ1'] = _T("SVQ1");
		names['H263'] = _T("H263");
		names['DRAC'] = _T("Dirac");
		names['WVC1'] = _T("VC-1");
		names['THEO'] = _T("Theora");
		names['HVC1'] = _T("HEVC");
		names['HM91'] = _T("HEVC(HM9.1)");
		names['HM10'] = _T("HEVC(HM10)");
		names['HM12'] = _T("HEVC(HM12)");
	}

	if (biCompression) {
		BYTE* b = (BYTE*)&biCompression;

		for (ptrdiff_t i = 0; i < 4; i++)
			if (b[i] >= 'a' && b[i] <= 'z') {
				b[i] = toupper(b[i]);
			}

		if (!names.Lookup(MAKEFOURCC(b[3], b[2], b[1], b[0]), str)) {
			if (subtype == MEDIASUBTYPE_DiracVideo) {
				str = _T("Dirac Video");
			} else if (subtype == MEDIASUBTYPE_apch ||
					   subtype == MEDIASUBTYPE_apcn ||
					   subtype == MEDIASUBTYPE_apcs ||
					   subtype == MEDIASUBTYPE_apco ||
					   subtype == MEDIASUBTYPE_ap4h) {
				str.Format(_T("ProRes Video (%4.4hs)"), &biCompression);
			} else if (biCompression < 256) {
				str.Format(_T("%u"), biCompression);
			} else {
				str.Format(_T("%4.4hs"), &biCompression);
			}
		}
	} else {
		if (subtype == MEDIASUBTYPE_RGB32)
			str = _T("RGB32");
		else if (subtype == MEDIASUBTYPE_RGB24)
			str = _T("RGB24");
		else if (subtype == MEDIASUBTYPE_RGB555)
			str = _T("RGB555");
		else if (subtype == MEDIASUBTYPE_RGB565)
			str = _T("RGB565");
        else if (subtype == MEDIASUBTYPE_ARGB32)
            str = _T("ARGB32");
	}

	return str;
}
示例#16
0
int _tmain(int argc, _TCHAR* argv[])
{
	FT_Library pLibrary = NULL;
					
	//CString strFolder = _T("\\\\mediaserver\\Exchange\\Korshul\\Fonts");
	CString strFolder = _T("X:\\AVS\\Sources\\TeamlabOffice\\trunk\\ServerComponents\\DesktopEditor\\freetype_names\\FontsDictionaryFiles");
	CWinFontList* m_pList = NULL;

	if (!FT_Init_FreeType( &pLibrary ))
	{
		if (_T("") == strFolder)
			m_pList = new CWinFontList(pLibrary);
		else
			m_pList = new CWinFontList(pLibrary, strFolder);

		FT_Done_FreeType( pLibrary );
	}

	CString strFontDictionaryPath = _T("X:\\AVS\\Sources\\TeamlabOffice\\trunk\\ServerComponents\\DesktopEditor\\freetype_names\\FontMaps\\FontDictionary.h");

	int nCount = m_pList->GetFonts()->GetLength();

	// теперь строим массив всех шрифтов по имени
	CAtlMap<CString, CFontInfoJS> mapFonts;
	CAtlMap<CString, CFontInfoJS> mapFontsUnicodes;
	CAtlArray<CString> arrFonts;
	CAtlArray<CString> arrFontsUnicodes;

	int nError = 0;

	CAtlMap<CString, BOOL> mapMainAscii;
	for (int i = 0; i < nCount; ++i)
	{
		CWinFontInfo* pInfo = (CWinFontInfo*)m_pList->GetByIndex(i);
		CString strPath = (CString)pInfo->m_wsFontPath;
		CString strName = (CString)pInfo->m_wsFontName;

		LONG lFontIndex = 0;
		LONG lFaceIndex = 0;

		//CAtlMap<CString, LONG>::CPair* pPairFontFiles = mapFontFiles.Lookup(strPath);
		//lFontIndex = pPairFontFiles->m_value;
		lFontIndex = (LONG)i;

		if (pInfo->m_lIndex >= 0)
			lFaceIndex = pInfo->m_lIndex;

		mapMainAscii.SetAt(pInfo->m_wsFontName, TRUE);

		CAtlMap<CString, CFontInfoJS>::CPair* pPair = mapFonts.Lookup(pInfo->m_wsFontName);
		if (NULL != pPair)
		{
			pPair->m_value.m_sName = pInfo->m_wsFontName;

			if (pInfo->m_bBold && pInfo->m_bItalic)
			{
				if (-1 != pPair->m_value.m_lIndexBI)
					nError++;

				pPair->m_value.m_lIndexBI = lFontIndex;
				pPair->m_value.m_lFaceIndexBI = lFaceIndex;

				pPair->m_value.namesBI.RemoveAll();
				pPair->m_value.namesBI.Copy(pInfo->names);
			}
			else if (pInfo->m_bBold)
			{
				if (-1 != pPair->m_value.m_lIndexB)
					nError++;

				pPair->m_value.m_lIndexB = lFontIndex;
				pPair->m_value.m_lFaceIndexB = lFaceIndex;

				pPair->m_value.namesB.RemoveAll();
				pPair->m_value.namesB.Copy(pInfo->names);
			}
			else if (pInfo->m_bItalic)
			{
				if (-1 != pPair->m_value.m_lIndexI)
					nError++;

				pPair->m_value.m_lIndexI = lFontIndex;
				pPair->m_value.m_lFaceIndexI = lFaceIndex;

				pPair->m_value.namesI.RemoveAll();
				pPair->m_value.namesI.Copy(pInfo->names);
			}
			else
			{
				if (-1 != pPair->m_value.m_lIndexR)
					nError++;

				pPair->m_value.m_lIndexR = lFontIndex;
				pPair->m_value.m_lFaceIndexR = lFaceIndex;

				pPair->m_value.namesR.RemoveAll();
				pPair->m_value.namesR.Copy(pInfo->names);
			}
		}
		else
		{
			CFontInfoJS fontInfo;

			fontInfo.m_sName = pInfo->m_wsFontName;

			if (pInfo->m_bBold && pInfo->m_bItalic)
			{
				fontInfo.m_lIndexBI = lFontIndex;
				fontInfo.m_lFaceIndexBI = lFaceIndex;

				fontInfo.namesBI.RemoveAll();
				fontInfo.namesBI.Copy(pInfo->names);
			}
			else if (pInfo->m_bBold)
			{
				fontInfo.m_lIndexB = lFontIndex;
				fontInfo.m_lFaceIndexB = lFaceIndex;

				fontInfo.namesB.RemoveAll();
				fontInfo.namesB.Copy(pInfo->names);
			}
			else if (pInfo->m_bItalic)
			{
				fontInfo.m_lIndexI = lFontIndex;
				fontInfo.m_lFaceIndexI = lFaceIndex;

				fontInfo.namesI.RemoveAll();
				fontInfo.namesI.Copy(pInfo->names);
			}
			else
			{
				fontInfo.m_lIndexR = lFontIndex;
				fontInfo.m_lFaceIndexR = lFaceIndex;

				fontInfo.namesR.RemoveAll();
				fontInfo.namesR.Copy(pInfo->names);
			}

			mapFonts.SetAt(fontInfo.m_sName, fontInfo);
			arrFonts.Add(fontInfo.m_sName);
		}
	}

	// additional names
	for (int i = 0; i < nCount; ++i)
	{
		CWinFontInfo* pInfo = (CWinFontInfo*)m_pList->GetByIndex(i);
		CString strPath = (CString)pInfo->m_wsFontPath;
		CString strName = (CString)pInfo->m_wsFontName;

		LONG lFontIndex = 0;
		LONG lFaceIndex = 0;

		//CAtlMap<CString, LONG>::CPair* pPairFontFiles = mapFontFiles.Lookup(strPath);
		//lFontIndex = pPairFontFiles->m_value;
		lFontIndex = (LONG)i;

		if (pInfo->m_lIndex >= 0)
			lFaceIndex = pInfo->m_lIndex;

		int nNamesAdditional = pInfo->names.GetCount();
		for (int j = 0; j < nNamesAdditional; ++j)
		{
			CString strNameA = pInfo->names[j];

			CAtlMap<CString, BOOL>::CPair* pPairMain = mapMainAscii.Lookup(strNameA);
			if (NULL != pPairMain)
				continue;

			WCHAR* pBufferA = strNameA.GetBuffer();
			int len = strNameA.GetLength();
			
			CAtlMap<CString, CFontInfoJS>* pMap = &mapFonts;
			CAtlArray<CString>* pArrFonts = &arrFonts;

			for (int k = 0; k < len; ++k)
			{
				if (pBufferA[k] > 255)
				{
					pMap = &mapFontsUnicodes;
					pArrFonts = &arrFontsUnicodes;
					break;
				}
			}
			
			CAtlMap<CString, CFontInfoJS>::CPair* pPair = pMap->Lookup(strNameA);
			if (NULL != pPair)
			{
				pPair->m_value.m_sName = strNameA;

				if (pInfo->m_bBold && pInfo->m_bItalic)
				{
					if (-1 != pPair->m_value.m_lIndexBI)
						nError++;

					pPair->m_value.m_lIndexBI = lFontIndex;
					pPair->m_value.m_lFaceIndexBI = lFaceIndex;

					pPair->m_value.namesBI.RemoveAll();
					pPair->m_value.namesBI.Copy(pInfo->names);
				}
				else if (pInfo->m_bBold)
				{
					if (-1 != pPair->m_value.m_lIndexB)
						nError++;

					pPair->m_value.m_lIndexB = lFontIndex;
					pPair->m_value.m_lFaceIndexB = lFaceIndex;

					pPair->m_value.namesB.RemoveAll();
					pPair->m_value.namesB.Copy(pInfo->names);
				}
				else if (pInfo->m_bItalic)
				{
					if (-1 != pPair->m_value.m_lIndexI)
						nError++;

					pPair->m_value.m_lIndexI = lFontIndex;
					pPair->m_value.m_lFaceIndexI = lFaceIndex;

					pPair->m_value.namesI.RemoveAll();
					pPair->m_value.namesI.Copy(pInfo->names);
				}
				else
				{
					if (-1 != pPair->m_value.m_lIndexR)
						nError++;

					pPair->m_value.m_lIndexR = lFontIndex;
					pPair->m_value.m_lFaceIndexR = lFaceIndex;

					pPair->m_value.namesR.RemoveAll();
					pPair->m_value.namesR.Copy(pInfo->names);
				}
			}
			else
			{
				CFontInfoJS fontInfo;

				fontInfo.m_sName = strNameA;

				if (pInfo->m_bBold && pInfo->m_bItalic)
				{
					fontInfo.m_lIndexBI = lFontIndex;
					fontInfo.m_lFaceIndexBI = lFaceIndex;

					fontInfo.namesBI.RemoveAll();
					fontInfo.namesBI.Copy(pInfo->names);
				}
				else if (pInfo->m_bBold)
				{
					fontInfo.m_lIndexB = lFontIndex;
					fontInfo.m_lFaceIndexB = lFaceIndex;

					fontInfo.namesB.RemoveAll();
					fontInfo.namesB.Copy(pInfo->names);
				}
				else if (pInfo->m_bItalic)
				{
					fontInfo.m_lIndexI = lFontIndex;
					fontInfo.m_lFaceIndexI = lFaceIndex;

					fontInfo.namesI.RemoveAll();
					fontInfo.namesI.Copy(pInfo->names);
				}
				else
				{
					fontInfo.m_lIndexR = lFontIndex;
					fontInfo.m_lFaceIndexR = lFaceIndex;

					fontInfo.namesR.RemoveAll();
					fontInfo.namesR.Copy(pInfo->names);
				}

				pMap->SetAt(fontInfo.m_sName, fontInfo);
				pArrFonts->Add(fontInfo.m_sName);
			}
		}
	}
	// -------------------------------------------

	// теперь сортируем шрифты по имени ----------
	size_t nCountFonts = arrFonts.GetCount();
	for (size_t i = 0; i < nCountFonts; ++i)
	{
		for (size_t j = i + 1; j < nCountFonts; ++j)
		{
			if (arrFonts[i] > arrFonts[j])
			{
				CString temp = arrFonts[i];
				arrFonts[i] = arrFonts[j];
				arrFonts[j] = temp;
			}
		}
	}

	size_t nCountFontsU = arrFontsUnicodes.GetCount();
	for (size_t i = 0; i < nCountFontsU; ++i)
	{
		for (size_t j = i + 1; j < nCountFontsU; ++j)
		{
			if (arrFontsUnicodes[i] > arrFontsUnicodes[j])
			{
				CString temp = arrFontsUnicodes[i];
				arrFontsUnicodes[i] = arrFontsUnicodes[j];
				arrFontsUnicodes[j] = temp;
			}
		}
	}

#if 0
	CFile oFile;
	oFile.CreateFile(_T("c:\\fonts.txt"));

	BYTE bom[3];
	bom[0] = 0xEF;
	bom[1] = 0xBB;
	bom[2] = 0xBF;
	oFile.WriteFile((void*)&bom, 3);

	CString strInfos = _T("");
	
	for (int index = 0; index < nCountFonts; ++index)
	{
		const CAtlMap<CString, CFontInfoJS>::CPair* pPair = mapFonts.Lookup(arrFonts[index]);

		CString strFontInfo = pPair->m_value.m_sName + _T(": [");

		for (size_t i = 0; i < pPair->m_value.namesR.GetCount(); ++i)
		{
			strFontInfo += pPair->m_value.namesR[i];
			strFontInfo += _T(",");
		}
		strFontInfo += _T(";");

		for (size_t i = 0; i < pPair->m_value.namesI.GetCount(); ++i)
		{
			strFontInfo += pPair->m_value.namesI[i];
			strFontInfo += _T(",");
		}
		strFontInfo += _T(";");

		for (size_t i = 0; i < pPair->m_value.namesB.GetCount(); ++i)
		{
			strFontInfo += pPair->m_value.namesB[i];
			strFontInfo += _T(",");
		}
		strFontInfo += _T(";");

		for (size_t i = 0; i < pPair->m_value.namesBI.GetCount(); ++i)
		{
			strFontInfo += pPair->m_value.namesBI[i];
			strFontInfo += _T(",");
		}
		
		strFontInfo += _T("]\n");

		strInfos += strFontInfo;
	}

	oFile.WriteStringUTF8(strInfos);

	oFile.CloseFile();
#endif

	CFile oFileW;
	oFileW.CreateFile(strFontDictionaryPath);

	BYTE bom[3];
	bom[0] = 0xEF;
	bom[1] = 0xBB;
	bom[2] = 0xBF;
	oFileW.WriteFile((void*)&bom, 3);

	CString strAll = _T("");

	CString strConstant1 = _T("#ifndef _FONT_DICTIONARY_H\n\n\
typedef struct FD_FontMapRec_\n\
{\n\
	const char*		m_name;\n\
\n\
	int				m_index_r;\n\
	int				m_index_i;\n\
	int				m_index_b;\n\
	int				m_index_bi;\n\
} FD_FontMapRec;\n\n\
typedef struct FD_FontMapRecW_\n\
{\n\
	const wchar_t*	m_name;\n\
\n\
	int				m_index_r;\n\
	int				m_index_i;\n\
	int				m_index_b;\n\
	int				m_index_bi;\n\
} FD_FontMapRecW;\n\n");

	strAll += strConstant1;

	int nAsciiNamesCount = (int)arrFonts.GetCount();
	CString sAsciiNames = _T("");
	sAsciiNames.Format(_T("#define FONTS_DICT_ASCII_NAMES_COUNT %d\n"), nAsciiNamesCount);
	sAsciiNames += _T("static const FD_FontMapRec FD_Ascii_Names[FONTS_DICT_ASCII_NAMES_COUNT] = \n{\n");

	for (int k = 0; k < nAsciiNamesCount; ++k)
	{
		CAtlMap<CString, CFontInfoJS>::CPair* pPair = mapFonts.Lookup(arrFonts[k]);

		sAsciiNames += _T("\t{ \"");
		sAsciiNames += pPair->m_value.m_sName;
		sAsciiNames += _T("\", ");

		CString strP = _T("");

		if (k != (nAsciiNamesCount - 1))
		{
			strP.Format(_T("%d, %d, %d, %d },\n"), pPair->m_value.m_lIndexR,
				pPair->m_value.m_lIndexI, pPair->m_value.m_lIndexB, pPair->m_value.m_lIndexBI);
		}
		else
		{
			strP.Format(_T("%d, %d, %d, %d }\n"), pPair->m_value.m_lIndexR,
				pPair->m_value.m_lIndexI, pPair->m_value.m_lIndexB, pPair->m_value.m_lIndexBI);
		}

		sAsciiNames += strP;
	}

	sAsciiNames += _T("};\n\n");

	strAll += sAsciiNames;

	int _offsets[256];
	for (int t = 0; t < 256; ++t)
		_offsets[t] = -1;

	int nCurChar = -1;
	for (int k = 0; k < nAsciiNamesCount; ++k)
	{
		int nChar = (int)arrFonts[k].GetAt(0);
		nChar = max(0, min(nChar, 255));

		if (nChar != nCurChar)
		{
			_offsets[nChar] = k;
		}
		nCurChar = nChar;
	}

	CString strAsciiOffsets = _T("static const int FD_Ascii_Names_Offsets[256] =\n{\n");

	for (int k = 0; k < 256; ++k)
	{
		CString sMem = _T("");
		sMem.Format(_T("%d"), _offsets[k]);

		while (sMem.GetLength() < 4)
			sMem = (_T(" ") + sMem);
		
		if (0 == k % 32)
			sMem = _T("\t") + sMem;

		if (k != 255)
			sMem += _T(",");
		
		if (0 == (k + 1) % 32)
			sMem += _T("\n");

		strAsciiOffsets += sMem;
	}

	strAsciiOffsets += _T("};\n\n");

	strAll += strAsciiOffsets;

	int nUnicodeNamesCount = (int)arrFontsUnicodes.GetCount();
	CString sUnicodeNames = _T("");
	sUnicodeNames.Format(_T("#define FONTS_DICT_UNICODE_NAMES_COUNT %d\n"), nUnicodeNamesCount);
	sUnicodeNames += _T("static const FD_FontMapRecW FD_Unicode_Names[FONTS_DICT_UNICODE_NAMES_COUNT] = \n{\n");

	for (int k = 0; k < nUnicodeNamesCount; ++k)
	{
		CAtlMap<CString, CFontInfoJS>::CPair* pPair = mapFontsUnicodes.Lookup(arrFontsUnicodes[k]);

		sUnicodeNames += _T("\t{ L\"");
		sUnicodeNames += pPair->m_value.m_sName;
		sUnicodeNames += _T("\", ");

		CString strP = _T("");

		if (k != (nAsciiNamesCount - 1))
		{
			strP.Format(_T("%d, %d, %d, %d },\n"), pPair->m_value.m_lIndexR,
				pPair->m_value.m_lIndexI, pPair->m_value.m_lIndexB, pPair->m_value.m_lIndexBI);
		}
		else
		{
			strP.Format(_T("%d, %d, %d, %d }\n"), pPair->m_value.m_lIndexR,
				pPair->m_value.m_lIndexI, pPair->m_value.m_lIndexB, pPair->m_value.m_lIndexBI);
		}

		sUnicodeNames += strP;
	}

	sUnicodeNames += _T("};\n\n");

	strAll += sUnicodeNames;

	CString strConstant2 = _T("typedef struct FD_Font_Rec\n\
{\n\
	const char*		m_name;\n\
\n\
	long			m_lIndex;\n\
\n\
	unsigned char	m_bBold;\n\
	unsigned char	m_bItalic;\n\
	unsigned char	m_bIsFixed;\n\
\n\
	unsigned char	m_aPanose[10];\n\
	unsigned long	m_ulUnicodeRange1;\n\
	unsigned long	m_ulUnicodeRange2;\n\
	unsigned long	m_ulUnicodeRange3;\n\
	unsigned long	m_ulUnicodeRange4;\n\
\n\
	unsigned long	m_ulCodePageRange1;\n\
	unsigned long	m_ulCodePageRange2;\n\
\n\
	unsigned short	m_usWeigth;\n\
	unsigned short	m_usWidth;\n\
\n\
	short			m_sFamilyClass;\n\
	unsigned char	m_eFontFormat;\n\
\n\
	short			m_shAvgCharWidth;\n\
	short			m_shAscent;\n\
	short			m_shDescent;\n\
	short			m_shLineGap;\n\
	short			m_shXHeight;\n\
	short			m_shCapHeight;\n\
} FD_Font;\n\n");

	strAll += strConstant2;

	int nAllFontsCount = (int)nCount;
	CString sAllFontsNames = _T("");
	sAllFontsNames.Format(_T("#define FONTS_DICT_ASCII_FONTS_COUNT %d\n"), nCount);
	sAllFontsNames += _T("static const FD_Font FD_Ascii_Files[FONTS_DICT_ASCII_FONTS_COUNT] = \n{\n");

	for (int k = 0; k < nCount; ++k)
	{
		CWinFontInfo* pInfo = (CWinFontInfo*)m_pList->GetByIndex(k);

#if 1
		// CORRECT!!!
		if (pInfo->m_wsFontName == _T("Monotype Sorts"))
			pInfo->m_aPanose[0] = 5;
#endif
		
		CString sMem = _T("");
		sMem.Format(_T("\", %d, %d, %d, %d, { %d, %d, %d, %d, %d, %d, %d, %d, %d, %d }, %u, %u, %u, %u, %u, %u, %u, %u, %d, %d, %d, %d, %d, %d, %d, %d }"),
			pInfo->m_lIndex,
			pInfo->m_bBold,
			pInfo->m_bItalic,
			pInfo->m_bIsFixed,
			pInfo->m_aPanose[0],
			pInfo->m_aPanose[1],
			pInfo->m_aPanose[2],
			pInfo->m_aPanose[3],
			pInfo->m_aPanose[4],
			pInfo->m_aPanose[5],
			pInfo->m_aPanose[6],
			pInfo->m_aPanose[7],
			pInfo->m_aPanose[8],
			pInfo->m_aPanose[9],
			pInfo->m_ulUnicodeRange1,
			pInfo->m_ulUnicodeRange2,
			pInfo->m_ulUnicodeRange3,
			pInfo->m_ulUnicodeRange4,
			pInfo->m_ulCodePageRange1,
			pInfo->m_ulCodePageRange2,
			pInfo->m_usWeigth,
			pInfo->m_usWidth,
			pInfo->m_sFamilyClass,
			pInfo->m_eFontFormat,
			pInfo->m_shAvgCharWidth,
			pInfo->m_shAscent,
			pInfo->m_shDescent,
			pInfo->m_shLineGap,
			pInfo->m_shXHeight,
			pInfo->m_shCapHeight);

		sAllFontsNames += _T("\t{\"");
		sAllFontsNames += pInfo->m_wsFontName;
		sAllFontsNames += sMem;
		if (k != (nCount - 1))
			sAllFontsNames += _T(",\n");
		else
			sAllFontsNames += _T("\n");
	}

	sAllFontsNames += _T("};\n\n");

	strAll += sAllFontsNames;

	CString strError = _T("");
	strError.Format(_T("// error : %d\n\n"), nError);
	strAll += strError;

	strAll += _T("#endif /* _FONT_DICTIONARY_H */");

	oFileW.WriteStringUTF8(strAll);
	oFileW.CloseFile();

	if (NULL != m_pList)
		delete m_pList;

	return 0;
}
示例#17
0
STDMETHODIMP CPreviewPlugin::Preview2(/* [in] */ BSTR sSource, /* [in] */ BSTR sTarget)
{
	m_bCancel = false;

	if ( ! sSource || ! sTarget )
		return E_POINTER;

	if ( ! m_pSite )
		return E_UNEXPECTED;

	// Get extension
	LPCTSTR szTargetExt = PathFindExtension( sTarget );
	if ( ! *szTargetExt )
		return E_INVALIDARG;

	// Load data
	CAtlMap< CString, CString > oData;
	LoadData( oData );

	// Find command line for extension
	for ( POSITION pos = oData.GetStartPosition(); pos; )
	{
		CString sExt, sCommand;
		oData.GetNextAssoc( pos, sExt, sCommand );

		TCHAR szKey[ MAX_PATH ] = { _T(".") };
		for ( LPCTSTR str = sExt.GetBuffer(); ; ++str )
		{
			LPTSTR space = StrChr( str, _T(' ') );
			if ( space )
				*space = _T('\0');
			lstrcpyn( szKey + 1, str, _countof( szKey ) - 1 );
			StrTrim( szKey + 1, _T(". /t") );

			if ( lstrcmpi( szKey, szTargetExt ) == 0 )
			{
				// Found!
				sExt.ReleaseBuffer();

				if ( sCommand.Replace( _T("%1"), sSource ) == 0 ||
					 sCommand.Replace( _T("%2"), sTarget ) == 0 )
					 // Invalid command line
					 return E_INVALIDARG;

				m_pSite->SetProgressMessage( CComBSTR( sCommand ) );
				m_pSite->SetProgressRange( 100 );

				if ( ! Execute( sCommand ) )
					// Can't launch external program
					return E_FAIL;

				m_pSite->SetProgressPosition( 100 );

				// Check for resulting file
				if ( GetFileAttributes( sTarget ) == INVALID_FILE_ATTRIBUTES )
					// No file (user canceled it)
					return S_FALSE;

				// Run it
				m_pSite->QueueDeleteFile( sTarget );
				if ( ! m_bCancel )
					m_pSite->ExecuteFile( sTarget );

				return S_OK;
			}

			if ( ! space )
			{
				sExt.ReleaseBuffer();
				break;
			}
			str = space;
		}
	}

	return E_INVALIDARG;
}