Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXhmikosR <xhmikosr@users.sourceforge.net>2010-09-16 03:57:00 +0400
committerXhmikosR <xhmikosr@users.sourceforge.net>2010-09-16 03:57:00 +0400
commit79ae0d130122ff7fe4b0ef8f07154466a252703d (patch)
tree8f45f046255ba8d28ffa0e4296833fc2bfb5daca /src/filters/transform
parent88174d2d1720fc8341ee21f0967e7aa726a2c3e8 (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')
-rw-r--r--src/filters/transform/Mpeg2DecFilter/IMpeg2DecFilter.h3
-rw-r--r--src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.cpp45
-rw-r--r--src/filters/transform/Mpeg2DecFilter/Mpeg2DecFilter.h6
-rw-r--r--src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.cpp7
-rw-r--r--src/filters/transform/Mpeg2DecFilter/Mpeg2DecSettingsWnd.h3
-rw-r--r--src/filters/transform/Mpeg2DecFilter/resource.h9
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
//