Example #1
0
	CFontInfoJS& operator=(const CFontInfoJS& oSrc)
	{
		m_sName			= oSrc.m_sName;

		m_lIndexR	= oSrc.m_lIndexR;
		m_lIndexI	= oSrc.m_lIndexI;
		m_lIndexB	= oSrc.m_lIndexB;
		m_lIndexBI	= oSrc.m_lIndexBI;

		m_lFaceIndexR	= oSrc.m_lFaceIndexR;
		m_lFaceIndexI	= oSrc.m_lFaceIndexI;
		m_lFaceIndexB	= oSrc.m_lFaceIndexB;
		m_lFaceIndexBI	= oSrc.m_lFaceIndexBI;

		namesR.RemoveAll();
		namesR.Copy(oSrc.namesR);

		namesI.RemoveAll();
		namesI.Copy(oSrc.namesI);

		namesB.RemoveAll();
		namesB.Copy(oSrc.namesB);

		namesBI.RemoveAll();
		namesBI.Copy(oSrc.namesBI);

		return *this;
	}
Example #2
0
bool CDSMSplitterFile::Read(__int64 len, CAtlArray<SyncPoint>& sps)
{
	SyncPoint sp = {0, 0};
	sps.RemoveAll();

	while (len > 0) {
		bool fSign = !!BitRead(1);
		int iTimeStamp = (int)BitRead(3);
		int iFilePos = (int)BitRead(3);
		BitRead(1); // reserved

		sp.rt += (REFERENCE_TIME)BitRead(iTimeStamp<<3) * (fSign ? -1 : 1);
		sp.fp += BitRead(iFilePos<<3);
		sps.Add(sp);

		len -= 1 + iTimeStamp + iFilePos;
	}

	if (len != 0) {
		sps.RemoveAll();
		return false;
	}

	// TODO: sort sps

	return true;
}
Example #3
0
int CBkSafeMsgBox2::ParseMsgLine(CString strMsg, CAtlArray<CString>& arrMsg)
{
	int nRet = -1;
	if (TRUE == strMsg.IsEmpty())
		return nRet;
	arrMsg.RemoveAll();

	strMsg.Replace(_T("\\n"), _T("\n"));

	int nIndex = -1;
	strMsg += L"\n";
	CString strTmp(L""), msg = strMsg;;
	nIndex = msg.Find(L"\n");

	while (-1 != nIndex)
	{
		strTmp = msg.Left(nIndex);
		if (strTmp.GetLength())
			arrMsg.Add(strTmp);
		msg = msg.Mid(nIndex+1);

		nIndex = msg.Find(L"\n");
	} 

	return arrMsg.GetCount();
}
Example #4
0
void CPPageExternalFilters::SetupMajorTypes(CAtlArray<GUID>& guids)
{
    guids.RemoveAll();
    guids.Add(MEDIATYPE_NULL);
    guids.Add(MEDIATYPE_Video);
    guids.Add(MEDIATYPE_Audio);
    guids.Add(MEDIATYPE_Text);
    guids.Add(MEDIATYPE_Midi);
    guids.Add(MEDIATYPE_Stream);
    guids.Add(MEDIATYPE_Interleaved);
    guids.Add(MEDIATYPE_File);
    guids.Add(MEDIATYPE_ScriptCommand);
    guids.Add(MEDIATYPE_AUXLine21Data);
    guids.Add(MEDIATYPE_VBI);
    guids.Add(MEDIATYPE_Timecode);
    guids.Add(MEDIATYPE_LMRT);
    guids.Add(MEDIATYPE_URL_STREAM);
    guids.Add(MEDIATYPE_MPEG1SystemStream);
    guids.Add(MEDIATYPE_AnalogVideo);
    guids.Add(MEDIATYPE_AnalogAudio);
    guids.Add(MEDIATYPE_MPEG2_PACK);
    guids.Add(MEDIATYPE_MPEG2_PES);
    guids.Add(MEDIATYPE_MPEG2_SECTIONS);
    guids.Add(MEDIATYPE_DVD_ENCRYPTED_PACK);
    guids.Add(MEDIATYPE_DVD_NAVIGATION);
}
Example #5
0
POSITION CPlaylist::Shuffle()
{
    static INT_PTR idx = 0;
    static INT_PTR count = 0;
    static CAtlArray<plsort_t> a;

    ASSERT(GetCount() > 2);
    // insert or remove items in playlist, or index out of bounds then recalculate
    if ((count != GetCount()) || (idx >= GetCount())) {
        a.RemoveAll();
        idx = 0;
        a.SetCount(count = GetCount());

        POSITION pos = GetHeadPosition();
        for (INT_PTR i = 0; pos; i++, GetNext(pos)) {
            a[i].pos = pos;    // initialize position array
        }

        //Use Fisher-Yates shuffle algorithm
        srand((unsigned)time(nullptr));
        for (INT_PTR i = 0; i < (count - 1); i++) {
            INT_PTR r = i + (rand() % (count - i));
            POSITION temp = a[i].pos;
            a[i].pos = a[r].pos;
            a[r].pos = temp;
        }
    }

    return a[idx++].pos;
}
Example #6
0
void SlimItem::GetPaths(CAtlArray<CString>& itemPaths) const
{
    itemPaths.RemoveAll();
    for (size_t i = 0; i < m_itemPaths.GetCount(); i++)
    {
        itemPaths.Add(m_itemPaths[i]);
    }
}
// Frees the service PnP IDs allocated by EumerateContactsServices
void FreeServicePnPIDs(CAtlArray<PWSTR>& ServicePnpIDs)
{
    size_t cServicePnPIDs = ServicePnpIDs.GetCount();

    for (size_t i=0; i<cServicePnPIDs; i++)
    {
        CoTaskMemFree(ServicePnpIDs[i]);        
    }
    ServicePnpIDs.RemoveAll();
}
Example #8
0
void CUIHandlerSystemSlim::OnCommand(UINT uNotifyCode, int nID, CWindow wndCtl)
{
    BOOL bRet = FALSE;
    
    if (nID >= DEF_SLIM_MENU_ID_BASE && nID <= DEF_SLIM_MENU_ID_BASE_END)
    {
        SlimItem& slimItem = m_slimData.GetItem(m_nCurrentIndex);
        CAtlArray<CString> vPaths;
        int index = nID - 1000;

        slimItem.GetPaths(vPaths);

        if (slimItem.Id() == 0) //壁纸 暂时先这样写
        {
            //        ExpandEnvironmentStrings(L"%Systemroot%\\Web\\Wallpaper\\", temp, MAX_PATH * 2);
            TCHAR szLocate[MAX_PATH] = { 0 };
            _tcscpy_s(szLocate, MAX_PATH, vPaths[0]);
            if (KGetWinVersion() != WINVERSION_XP)
            {
                PathRemoveFileSpec(szLocate);   
            }
            PathRemoveFileSpec(szLocate);

            vPaths.RemoveAll();
            vPaths.Add(szLocate);
        }
        else if (slimItem.Id() == 1 || slimItem.Id() == 3 || slimItem.Id() == 2|| slimItem.Id() == 4)
        {
            CString strPath = vPaths[0];
            TCHAR szLocate[MAX_PATH] = { 0 };

            _tcscpy_s(szLocate, MAX_PATH, strPath);

            PathRemoveFileSpec(szLocate);

            vPaths.RemoveAll();
            vPaths.Add(szLocate);
        }

        slimhelper::LocateFile(vPaths[index]);
    }
    SetMsgHandled(FALSE);
}
Example #9
0
int CutString(const CString InStr, CAtlArray<CString>& OutStrings, LPCTSTR Separators)
{
	int Pos = 0;
	int StartPos = 0;
	bool bQuotas = false;
	OutStrings.RemoveAll();

	while (Pos < InStr.GetLength())
	{
		TCHAR ch = InStr[Pos];
		if (ch == _T('\"'))
		{
			if (InStr[Pos + 1]  == _T('\"'))
			{
				Pos += 2;
				continue;
			}
			else
			{
				bQuotas = !bQuotas;
			}
		}
		if (!bQuotas && _tcsrchr(Separators, ch))
		{
			//нашли сепаратор
			int WordLen = Pos - StartPos;
			if (WordLen)
			{
				CString NewWord = InStr.Mid(StartPos, WordLen);
				OutStrings.Add(NewWord);
			}
			StartPos = Pos + 1;
		}
		Pos++;
	}
	int WordLen = Pos - StartPos;
	if (WordLen)
	{
		CString NewWord = InStr.Mid(StartPos, WordLen);
		OutStrings.Add(NewWord);
	}
	else
	{
		OutStrings.Add(CString());
	}
	return (int)OutStrings.GetCount();
}
Example #10
0
HRESULT CReportFileDB::GetUnRescanList( CAtlArray<CReportFile>& rfArray )
{
    HRESULT hr = S_OK;
    CComPtr<Skylark::ISQLiteComResultSet3>  piRtm;
    CReportFile rfile;

    if ( NULL == m_piSlDB )
    {
        hr = E_NOINTERFACE;
        goto Exit0;
    }

    hr = m_piSlDB->ExecuteQuery( REPORT_FILE_LOAD_RESCANLIST, &piRtm );
    if ( FAILED( hr ) )
    {
        CRunTimeLog::WriteLog(WINMOD_LLVL_DEBUG, L"[GetUnRescanList] query rfl.db failed %08x", hr );
        goto Exit0;
    }

    rfArray.RemoveAll();

    while( !piRtm->IsEof() )
    {
        rfile.m_strFilePath = piRtm->GetAsString( 0 );
        rfile.m_nFileSize = piRtm->GetInt( 1 );
        rfile.m_nReportState = piRtm->GetInt( 2 );
        rfile.m_nTrack = piRtm->GetInt( 3 );
        rfile.SetCreateTime( piRtm->GetInt64( 4 ) );
        rfile.SetCommitTime( piRtm->GetInt64( 5 ) );
        rfile.SetReportTime( piRtm->GetInt64( 6 ) );
        rfile.m_nRescanState = piRtm->GetInt( 7 );

        if ( FILE_TRACK_FILE & rfile.m_nTrack)
        {
            rfArray.Add( rfile );
        }

        piRtm->NextRow();
    }
Exit0:
    return hr;
}
Example #11
0
int CCommon::ParsexmlCmdLine(LPCTSTR pszCmdLine, CAtlArray<CString>& arrStr)
{
	int nRet = -1;
	if (NULL == pszCmdLine)
		return nRet;

	arrStr.RemoveAll();
	LPTSTR _pszCmdLine = StrDupW(pszCmdLine);
	if (NULL == _pszCmdLine)
		return nRet;

	LPTSTR pValue = _pszCmdLine;

	LPTSTR pos = NULL;
	LPTSTR NewPos = NULL;
	NewPos = StrStr(_pszCmdLine, TEXT("\","));
	while(NULL != NewPos && _tcslen(NewPos) > 2)
	{
		pos = NewPos+2;
		*NewPos = 0;
		_pszCmdLine += 1;
		arrStr.Add((_pszCmdLine));
		_pszCmdLine = pos;
		NewPos = StrStr(_pszCmdLine, TEXT("\","));
	}
	if (NULL != _pszCmdLine && _tcslen(_pszCmdLine) > 1)
	{
		_pszCmdLine += 1;
		pos = StrRChr(_pszCmdLine, NULL, TEXT('\"'));
		if (NULL != pos)
			*pos = 0;
		arrStr.Add(_pszCmdLine);
	}

	nRet = 0;
	if (NULL != pValue)
	{
		LocalFree(pValue);
		pValue = NULL;
	}
	return nRet;
}
Example #12
0
void CPPageExternalFilters::SetupSubTypes(CAtlArray<GUID>& guids)
{
    guids.RemoveAll();
    guids.Add(MEDIASUBTYPE_None);
    guids.Add(MEDIASUBTYPE_CLPL);
    guids.Add(MEDIASUBTYPE_YUYV);
    guids.Add(MEDIASUBTYPE_IYUV);
    guids.Add(MEDIASUBTYPE_YVU9);
    guids.Add(MEDIASUBTYPE_Y411);
    guids.Add(MEDIASUBTYPE_Y41P);
    guids.Add(MEDIASUBTYPE_YUY2);
    guids.Add(MEDIASUBTYPE_YVYU);
    guids.Add(MEDIASUBTYPE_UYVY);
    guids.Add(MEDIASUBTYPE_Y211);
    guids.Add(MEDIASUBTYPE_CLJR);
    guids.Add(MEDIASUBTYPE_IF09);
    guids.Add(MEDIASUBTYPE_CPLA);
    guids.Add(MEDIASUBTYPE_MJPG);
    guids.Add(MEDIASUBTYPE_MJPA);
    guids.Add(MEDIASUBTYPE_MJPB);
    guids.Add(MEDIASUBTYPE_TVMJ);
    guids.Add(MEDIASUBTYPE_WAKE);
    guids.Add(MEDIASUBTYPE_CFCC);
    guids.Add(MEDIASUBTYPE_IJPG);
    guids.Add(MEDIASUBTYPE_Plum);
    guids.Add(MEDIASUBTYPE_DVCS);
    guids.Add(MEDIASUBTYPE_DVSD);
    guids.Add(MEDIASUBTYPE_MDVF);
    guids.Add(MEDIASUBTYPE_RGB1);
    guids.Add(MEDIASUBTYPE_RGB4);
    guids.Add(MEDIASUBTYPE_RGB8);
    guids.Add(MEDIASUBTYPE_RGB565);
    guids.Add(MEDIASUBTYPE_RGB555);
    guids.Add(MEDIASUBTYPE_RGB24);
    guids.Add(MEDIASUBTYPE_RGB32);
    guids.Add(MEDIASUBTYPE_ARGB1555);
    guids.Add(MEDIASUBTYPE_ARGB4444);
    guids.Add(MEDIASUBTYPE_ARGB32);
    guids.Add(MEDIASUBTYPE_A2R10G10B10);
    guids.Add(MEDIASUBTYPE_A2B10G10R10);
    guids.Add(MEDIASUBTYPE_AYUV);
    guids.Add(MEDIASUBTYPE_AI44);
    guids.Add(MEDIASUBTYPE_IA44);
    guids.Add(MEDIASUBTYPE_RGB32_D3D_DX7_RT);
    guids.Add(MEDIASUBTYPE_RGB16_D3D_DX7_RT);
    guids.Add(MEDIASUBTYPE_ARGB32_D3D_DX7_RT);
    guids.Add(MEDIASUBTYPE_ARGB4444_D3D_DX7_RT);
    guids.Add(MEDIASUBTYPE_ARGB1555_D3D_DX7_RT);
    guids.Add(MEDIASUBTYPE_RGB32_D3D_DX9_RT);
    guids.Add(MEDIASUBTYPE_RGB16_D3D_DX9_RT);
    guids.Add(MEDIASUBTYPE_ARGB32_D3D_DX9_RT);
    guids.Add(MEDIASUBTYPE_ARGB4444_D3D_DX9_RT);
    guids.Add(MEDIASUBTYPE_ARGB1555_D3D_DX9_RT);
    guids.Add(MEDIASUBTYPE_YV12);
    guids.Add(MEDIASUBTYPE_NV12);
    guids.Add(MEDIASUBTYPE_IMC1);
    guids.Add(MEDIASUBTYPE_IMC2);
    guids.Add(MEDIASUBTYPE_IMC3);
    guids.Add(MEDIASUBTYPE_IMC4);
    guids.Add(MEDIASUBTYPE_S340);
    guids.Add(MEDIASUBTYPE_S342);
    guids.Add(MEDIASUBTYPE_Overlay);
    guids.Add(MEDIASUBTYPE_MPEG1Packet);
    guids.Add(MEDIASUBTYPE_MPEG1Payload);
    guids.Add(MEDIASUBTYPE_MPEG1AudioPayload);
    guids.Add(MEDIASUBTYPE_MPEG1System);
    guids.Add(MEDIASUBTYPE_MPEG1VideoCD);
    guids.Add(MEDIASUBTYPE_MPEG1Video);
    guids.Add(MEDIASUBTYPE_MPEG1Audio);
    guids.Add(MEDIASUBTYPE_Avi);
    guids.Add(MEDIASUBTYPE_Asf);
    guids.Add(MEDIASUBTYPE_QTMovie);
    guids.Add(MEDIASUBTYPE_QTRpza);
    guids.Add(MEDIASUBTYPE_QTSmc);
    guids.Add(MEDIASUBTYPE_QTRle);
    guids.Add(MEDIASUBTYPE_QTJpeg);
    guids.Add(MEDIASUBTYPE_PCMAudio_Obsolete);
    guids.Add(MEDIASUBTYPE_PCM);
    guids.Add(MEDIASUBTYPE_WAVE);
    guids.Add(MEDIASUBTYPE_AU);
    guids.Add(MEDIASUBTYPE_AIFF);
    guids.Add(MEDIASUBTYPE_dvsd);
    guids.Add(MEDIASUBTYPE_dvhd);
    guids.Add(MEDIASUBTYPE_dvsl);
    guids.Add(MEDIASUBTYPE_dv25);
    guids.Add(MEDIASUBTYPE_dv50);
    guids.Add(MEDIASUBTYPE_dvh1);
    guids.Add(MEDIASUBTYPE_Line21_BytePair);
    guids.Add(MEDIASUBTYPE_Line21_GOPPacket);
    guids.Add(MEDIASUBTYPE_Line21_VBIRawData);
    guids.Add(MEDIASUBTYPE_TELETEXT);
    guids.Add(MEDIASUBTYPE_DRM_Audio);
    guids.Add(MEDIASUBTYPE_IEEE_FLOAT);
    guids.Add(MEDIASUBTYPE_DOLBY_AC3_SPDIF);
    guids.Add(MEDIASUBTYPE_RAW_SPORT);
    guids.Add(MEDIASUBTYPE_SPDIF_TAG_241h);
    guids.Add(MEDIASUBTYPE_DssVideo);
    guids.Add(MEDIASUBTYPE_DssAudio);
    guids.Add(MEDIASUBTYPE_VPVideo);
    guids.Add(MEDIASUBTYPE_VPVBI);
    guids.Add(MEDIASUBTYPE_ATSC_SI);
    guids.Add(MEDIASUBTYPE_DVB_SI);
    guids.Add(MEDIASUBTYPE_MPEG2DATA);
    guids.Add(MEDIASUBTYPE_MPEG2_VIDEO);
    guids.Add(MEDIASUBTYPE_MPEG2_PROGRAM);
    guids.Add(MEDIASUBTYPE_MPEG2_TRANSPORT);
    guids.Add(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE);
    guids.Add(MEDIASUBTYPE_MPEG2_AUDIO);
    guids.Add(MEDIASUBTYPE_DOLBY_AC3);
    guids.Add(MEDIASUBTYPE_DVD_SUBPICTURE);
    guids.Add(MEDIASUBTYPE_DVD_LPCM_AUDIO);
    guids.Add(MEDIASUBTYPE_DTS);
    guids.Add(MEDIASUBTYPE_SDDS);
    guids.Add(MEDIASUBTYPE_DVD_NAVIGATION_PCI);
    guids.Add(MEDIASUBTYPE_DVD_NAVIGATION_DSI);
    guids.Add(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER);
    guids.Add(MEDIASUBTYPE_I420);
    guids.Add(MEDIASUBTYPE_WAVE_DOLBY_AC3);
    guids.Add(MEDIASUBTYPE_WAVE_DTS);
}
Example #13
0
void CBBrowserCaps::Clear(void)
{
	s_bcDatas.RemoveAll();
	s_bcDatasExt.RemoveAll();
}
HRESULT NoTypeProperties( CAtlArray<std::pair<const CComBSTR, const CComVariant> >& props )
{
	props.RemoveAll();
	return S_OK;
}
Example #15
0
void GetSubFileNames(CString fn, CAtlArray<CString>& paths, CString load_ext_list, CAtlArray<SubFile>& ret)
{
    XY_LOG_INFO(XY_LOG_VAR_2_STR(fn.GetString())<<XY_LOG_VAR_2_STR(paths.GetCount())<<XY_LOG_VAR_2_STR(load_ext_list.GetString()));

    ret.RemoveAll();

    fn.Replace('\\', '/');

    bool fWeb = false;
    {
        //int i = fn.Find(_T("://"));
        int i = fn.Find(_T("http://"));
        if(i > 0) {fn = _T("http") + fn.Mid(i); fWeb = true;}
    }

    int	l = fn.GetLength(), l2 = l;
    l2 = fn.ReverseFind('.');
    l = fn.ReverseFind('/') + 1;
    if(l2 < l) l2 = l;

    CString orgpath = fn.Left(l);
    CString title = fn.Mid(l, l2-l);
    CString filename = title + _T(".nooneexpectsthespanishinquisition");
    
    ExtSupport ext_support;
    if (!ext_support.init(load_ext_list))
    {
        XY_LOG_INFO(_T("unexpected error"));
        return;
    }

    if(!fWeb)
    {
        WIN32_FIND_DATA wfd;
        for(size_t k = 0; k < paths.GetCount(); k++)
        {
            CString path = paths[k];
            path.Replace('\\', '/');

            l = path.GetLength();
            if(l > 0 && path[l-1] != '/') path += '/';

            if(path.Find(':') == -1 && path.Find(_T("\\\\")) != 0) path = orgpath + path;

            path.Replace(_T("/./"), _T("/"));
            path.Replace('/', '\\');

            CAtlList<CString> sl;

            bool fEmpty = true;

            HANDLE hFile = FindFirstFile(path + title + _T(".*"), &wfd);
            if(hFile != INVALID_HANDLE_VALUE)
            {
                do
                {
                    if(filename.CompareNoCase(wfd.cFileName) != 0) 
                    {
                        fEmpty = false;
                        sl.AddTail(wfd.cFileName);
                    }
                }
                while(FindNextFile(hFile, &wfd));

                FindClose(hFile);
            }

            if(fEmpty) continue;

            POSITION pos = sl.GetHeadPosition();
            while(pos)
            {
                const CString& fn = sl.GetNext(pos);
                int l = fn.ReverseFind('.');
                CString ext = fn.Mid(l+1).MakeLower();
                int ext_order = ext_support.ext_support_order(ext);
                if (ext_order>-1)
                {
                    SubFile f;
                    f.full_file_name = path + fn;

                    int l2 = fn.Find('.');
                    if (l2==l)
                    {
                        f.extra_name = "";
                    }
                    else
                    {
                        f.extra_name = fn.Mid(l2+1, l-l2-1);
                    }

                    f.ext_order = ext_order;
                    f.path_order = k;
                    ret.Add(f);
                }
            }
        }
    }
    else if(l > 7)
    {
        CWebTextFile wtf; // :)
        if(wtf.Open(orgpath + title + WEBSUBEXT))
        {
            CString fn;
            while(wtf.ReadString(fn) && fn.Find(_T("://")) >= 0)
            {
                SubFile f;
                f.full_file_name = fn;
                f.extra_name = fn.Mid(fn.ReverseFind('/')+1);
                f.ext_order = MAXINT32;
                f.path_order = MAXINT32;
                ret.Add(f);
            }
        }
    }

    // sort files, this way the user can define the order (movie.00.English.srt, movie.01.Hungarian.srt, etc)

    qsort(ret.GetData(), ret.GetCount(), sizeof(SubFile), SubFileCompare);
}
Example #16
0
void CPlayerSubresyncBar::UpdatePreview()
{
	if (m_mode == VOBSUB || m_mode == TEXTSUB) {
		if (0/*m_fUnlink*/) {
			for (int i = 0, j = (int)m_sts.GetCount(); i < j; i++) {
				bool fStartMod, fEndMod, fStartAdj, fEndAdj;
				GetCheck(i, fStartMod, fEndMod, fStartAdj, fEndAdj);
				m_sts[i].start = (fStartMod || fStartAdj) ? m_subtimes[i].newstart : m_subtimes[i].orgstart;
				m_sts[i].end = (fEndMod || fEndAdj) ? m_subtimes[i].newend : m_subtimes[i].orgend;
			}
		} else {
			CAtlArray<int> schk;

			for (int i = 0, j = (int)m_sts.GetCount(); i < j;) {
				schk.RemoveAll();

				int start = i, end;

				for (end = i; end < j; end++) {
					int data = (int)m_list.GetItemData(end);
					if ((data & TSEP) && end > i) {
						break;
					}
					if (data & (TSMOD | TSADJ)) {
						schk.Add(end);
					}
				}

				if (schk.IsEmpty()) {
					for (; start < end; start++) {
						m_sts[start].start = m_subtimes[start].orgstart;
						m_sts[start].end = m_subtimes[start].orgend;
					}
				} else if (schk.GetCount() == 1) {
					int k = schk[0];
					int dt = m_subtimes[k].newstart - m_subtimes[k].orgstart;
					for (; start < end; start++) {
						m_sts[start].start = m_subtimes[start].orgstart + dt;
						m_sts[start].end = (m_list.GetItemData(start)&TEMOD)
										   ? m_subtimes[start].newend
										   : (m_subtimes[start].orgend + dt);
					}
				} else if (schk.GetCount() >= 2) {
					int i0 = 0;
					int i1 = 0;
					int ti0 = 0;
					int ds = 0;
					double m = 0;

					int k, l;
					for (k = 0, l = (int)schk.GetCount() - 1; k < l; k++) {
						i0 = schk[k];
						i1 = schk[k + 1];

						ti0 = m_subtimes[i0].orgstart;
						ds = m_subtimes[i1].orgstart - ti0;

						if (ds == 0) {
							SetSTS0(start, i1, ti0);
						} else {
							m = double(m_subtimes[i1].newstart - m_subtimes[i0].newstart) / ds;
							SetSTS1(start, i1, ti0, m, i0);
						}

					}

					ASSERT(k > 0);
					if (ds == 0) {
						SetSTS0(start, end, ti0);
					} else {
						SetSTS1(start, end, ti0, m, i0);
					}
				}

				i = end;
			}
		}

		m_sts.CreateSegments();

		for (int i = 0, j = (int)m_sts.GetCount(); i < j; i++) {
			TCHAR buff[32];
			FormatTime(i, buff, _countof(buff), 2, false);
			m_list.SetItemText(i, COL_PREVSTART, buff);
			FormatTime(i, buff, _countof(buff), 2, true);
			m_list.SetItemText(i, COL_PREVEND, buff);
		}

		if (IsWindowVisible()) {
			SaveSubtitle();
		}
	}
}
void CPlayerSubresyncBar::UpdatePreview()
{
    if (m_mode == VOBSUB || m_mode == TEXTSUB) {
        if (0/*m_bUnlink*/) {
            for (int i = 0, j = (int)m_sts.GetCount(); i < j; i++) {
                bool bStartMod, bEndMod, bStartAdj, bEndAdj;
                GetCheck(i, bStartMod, bEndMod, bStartAdj, bEndAdj);
                m_sts[i].start = (bStartMod || bStartAdj) ? m_subtimes[i].newStart : m_subtimes[i].orgStart;
                m_sts[i].end = (bEndMod || bEndAdj) ? m_subtimes[i].newEnd : m_subtimes[i].orgEnd;
            }
        } else {
            CAtlArray<int> schk;

            for (int i = 0, j = (int)m_sts.GetCount(); i < j;) {
                schk.RemoveAll();

                int start = i, end;

                for (end = i; end < j; end++) {
                    int data = m_displayData[end].flags;
                    if ((data & TSEP) && end > i) {
                        break;
                    }
                    if (data & (TSMOD | TSADJ)) {
                        schk.Add(end);
                    }
                }

                if (schk.IsEmpty()) {
                    for (; start < end; start++) {
                        m_sts[start].start = m_subtimes[start].orgStart;
                        m_sts[start].end = m_subtimes[start].orgEnd;
                    }
                } else if (schk.GetCount() == 1) {
                    int k = schk[0];
                    int dt = m_subtimes[k].newStart - m_subtimes[k].orgStart;
                    for (; start < end; start++) {
                        m_sts[start].start = m_subtimes[start].orgStart + dt;
                        m_sts[start].end = (m_displayData[start].flags & TEMOD)
                                           ? m_subtimes[start].newEnd
                                           : (m_subtimes[start].orgEnd + dt);
                    }
                } else if (schk.GetCount() >= 2) {
                    int i0 = 0;
                    int i1 = 0;
                    int ti0 = 0;
                    int ds = 0;
                    double m = 0;

                    int k, l;
                    for (k = 0, l = (int)schk.GetCount() - 1; k < l; k++) {
                        i0 = schk[k];
                        i1 = schk[k + 1];

                        ti0 = m_subtimes[i0].orgStart;
                        ds = m_subtimes[i1].orgStart - ti0;

                        if (ds == 0) {
                            SetSTS0(start, i1, ti0);
                        } else {
                            m = double(m_subtimes[i1].newStart - m_subtimes[i0].newStart) / ds;
                            SetSTS1(start, i1, ti0, m, i0);
                        }

                    }

                    ASSERT(k > 0);
                    if (ds == 0) {
                        SetSTS0(start, end, ti0);
                    } else {
                        SetSTS1(start, end, ti0, m, i0);
                    }
                }

                i = end;
            }
        }

        m_sts.CreateSegments();

        for (size_t i = 0, j = m_sts.GetCount(); i < j; i++) {
            m_displayData[i].tPrevStart = m_sts[i].start;
            m_displayData[i].tPrevEnd = m_sts[i].end;
        }

        m_list.Invalidate();

        if (IsWindowVisible()) {
            SaveSubtitle();
        }
    }
}
DWORD WINAPI DlgThread(LPVOID lpParameter)
{
	UINT i;
    int ret = 0;
	CPhotoResizeDlg waitDlg;
	CThreadInfo * threadInfo = (CThreadInfo *)lpParameter;
	CAtlArray<ResizeThread *> taskArray;

	::CoInitialize(NULL);

    if(IDOK == waitDlg.DoModal(threadInfo->m_hwnd))
	{
		CPath pathSource;
		CPath pathDirectory;
		CString strTitle, strCancel;
		size_t numFiles = threadInfo->m_aFiles.GetCount();
		CThreadPool<CWorker> m_threadPool;
		LONG interlockedCounter = 0;
		LONG interlockedShutdown = 0;
		ResizeThread *resizeThread;
		ImageHelperParam * pImageHelperParam;
		SYSTEM_INFO sysinfo;


		// create the progress dialog
		CComPtr<IProgressDialog> pProgressDialog;		
		pProgressDialog.CoCreateInstance(CLSID_ProgressDialog);			

		if (pProgressDialog != NULL)
		{
			strTitle.LoadString(IDS_RESIZING);
			strCancel.LoadString(IDS_CANCELING);

			pProgressDialog->SetTitle(strTitle.GetBuffer());
			// 0x020 is PROGDLG_MARQUEEPROGRESS, vc2008 couldn't find the definition
			// prog dlg doesn't list file names anymore since work is overlapped.
			pProgressDialog->StartProgressDialog(threadInfo->m_hwnd, NULL, 0x00000020, NULL);
			
			pProgressDialog->SetCancelMsg(strCancel.GetBuffer(), NULL);			
			pProgressDialog->SetLine(1, strTitle.GetBuffer(), FALSE, NULL);						
		}

		pImageHelperParam = new ImageHelperParam();
		pImageHelperParam->m_size = waitDlg.GetSize();
		pImageHelperParam->m_width = waitDlg.GetWidth();
		pImageHelperParam->m_height = waitDlg.GetHeight();
		pImageHelperParam->m_smallerOnly = waitDlg.IsSmallerOnly();
		pImageHelperParam->m_overwriteOriginal = waitDlg.IsOverwriteOriginal();
	
		// get number of cores/cpus on system. 
		// max number of threads is either number of cores or number of files
		GetSystemInfo(&sysinfo);		
		if(numFiles > sysinfo.dwNumberOfProcessors)
		{
			m_threadPool.Initialize((void *)pImageHelperParam, sysinfo.dwNumberOfProcessors);			
		}
		else
		{
			m_threadPool.Initialize((void *)pImageHelperParam, numFiles);
		}	

		// queue tasks to thread pool
		for (i = 0; i < numFiles; i++)
		{		
			pathSource = threadInfo->m_aFiles[i];

			if (CString(threadInfo->m_pathFolder).IsEmpty())
			{
				pathDirectory = pathSource;
				pathDirectory.RemoveFileSpec();
			}	
													
			resizeThread = new ResizeThread(pathSource, pathDirectory, &interlockedCounter, &interlockedShutdown);
			taskArray.Add(resizeThread);
			
			m_threadPool.QueueRequest((CWorker::RequestType)resizeThread);
			
			// increment counter for each task
			InterlockedIncrement(&interlockedCounter);
		}

		// worker threads decrement counter for each task they complete,
		// when the counter reaches zero, we're done.
		while(interlockedCounter > 0)
		{
			if(pProgressDialog != NULL && pProgressDialog->HasUserCancelled())
			{	
				// will cause worker thread to skip the actual resize tasks and just
				// mark themselves as completed.
				InterlockedExchange(&interlockedShutdown, 1);
				// wait for task count to go to zero
				while(interlockedCounter > 0)
				{
					Sleep(50);
				}
				m_threadPool.Shutdown(5 * 1000); // give it 5 seconds to shutdown, but all tasks should be done by now		
				// bug in cthreadpool, will throw an assertion in debug mode if tasks still exist after the timeout
				// http://groups.google.com/group/microsoft.public.vc.atl/browse_thread/thread/c3d77f272fde2816/93b94461766ded0f?lnk=st&amp;q=CThreadPool&amp;rnum=1#93b94461766ded0f
				// so, we don't want any current tasks when the shutdown times out
				// otherwise we could have resource/handle leaks
				// really should implement a thread pool that shuts down properly
				break;
			}
			Sleep(100); // wait a bit
		}				
		
		if (pProgressDialog != NULL)
		{
			pProgressDialog->StopProgressDialog();
			pProgressDialog.Release();
		}

		if(NULL != pImageHelperParam)
		{
			delete pImageHelperParam;
		}

		// delete tasks
		for(i = 0; i < taskArray.GetCount(); i++)
		{
			resizeThread = taskArray[i];
			if(NULL != resizeThread)
			{
				delete resizeThread;
			}
		}
		taskArray.RemoveAll();

		m_threadPool.Release();
	}

	if(NULL != threadInfo)
	{
		delete threadInfo;
		threadInfo = NULL;
	}

	::CoUninitialize();

    return ret;
}
Example #19
0
void GetSubFileNames(CString fn, CAtlArray<CString>& paths, CAtlArray<SubFile>& ret)
{
	ret.RemoveAll();

	int extlistnum = _countof(ext);
	int extsubnum = _countof(ext[0]);

	fn.Replace('\\', '/');

	bool fWeb = false;
	{
		//		int i = fn.Find(_T("://"));
		int i = fn.Find(_T("http://"));
		if (i > 0) {
			fn = _T("http") + fn.Mid(i);
			fWeb = true;
		}
	}

	int	l = fn.GetLength(), l2 = l;
	l2 = fn.ReverseFind('.');
	l = fn.ReverseFind('/') + 1;
	if (l2 < l) {
		l2 = l;
	}

	CString orgpath = fn.Left(l);
	CString title = fn.Mid(l, l2-l);
	CString filename = title + _T(".nooneexpectsthespanishinquisition");

	if (!fWeb) {
		// struct _tfinddata_t file, file2;
		// long hFile, hFile2 = 0;

		WIN32_FIND_DATA wfd, wfd2;
		HANDLE hFile, hFile2;

		for (size_t k = 0; k < paths.GetCount(); k++) {
			CString path = paths[k];
			path.Replace('\\', '/');

			l = path.GetLength();
			if (l > 0 && path[l-1] != '/') {
				path += '/';
			}

			if (path.Find(':') == -1 && path.Find(_T("\\\\")) != 0) {
				path = orgpath + path;
			}

			path.Replace(_T("/./"), _T("/"));
			path.Replace('/', '\\');

			// CAtlList<CString> sl;

			bool fEmpty = true;

			if ((hFile = FindFirstFile(path + title + _T("*"), &wfd)) != INVALID_HANDLE_VALUE) {
				do {
					if (filename.CompareNoCase(wfd.cFileName) != 0) {
						fEmpty = false;
						// sl.AddTail(path + file.name);
					}
				} while (FindNextFile(hFile, &wfd));

				FindClose(hFile);
			}

			// TODO: use 'sl' in the next step to find files (already a nice speedup as it is now...)
			if (fEmpty) {
				continue;
			}

			for (ptrdiff_t j = 0; j < extlistnum; j++) {
				for (ptrdiff_t i = 0; i < extsubnum; i++) {
					if ((hFile = FindFirstFile(path + title + ext[j][i], &wfd)) != INVALID_HANDLE_VALUE) {
						do {
							CString fn = path + wfd.cFileName;

							hFile2 = INVALID_HANDLE_VALUE;

							if (j == 0 || (hFile2 = FindFirstFile(fn.Left(fn.ReverseFind('.')) + _T(".avi"), &wfd2)) == INVALID_HANDLE_VALUE) {
								SubFile f;
								f.fn = fn;
								ret.Add(f);
							}

							if (hFile2 != INVALID_HANDLE_VALUE) {
								FindClose(hFile2);
							}
						} while (FindNextFile(hFile, &wfd));

						FindClose(hFile);
					}
				}
			}
		}
	} else if (l > 7) {
		CWebTextFile wtf; // :)
		if (wtf.Open(orgpath + title + WEBSUBEXT)) {
			CString fn;
			while (wtf.ReadString(fn) && fn.Find(_T("://")) >= 0) {
				SubFile f;
				f.fn = fn;
				ret.Add(f);
			}
		}
	}

	// sort files, this way the user can define the order (movie.00.English.srt, movie.01.Hungarian.srt, etc)

	qsort(ret.GetData(), ret.GetCount(), sizeof(SubFile), SubFileCompare);
}
Example #20
0
HRESULT CHdmvClipInfo::ReadCpiInfo(CAtlArray<SyncPoint>* sps)
{
	sps->RemoveAll();

	CAtlArray<ClpiEpMapEntry> ClpiEpMapList;

	LARGE_INTEGER Pos = {0, 0};
	Pos.QuadPart = Cpi_start_addrress;
	SetFilePointerEx(m_hFile, Pos, NULL, FILE_BEGIN);

	DWORD len = ReadDword();
	if (len == 0) {
		return E_FAIL;
	}

	BYTE* buf = NULL;

	ReadByte();
	BYTE Type = ReadByte() & 0xF;
	DWORD ep_map_pos = Cpi_start_addrress + 4 + 2;
	ReadByte();
	BYTE num_stream_pid = ReadByte();

	DWORD size = num_stream_pid * 12;
	buf = DNew BYTE[size];
	ReadBuffer(buf, size);
	CGolombBuffer gb(buf, size);
	for (int i = 0; i < num_stream_pid; i++) {
		ClpiEpMapEntry em;

		em.pid						= gb.ReadShort();
		gb.BitRead(10);
		em.ep_stream_type			= gb.BitRead(4);
		em.num_ep_coarse			= gb.ReadShort();
		em.num_ep_fine				= gb.BitRead(18);
		em.ep_map_stream_start_addr	= gb.ReadDword() + ep_map_pos;

		em.coarse					= DNew ClpiEpCoarse[em.num_ep_coarse];
		em.fine						= DNew ClpiEpFine[em.num_ep_fine];

		ClpiEpMapList.Add(em);
	}
	delete[] buf;

	for (int i = 0; i < num_stream_pid; i++) {
		ClpiEpMapEntry* em = &ClpiEpMapList[i];

		Pos.QuadPart = em->ep_map_stream_start_addr;
		SetFilePointerEx(m_hFile, Pos, NULL, FILE_BEGIN);
		DWORD fine_start = ReadDword();

		size = em->num_ep_coarse * 8;
		buf = DNew BYTE[size];
		ReadBuffer(buf, size);
		gb.Reset(buf, size);

		for (int j = 0; j < em->num_ep_coarse; j++) {
			em->coarse[j].ref_ep_fine_id	= gb.BitRead(18);
			em->coarse[j].pts_ep			= gb.BitRead(14);
			em->coarse[j].spn_ep			= gb.ReadDword();
		}
		delete[] buf;

		Pos.QuadPart = em->ep_map_stream_start_addr+fine_start;
		SetFilePointerEx(m_hFile, Pos, NULL, FILE_BEGIN);

		size = em->num_ep_fine * 4;
		buf = DNew BYTE[size];
		ReadBuffer(buf, size);
		gb.Reset(buf, size);

		for (int j = 0; j < em->num_ep_fine; j++) {
			em->fine[j].is_angle_change_point	= gb.BitRead(1);
			em->fine[j].i_end_position_offset	= gb.BitRead(3);
			em->fine[j].pts_ep					= gb.BitRead(11);
			em->fine[j].spn_ep					= gb.BitRead(17);
		}
		delete[] buf;
	}

	if (ClpiEpMapList.GetCount() > 0) {
		const ClpiEpMapEntry* entry = &ClpiEpMapList[0];
		for (int i = 0; i < entry->num_ep_coarse; i++) {
			int start, end;

			const ClpiEpCoarse* coarse = &entry->coarse[i];
			start = coarse->ref_ep_fine_id;
			if (i < entry->num_ep_coarse - 1) {
				end = entry->coarse[i+1].ref_ep_fine_id;
			} else {
				end = entry->num_ep_fine;
			}

			for (int j = start; j < end; j++) {
				ClpiEpFine* fine = &entry->fine[j];
				uint64 pts = ((uint64)(coarse->pts_ep & ~0x01) << 18) +
							 ((uint64)fine->pts_ep << 8);
				uint32 spn = (coarse->spn_ep & ~0x1FFFF) + fine->spn_ep;

				SyncPoint sp = {REFERENCE_TIME(20000.0f*pts/90), (__int64)spn * 192};
				sps->Add(sp);
			}
		}
	}

	for (size_t ii = 0; ii < ClpiEpMapList.GetCount(); ii++) {
		delete[] ClpiEpMapList[ii].coarse;
		delete[] ClpiEpMapList[ii].fine;
	}

	ClpiEpMapList.RemoveAll();

	return S_OK;
}
Example #21
0
LRESULT CUIHandlerSystemSlim::OnItemLink(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    int nItem = (int)wParam;
    CAtlArray<CString> vPaths;
    CString strPath;    

    if (nItem < 0 || nItem >= m_slimData.GetCount())
        goto Clear0;

    SlimItem& item = m_slimData.GetItem(nItem);

    m_nCurrentIndex = nItem;

    item.GetPaths(vPaths);

    if (vPaths.GetCount() <= 0)
        goto Clear0;

    if (item.Id() == 0) //壁纸 暂时先这样写
    {
//        ExpandEnvironmentStrings(L"%Systemroot%\\Web\\Wallpaper\\", temp, MAX_PATH * 2);
        TCHAR szLocate[MAX_PATH * 2] = { 0 };
        _tcscpy_s(szLocate, MAX_PATH * 2, vPaths[0]);
        if (KGetWinVersion() == WINVERSION_WIN7)
        {
            PathRemoveFileSpec(szLocate);   
        }
        PathRemoveFileSpec(szLocate);

        vPaths.RemoveAll();
        vPaths.Add(szLocate);
    }
    else if (item.Id() == 1 || item.Id() == 3 || item.Id() == 2 || item.Id() == 4)
    {
        CString strPath = vPaths[0];
        TCHAR szLocate[MAX_PATH * 2] = { 0 };

        _tcscpy_s(szLocate, MAX_PATH * 2, strPath);

        PathRemoveFileSpec(szLocate);

        vPaths.RemoveAll();
        vPaths.Add(szLocate);
    }

    if (vPaths.GetCount() > 0)
    {
        // 弹出目录框
        HMENU hMenu = NULL;
        CPoint pos;

        hMenu = _InitFileContextMenu(vPaths);
        if (!hMenu)
            goto Clear0;

        GetCursorPos(&pos);
        ::TrackPopupMenu(
            hMenu,
            TPM_LEFTALIGN | TPM_RIGHTBUTTON, 
            pos.x, 
            pos.y,
            0,
            m_dlg->m_hWnd,
            NULL
            );

    }
Clear0:
    return 0L;
}