Esempio n. 1
0
bool CSupSubFile::Open(CString fn, CString SubName)
{
	CFile f;
	if (!f.Open(fn, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone)) {
		return false;
	}

	WORD sync = (WORD)ReadByte(&f, 2);
	if (sync != 'PG') {
		return false;
	}

	m_fname		= fn;
	m_Subname	= SubName;
	m_pSub		= DNew CHdmvSub();

	m_Thread = AfxBeginThread(::ThreadProc, static_cast<LPVOID>(this));

	return (m_Thread) ? true : false;
}
CRenderedHdmvSubtitle::CRenderedHdmvSubtitle(CCritSec* pLock, SUBTITLE_TYPE nType, const CString& name, LCID lcid)
	: CSubPicProviderImpl(pLock)
	, m_name(name)
	, m_lcid(lcid)
	, m_nType(nType)
{
	switch (m_nType) {
		case ST_DVB :
			m_pSub = DNew CDVBSub();
			if (name.IsEmpty() || (name == _T("Unknown"))) m_name = _T("DVB");
			break;
		case ST_HDMV :
			m_pSub = DNew CHdmvSub();
			if (name.IsEmpty() || (name == _T("Unknown"))) m_name = _T("PGS");
			break;
		default :
			ASSERT (FALSE);
			m_pSub = NULL;
	}
	m_rtStart = 0;
}
bool SupFileSubtitleProvider::Open(CString fn, CString subName /*= _T("")*/)
{
    if (!m_fname.IsEmpty())
    {
        return false;
    }

    CFile f;
    if (!f.Open(fn, CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone)) {
        return false;
    }

    WORD sync = 0;
    sync = (WORD)ReadByte(&f, 2);
    if (sync != 'PG') {
        return false;
    }

    m_fname   = fn;
    m_subname = subName;
    if (m_subname.IsEmpty())
    {
        m_subname = fn.Left(fn.ReverseFind('.'));
        m_subname = m_subname.Mid(m_subname.ReverseFind('/')+1);
        m_subname = m_subname.Mid(m_subname.ReverseFind('.')+1);
    }

    {
        CAutoLock cAutoLock(&m_csCritSec);

        delete m_pSub;
        delete m_helper;
        m_pSub    = DEBUG_NEW CHdmvSub();
        m_helper  = DEBUG_NEW HdmvSubtitleProviderImpl(m_pSub);
    }

    return CAMThread::Create()==TRUE;
}
//
// HdmvSubtitleProvider
//
HdmvSubtitleProvider::HdmvSubtitleProvider( CCritSec* pLock, SUBTITLE_TYPE nType
    , const CString& name, LCID lcid )
    : CUnknown(NAME("HdmvSubtitleProvider"), NULL)
    , m_name(name), m_lcid(lcid)
{
    switch (nType) {
    case ST_DVB :
        m_pSub = DEBUG_NEW CDVBSub();
        if (name.IsEmpty() || (name == _T("Unknown"))) m_name = "DVB Embedded Subtitle";
        m_helper = DEBUG_NEW HdmvSubtitleProviderImpl(m_pSub);
        break;
    case ST_HDMV :
        m_pSub = DEBUG_NEW CHdmvSub();
        if (name.IsEmpty() || (name == _T("Unknown"))) m_name = "HDMV Embedded Subtitle";
        m_helper = DEBUG_NEW HdmvSubtitleProviderImpl(m_pSub);
        break;
    default :
        ASSERT (FALSE);
        m_pSub = NULL;
        m_helper = NULL;
    }
    m_rtStart = 0;
}
CRenderedHdmvSubtitle::CRenderedHdmvSubtitle(CCritSec* pLock, SUBTITLE_TYPE nType, const CString& name, LCID lcid)
    : CSubPicProviderImpl(pLock)
    , m_name(name)
    , m_lcid(lcid)
{
    switch (nType) {
        case ST_DVB:
            m_pSub = DEBUG_NEW CDVBSub();
            if (name.IsEmpty() || (name == _T("Unknown"))) {
                m_name = "DVB Embedded Subtitle";
            }
            break;
        case ST_HDMV:
            m_pSub = DEBUG_NEW CHdmvSub();
            if (name.IsEmpty() || (name == _T("Unknown"))) {
                m_name = "HDMV Embedded Subtitle";
            }
            break;
        default:
            ASSERT(FALSE);
            m_pSub = nullptr;
    }
    m_rtStart = 0;
}