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; 
	 } 
}