www.pudn.com > SetText.rar > ShowCameraName.cpp
//ShowCameraname.cpp #include#include #include "ISetText.h" #include #include "ShowCameraname.h" #pragma warning(disable: 4800) const AMOVIESETUP_PIN psudSetTextPins[] = { { L"Input" // strName , FALSE // bRendered , FALSE // bOutput , FALSE // bZero , FALSE // bMany , &CLSID_NULL // clsConnectsToFilter , L"" // strConnectsToPin , 0 // nTypes , NULL // lpTypes } , { L"Output" // strName , FALSE // bRendered , TRUE // bOutput , FALSE // bZero , FALSE // bMany , &CLSID_NULL // clsConnectsToFilter , L"" // strConnectsToPin , 0 // nTypes , NULL // lpTypes } }; const AMOVIESETUP_FILTER sudSetText = { &CLSID_SetText // clsID , L"ShowText " // strName , MERIT_DO_NOT_USE // dwMerit , 2 // nPins , psudSetTextPins }; // lpPin // Needed for the CreateInstance mechanism CFactoryTemplate g_Templates[]= { { L"ShowText" , &CLSID_SetText , CShowText::CreateInstance , NULL , &sudSetText } }; int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]); STDAPI DllRegisterServer() { return AMovieDllRegisterServer2(TRUE); } STDAPI DllUnregisterServer() { return AMovieDllRegisterServer2(FALSE); } extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID); BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved); } ////////////////////////////////////////////////////////////////////// // ShowText Class ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CUnknown * WINAPI CShowText::CreateInstance(LPUNKNOWN lpunk, HRESULT *phr) { ASSERT(phr); CUnknown *punk = new CShowText(lpunk,phr); if (punk == NULL) { *phr = E_OUTOFMEMORY; } return punk; } CShowText::CShowText(LPUNKNOWN punk,HRESULT *phr) : CTransInPlaceFilter(TEXT("ShowText"), punk, CLSID_SetText, phr), m_nHeight(0), m_nWidth(0), m_DC(NULL), m_DibSection(NULL), m_OldObject(NULL), m_bMotion(false), m_bSchedule(false), m_bShowTime(false), m_bShowCameraName(false), m_BrightnessValue(0), ChageBrightState(0) { LOGBRUSH lb ; lb.lbStyle = BS_SOLID; lb.lbColor = RGB(0, 255, 0) ; lb.lbHatch = HS_CROSS ; m_hBrushMotion = CreateBrushIndirect(&lb); ASSERT(m_hBrushMotion != NULL); LOGBRUSH lb1; lb1.lbStyle = BS_SOLID; lb1.lbColor = RGB(255,0,0); lb1.lbHatch = HS_CROSS; m_hBrushSchedule = CreateBrushIndirect(&lb1); ASSERT(m_hBrushSchedule != NULL); } CShowText::~CShowText() { if(m_hBrushSchedule) { DeleteObject(m_hBrushSchedule); } if (m_hBrushMotion) { DeleteObject(m_hBrushMotion); } if (m_OldObject) { SelectObject(m_DC,m_OldObject); m_OldObject = NULL; } if (m_DC) { DeleteObject(m_DC); m_DC = NULL; } if (m_DibSection) { DeleteObject(m_DibSection); m_DibSection = NULL; } delete [] ImageStore; } STDMETHODIMP CShowText::NonDelegatingQueryInterface(REFIID riid, void ** ppv) { CheckPointer(ppv,E_POINTER); if (riid ==IID_ISetText ) { return GetInterface((ISetText *) this, ppv); } else if (riid == IID_ISetColor) { return GetInterface((ISetColor*)this,ppv); } else { return CTransInPlaceFilter::NonDelegatingQueryInterface(riid, ppv); } } int CShowText::GetPinCount() { return 2; } CBasePin*CShowText::GetPin(IN int Index) { CAutoLock cAutoLock(&m_ShowTextLock); return CTransInPlaceFilter::GetPin(Index); } HRESULT CShowText::Transform(IMediaSample *pSample) { CheckPointer(pSample,E_POINTER); if (m_DibSection == NULL) { VIDEOINFO *pVI = (VIDEOINFO *)m_pInput->CurrentMediaType().Format(); CheckPointer(pVI,E_UNEXPECTED); m_DibSection = CreateDIBSection(NULL, (BITMAPINFO *)&pVI->bmiHeader, DIB_RGB_COLORS, &m_pDibBits, NULL, 0); if (!m_DibSection ) { return E_FAIL; } HDC hdc = GetDC(NULL); m_DC= CreateCompatibleDC(hdc); if (!m_DC) return E_FAIL; ReleaseDC(NULL,hdc); m_OldObject = SelectObject(m_DC,m_DibSection); if (!m_OldObject) return E_FAIL; } char *pBuffer; pSample->GetPointer((LPBYTE*)&pBuffer); long BufferLen = pSample->GetSize(); if (pBuffer[0] != 0) { memcpy(ImageStore,pBuffer,m_nWidth*m_nHeight *3); // return NOERROR; } else { memcpy(pBuffer,ImageStore,m_nWidth*m_nHeight *3); } RGBTRIPLE *pBuffer2 = (RGBTRIPLE *)pBuffer; if (ChageBrightState != 0) { for(int i = 0 ;i FormatType() != FORMAT_VideoInfo) { return E_INVALIDARG; } if (*mtIn->Type() != MEDIATYPE_Video) { return E_INVALIDARG; } if (*mtIn->Subtype() != MEDIASUBTYPE_RGB24) { return E_INVALIDARG; } VIDEOINFO *pVI = (VIDEOINFO *)mtIn->Format(); CheckPointer(pVI,E_POINTER); if (pVI->bmiHeader.biBitCount!= 24) { return E_INVALIDARG; } if (pVI->bmiHeader.biHeight < 0 ) { return E_INVALIDARG; } return NOERROR; } HRESULT CShowText::SetMediaType(PIN_DIRECTION pindir, const CMediaType *pMediaType) { CheckPointer(pMediaType,E_POINTER); VIDEOINFO *pVI = (VIDEOINFO *)pMediaType->Format(); CheckPointer(pVI,E_POINTER); m_nHeight = pVI->bmiHeader.biHeight; m_nWidth = pVI->bmiHeader.biWidth; ImageStore = new char[m_nHeight *m_nWidth *3]; return CTransInPlaceFilter::SetMediaType(pindir,pMediaType); } STDMETHODIMP CShowText::SetSchedule(bool bSchedule) { CAutoLock cAutoLock(&m_ShowTextLock); if (m_bMotion) { m_bMotion = false; } m_bSchedule = bSchedule; return NOERROR; } STDMETHODIMP CShowText::SetCameraName(char *CameraName) { CAutoLock cAutoLock(&m_ShowTextLock); strcpy(m_CameraName,CameraName); return NOERROR; } STDMETHODIMP CShowText::SetMotion(bool bMotion) { CAutoLock cAutoLock(&m_ShowTextLock); if (m_bSchedule) { m_bSchedule = false; } m_bMotion = bMotion; return NOERROR; } STDMETHODIMP CShowText::SetShowTime(bool bShowTime) { CAutoLock cAutoLock(&m_ShowTextLock); m_bShowTime = bShowTime; return NOERROR; } STDMETHODIMP CShowText::SetShowCameraName(bool bShowCameraName) { CAutoLock cAutoLock(&m_ShowTextLock); m_bShowCameraName = bShowCameraName; return NOERROR; } STDMETHODIMP CShowText::SetBrightness(int BrightnessValue) { CAutoLock cAutoLock(&m_ShowTextLock); if (BrightnessValue>0) { ChageBrightState = 1; } else if(BrightnessValue<0) { ChageBrightState = 2; } else { ChageBrightState = 0; } m_BrightnessValue = BrightnessValue; return NOERROR; } void CShowText::IncreateBrightness(RGBTRIPLE *pBufferBrightness) { if(pBufferBrightness->rgbtBlue+m_BrightnessValue>=255) { pBufferBrightness->rgbtBlue = 255; } else { pBufferBrightness->rgbtBlue+= m_BrightnessValue; } if (pBufferBrightness->rgbtGreen+ m_BrightnessValue >=255) { pBufferBrightness->rgbtGreen = 255; } else { pBufferBrightness->rgbtGreen += m_BrightnessValue; } if (pBufferBrightness->rgbtRed + m_BrightnessValue >= 255) { pBufferBrightness->rgbtRed = 255; } else { pBufferBrightness->rgbtRed += m_BrightnessValue; } } void CShowText::DecreaseBrightness(RGBTRIPLE *pBufferBrightness) { if(pBufferBrightness->rgbtBlue+m_BrightnessValue<=0) { pBufferBrightness->rgbtBlue = 0; } else { pBufferBrightness->rgbtBlue+= m_BrightnessValue; } if (pBufferBrightness->rgbtGreen+ m_BrightnessValue <=0) { pBufferBrightness->rgbtGreen = 0; } else { pBufferBrightness->rgbtGreen += m_BrightnessValue; } if (pBufferBrightness->rgbtRed + m_BrightnessValue <=0) { pBufferBrightness->rgbtRed = 0; } else { pBufferBrightness->rgbtRed += m_BrightnessValue; } }