[Deinterlace-checkins] CVS: DScaler5/DMO/Deinterlace/Deint_Diag Deint_Diag.cpp,1.2,1.3
Brought to you by:
adcockj,
dschmelzer
From: John A. <ad...@us...> - 2003-07-26 07:21:07
|
Update of /cvsroot/deinterlace/DScaler5/DMO/Deinterlace/Deint_Diag In directory sc8-pr-cvs1:/tmp/cvs-serv11003/DMO/Deinterlace/Deint_Diag Modified Files: Deint_Diag.cpp Log Message: Remove 704 stuff Index: Deint_Diag.cpp =================================================================== RCS file: /cvsroot/deinterlace/DScaler5/DMO/Deinterlace/Deint_Diag/Deint_Diag.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Deint_Diag.cpp 18 Jul 2003 09:26:34 -0000 1.2 --- Deint_Diag.cpp 25 Jul 2003 16:00:54 -0000 1.3 *************** *** 21,24 **** --- 21,27 ---- // // $Log$ + // Revision 1.3 2003/07/25 16:00:54 adcockj + // Remove 704 stuff + // // Revision 1.2 2003/07/18 09:26:34 adcockj // Corrections to assembler files (does not compile) *************** *** 32,37 **** --- 35,53 ---- #include "Deint_Diag.h" + extern "C" + { + void __cdecl Deint_Diag_Core_YUY2_MMX(BYTE* M1, BYTE* T2, BYTE* B2, BYTE* M3, BYTE* T4, BYTE* B4, BYTE* Dest, DWORD Count); + void __cdecl Deint_Diag_Core_YUY2_SSE(BYTE* M1, BYTE* T2, BYTE* B2, BYTE* M3, BYTE* T4, BYTE* B4, BYTE* Dest, DWORD Count); + void __cdecl Deint_Diag_Core_YUY2_3dNow(BYTE* M1, BYTE* T2, BYTE* B2, BYTE* M3, BYTE* T4, BYTE* B4, BYTE* Dest, DWORD Count); + void __cdecl Deint_Diag_Core_Luma_MMX(BYTE* M1, BYTE* T2, BYTE* B2, BYTE* M3, BYTE* T4, BYTE* B4, BYTE* Dest, DWORD Count); + void __cdecl Deint_Diag_Core_Luma_SSE(BYTE* M1, BYTE* T2, BYTE* B2, BYTE* M3, BYTE* T4, BYTE* B4, BYTE* Dest, DWORD Count); + void __cdecl Deint_Diag_Core_Luma_3dNow(BYTE* M1, BYTE* T2, BYTE* B2, BYTE* M3, BYTE* T4, BYTE* B4, BYTE* Dest, DWORD Count); + unsigned __int64 MOVE; + } + static ParamInfo* g_params = NULL; + #define NUM_FIELDS 4 + // Diag method requires : // 4 fields to operate on *************** *** 39,43 **** // And has a medium high complexity CDeint_Diag::CDeint_Diag() : ! CDeintDMO(4, 1, 7) { // Initialize parameters in IMediaParam --- 55,59 ---- // And has a medium high complexity CDeint_Diag::CDeint_Diag() : ! CDeintDMO(NUM_FIELDS, 1, 7) { // Initialize parameters in IMediaParam *************** *** 52,67 **** void CDeint_Diag::DoDeinterlacingMethod(DMO_OUTPUT_DATA_BUFFER *pOutputBuffer) { ! ATLASSERT(m_FieldsInBuffer >= m_NumFieldsToBuffer); VIDEOINFOHEADER2* InputInfo = (VIDEOINFOHEADER2*)(InputType(0)->pbFormat); VIDEOINFOHEADER2* OutputInfo = (VIDEOINFOHEADER2*)(OutputType(0)->pbFormat); ! BYTE* pInputData[m_NumFieldsToBuffer]; ! DWORD InputLength[m_NumFieldsToBuffer]; BYTE* pOutputData; DWORD OutputLength; ! for (int i(0); i < m_NumFieldsToBuffer; ++i) { ! HRESULT hr = m_IncomingFields[m_FieldsInBuffer - i - 1].m_Buffer->GetBufferAndLength(&pInputData[i], &InputLength[i]); if(FAILED(hr)) return; } --- 68,89 ---- void CDeint_Diag::DoDeinterlacingMethod(DMO_OUTPUT_DATA_BUFFER *pOutputBuffer) { ! ATLASSERT(m_FieldsInBuffer >= NUM_FIELDS); ! ! HRESULT hr; VIDEOINFOHEADER2* InputInfo = (VIDEOINFOHEADER2*)(InputType(0)->pbFormat); VIDEOINFOHEADER2* OutputInfo = (VIDEOINFOHEADER2*)(OutputType(0)->pbFormat); ! BYTE* pInputData[NUM_FIELDS]; ! DWORD InputLength[NUM_FIELDS]; BYTE* pOutputData; DWORD OutputLength; ! DWORD LineLength; ! DWORD TwoLineLength; ! DWORD OutputPitch; ! ! for (int i(0); i < NUM_FIELDS; ++i) { ! hr = m_IncomingFields[m_FieldsInBuffer - i - 1].m_Buffer->GetBufferAndLength(&pInputData[i], &InputLength[i]); if(FAILED(hr)) return; } *************** *** 79,148 **** if(InputInfo->bmiHeader.biCompression == MAKEFOURCC('Y','U','Y','2')) { ! if(InputInfo->bmiHeader.biWidth != 704) { ! if(m_IncomingFields[m_FieldsInBuffer - 1].IsTopLine == TRUE) ! { ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) ! { ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! pInputData += InputInfo->bmiHeader.biWidth * 4; ! } ! } ! else { ! pInputData += InputInfo->bmiHeader.biWidth * 2; ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) ! { ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! pInputData += InputInfo->bmiHeader.biWidth * 4; ! } } } else { ! pOutputData += 16; ! if(m_IncomingFields[m_FieldsInBuffer - 1].IsTopLine == TRUE) { ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) ! { ! BlackYUY2For8(pOutputData - 16); ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! BlackYUY2For8(pOutputData + (704*2)); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! ! BlackYUY2For8(pOutputData - 16); ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! BlackYUY2For8(pOutputData + (704*2)); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! pInputData += InputInfo->bmiHeader.biWidth * 4; ! } ! } ! else ! { ! pInputData += InputInfo->bmiHeader.biWidth * 2; ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) { ! BlackYUY2For8(pOutputData - 16); ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! BlackYUY2For8(pOutputData - 16); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! ! BlackYUY2For8(pOutputData - 16); ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth * 2); ! BlackYUY2For8(pOutputData - 16); ! pOutputData += OutputInfo->bmiHeader.biWidth * 2; ! ! pInputData += InputInfo->bmiHeader.biWidth * 4; } } } } --- 101,174 ---- if(InputInfo->bmiHeader.biCompression == MAKEFOURCC('Y','U','Y','2')) { ! LineLength = InputInfo->bmiHeader.biWidth * 2; ! TwoLineLength = InputInfo->bmiHeader.biWidth * 4; ! OutputPitch = OutputInfo->bmiHeader.biWidth * 2; ! ! if(m_IncomingFields[m_FieldsInBuffer - 1].IsTopLine == TRUE) { ! pInputData[1] += LineLength; ! pInputData[3] += LineLength; ! memcpy(pOutputData, pInputData[0], LineLength); ! pOutputData += LineLength; ! ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2 - 1; ++i) { ! memcpy(pOutputData, pInputData[1], LineLength); ! pOutputData += OutputPitch; ! ! pInputData[0] += TwoLineLength; ! pInputData[2] += TwoLineLength; ! ! Deint_Diag_Core_YUY2_MMX( ! pInputData[0], ! pInputData[1], ! pInputData[1] + TwoLineLength, ! pInputData[2], ! pInputData[3], ! pInputData[3] + TwoLineLength, ! pOutputData, ! LineLength ! ); ! pOutputData += OutputPitch; ! ! pInputData[1] += TwoLineLength; ! pInputData[3] += TwoLineLength; } + + memcpy(pOutputData, pInputData[1], LineLength); } else { ! pInputData[0] += LineLength; ! pInputData[2] += LineLength; ! ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2 - 1; ++i) { ! memcpy(pOutputData, pInputData[1], LineLength); ! pOutputData += LineLength; ! Deint_Diag_Core_YUY2_MMX( ! pInputData[0], ! pInputData[1], ! pInputData[1] + TwoLineLength, ! pInputData[2], ! pInputData[3], ! pInputData[3] + TwoLineLength, ! pOutputData, ! LineLength ! ); ! pOutputData += OutputPitch; ! for(int j(0); j < NUM_FIELDS; ++j) { ! pInputData[j] += TwoLineLength; } } + + memcpy(pOutputData, pInputData[1], LineLength); + pOutputData += LineLength; + memcpy(pOutputData, pInputData[0], LineLength); + pOutputData += LineLength; } } *************** *** 151,228 **** else { ! if(InputInfo->bmiHeader.biWidth != 704) { ! // process luma ! if(m_IncomingFields[m_FieldsInBuffer - 1].IsTopLine == TRUE) ! { ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) ! { ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! pInputData += InputInfo->bmiHeader.biWidth * 2; ! } ! } ! else { ! pInputData += InputInfo->bmiHeader.biWidth; ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) ! { ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! memcpy(pOutputData, pInputData, InputInfo->bmiHeader.biWidth); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! pInputData += InputInfo->bmiHeader.biWidth * 2; ! } ! pInputData -= InputInfo->bmiHeader.biWidth; } ! ProcessPlanarChroma(pInputData, pOutputData, InputInfo, OutputInfo); } else { ! // process luma ! pOutputData += 8; ! if(m_IncomingFields[m_FieldsInBuffer - 1].IsTopLine == TRUE) { ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) ! { ! memset(pOutputData - 8, 0, 8); ! memcpy(pOutputData, pInputData, 704); ! memset(pOutputData + 704 + 8, 0, 8); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! ! memset(pOutputData - 8, 0, 8); ! memcpy(pOutputData, pInputData, 704); ! memset(pOutputData + 704 + 8, 0, 8); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! pInputData += 1408; ! } ! } ! else ! { ! pInputData += 704; ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2; ++i) { ! memset(pOutputData - 8, 0, 8); ! memcpy(pOutputData, pInputData, 704); ! memset(pOutputData + 704 + 8, 0, 8); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! ! memset(pOutputData - 8, 0, 8); ! memcpy(pOutputData, pInputData, 704); ! memset(pOutputData + 704 + 8, 0, 8); ! pOutputData += OutputInfo->bmiHeader.biWidth; ! ! pInputData += 1408; } - pInputData -= 704; } ! pOutputData -= 8; ! ProcessPlanarChroma704(pInputData, pOutputData, InputInfo, OutputInfo); } } } --- 177,254 ---- else { ! LineLength = InputInfo->bmiHeader.biWidth; ! TwoLineLength = InputInfo->bmiHeader.biWidth * 2; ! OutputPitch = OutputInfo->bmiHeader.biWidth; ! ! ! // process luma ! if(m_IncomingFields[m_FieldsInBuffer - 1].IsTopLine == TRUE) { ! pInputData[1] += LineLength; ! pInputData[3] += LineLength; ! memcpy(pOutputData, pInputData[0], LineLength); ! pOutputData += LineLength; ! ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2 - 1; ++i) { ! memcpy(pOutputData, pInputData[1], LineLength); ! pOutputData += OutputPitch; ! ! pInputData[0] += TwoLineLength; ! pInputData[2] += TwoLineLength; ! ! Deint_Diag_Core_Luma_MMX( ! pInputData[0], ! pInputData[1], ! pInputData[1] + TwoLineLength, ! pInputData[2], ! pInputData[3], ! pInputData[3] + TwoLineLength, ! pOutputData, ! LineLength ! ); ! pOutputData += OutputPitch; ! ! pInputData[1] += TwoLineLength; ! pInputData[3] += TwoLineLength; } ! ! memcpy(pOutputData, pInputData[1], LineLength); } else { ! pInputData[0] += LineLength; ! pInputData[2] += LineLength; ! ! for(int i(0); i < InputInfo->bmiHeader.biHeight/2 - 1; ++i) { ! memcpy(pOutputData, pInputData[1], LineLength); ! pOutputData += LineLength; ! Deint_Diag_Core_Luma_MMX( ! pInputData[0], ! pInputData[1], ! pInputData[1] + TwoLineLength, ! pInputData[2], ! pInputData[3], ! pInputData[3] + TwoLineLength, ! pOutputData, ! LineLength ! ); ! pOutputData += OutputPitch; ! for(int j(0); j < NUM_FIELDS; ++j) { ! pInputData[j] += TwoLineLength; } } ! ! memcpy(pOutputData, pInputData[1], LineLength); ! pOutputData += LineLength; ! memcpy(pOutputData, pInputData[0], LineLength); ! pOutputData += LineLength; } + ProcessPlanarChroma(pInputData[1], pOutputData, InputInfo, OutputInfo); } } |