diff options
author | XhmikosR <xhmikosr@users.sourceforge.net> | 2010-09-16 03:57:00 +0400 |
---|---|---|
committer | XhmikosR <xhmikosr@users.sourceforge.net> | 2010-09-16 03:57:00 +0400 |
commit | 79ae0d130122ff7fe4b0ef8f07154466a252703d (patch) | |
tree | 8f45f046255ba8d28ffa0e4296833fc2bfb5daca /src/filters/transform | |
parent | 88174d2d1720fc8341ee21f0967e7aa726a2c3e8 (diff) |
merge changes from trunk r2562-r2565
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/branches/legacy@2566 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/filters/transform')
6 files changed, 69 insertions, 4 deletions
diff --git a/src/filters/transform/Mpeg2DecFilter/IMpeg2DecFilter.h b/src/filters/transform/Mpeg2DecFilter/IMpeg2DecFilter.h index 0f0718a0d..a36174c94 100644 --- a/src/filters/transform/Mpeg2DecFilter/IMpeg2DecFilter.h +++ b/src/filters/transform/Mpeg2DecFilter/IMpeg2DecFilter.h @@ -51,5 +51,8 @@ IMpeg2DecFilter : public IUnknown STDMETHOD(EnableInterlaced(bool fEnable)) = 0;
STDMETHOD_(bool, IsInterlacedEnabled()) = 0;
+
+ STDMETHOD(EnableReadARFromStream(bool fEnable)) = 0;
+ STDMETHOD_(bool, IsReadARFromStreamEnabled()) = 0;
};
diff --git a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.cpp b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.cpp index 296674a12..336655725 100644 --- a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.cpp +++ b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.cpp @@ -224,6 +224,7 @@ CMpeg2DecFilter::CMpeg2DecFilter(LPUNKNOWN lpunk, HRESULT* phr) EnableForcedSubtitles(true);
EnablePlanarYUV(true);
EnableInterlaced(false);
+ EnableReadARFromStream(true);
CRegKey key;
if(ERROR_SUCCESS == key.Open(HKEY_CURRENT_USER, _T("Software\\Gabest\\Filters\\MPEG Video Decoder"), KEY_READ))
@@ -237,10 +238,13 @@ CMpeg2DecFilter::CMpeg2DecFilter(LPUNKNOWN lpunk, HRESULT* phr) if(ERROR_SUCCESS == key.QueryDWORDValue(_T("ForcedSubtitles"), dw)) EnableForcedSubtitles(!!dw);
if(ERROR_SUCCESS == key.QueryDWORDValue(_T("PlanarYUV"), dw)) EnablePlanarYUV(!!dw);
if(ERROR_SUCCESS == key.QueryDWORDValue(_T("Interlaced"), dw)) EnableInterlaced(!!dw);
+ if(ERROR_SUCCESS == key.QueryDWORDValue(_T("ReadARFromStream"), dw)) EnableReadARFromStream(!!dw);
}
m_rate.Rate = 10000;
m_rate.StartTime = 0;
+
+ m_par.SetSize(1,1);
}
CMpeg2DecFilter::~CMpeg2DecFilter()
@@ -256,6 +260,7 @@ CMpeg2DecFilter::~CMpeg2DecFilter() key.SetDWORDValue(_T("ForcedSubtitles"), m_fForcedSubs);
key.SetDWORDValue(_T("PlanarYUV"), m_fPlanarYUV);
key.SetDWORDValue(_T("Interlaced"), m_fInterlaced);
+ key.SetDWORDValue(_T("ReadARFromStream"), m_bReadARFromStream);
}
delete m_pSubpicInput;
@@ -532,6 +537,7 @@ HRESULT CMpeg2DecFilter::Transform(IMediaSample* pIn) //
SetDeinterlaceMethod();
+ UpdateAspectRatio();
hr = DeliverFast();
if(hr != S_OK)
@@ -556,6 +562,32 @@ bool CMpeg2DecFilter::IsVideoInterlaced() return IsInterlacedEnabled();
}
+inline int LNKO(int a, int b)
+{
+ if(a == 0 || b == 0)
+ return(1);
+ while(a != b)
+ {
+ if(a < b) b -= a;
+ else if(a > b) a -= b;
+ }
+ return(a);
+}
+
+void CMpeg2DecFilter::UpdateAspectRatio()
+{
+ if(m_bReadARFromStream && (m_par.cx != m_dec->m_info.m_sequence->pixel_width || m_par.cy != m_dec->m_info.m_sequence->pixel_height))
+ {
+ m_par.cx = m_dec->m_info.m_sequence->pixel_width;
+ m_par.cy = m_dec->m_info.m_sequence->pixel_height;
+ CSize dar(m_dec->m_info.m_sequence->picture_width * m_par.cx,
+ m_dec->m_info.m_sequence->picture_height * m_par.cy);
+ int lnko = LNKO(dar.cx, dar.cy);
+ if(lnko > 1) dar.cx /= lnko, dar.cy /= lnko;
+ SetAspect(dar);
+ }
+}
+
HRESULT CMpeg2DecFilter::DeliverFast()
{
HRESULT hr;
@@ -1193,6 +1225,19 @@ STDMETHODIMP_(bool) CMpeg2DecFilter::IsInterlacedEnabled() return m_fInterlaced;
}
+STDMETHODIMP CMpeg2DecFilter::EnableReadARFromStream(bool fEnable)
+{
+ CAutoLock cAutoLock(&m_csProps);
+ m_bReadARFromStream = fEnable;
+ return S_OK;
+}
+
+STDMETHODIMP_(bool) CMpeg2DecFilter::IsReadARFromStreamEnabled()
+{
+ CAutoLock cAutoLock(&m_csProps);
+ return m_bReadARFromStream;
+}
+
//
// CMpeg2DecInputPin
//
diff --git a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.h b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.h index f92c6e481..829ec6fa3 100644 --- a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.h +++ b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.h @@ -46,6 +46,7 @@ CMpeg2DecFilter REFERENCE_TIME m_AvgTimePerFrame;
bool m_fWaitForKeyFrame;
bool m_fInitializedBuffer;
+ CSize m_par;
struct framebuf
{
@@ -94,6 +95,7 @@ protected: void InputTypeChanged();
HRESULT Transform(IMediaSample* pIn);
bool IsVideoInterlaced();
+ void UpdateAspectRatio();
public:
CMpeg2DecFilter(LPUNKNOWN lpunk, HRESULT* phr);
@@ -132,6 +134,7 @@ protected: bool m_fForcedSubs;
bool m_fPlanarYUV;
bool m_fInterlaced;
+ bool m_bReadARFromStream;
static void CalcBrCont(BYTE* YTbl, float bright, float cont);
static void CalcHueSat(BYTE* UTbl, BYTE* VTbl, float hue, float sat);
@@ -168,6 +171,9 @@ public: STDMETHODIMP EnableInterlaced(bool fEnable);
STDMETHODIMP_(bool) IsInterlacedEnabled();
+
+ STDMETHODIMP EnableReadARFromStream(bool fEnable);
+ STDMETHODIMP_(bool) IsReadARFromStreamEnabled();
};
class CMpeg2DecInputPin : public CDeCSSInputPin
diff --git a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.cpp b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.cpp index cb148a846..c8de3e7ea 100644 --- a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.cpp +++ b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.cpp @@ -63,6 +63,7 @@ bool CMpeg2DecSettingsWnd::OnConnect(const CInterfaceList<IUnknown, &IID_IUnknow m_forcedsubs = m_pM2DF->IsForcedSubtitlesEnabled();
m_planaryuv = m_pM2DF->IsPlanarYUVEnabled();
m_interlaced = m_pM2DF->IsInterlacedEnabled();
+ m_readARFromStream = m_pM2DF->IsReadARFromStreamEnabled();
return true;
}
@@ -90,6 +91,10 @@ bool CMpeg2DecSettingsWnd::OnActivate() m_forcedsubs_check.SetCheck(m_forcedsubs ? BST_CHECKED : BST_UNCHECKED);
p.y += m_fontheight + 5;
+ m_readARFromStream_check.Create(ResStr(IDS_MPEG2DECSETTINGSWND_3), dwStyle|BS_AUTOCHECKBOX, CRect(p, CSize(300, m_fontheight)), this, IDC_PP_CHECK4);
+ m_readARFromStream_check.SetCheck(m_readARFromStream ? BST_CHECKED : BST_UNCHECKED);
+ p.y += m_fontheight + 5;
+
p.y += 10;
m_ditype_static.Create(ResStr(IDS_MPEG2_DEINTERLACING), dwStyle, CRect(p, CSize(70, m_fontheight)), this);
@@ -160,6 +165,7 @@ void CMpeg2DecSettingsWnd::OnDeactivate() m_planaryuv = !!IsDlgButtonChecked(m_planaryuv_check.GetDlgCtrlID());
m_interlaced = !!IsDlgButtonChecked(m_interlaced_check.GetDlgCtrlID());
m_forcedsubs = !!IsDlgButtonChecked(m_forcedsubs_check.GetDlgCtrlID());
+ m_readARFromStream = !!IsDlgButtonChecked(m_readARFromStream_check.GetDlgCtrlID());
}
bool CMpeg2DecSettingsWnd::OnApply()
@@ -176,6 +182,7 @@ bool CMpeg2DecSettingsWnd::OnApply() m_pM2DF->EnableForcedSubtitles(m_forcedsubs);
m_pM2DF->EnablePlanarYUV(m_planaryuv);
m_pM2DF->EnableInterlaced(m_interlaced);
+ m_pM2DF->EnableReadARFromStream(m_readARFromStream);
}
return true;
diff --git a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.h b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.h index cea28794c..a358fdb8a 100644 --- a/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.h +++ b/src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.h @@ -35,6 +35,7 @@ CMpeg2DecSettingsWnd : public CInternalPropertyPageWnd bool m_planaryuv;
bool m_interlaced;
bool m_forcedsubs;
+ bool m_readARFromStream;
enum
{
@@ -46,6 +47,7 @@ CMpeg2DecSettingsWnd : public CInternalPropertyPageWnd IDC_PP_CHECK1,
IDC_PP_CHECK2,
IDC_PP_CHECK3,
+ IDC_PP_CHECK4,
IDC_PP_BUTTON1,
IDC_PP_BUTTON2,
};
@@ -60,6 +62,7 @@ CMpeg2DecSettingsWnd : public CInternalPropertyPageWnd CButton m_planaryuv_check;
CButton m_interlaced_check;
CButton m_forcedsubs_check;
+ CButton m_readARFromStream_check;
CStatic m_note_static;
void UpdateProcampValues();
diff --git a/src/filters/transform/Mpeg2DecFilter/resource.h b/src/filters/transform/Mpeg2DecFilter/resource.h index 5050ae86a..a8354b8b7 100644 --- a/src/filters/transform/Mpeg2DecFilter/resource.h +++ b/src/filters/transform/Mpeg2DecFilter/resource.h @@ -9,10 +9,11 @@ #define IDS_MPEG2_BRIGHTNESS 33148
#define IDS_MPEG2_RESET 33149
#define IDS_MPEG2DECSETTINGSWND_7 33150
-#define IDS_MPEG2_CONTRAST 33157
-#define IDS_MPEG2_HUE 33158
-#define IDS_MPEG2_SATURATION 33159
-#define IDS_MPEG2DECSETTINGSWND_8 33160
+#define IDS_MPEG2_CONTRAST 33157
+#define IDS_MPEG2_HUE 33158
+#define IDS_MPEG2_SATURATION 33159
+#define IDS_MPEG2DECSETTINGSWND_8 33160
+#define IDS_MPEG2DECSETTINGSWND_3 41108
// Next default values for new objects
//
|