[Deinterlace-checkins] CVS: DScaler5/DScalerFilter InputPin.cpp,1.25,1.26 OutputPin.cpp,1.20,1.21 Ou
Brought to you by:
adcockj,
dschmelzer
From: John A. <ad...@us...> - 2003-09-30 17:01:08
|
Update of /cvsroot/deinterlace/DScaler5/DScalerFilter In directory sc8-pr-cvs1:/tmp/cvs-serv7624/DScalerFilter Modified Files: InputPin.cpp OutputPin.cpp OutputPin.h Utils.cpp Log Message: Improved handling of small format changes Index: InputPin.cpp =================================================================== RCS file: /cvsroot/deinterlace/DScaler5/DScalerFilter/InputPin.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** InputPin.cpp 28 Sep 2003 15:08:07 -0000 1.25 --- InputPin.cpp 30 Sep 2003 16:59:26 -0000 1.26 *************** *** 22,25 **** --- 22,28 ---- // // $Log$ + // Revision 1.26 2003/09/30 16:59:26 adcockj + // Improved handling of small format changes + // // Revision 1.25 2003/09/28 15:08:07 adcockj // optimization fix and minor changes *************** *** 145,149 **** { return E_POINTER; - } --- 148,151 ---- *************** *** 613,617 **** } ! LOG(DBGLOG_FLOW, ("Incoming expected %d Start %d end %d addr %08x\n", (long)m_ExpectedStartIn, (long)InSampleProperties.tStart, (long)InSampleProperties.tStop, InSampleProperties.pbBuffer)); m_ExpectedStartIn = InSampleProperties.tStop; --- 615,619 ---- } ! LOG(DBGLOG_FLOW, ("Incoming expected %d Start %d end %d addr %08x\n", (long)m_ExpectedStartIn, (long)InSampleProperties.tStart, (long)InSampleProperties.tStop, InSampleProperties.dwTypeSpecificFlags)); m_ExpectedStartIn = InSampleProperties.tStop; Index: OutputPin.cpp =================================================================== RCS file: /cvsroot/deinterlace/DScaler5/DScalerFilter/OutputPin.cpp,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** OutputPin.cpp 28 Sep 2003 15:08:07 -0000 1.20 --- OutputPin.cpp 30 Sep 2003 16:59:26 -0000 1.21 *************** *** 22,25 **** --- 22,28 ---- // // $Log$ + // Revision 1.21 2003/09/30 16:59:26 adcockj + // Improved handling of small format changes + // // Revision 1.20 2003/09/28 15:08:07 adcockj // optimization fix and minor changes *************** *** 104,112 **** { AM_MEDIA_TYPE ProposedType; InitMediaType(&ProposedType); ! // say which type we really want to send out ! HRESULT hr = CreateOutputMediaType(InputType, &ProposedType); ! CHECK(hr); hr = m_Allocator->Decommit(); --- 107,126 ---- { AM_MEDIA_TYPE ProposedType; + HRESULT hr = S_OK; InitMediaType(&ProposedType); ! // if we are running then behave slightly differently ! if(m_ConnectedPin != NULL && m_Filter->m_State != State_Stopped && m_PinConnection != NULL) ! { ! // say which type we really want to send out ! hr = CreateOutputMediaTypeBasedOnExisting(InputType, &ProposedType, &m_CurrentMediaType); ! CHECK(hr); ! } ! else ! { ! // say which type we really want to send out ! hr = CreateOutputMediaType(InputType, &ProposedType); ! CHECK(hr); ! } hr = m_Allocator->Decommit(); *************** *** 467,476 **** if(QualityControl != NULL) { ! LOG(DBGLOG_FLOW, ("Coped With Famine - %d\n", q.Late)); return QualityControl->Notify(pSelf, q); } else { ! LOG(DBGLOG_FLOW, ("Ignored Famine - %d\n", q.Late)); return E_NOTIMPL; } --- 481,490 ---- if(QualityControl != NULL) { ! LOG(DBGLOG_ALL, ("Coped With Famine - %d\n", q.Late)); return QualityControl->Notify(pSelf, q); } else { ! LOG(DBGLOG_ALL, ("Ignored Famine - %d\n", q.Late)); return E_NOTIMPL; } *************** *** 485,498 **** //if(q.Late > 400000) { - LOG(DBGLOG_FLOW, ("Flood - %d\n", q.Late)); CComQIPtr<IQualityControl> QualityControl = m_InputPin->m_ConnectedPin; if(QualityControl != NULL) { ! LOG(DBGLOG_FLOW, ("Coped With Flood - %d\n", q.Late)); return QualityControl->Notify(pSelf, q); } else { ! LOG(DBGLOG_FLOW, ("Ignored Flood - %d\n", q.Late)); return E_NOTIMPL; } --- 499,511 ---- //if(q.Late > 400000) { CComQIPtr<IQualityControl> QualityControl = m_InputPin->m_ConnectedPin; if(QualityControl != NULL) { ! LOG(DBGLOG_ALL, ("Coped With Flood - %d\n", q.Late)); return QualityControl->Notify(pSelf, q); } else { ! LOG(DBGLOG_ALL, ("Ignored Flood - %d\n", q.Late)); return E_NOTIMPL; } *************** *** 866,869 **** --- 879,906 ---- } + HRESULT COutputPin::CreateOutputMediaTypeBasedOnExisting(const AM_MEDIA_TYPE* InputType, AM_MEDIA_TYPE* NewType, const AM_MEDIA_TYPE* OldType) + { + HRESULT hr = COutputPin::CreateOutputMediaType(InputType, NewType); + CHECK(hr); + if(NewType->lSampleSize <= OldType->lSampleSize) + { + VIDEOINFOHEADER2* NewFormat = (VIDEOINFOHEADER2*)NewType->pbFormat; + VIDEOINFOHEADER2* OldFormat = (VIDEOINFOHEADER2*)OldType->pbFormat; + DWORD Height = NewFormat->bmiHeader.biHeight * ((OldFormat->bmiHeader.biHeight < 0)?-1:1); + DWORD Width = max(NewFormat->bmiHeader.biWidth, OldFormat->bmiHeader.biWidth); + + if(abs(Height) * Width * NewFormat->bmiHeader.biBitCount / 8 < OldType->lSampleSize) + { + NewFormat->bmiHeader.biHeight = Height; + + NewFormat->bmiHeader.biWidth = Width; + NewFormat->bmiHeader.biSizeImage = abs(Height) * Width * NewFormat->bmiHeader.biBitCount / 8; + NewType->lSampleSize = OldType->lSampleSize; + } + } + return hr; + } + + BITMAPINFOHEADER* COutputPin::GetBitmapInfo() { *************** *** 893,901 **** VIDEOINFOHEADER2* ProposedFormat = (VIDEOINFOHEADER2*)ProposedType->pbFormat; ! if(CurrentFormat->bmiHeader.biWidth > ProposedFormat->bmiHeader.biWidth) { return FALSE; } ! if(abs(CurrentFormat->bmiHeader.biHeight) != abs(ProposedFormat->bmiHeader.biHeight)) { return FALSE; --- 930,938 ---- VIDEOINFOHEADER2* ProposedFormat = (VIDEOINFOHEADER2*)ProposedType->pbFormat; ! if(CurrentFormat->bmiHeader.biWidth < ProposedFormat->bmiHeader.biWidth) { return FALSE; } ! if(abs(CurrentFormat->bmiHeader.biHeight) < abs(ProposedFormat->bmiHeader.biHeight)) { return FALSE; Index: OutputPin.h =================================================================== RCS file: /cvsroot/deinterlace/DScaler5/DScalerFilter/OutputPin.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** OutputPin.h 20 May 2003 16:50:59 -0000 1.8 --- OutputPin.h 30 Sep 2003 16:59:26 -0000 1.9 *************** *** 126,129 **** --- 126,130 ---- HRESULT CreateOutputMediaType(const AM_MEDIA_TYPE* InputType, AM_MEDIA_TYPE* NewType); + HRESULT CreateOutputMediaTypeBasedOnExisting(const AM_MEDIA_TYPE* InputType, AM_MEDIA_TYPE* NewType, const AM_MEDIA_TYPE* OldType); private: Index: Utils.cpp =================================================================== RCS file: /cvsroot/deinterlace/DScaler5/DScalerFilter/Utils.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** Utils.cpp 19 May 2003 07:02:24 -0000 1.8 --- Utils.cpp 30 Sep 2003 16:59:26 -0000 1.9 *************** *** 22,25 **** --- 22,28 ---- // // $Log$ + // Revision 1.9 2003/09/30 16:59:26 adcockj + // Improved handling of small format changes + // // Revision 1.8 2003/05/19 07:02:24 adcockj // Patches from Torbjorn to extend logging *************** *** 53,57 **** #ifdef _DEBUG ! int CurrentDebugLevel = DBGLOG_ALL; #else int CurrentDebugLevel = DBGLOG_ERROR; --- 56,60 ---- #ifdef _DEBUG ! int CurrentDebugLevel = DBGLOG_FLOW; #else int CurrentDebugLevel = DBGLOG_ERROR; |