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>2011-05-15 22:54:44 +0400
committerXhmikosR <xhmikosr@users.sourceforge.net>2011-05-15 22:54:44 +0400
commit9704199a943cb7f7b4dc19f755dc60d8da55baa6 (patch)
treeb9f8fafbc8bf393ad8e15a3db72e42c6ff8442ef /src/filters/renderer/VideoRenderers
parenta283669d90fd4766dffe734be5a5998b7e57c52d (diff)
legacy branch: merge r3071-r3107 from trunk
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/branches/legacy@3108 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/filters/renderer/VideoRenderers')
-rw-r--r--src/filters/renderer/VideoRenderers/AllocatorCommon.cpp37
-rw-r--r--src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp20
-rw-r--r--src/filters/renderer/VideoRenderers/IPinHook.cpp65
3 files changed, 77 insertions, 45 deletions
diff --git a/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp b/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp
index 15fd3b686..2a2a50ecc 100644
--- a/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp
+++ b/src/filters/renderer/VideoRenderers/AllocatorCommon.cpp
@@ -54,29 +54,42 @@ HRESULT CreateAP9(const CLSID& clsid, HWND hWnd, bool bFullscreen, ISubPicAlloca
HRESULT hr = E_FAIL;
CString Error;
- if(clsid == CLSID_VMR9AllocatorPresenter && !(*ppAP = DNew CVMR9AllocatorPresenter(hWnd, bFullscreen, hr, Error))
- || clsid == CLSID_RM9AllocatorPresenter && !(*ppAP = DNew CRM9AllocatorPresenter(hWnd, bFullscreen, hr, Error))
- || clsid == CLSID_QT9AllocatorPresenter && !(*ppAP = DNew CQT9AllocatorPresenter(hWnd, bFullscreen, hr, Error))
- || clsid == CLSID_DXRAllocatorPresenter && !(*ppAP = DNew CDXRAllocatorPresenter(hWnd, hr, Error))
- || clsid == CLSID_madVRAllocatorPresenter && !(*ppAP = DNew CmadVRAllocatorPresenter(hWnd, hr, Error))) {
- return E_OUTOFMEMORY;
- }
- if(*ppAP == NULL) {
+ if ( IsEqualCLSID(clsid, CLSID_VMR9AllocatorPresenter) ) {
+ *ppAP = DNew CVMR9AllocatorPresenter(hWnd, bFullscreen, hr, Error);
+ }
+ else if ( IsEqualCLSID(clsid, CLSID_RM9AllocatorPresenter) ) {
+ *ppAP = DNew CRM9AllocatorPresenter(hWnd, bFullscreen, hr, Error);
+ }
+ else if ( IsEqualCLSID(clsid, CLSID_QT9AllocatorPresenter) ) {
+ *ppAP = DNew CQT9AllocatorPresenter(hWnd, bFullscreen, hr, Error);
+ }
+ else if ( IsEqualCLSID(clsid, CLSID_DXRAllocatorPresenter) ) {
+ *ppAP = DNew CDXRAllocatorPresenter(hWnd, hr, Error);
+ }
+ else if ( IsEqualCLSID(clsid, CLSID_madVRAllocatorPresenter) ) {
+ *ppAP = DNew CmadVRAllocatorPresenter(hWnd, hr, Error);
+ }
+ else {
return E_FAIL;
}
+ if ( *ppAP == NULL ) {
+ return E_OUTOFMEMORY;
+ }
+
(*ppAP)->AddRef();
- if(FAILED(hr)) {
+ if ( FAILED(hr) ) {
Error += L"\n";
Error += GetWindowsErrorMessage(hr, NULL);
- MessageBox(hWnd, Error, L"Error creating DX9 allocation presenter", MB_OK|MB_ICONERROR);
+ MessageBox(hWnd, Error, L"Error creating DX9 allocation presenter", MB_OK | MB_ICONERROR);
(*ppAP)->Release();
*ppAP = NULL;
- } else if (!Error.IsEmpty()) {
- MessageBox(hWnd, Error, L"Warning creating DX9 allocation presenter", MB_OK|MB_ICONWARNING);
+ }
+ else if ( !Error.IsEmpty() ) {
+ MessageBox(hWnd, Error, L"Warning creating DX9 allocation presenter", MB_OK | MB_ICONWARNING);
}
return hr;
diff --git a/src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp b/src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp
index 5ccb89a19..dd665c78b 100644
--- a/src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp
+++ b/src/filters/renderer/VideoRenderers/AllocatorCommon7.cpp
@@ -53,16 +53,24 @@ HRESULT CreateAP7(const CLSID& clsid, HWND hWnd, ISubPicAllocatorPresenter** ppA
*ppAP = NULL;
HRESULT hr = S_OK;
- if(clsid == CLSID_VMR7AllocatorPresenter && !(*ppAP = DNew CVMR7AllocatorPresenter(hWnd, hr))
- || clsid == CLSID_RM7AllocatorPresenter && !(*ppAP = DNew CRM7AllocatorPresenter(hWnd, hr))
- || clsid == CLSID_QT7AllocatorPresenter && !(*ppAP = DNew CQT7AllocatorPresenter(hWnd, hr))) {
- return E_OUTOFMEMORY;
- }
- if(*ppAP == NULL) {
+ if ( IsEqualCLSID(clsid, CLSID_VMR7AllocatorPresenter) ) {
+ *ppAP = DNew CVMR7AllocatorPresenter(hWnd, hr);
+ }
+ else if ( IsEqualCLSID(clsid, CLSID_RM7AllocatorPresenter) ) {
+ *ppAP = DNew CRM7AllocatorPresenter(hWnd, hr);
+ }
+ else if ( IsEqualCLSID(clsid, CLSID_QT7AllocatorPresenter) ) {
+ *ppAP = DNew CQT7AllocatorPresenter(hWnd, hr);
+ }
+ else {
return E_FAIL;
}
+ if ( *ppAP == NULL ) {
+ return E_OUTOFMEMORY;
+ }
+
(*ppAP)->AddRef();
if(FAILED(hr)) {
diff --git a/src/filters/renderer/VideoRenderers/IPinHook.cpp b/src/filters/renderer/VideoRenderers/IPinHook.cpp
index b4eb482d6..9ca8d2b35 100644
--- a/src/filters/renderer/VideoRenderers/IPinHook.cpp
+++ b/src/filters/renderer/VideoRenderers/IPinHook.cpp
@@ -31,8 +31,14 @@
#include "IPinHook.h"
#include "AllocatorCommon.h"
-#ifdef _DEBUG
-#define LOG_FILE _T("dxva.log")
+#define DXVA_LOGFILE_A
+
+#if defined(_DEBUG) && defined(DXVA_LOGFILE_A)
+#define LOG_FILE_DXVA _T("dxva_ipinhook.log")
+#define LOG_FILE_PICTURE _T("picture.log")
+#define LOG_FILE_SLICELONG _T("slicelong.log")
+#define LOG_FILE_SLICESHORT _T("sliceshort.log")
+#define LOG_FILE_BITSTREAM _T("bitstream.log")
#endif
//#define LOG_BITSTREAM
@@ -282,7 +288,9 @@ static HRESULT ( STDMETHODCALLTYPE *ReleaseBufferOrg )( IAMVideoAcceleratorC * T
static HRESULT ( STDMETHODCALLTYPE *ExecuteOrg )( IAMVideoAcceleratorC * This,/* [in] */ DWORD dwFunction,/* [in] */ LPVOID lpPrivateInputData,/* [in] */ DWORD cbPrivateInputData,/* [in] */ LPVOID lpPrivateOutputDat,/* [in] */ DWORD cbPrivateOutputData,/* [in] */ DWORD dwNumBuffers,/* [in] */ const AMVABUFFERINFO *pamvaBufferInfo) = NULL;
static HRESULT ( STDMETHODCALLTYPE *QueryRenderStatusOrg )( IAMVideoAcceleratorC * This,/* [in] */ DWORD dwTypeIndex,/* [in] */ DWORD dwBufferIndex,/* [in] */ DWORD dwFlags) = NULL;
static HRESULT ( STDMETHODCALLTYPE *DisplayFrameOrg )( IAMVideoAcceleratorC * This,/* [in] */ DWORD dwFlipToIndex,/* [in] */ IMediaSample *pMediaSample) = NULL;
+#endif
+#if defined(_DEBUG) && defined(DXVA_LOGFILE_A)
static void LOG_TOFILE(LPCTSTR FileName, LPCTSTR fmt, ...)
{
va_list args;
@@ -309,7 +317,7 @@ static void LOG(LPCTSTR fmt, ...)
TCHAR buff[3000];
FILE* f;
_vstprintf_s(buff, countof(buff), fmt, args);
- if(_tfopen_s(&f, LOG_FILE, _T("at")) == 0) {
+ if(_tfopen_s(&f, LOG_FILE_DXVA, _T("at")) == 0) {
fseek(f, 0, 2);
_ftprintf(f, _T("%s\n"), buff);
fclose(f);
@@ -351,7 +359,7 @@ static void LogDXVA_PicParams_H264 (DXVA_PicParams_H264* pPic)
static bool bFirstParam = true;
if (bFirstParam) {
- LOG_TOFILE (_T("picture.log"), _T("RefPicFlag,wFrameWidthInMbsMinus1,wFrameHeightInMbsMinus1,CurrPic.Index7Bits,num_ref_frames,wBitFields,bit_depth_luma_minus8,bit_depth_chroma_minus8,Reserved16Bits,StatusReportFeedbackNumber,RFL.Index7Bits[0],") \
+ LOG_TOFILE (LOG_FILE_PICTURE, _T("RefPicFlag,wFrameWidthInMbsMinus1,wFrameHeightInMbsMinus1,CurrPic.Index7Bits,num_ref_frames,wBitFields,bit_depth_luma_minus8,bit_depth_chroma_minus8,Reserved16Bits,StatusReportFeedbackNumber,RFL.Index7Bits[0],") \
_T("RFL.Index7Bits[1],RFL.Index7Bits[2],RFL.Index7Bits[3],RFL.Index7Bits[4],RFL.Index7Bits[5],") \
_T("RFL.Index7Bits[6],RFL.Index7Bits[7],RFL.Index7Bits[8],RFL.Index7Bits[9],RFL.Index7Bits[10],") \
_T("RFL.Index7Bits[11],RFL.Index7Bits[12],RFL.Index7Bits[13],RFL.Index7Bits[14],RFL.Index7Bits[15],") \
@@ -454,7 +462,7 @@ static void LogDXVA_PicParams_H264 (DXVA_PicParams_H264* pPic)
// fwrite (pPic, sizeof (DXVA_PicParams_H264), 1, hPict);
//}
- LOG_TOFILE (_T("picture.log"), strRes);
+ LOG_TOFILE (LOG_FILE_PICTURE, strRes);
}
static void LogH264SliceShort (DXVA_Slice_H264_Short* pSlice, int nCount)
@@ -464,7 +472,7 @@ static void LogH264SliceShort (DXVA_Slice_H264_Short* pSlice, int nCount)
if (bFirstSlice) {
strRes = _T("nCnt, BSNALunitDataLocation, SliceBytesInBuffer, wBadSliceChopping");
- LOG_TOFILE (_T("sliceshort.log"), strRes);
+ LOG_TOFILE (LOG_FILE_SLICESHORT, strRes);
strRes = "";
bFirstSlice = false;
}
@@ -475,7 +483,7 @@ static void LogH264SliceShort (DXVA_Slice_H264_Short* pSlice, int nCount)
strRes.AppendFormat(_T("%d,"), pSlice[i].SliceBytesInBuffer);
strRes.AppendFormat(_T("%d"), pSlice[i].wBadSliceChopping);
- LOG_TOFILE (_T("sliceshort.log"), strRes);
+ LOG_TOFILE (LOG_FILE_SLICESHORT, strRes);
strRes = "";
}
}
@@ -488,7 +496,7 @@ static void LogSliceInfo (DXVA_SliceInfo* pSlice, int nCount)
if (bFirstSlice) {
strRes = _T("nCnt, wHorizontalPosition, wVerticalPosition, dwSliceBitsInBuffer,dwSliceDataLocation, bStartCodeBitOffset, bReservedBits, wMBbitOffset, wNumberMBsInSlice, wQuantizerScaleCode, wBadSliceChopping");
- LOG_TOFILE (_T("sliceshort.log"), strRes);
+ LOG_TOFILE (LOG_FILE_SLICESHORT, strRes);
strRes = "";
bFirstSlice = false;
}
@@ -506,7 +514,7 @@ static void LogSliceInfo (DXVA_SliceInfo* pSlice, int nCount)
strRes.AppendFormat(_T("%d,"), pSlice[i].wQuantizerScaleCode);
strRes.AppendFormat(_T("%d"), pSlice[i].wBadSliceChopping);
- LOG_TOFILE (_T("sliceshort.log"), strRes);
+ LOG_TOFILE (LOG_FILE_SLICESHORT, strRes);
strRes = "";
}
}
@@ -542,7 +550,7 @@ static void LogH264SliceLong (DXVA_Slice_H264_Long* pSlice, int nCount)
}
- LOG_TOFILE (_T("slicelong.log"), strRes);
+ LOG_TOFILE (LOG_FILE_SLICELONG, strRes);
strRes = "";
}
bFirstSlice = false;
@@ -594,7 +602,7 @@ static void LogH264SliceLong (DXVA_Slice_H264_Long* pSlice, int nCount)
}
}
- LOG_TOFILE (_T("slicelong.log"), strRes);
+ LOG_TOFILE (LOG_FILE_SLICELONG, strRes);
strRes = "";
}
}
@@ -605,7 +613,7 @@ static void LogDXVA_PictureParameters (DXVA_PictureParameters* pPic)
CString strRes;
if (bFirstPictureParam) {
- LOG_TOFILE (_T("picture.log"), _T("wDecodedPictureIndex,wDeblockedPictureIndex,wForwardRefPictureIndex,wBackwardRefPictureIndex,wPicWidthInMBminus1,wPicHeightInMBminus1,bMacroblockWidthMinus1,bMacroblockHeightMinus1,bBlockWidthMinus1,bBlockHeightMinus1,bBPPminus1,bPicStructure,bSecondField,bPicIntra,bPicBackwardPrediction,bBidirectionalAveragingMode,bMVprecisionAndChromaRelation,bChromaFormat,bPicScanFixed,bPicScanMethod,bPicReadbackRequests,bRcontrol,bPicSpatialResid8,bPicOverflowBlocks,bPicExtrapolation,bPicDeblocked,bPicDeblockConfined,bPic4MVallowed,bPicOBMC,bPicBinPB,bMV_RPS,bReservedBits,wBitstreamFcodes,wBitstreamPCEelements,bBitstreamConcealmentNeed,bBitstreamConcealmentMethod"));
+ LOG_TOFILE (LOG_FILE_PICTURE, _T("wDecodedPictureIndex,wDeblockedPictureIndex,wForwardRefPictureIndex,wBackwardRefPictureIndex,wPicWidthInMBminus1,wPicHeightInMBminus1,bMacroblockWidthMinus1,bMacroblockHeightMinus1,bBlockWidthMinus1,bBlockHeightMinus1,bBPPminus1,bPicStructure,bSecondField,bPicIntra,bPicBackwardPrediction,bBidirectionalAveragingMode,bMVprecisionAndChromaRelation,bChromaFormat,bPicScanFixed,bPicScanMethod,bPicReadbackRequests,bRcontrol,bPicSpatialResid8,bPicOverflowBlocks,bPicExtrapolation,bPicDeblocked,bPicDeblockConfined,bPic4MVallowed,bPicOBMC,bPicBinPB,bMV_RPS,bReservedBits,wBitstreamFcodes,wBitstreamPCEelements,bBitstreamConcealmentNeed,bBitstreamConcealmentMethod"));
}
bFirstPictureParam = false;
@@ -647,7 +655,7 @@ static void LogDXVA_PictureParameters (DXVA_PictureParameters* pPic)
pPic->bBitstreamConcealmentNeed,
pPic->bBitstreamConcealmentMethod);
- LOG_TOFILE (_T("picture.log"), strRes);
+ LOG_TOFILE (LOG_FILE_PICTURE, strRes);
}
void LogDXVA_Bitstream(BYTE* pBuffer, int nSize)
@@ -656,7 +664,7 @@ void LogDXVA_Bitstream(BYTE* pBuffer, int nSize)
static bool bFirstBitstream = true;
if (bFirstBitstream) {
- LOG_TOFILE (_T("bitstream.log"), _T("Size,Start, Stop"));
+ LOG_TOFILE (LOG_FILE_BITSTREAM, _T("Size,Start, Stop"));
}
bFirstBitstream = false;
@@ -679,7 +687,7 @@ void LogDXVA_Bitstream(BYTE* pBuffer, int nSize)
}
}
- LOG_TOFILE (_T("bitstream.log"), strRes);
+ LOG_TOFILE (LOG_FILE_BITSTREAM, strRes);
}
@@ -954,7 +962,7 @@ static HRESULT STDMETHODCALLTYPE ExecuteMine(IAMVideoAcceleratorC* This, DWORD d
if (pamvaBufferInfo[i].dwTypeIndex == DXVA_PICTURE_DECODE_BUFFER) {
if (g_guidDXVADecoder == DXVA2_ModeH264_E || g_guidDXVADecoder == DXVA_Intel_H264_ClearVideo) {
LogDXVA_PicParams_H264 ((DXVA_PicParams_H264*)g_ppBuffer[pamvaBufferInfo[i].dwTypeIndex]);
- } else if (g_guidDXVADecoder == DXVA2_ModeVC1_D) {
+ } else if (g_guidDXVADecoder == DXVA2_ModeVC1_D || g_guidDXVADecoder == DXVA_Intel_VC1_ClearVideo) {
LogDXVA_PictureParameters((DXVA_PictureParameters*)g_ppBuffer[pamvaBufferInfo[i].dwTypeIndex]);
}
} else if (pamvaBufferInfo[i].dwTypeIndex == DXVA_SLICE_CONTROL_BUFFER && (pamvaBufferInfo[i].dwDataSize % sizeof(DXVA_Slice_H264_Short)) == 0) {
@@ -1082,11 +1090,13 @@ void HookAMVideoAccelerator(IAMVideoAcceleratorC* pAMVideoAcceleratorC)
res = VirtualProtect(pAMVideoAcceleratorC->lpVtbl, sizeof(IAMVideoAcceleratorC), PAGE_EXECUTE, &flOldProtect);
- ::DeleteFile (LOG_FILE);
- ::DeleteFile (_T("picture.log"));
- ::DeleteFile (_T("slicelong.log"));
- ::DeleteFile (_T("sliceshort.log"));
- ::DeleteFile (_T("bitstream.log"));
+#ifdef DXVA_LOGFILE_A
+ ::DeleteFile (LOG_FILE_DXVA);
+ ::DeleteFile (LOG_FILE_PICTURE);
+ ::DeleteFile (LOG_FILE_SLICELONG);
+ ::DeleteFile (LOG_FILE_SLICESHORT);
+ ::DeleteFile (LOG_FILE_BITSTREAM);
+#endif
#endif
}
@@ -1182,7 +1192,7 @@ public :
}
virtual HRESULT STDMETHODCALLTYPE Execute(const DXVA2_DecodeExecuteParams *pExecuteParams) {
-#ifdef _DEBUG
+#if defined(_DEBUG) && defined(DXVA_LOGFILE_A)
for (DWORD i=0; i<pExecuteParams->NumCompBuffers; i++) {
CString strBuffer;
@@ -1201,7 +1211,7 @@ public :
if (pExecuteParams->pCompressedBuffers[i].CompressedBufferType == DXVA2_PictureParametersBufferType) {
if (g_guidDXVADecoder == DXVA2_ModeH264_E || g_guidDXVADecoder == DXVA_Intel_H264_ClearVideo) {
LogDXVA_PicParams_H264 ((DXVA_PicParams_H264*)m_ppBuffer[pExecuteParams->pCompressedBuffers[i].CompressedBufferType]);
- } else if (g_guidDXVADecoder == DXVA2_ModeVC1_D || g_guidDXVADecoder == DXVA2_ModeMPEG2_VLD) {
+ } else if (g_guidDXVADecoder == DXVA2_ModeVC1_D || g_guidDXVADecoder == DXVA2_ModeMPEG2_VLD || g_guidDXVADecoder == DXVA_Intel_VC1_ClearVideo) {
LogDXVA_PictureParameters((DXVA_PictureParameters*)m_ppBuffer[pExecuteParams->pCompressedBuffers[i].CompressedBufferType]);
}
}
@@ -1455,6 +1465,7 @@ static HRESULT STDMETHODCALLTYPE CreateVideoDecoderMine(
if ((Guid == DXVA2_ModeH264_E) ||
(Guid == DXVA2_ModeVC1_D) ||
(Guid == DXVA_Intel_H264_ClearVideo) ||
+ (Guid == DXVA_Intel_VC1_ClearVideo) ||
(Guid == DXVA2_ModeMPEG2_VLD)) {
*ppDecode = DNew CFakeDirectXVideoDecoder (NULL, *ppDecode);
(*ppDecode)->AddRef();
@@ -1535,10 +1546,10 @@ void HookDirectXVideoDecoderService(void* pIDirectXVideoDecoderService)
}
// TODO : remove log file !!
-#ifdef _DEBUG
- ::DeleteFile (LOG_FILE);
- ::DeleteFile (_T("picture.log"));
- ::DeleteFile (_T("slicelong.log"));
+#if defined(_DEBUG) && defined(DXVA_LOGFILE_A)
+ ::DeleteFile (LOG_FILE_DXVA);
+ ::DeleteFile (LOG_FILE_PICTURE);
+ ::DeleteFile (LOG_FILE_SLICELONG);
#endif
if (!g_pIDirectXVideoDecoderServiceCVtbl && pIDirectXVideoDecoderService) {