2 * $Id: RenderedHdmvSubtitle.cpp 3650 2011-08-11 12:16:46Z XhmikosR $
4 * (C) 2006-2010 see AUTHORS
6 * This file is part of mplayerc.
8 * Mplayerc is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
13 * Mplayerc is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
27 #include "RenderedHdmvSubtitle.h"
29 CRenderedHdmvSubtitle::CRenderedHdmvSubtitle(CCritSec
* pLock
, SUBTITLE_TYPE nType
, const CString
& name
, LCID lcid
)
30 : CSubPicProviderImpl(pLock
), m_name(name
), m_lcid(lcid
)
34 m_pSub
= DNew
CDVBSub();
35 if (name
.IsEmpty() || (name
== _T("Unknown"))) m_name
= "DVB Embedded Subtitle";
38 m_pSub
= DNew
CHdmvSub();
39 if (name
.IsEmpty() || (name
== _T("Unknown"))) m_name
= "HDMV Embedded Subtitle";
48 CRenderedHdmvSubtitle::~CRenderedHdmvSubtitle(void)
54 STDMETHODIMP
CRenderedHdmvSubtitle::NonDelegatingQueryInterface(REFIID riid
, void** ppv
)
56 CheckPointer(ppv
, E_POINTER
);
63 __super::NonDelegatingQueryInterface(riid
, ppv
);
68 STDMETHODIMP_(POSITION
) CRenderedHdmvSubtitle::GetStartPosition(REFERENCE_TIME rt
, double fps
)
70 CAutoLock
cAutoLock(&m_csCritSec
);
71 return m_pSub
->GetStartPosition(rt
- m_rtStart
, fps
);
74 STDMETHODIMP_(POSITION
) CRenderedHdmvSubtitle::GetNext(POSITION pos
)
76 CAutoLock
cAutoLock(&m_csCritSec
);
77 return m_pSub
->GetNext (pos
);
80 STDMETHODIMP_(REFERENCE_TIME
) CRenderedHdmvSubtitle::GetStart(POSITION pos
, double fps
)
82 CAutoLock
cAutoLock(&m_csCritSec
);
83 return m_pSub
->GetStart(pos
) + m_rtStart
;
86 STDMETHODIMP_(REFERENCE_TIME
) CRenderedHdmvSubtitle::GetStop(POSITION pos
, double fps
)
88 CAutoLock
cAutoLock(&m_csCritSec
);
89 return m_pSub
->GetStop(pos
) + m_rtStart
;
92 STDMETHODIMP_(bool) CRenderedHdmvSubtitle::IsAnimated(POSITION pos
)
97 STDMETHODIMP
CRenderedHdmvSubtitle::Render(SubPicDesc
& spd
, REFERENCE_TIME rt
, double fps
, RECT
& bbox
)
99 CAutoLock
cAutoLock(&m_csCritSec
);
100 m_pSub
->Render (spd
, rt
- m_rtStart
, bbox
);
105 STDMETHODIMP
CRenderedHdmvSubtitle::GetTextureSize (POSITION pos
, SIZE
& MaxTextureSize
, SIZE
& VideoSize
, POINT
& VideoTopLeft
)
107 CAutoLock
cAutoLock(&m_csCritSec
);
108 HRESULT hr
= m_pSub
->GetTextureSize(pos
, MaxTextureSize
, VideoSize
, VideoTopLeft
);
114 STDMETHODIMP
CRenderedHdmvSubtitle::GetClassID(CLSID
* pClassID
)
116 return pClassID
? *pClassID
= __uuidof(this), S_OK
: E_POINTER
;
121 STDMETHODIMP_(int) CRenderedHdmvSubtitle::GetStreamCount()
126 STDMETHODIMP
CRenderedHdmvSubtitle::GetStreamInfo(int iStream
, WCHAR
** ppName
, LCID
* pLCID
)
133 *ppName
= (WCHAR
*)CoTaskMemAlloc((m_name
.GetLength()+1)*sizeof(WCHAR
));
135 return E_OUTOFMEMORY
;
138 wcscpy_s (*ppName
, m_name
.GetLength()+1, CStringW(m_name
));
148 STDMETHODIMP_(int) CRenderedHdmvSubtitle::GetStream()
153 STDMETHODIMP
CRenderedHdmvSubtitle::SetStream(int iStream
)
155 return iStream
== 0 ? S_OK
: E_FAIL
;
158 STDMETHODIMP
CRenderedHdmvSubtitle::Reload()
163 HRESULT
CRenderedHdmvSubtitle::ParseSample (IMediaSample
* pSample
)
165 CAutoLock
cAutoLock(&m_csCritSec
);
168 hr
= m_pSub
->ParseSample (pSample
);
172 HRESULT
CRenderedHdmvSubtitle::NewSegment(REFERENCE_TIME tStart
, REFERENCE_TIME tStop
, double dRate
)
174 CAutoLock
cAutoLock(&m_csCritSec
);