在DirectShow,对很多设置可以通过 IAMVideoProcAmp接口设置亮度、对比度等属性
下面m_pVideo是源设备Filter,
IAMVideoProcAmp *pProcAmp = 0;
hr = m_pVideo->QueryInterface(IID_IAMVideoProcAmp, (void**)&pProcAmp);
if(SUCCEEDED(hr))
{
long Min, Max, Step, Default, Flags, Val;
// 亮度.
if( g_Brightness > 0 )
{
hr = pProcAmp->GetRange(VideoProcAmp_Brightness, &Min, &Max, &Step,
&Default, &Flags);
if(SUCCEEDED(hr))
{
hr = pProcAmp->Get(VideoProcAmp_Brightness, &Val, &Flags);
Val = Min+(Max-Min)*g_Brightness/100;
pProcAmp->Set(VideoProcAmp_Brightness, Val, Flags);
}
}
//对比度
if( g_Contrast > 0 )
{
hr = pProcAmp->GetRange(VideoProcAmp_Contrast, &Min, &Max, &Step,
&Default, &Flags);
if(SUCCEEDED(hr))
{
hr = pProcAmp->Get(VideoProcAmp_Contrast, &Val, &Flags);
Val = Min+(Max-Min)*g_Contrast/100;
pProcAmp->Set(VideoProcAmp_Contrast, Val, Flags);
}
}
//饱和度
if( g_Saturation > 0 )
{
hr = pProcAmp->GetRange(VideoProcAmp_Saturation, &Min, &Max, &Step,
&Default, &Flags);
if(SUCCEEDED(hr))
{
hr = pProcAmp->Get(VideoProcAmp_Saturation, &Val, &Flags);
Val = Min+(Max-Min)*g_Saturation/100;
pProcAmp->Set(VideoProcAmp_Saturation, Val, Flags);
}
}
}