<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>directshow &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/directshow/</link>
	<description>Feed of posts on WordPress.com tagged "directshow"</description>
	<pubDate>Sun, 29 Nov 2009 14:45:22 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[How to detect if the logitech webcam using their new LVUVC driver?]]></title>
<link>http://slworkthings.wordpress.com/2009/11/16/how-to-detect-if-the-logitech-webcam-using-their-new-lvuvc-driver/</link>
<pubDate>Mon, 16 Nov 2009 23:46:08 +0000</pubDate>
<dc:creator>slworkthings</dc:creator>
<guid>http://slworkthings.wordpress.com/2009/11/16/how-to-detect-if-the-logitech-webcam-using-their-new-lvuvc-driver/</guid>
<description><![CDATA[Here is a sample showing you how to detect if the logitech webcam using their new LVUVC driver. ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>Here is a sample showing you how to detect if the logitech webcam using their new LVUVC driver.</strong></p>
<p>&#160;</p>
<p>HRESULT hr = 0;<br />
m_pCameraControl = 0;<br />
long omin, omax, ostep, odef, oflags;</p>
<p>// Get a pointer to the IAMCameraControl interface used to control the camera<br />
hr = m_pCaptureFilter-&#62;QueryInterface(IID_IAMCameraControl, (void **)&#38;m_pCameraControl);<br />
if(hr != S_OK)<br />
{<br />
qDebug(&#8220;ERROR: Unable to access IAMCameraControl interface.&#8221;);<br />
m_pCameraControl = 0;<br />
goto LVUVC;<br />
return;<br />
}</p>
<p>// Retrieve information about the pan and tilt controls<br />
hr = m_pCameraControl-&#62;GetRange(CameraControl_Pan, &#38;omin, &#38;omax, &#38;ostep, &#38;odef, &#38;oflags);<br />
if(hr != S_OK)<br />
{<br />
qDebug(&#8220;ERROR: Unable to retrieve CameraControl_Pan property information.&#8221;);<br />
m_pCameraControl = 0;<br />
goto LVUVC;<br />
return;<br />
}<br />
qDebug(&#8220;      Pan control:&#8221;);<br />
printControlInfo(1, omin, omax, ostep, odef, oflags);</p>
<p>hr = m_pCameraControl-&#62;GetRange(CameraControl_Tilt, &#38;omin, &#38;omax, &#38;ostep, &#38;odef, &#38;oflags);<br />
if(hr != S_OK)<br />
{<br />
qDebug(&#8220;ERROR: Unable to retrieve CameraControl_Tilt property information.&#8221;);<br />
m_pCameraControl = 0;<br />
goto LVUVC;<br />
return;<br />
}<br />
qDebug(&#8220;      Tilt control:&#8221;);<br />
printControlInfo(2, omin, omax, ostep, odef, oflags);</p>
<p>hr = m_pCameraControl-&#62;GetRange(CameraControl_Zoom, &#38;omin, &#38;omax, &#38;ostep, &#38;odef, &#38;oflags);<br />
if(hr != S_OK)<br />
{<br />
qDebug(&#8220;ERROR: Unable to retrieve CameraControl_Zoom property information.&#8221;);<br />
//m_pCameraControl = 0;<br />
omin = 50;<br />
omax = 200;<br />
ostep = 1;<br />
odef = 50;<br />
oflags = 0&#215;00000003;<br />
goto LVUVC;<br />
return;<br />
}<br />
qDebug(&#8220;      Zoom control:&#8221;);<br />
printControlInfo(3, omin, omax, ostep, odef, oflags);<br />
return;</p>
<p>LVUVC:<br />
{<br />
m_isNewLWS = false;<br />
qDebug(&#8220;=== try using Logitech UVC Driver Public Property Sets ===&#8221;);<br />
HRESULT hr2 = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet, (void**)&#38;m_pKsPropertySet);</p>
<p>DWORD dwReturned = 0;<br />
//get version<br />
KSPROPERTY_LP1_VERSION_S version2 = {0, 0};<br />
hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
KSPROPERTY_LP1_VERSION,<br />
NULL, 0, &#38;version2, sizeof(version2), &#38;dwReturned);<br />
if (hr2 == S_OK)<br />
qDebug(&#8220;LVUVC version = %d.%d  ret=%d&#8221;, version2.usMajor, version2.usMinor, dwReturned);<br />
else<br />
{<br />
qDebug(&#8220;LVUVC version failed %x %d&#8221;, hr2, dwReturned);<br />
return;<br />
}</p>
<p>//digital pan<br />
KSPROPERTY_LP1_DIGITAL_PAN_S pan2 = {0};<br />
hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
KSPROPERTY_LP1_DIGITAL_PAN,<br />
NULL, 0, &#38;pan2, sizeof(pan2), &#38;dwReturned);<br />
if (hr2 == S_OK)<br />
qDebug(&#8220;LVUVC digital pan = %d  ret=%d&#8221;, pan2.lPan, dwReturned);<br />
else<br />
{<br />
qDebug(&#8220;LVUVC digital pan failed %x %d&#8221;, hr2, dwReturned);<br />
return;<br />
}</p>
<p>//digital tilt<br />
KSPROPERTY_LP1_DIGITAL_TILT_S tilt2 = {0};<br />
hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
KSPROPERTY_LP1_DIGITAL_TILT,<br />
NULL, 0, &#38;tilt2, sizeof(tilt2), &#38;dwReturned);<br />
if (hr2 == S_OK)<br />
qDebug(&#8220;LVUVC digital tilt = %d  ret=%d&#8221;, tilt2.lTilt, dwReturned);<br />
else<br />
{<br />
qDebug(&#8220;LVUVC digital tilt failed %x %d&#8221;, hr2, dwReturned);<br />
return;<br />
}</p>
<p>//digital zoom<br />
KSPROPERTY_LP1_DIGITAL_ZOOM_S zoom2 = {0};<br />
hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
KSPROPERTY_LP1_DIGITAL_ZOOM,<br />
NULL, 0, &#38;zoom2, sizeof(zoom2), &#38;dwReturned);<br />
if (hr2 == S_OK)<br />
qDebug(&#8220;LVUVC digital zoom = %d  ret=%d&#8221;, zoom2.ulZoom, dwReturned);<br />
else<br />
{<br />
qDebug(&#8220;LVUVC digital zoom failed %x %d&#8221;, hr2, dwReturned);<br />
return;<br />
}</p>
<p>m_isNewLWS = true;<br />
}</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Directshow webcam capturing/previewing and controlling Logitech Orbit Pan/Tilt/Zoom]]></title>
<link>http://slworkthings.wordpress.com/2009/11/11/directshow-webcam-capturingpreviewing-and-controlling-logitech-orbit-pantiltzoom/</link>
<pubDate>Wed, 11 Nov 2009 00:51:09 +0000</pubDate>
<dc:creator>slworkthings</dc:creator>
<guid>http://slworkthings.wordpress.com/2009/11/11/directshow-webcam-capturingpreviewing-and-controlling-logitech-orbit-pantiltzoom/</guid>
<description><![CDATA[I wrote this class in QT3 to capture/preview a webcam. Also, it can control logitech orbit PTZ funct]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I wrote this class in QT3 to capture/preview a webcam. Also, it can control logitech orbit PTZ functions.</p>
<p>Header File:</p>
<p>#ifndef _DWMANAGER_H<br />
#define _DWMANAGER_H</p>
<p>#include &#60;qstringlist.h&#62;<br />
#include &#60;qcstring.h&#62;<br />
#include &#60;qdict.h&#62;<br />
#include &#60;qobject.h&#62;<br />
#include &#60;qmutex.h&#62;</p>
<p>#include &#60;qedit.h&#62;<br />
#include &#60;dshow.h&#62;</p>
<p>#include &#60;qdatetime.h&#62;</p>
<p>#define USE_GRABTHREAD     1<br />
#ifndef USE_GRABTHREAD<br />
  #include &#60;qtimer.h&#62;<br />
#else<br />
  #include &#8220;interruptablethread.h&#8221;<br />
  #include &#8220;threadsignal.h&#8221;<br />
#endif</p>
<p>#pragma warning(disable : 4995)<br />
#define SAFE_RELEASE(x) { if (x) x-&#62;Release(); x = NULL; }<br />
//=====================================================<br />
class DWDevice<br />
{<br />
public:<br />
    DWDevice() : name(QString()), id (-1), devicePath(QString()) { }<br />
    virtual ~DWDevice() {}<br />
    QString name;<br />
    int id;   <br />
    QString devicePath;<br />
    QString vidpid;<br />
};</p>
<p>enum DWSTATE {<br />
    DWSTATE_STOPPED,<br />
    DWSTATE_RUNNING<br />
};</p>
<p>//====================================<br />
class PTZINFO<br />
{<br />
public:<br />
    PTZINFO()<br />
    {<br />
        canM_P = false;<br />
        canM_T = false;<br />
        canD_P = false;<br />
        canD_T = false;<br />
        canD_Z = false;<br />
        minPan = 0;<br />
        maxPan = 0;<br />
        curPan = minPan;<br />
        minTilt = 0;<br />
        maxTilt = 0;<br />
        curTilt = minTilt;<br />
        minZoom = 0;<br />
        maxZoom = 0;<br />
        curZoom = minZoom;<br />
        isMTC = false; //true = seedonk&#8217;s black ptz webcam<br />
        isCurrentAutoOrManualTracking = false;<br />
    }</p>
<p>    bool canPTZ()<br />
    {<br />
        return (canD_P &#38;&#38; canD_T &#38;&#38; canD_Z) &#124;&#124; canMechanical();<br />
    }</p>
<p>    bool canMechanical()<br />
    {<br />
        return (canM_P &#38;&#38; canM_T);<br />
    }</p>
<p>    bool    canM_P;<br />
    bool    canM_T;<br />
    bool    canD_P;<br />
    bool    canD_T;<br />
    bool    canD_Z;<br />
    int     minPan;<br />
    int     maxPan;<br />
    int     curPan;<br />
    int     minTilt;<br />
    int     maxTilt;<br />
    int     curTilt;<br />
    int     minZoom;<br />
    int     maxZoom;<br />
    int     curZoom;<br />
    bool    isMTC; //Motion Tracking Camera<br />
    bool    isCurrentAutoOrManualTracking; //true=AutoTracking, false=ManualTracking; TODO: mtc only currently<br />
};<br />
class BAMBINOINFO;<br />
//================================================<br />
class DShowVideoManager : public QObject<br />
{<br />
    Q_OBJECT</p>
<p>public:<br />
    DShowVideoManager();<br />
    ~DShowVideoManager();</p>
<p>    bool enumDevices();<br />
    QDict&#60;DWDevice&#62; getDeviceList();</p>
<p>    bool setDevice(const QString &#38; deviceName, HWND hwnd, int width, int height, int fps);<br />
    bool showPreviewWindow(bool on, HWND hwnd);<br />
    void releaseDevice();<br />
    void startCapture();<br />
    void stopCapture();<br />
    bool isStarted() const { return m_isStarted; }</p>
<p>    //=== PTZ related func ======<br />
    bool set_mechanical_pan_relative(long value);<br />
    bool set_mechanical_tilt_relative(long value);<br />
    void reset_mechanical_pan_tilt();<br />
    bool set_digital_zoom_absolute(long value);<br />
    void reset_digital_zoom();<br />
    int mtc_SetMotorUp(LONG Step_Y, LONG &#38;MotorPos_Y);<br />
    int mtc_SetMotorDown(LONG Step_Y, LONG &#38;MotorPos_Y);<br />
    int mtc_SetMotorLeft(LONG Step_X, LONG &#38;MotorPos_X);<br />
    int mtc_SetMotorRight(LONG Step_X, LONG &#38;MotorPos_X);<br />
    int mtc_SetMotorHome();<br />
    int mtc_SetZoomInOut(int zoomValue); //0=reset, 0 ~ 60<br />
    int mtc_SetAutoTracking(bool on); //false=ManualTracking</p>
<p>    PTZINFO m_ptzInfo;<br />
    bool isMissile() const { return m_isMissile; }<br />
private:<br />
    bool dshowInitOk();<br />
    bool dshowEnumDevices(QDict&#60;DWDevice&#62;&#38; retDeviceList);<br />
    bool dshowBindDevice(const QString&#38; name, IBaseFilter **ppCaptureFilter);<br />
    bool dshowShowPreviewWindow(bool flag, HWND hwnd = 0, int w = 0, int h = 0);</p>
<p>    //==== PTZ related ====<br />
    //dshow ptz<br />
    void queryCameraControl();<br />
    void printControlInfo(int ptzType, long imin, long imax, long istep, long idef, long iflags);<br />
    //robot-o ptz<br />
    void checkIsMTC(const QString&#38; deviceName);<br />
    HRESULT mtc_GetPropertyValue(IKsPropertySet *pKsPropSet,<br />
                                 REFGUID guid,<br />
                                 ULONG uID,<br />
                                 LONG &#38;value);<br />
    HRESULT mtc_SetPropertyValue(IKsPropertySet *pKsPropSet,<br />
                                 REFGUID guid,<br />
                                 ULONG uID,<br />
                                 LONG value);<br />
    int mtc_GetCurrentInfoParam(LONG &#38;nVID,<br />
                                LONG &#38;nPID,<br />
                                LONG &#38;nPreview,<br />
                                LONG &#38;nMTMode);<br />
signals:<br />
    void fireCaptureVideoReceived(QByteArray data, int bitCount);</p>
<p>private slots:<br />
    void dshowTimerTick();</p>
<p>private:<br />
    HRESULT dshowGetNamePin(IBaseFilter *pFilter, const QString&#38; name, IPin **ppPin);<br />
    bool    dshowSetMediaType(int w, int h, int fps);<br />
    void    dshowDeleteMediaType(AM_MEDIA_TYPE *pmt);<br />
#ifdef USE_GRABTHREAD<br />
    //===========================================<br />
    class GrabThread : public InterruptableThread<br />
    {<br />
    public:<br />
        GrabThread(DShowVideoManager *dshowVideoMgr);<br />
        void setMs(int ms) { m_ms = ms; }</p>
<p>    protected:<br />
        virtual void run();</p>
<p>    private:<br />
        DShowVideoManager *m_dshowVideoMgr;<br />
        int                m_ms;<br />
        ThreadSignal       m_threadSignal;<br />
    };<br />
    friend class GrabThread;<br />
    //===========================================<br />
#endif<br />
    IGraphBuilder           *m_pGraph;<br />
    ICaptureGraphBuilder2   *m_pBuilder;<br />
    IBaseFilter             *m_pCaptureFilter;<br />
    IBaseFilter             *m_pGrabber;<br />
    ISampleGrabber          *m_pIGrabber;<br />
    IVideoWindow            *m_video_window;<br />
    IMediaControl           *m_media_control;<br />
    QDict&#60;DWDevice&#62;          m_device_list;<br />
#ifndef USE_GRABTHREAD<br />
    QTimer                   m_timer;<br />
#else<br />
    GrabThread               m_grabThread;<br />
#endif<br />
    char                    *m_buffer;<br />
    int                      m_bufferSize;<br />
    int                      m_width;<br />
    int                      m_height;<br />
    int                      m_fps;<br />
    bool                     m_isSetDeviceOk;<br />
    bool                     m_isStarted;<br />
    HWND                     m_hwnd;</p>
<p>    //PTZ related<br />
    IAMCameraControl        *m_pCameraControl;<br />
    LONG                     m_mtc_MotorPosX;<br />
    LONG                     m_mtc_MotorPosY;<br />
    int                      m_mtc_DriveMode;<br />
    IKsPropertySet          *m_pKsPropertySet;<br />
    bool                     m_isNewLWS;<br />
    bool                     m_isMissile;</p>
<p>};</p>
<p>#endif //_DWMANAGER_H</p>
<p>&#160;</p>
<p> Source File:<br />
#include &#60;windows.h&#62;<br />
#include &#8220;dwmanager.h&#8221;<br />
#include &#8220;colorconversion.h&#8221;<br />
#include &#8220;alpssystem.h&#8221;<br />
#include &#60;Ks.h&#62;    // Required by KsMedia.h<br />
#include &#60;KsMedia.h&#62;  // For KSPROPERTY_CAMERACONTROL_FLAGS_*<br />
#include &#60;qregexp.h&#62;</p>
<p>//Motion Tracking Camera<br />
//=====================================================================<br />
DShowVideoManager::DShowVideoManager()<br />
                  :m_pGraph(0),<br />
                   m_pBuilder(0),<br />
                   m_pCaptureFilter(0),<br />
                   m_pGrabber(0),<br />
                   m_pIGrabber(0),<br />
                   m_video_window(0),<br />
                   m_media_control(0),<br />
                   m_device_list(),<br />
#ifndef USE_GRABTHREAD<br />
                   m_timer(),<br />
#else<br />
                   m_grabThread(this),<br />
#endif<br />
                   m_buffer(0),<br />
                   m_width(0),<br />
                   m_height(0),<br />
                   m_fps(0),<br />
                   m_isSetDeviceOk(false),<br />
                   m_isStarted(false),<br />
                   m_hwnd(0),<br />
                   m_pCameraControl(0),<br />
                   m_mtc_MotorPosX(0),<br />
                   m_mtc_MotorPosY(0),<br />
                   m_mtc_DriveMode(0),<br />
                   m_pKsPropertySet(0),<br />
                   m_isNewLWS(false),<br />
                   m_isMissile(false)<br />
{<br />
    CoInitialize(NULL);<br />
    enumDevices();<br />
}//ctor()</p>
<p>DShowVideoManager::~DShowVideoManager()<br />
{<br />
    stopCapture();<br />
    releaseDevice();<br />
    CoUninitialize( );<br />
}//dtor()</p>
<p>bool DShowVideoManager::enumDevices()<br />
{<br />
    m_device_list.clear();</p>
<p>    ICreateDevEnum *pDevEnum = NULL;<br />
    IEnumMoniker *pEnum = NULL;<br />
   <br />
    // Create the System Device Enumerator.<br />
    HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,<br />
                                  CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,<br />
                                  reinterpret_cast&#60;void**&#62;(&#38;pDevEnum));<br />
    if (SUCCEEDED(hr))<br />
    {<br />
        // Create an enumerator for the video capture category.<br />
        hr = pDevEnum-&#62;CreateClassEnumerator(CLSID_VideoInputDeviceCategory,<br />
                                            &#38;pEnum, 0);</p>
<p>        if (FAILED(hr))<br />
            return false;<br />
    }<br />
    else<br />
        return false;</p>
<p>    int index = 0;<br />
    IMoniker *pMoniker = NULL;<br />
    while (pEnum &#38;&#38; pEnum-&#62;Next(1, &#38;pMoniker, NULL) == S_OK)<br />
    {<br />
        QString devicePath = QString::null;<br />
        QString friendlyName = QString::null;<br />
        QString vidpid = QString::null;</p>
<p>        IPropertyBag *pPropBag = NULL;<br />
        hr = pMoniker-&#62;BindToStorage(0, 0, IID_IPropertyBag,<br />
                                (void**)(&#38;pPropBag));<br />
        if (FAILED(hr))<br />
        {<br />
            pMoniker-&#62;Release();<br />
            continue;  // Skip this one, maybe the next one will work.<br />
        }<br />
        // Find the DevicePath &#38; FriendlyName.<br />
        VARIANT varName1;<br />
        VariantInit(&#38;varName1);<br />
        hr = pPropBag-&#62;Read(L&#8221;DevicePath&#8221;, &#38;varName1, 0);<br />
        if (SUCCEEDED(hr))<br />
        {<br />
            devicePath = qt_winQString(varName1.bstrVal);<br />
            qDebug(&#8220;DSVideoManager::dshowEnumDevices real device path=&#8221;+ devicePath);<br />
            int firstPound = devicePath.find(&#8216;#&#8217;);<br />
            int lastPound = devicePath.findRev(&#8216;#&#8217;);<br />
            if (firstPound &#62;= 0 &#38;&#38; lastPound &#62;= 0 &#38;&#38;<br />
                lastPound &#62; firstPound &#38;&#38;<br />
                lastPound &#8211; firstPound &#8211; 1 &#62; 0)<br />
            {<br />
                devicePath = devicePath.mid(firstPound+1, lastPound-firstPound-1);<br />
            }<br />
            devicePath.replace(&#8216;#&#8217;, &#8216;-&#8217;);<br />
            devicePath.replace(&#8216;&#38;&#8217;, &#8216;-&#8217;);<br />
            QRegExp reg1(&#8220;vid_(<a href="//\\S\\S\\S\\S)-pid_(\\S\\S\\S\\S">\\S\\S\\S\\S)-pid_(\\S\\S\\S\\S</a>)&#8221;, false);<br />
            if (reg1.search(devicePath) &#62; -1)<br />
            {<br />
                QString vid = reg1.cap(1);<br />
                QString pid = reg1.cap(2);<br />
                vidpid = &#8220;vid_&#8221; + vid + &#8220;-pid_&#8221; + pid;<br />
            }</p>
<p>        }<br />
        VariantClear(&#38;varName1);</p>
<p>        VARIANT varName2;<br />
        VariantInit(&#38;varName2);<br />
        hr = pPropBag-&#62;Read(L&#8221;FriendlyName&#8221;, &#38;varName2, 0);<br />
        if (SUCCEEDED(hr))<br />
        {<br />
            friendlyName = qt_winQString(varName2.bstrVal);<br />
        }<br />
        VariantClear(&#38;varName2);</p>
<p>        if (!devicePath.isNull() &#38;&#38; !friendlyName.isNull())<br />
        {<br />
            DWDevice *dwDevice = new DWDevice();<br />
            dwDevice-&#62;id = index++;<br />
            dwDevice-&#62;name = friendlyName;<br />
            dwDevice-&#62;devicePath = devicePath;<br />
            dwDevice-&#62;vidpid = vidpid;<br />
            qDebug(QString(&#8220;DShowVideoManager::dshowEnumDevices(): name [=%1] id=%2 devPath=%3&#8243;).arg(friendlyName).arg(dwDevice-&#62;id).arg(devicePath));<br />
            m_device_list.insert(dwDevice-&#62;name, dwDevice);<br />
        }</p>
<p>        pPropBag-&#62;Release();<br />
        pMoniker-&#62;Release();<br />
    }//while</p>
<p>    SAFE_RELEASE(pEnum);<br />
    SAFE_RELEASE(pDevEnum);</p>
<p>    return true;<br />
}//enumDevices()</p>
<p>QDict&#60;DWDevice&#62; DShowVideoManager::getDeviceList()<br />
{<br />
    return m_device_list;<br />
}</p>
<p>bool DShowVideoManager::showPreviewWindow(bool on, HWND hwnd)<br />
{<br />
    if (on)<br />
    {<br />
        m_hwnd = hwnd;<br />
        return dshowShowPreviewWindow(true, m_hwnd, m_width, m_height);<br />
    }<br />
    else<br />
        return dshowShowPreviewWindow(false);<br />
}</p>
<p>bool DShowVideoManager::setDevice(const QString &#38;deviceName, HWND hwnd, int width, int height, int fps)<br />
{<br />
    releaseDevice();</p>
<p>    if (m_device_list.count() &#60;= 0)<br />
        return false;</p>
<p>    HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,<br />
                                  CLSCTX_INPROC_SERVER,<br />
                                  IID_IGraphBuilder,<br />
                                  (void **)&#38;m_pGraph);<br />
    if (SUCCEEDED(hr))<br />
    {<br />
        hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,<br />
                              CLSCTX_INPROC_SERVER,<br />
                              IID_ICaptureGraphBuilder2,<br />
                              (void **)&#38;m_pBuilder);<br />
        if (SUCCEEDED(hr))<br />
            m_pBuilder-&#62;SetFiltergraph(m_pGraph);<br />
        else<br />
        {<br />
            releaseDevice();<br />
            return false;<br />
        }<br />
    }<br />
    else<br />
    {<br />
        releaseDevice();<br />
        return false;<br />
    }</p>
<p>    if (!dshowInitOk())<br />
        return false;</p>
<p>    m_width = width;<br />
    m_height = height;<br />
    m_fps = fps;<br />
    m_hwnd = hwnd;<br />
    //bind device first<br />
    if (dshowBindDevice(deviceName, &#38;m_pCaptureFilter))<br />
    {<br />
        queryCameraControl();<br />
        checkIsMTC(deviceName);</p>
<p>        if (m_device_list.find(deviceName) != 0)<br />
        {<br />
            DWDevice *dwDevice = m_device_list[deviceName];<br />
            QString vpidstr = dwDevice-&#62;vidpid.lower();<br />
        }<br />
        hr = m_pGraph-&#62;AddFilter(m_pCaptureFilter, L&#8221;Capture Filter&#8221;);<br />
        if (FAILED(hr))<br />
        {<br />
            releaseDevice();<br />
            return false;<br />
        }<br />
    }<br />
    else<br />
    {<br />
        releaseDevice();<br />
        return false;<br />
    }</p>
<p>    //add grabber<br />
    hr = CoCreateInstance(CLSID_SampleGrabber, NULL,<br />
                          CLSCTX_INPROC_SERVER,<br />
                          IID_IBaseFilter, (void **)&#38;m_pGrabber);<br />
    if (FAILED(hr))<br />
    {<br />
        qDebug(&#8220;DShowVideoManager::dshowStart() get grabber failed&#8221;);<br />
        releaseDevice();<br />
        return false;<br />
    }</p>
<p>    m_pGrabber-&#62;QueryInterface(IID_ISampleGrabber, (void**)&#38;m_pIGrabber);<br />
    AM_MEDIA_TYPE mt;<br />
    ZeroMemory(&#38;mt, sizeof(AM_MEDIA_TYPE));<br />
    mt.majortype = MEDIATYPE_Video;<br />
    mt.subtype = MEDIASUBTYPE_RGB24;<br />
    mt.bFixedSizeSamples = true;<br />
    mt.bTemporalCompression = false;<br />
    mt.lSampleSize = m_width * m_height * 3;<br />
    hr = m_pIGrabber-&#62;SetMediaType(&#38;mt);<br />
    if (FAILED(hr))<br />
    {<br />
        qDebug(&#8220;DShowVideoManager::dshowStart() failed to set mediaType&#8221;);<br />
        releaseDevice();<br />
        return false;<br />
    }</p>
<p>    if (!dshowSetMediaType(m_width, m_height, fps))<br />
    {<br />
        qDebug(&#8220;DShowVideoManager::dshowStart() failed to set w/h/fps&#8221;);<br />
        releaseDevice();<br />
        return false;<br />
    }</p>
<p>    //render preview<br />
    hr = m_pBuilder-&#62;RenderStream(&#38;PIN_CATEGORY_PREVIEW,<br />
                                  &#38;MEDIATYPE_Video,<br />
                                  m_pCaptureFilter,<br />
                                  NULL,<br />
                                  NULL);<br />
    if (FAILED(hr))<br />
    {<br />
        qDebug(&#8220;DShowVideoManager::dshowStart() preview failed&#8221;);<br />
        releaseDevice();<br />
        return false;<br />
    }<br />
    m_pGraph-&#62;AddFilter(m_pGrabber, L&#8221;Sample Grabber&#8221;);<br />
    //render capture, connect grabber<br />
    hr = m_pBuilder-&#62;RenderStream(&#38;PIN_CATEGORY_CAPTURE,<br />
                                  &#38;MEDIATYPE_Video,<br />
                                  m_pCaptureFilter,<br />
                                  NULL,<br />
                                  m_pGrabber);</p>
<p>    m_pGraph-&#62;QueryInterface(IID_IVideoWindow, (void **)&#38;m_video_window);<br />
    m_pGraph-&#62;QueryInterface(IID_IMediaControl, (void **)&#38;m_media_control);</p>
<p>    if (!m_video_window &#124;&#124; !m_media_control)<br />
    {<br />
        qDebug(&#8220;DShowVideoManager::dshowStart() !m_video_window &#124;&#124; !m_media_control&#8221;);<br />
        releaseDevice();<br />
        return false;<br />
    }</p>
<p>    //dshowShowPreviewWindow(true, hwnd, m_width, m_height);<br />
    //hide preview first<br />
    m_video_window-&#62;put_AutoShow(OAFALSE);<br />
    m_video_window-&#62;put_Visible(OAFALSE);</p>
<p>    m_bufferSize = m_width * m_height * 3; //RGB24<br />
    m_buffer = new char[m_bufferSize];</p>
<p>    hr = m_media_control-&#62;Run();<br />
    if (FAILED(hr))<br />
    {<br />
        qDebug(&#8220;Cannot grab the webcam; other program might get the control&#8221;);<br />
        releaseDevice();<br />
        return false;<br />
    }<br />
    m_media_control-&#62;Stop();</p>
<p>    m_pIGrabber-&#62;SetOneShot(false);<br />
    m_pIGrabber-&#62;SetBufferSamples(true);</p>
<p>#ifndef USE_GRABTHREAD<br />
    connect(&#38;m_timer, SIGNAL(timeout()), SLOT(dshowTimerTick()));<br />
#endif</p>
<p>    m_isSetDeviceOk = true;</p>
<p>    return true;<br />
}//setDevice()</p>
<p>void DShowVideoManager::releaseDevice()<br />
{<br />
#ifndef USE_GRABTHREAD<br />
    m_timer.stop();<br />
#else<br />
    m_grabThread.interruptAndTerminate(200, 200);<br />
#endif<br />
    if (m_media_control)<br />
        m_media_control-&#62;Stop();</p>
<p>    SAFE_RELEASE(m_media_control);<br />
    SAFE_RELEASE(m_video_window);<br />
    SAFE_RELEASE(m_pIGrabber);<br />
    SAFE_RELEASE(m_pGrabber);<br />
    SAFE_RELEASE(m_pCaptureFilter);<br />
    SAFE_RELEASE(m_pBuilder);<br />
    SAFE_RELEASE(m_pGraph);</p>
<p>    delete[] m_buffer;<br />
    m_buffer = 0;<br />
    m_bufferSize = 0;</p>
<p>    m_isSetDeviceOk = false;<br />
}//releaseDevice()</p>
<p>void DShowVideoManager::startCapture()<br />
{<br />
    if (!m_isStarted)<br />
    {<br />
        if (m_media_control)<br />
            m_media_control-&#62;Run();<br />
#ifndef USE_GRABTHREAD<br />
        m_timer.start(1000/m_fps, false);<br />
#else<br />
        m_grabThread.setMs(1000/m_fps);<br />
        m_grabThread.start(QThread::LowPriority);<br />
#endif<br />
    }<br />
    m_isStarted = true;<br />
}//startCapture()</p>
<p>void DShowVideoManager::stopCapture()<br />
{<br />
    if (m_isStarted)<br />
    {<br />
#ifndef USE_GRABTHREAD<br />
        m_timer.stop();<br />
#else<br />
        m_grabThread.interruptAndTerminate(500, 500);<br />
#endif<br />
        if (m_media_control)<br />
            m_media_control-&#62;Pause();<br />
    }<br />
    m_isStarted = false;<br />
}//stopCapture()<br />
bool DShowVideoManager::dshowInitOk()<br />
{<br />
    if (m_pGraph == 0 &#124;&#124; m_pBuilder == 0)<br />
        return false;<br />
    return true;<br />
}</p>
<p>bool DShowVideoManager::dshowBindDevice(const QString&#38; name, IBaseFilter **ppCaptureFilter)<br />
{<br />
    ICreateDevEnum *pDevEnum = NULL;<br />
    IEnumMoniker *pEnum = NULL;<br />
   <br />
    // Create the System Device Enumerator.<br />
    HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,<br />
                                  CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,<br />
                                  reinterpret_cast&#60;void**&#62;(&#38;pDevEnum));<br />
    if (SUCCEEDED(hr))<br />
    {<br />
        // Create an enumerator for the video capture category.<br />
        hr = pDevEnum-&#62;CreateClassEnumerator(CLSID_VideoInputDeviceCategory,<br />
                                            &#38;pEnum, 0);<br />
    }<br />
    else<br />
        return false;</p>
<p>    IMoniker *pMoniker = NULL;<br />
    bool bindOK = false;<br />
    while (pEnum-&#62;Next(1, &#38;pMoniker, NULL) == S_OK)<br />
    {<br />
        QString friendlyName = QString::null;</p>
<p>        IPropertyBag *pPropBag = NULL;<br />
        hr = pMoniker-&#62;BindToStorage(0, 0, IID_IPropertyBag,<br />
                                (void**)(&#38;pPropBag));<br />
        if (FAILED(hr))<br />
        {<br />
            SAFE_RELEASE(pMoniker);<br />
            continue;  // Skip this one, maybe the next one will work.<br />
        }<br />
        // Find the FriendlyName.<br />
        VARIANT varName1;<br />
        VariantInit(&#38;varName1);<br />
        hr = pPropBag-&#62;Read(L&#8221;FriendlyName&#8221;, &#38;varName1, 0);<br />
        if (SUCCEEDED(hr))<br />
        {<br />
            friendlyName = qt_winQString(varName1.bstrVal);<br />
            if (friendlyName == name)<br />
            {<br />
                IBaseFilter *pCap = NULL;<br />
                hr = pMoniker-&#62;BindToObject(0, 0, IID_IBaseFilter, (void**)(&#38;pCap));<br />
                if (SUCCEEDED(hr))<br />
                {<br />
                    bindOK = true;<br />
                    *ppCaptureFilter = pCap;<br />
                }<br />
                else<br />
                    SAFE_RELEASE(pCap);<br />
            }<br />
        }<br />
        VariantClear(&#38;varName1);</p>
<p>        SAFE_RELEASE(pPropBag);<br />
        SAFE_RELEASE(pMoniker);</p>
<p>        if (bindOK)<br />
            break;<br />
    }//while</p>
<p>    SAFE_RELEASE(pEnum);<br />
    SAFE_RELEASE(pDevEnum);</p>
<p>    return bindOK;<br />
}//dshowBindDevice()</p>
<p>bool DShowVideoManager::dshowShowPreviewWindow(bool flag, HWND hwnd, int w, int h)<br />
{<br />
    if (m_video_window)<br />
    {<br />
        if (flag)<br />
        {<br />
            m_video_window-&#62;put_AutoShow(OAFALSE);<br />
            m_video_window-&#62;SetWindowPosition(0, 0, w, h);<br />
            m_video_window-&#62;put_Owner((OAHWND)hwnd);<br />
            m_video_window-&#62;put_WindowStyle(WS_CHILD&#124;WS_CLIPSIBLINGS);<br />
            m_video_window-&#62;put_Visible(OATRUE);<br />
        }<br />
        else<br />
        {<br />
            m_video_window-&#62;put_AutoShow(OAFALSE);<br />
            m_video_window-&#62;put_Visible(OAFALSE);<br />
        }</p>
<p>        return true;<br />
    }</p>
<p>    return false;</p>
<p>}//dshowShowPreviewWindow()</p>
<p>//called in GrabThread::run() if USE_GRABTHREAD is defined<br />
void DShowVideoManager::dshowTimerTick()<br />
{<br />
    long lbufferSize = 0;<br />
    HRESULT hr;</p>
<p>    if (!m_pIGrabber)<br />
        return;</p>
<p>    hr = m_pIGrabber-&#62;GetCurrentBuffer(&#38;lbufferSize, NULL);<br />
    if (FAILED(hr))<br />
    {<br />
        return;<br />
    }</p>
<p>    if (lbufferSize != m_bufferSize)<br />
    {<br />
        qDebug(&#8220;DShowVideoManageR::dshowTimerTick() buffer count not match %ld&#8221;, lbufferSize);<br />
        return;<br />
    }</p>
<p>    hr = m_pIGrabber-&#62;GetCurrentBuffer(&#38;lbufferSize, (long *)m_buffer);<br />
    if (FAILED(hr))<br />
    {<br />
        qDebug(&#8220;DShowVideoManageR::dshowTimerTick() can&#8217;t get buffer&#8221;);<br />
        return;<br />
    }</p>
<p>    QByteArray data;<br />
    data.fill(0&#215;00, m_width * m_height * 1.5);<br />
    QByteArray flipVertRGB;<br />
    flipVertRGB = convert24to24(m_buffer, m_width, m_height, true, true);<br />
    rgb24toyuv420(reinterpret_cast&#60;const unsigned char *&#62;(flipVertRGB.data()),<br />
                  m_width,<br />
                  m_height,<br />
                  (unsigned char *)(data.data()));<br />
 emit fireCaptureVideoReceived(data, 12);<br />
    emit fireCaptureVideoReceived(flipVertRGB, 24);<br />
}//dshowTimerTick()</p>
<p>HRESULT DShowVideoManager::dshowGetNamePin(IBaseFilter *pFilter, const QString&#38; name, IPin **ppPin)<br />
{<br />
    IEnumPins  *pEnum;<br />
    IPin       *pPin;<br />
    pFilter-&#62;EnumPins(&#38;pEnum);<br />
    while(pEnum-&#62;Next(1, &#38;pPin, 0) == S_OK)<br />
    {<br />
        IPin *curPin = pPin;<br />
        PIN_INFO fInfo;<br />
        if (curPin-&#62;QueryPinInfo(&#38;fInfo) == S_OK)<br />
        {<br />
            QString sss = qt_winQString((void *)fInfo.achName);<br />
            if (sss == name)<br />
            {<br />
                *ppPin = pPin;<br />
                return S_OK;<br />
            }<br />
        }<br />
        pPin-&#62;Release();<br />
    }<br />
    pEnum-&#62;Release();<br />
    return E_FAIL;<br />
}//dshowGetNamePin()</p>
<p>bool DShowVideoManager::dshowSetMediaType(int w, int h, int fps)<br />
{<br />
    if (!m_pCaptureFilter)<br />
        return false;</p>
<p>    IEnumMediaTypes *enumMediaTypes = NULL;<br />
    AM_MEDIA_TYPE *mediaType = NULL;<br />
    bool  foundIt = false;<br />
    bool  setIt = false;</p>
<p>    IPin *pVideoCaptureOutCapture = 0;<br />
    HRESULT hr = dshowGetNamePin(m_pCaptureFilter, &#8220;Capture&#8221;, &#38;pVideoCaptureOutCapture);<br />
    if (FAILED(hr))<br />
        return false;</p>
<p>    hr = pVideoCaptureOutCapture-&#62;EnumMediaTypes(&#38;enumMediaTypes);<br />
    if(SUCCEEDED(hr))<br />
    {<br />
        while(enumMediaTypes-&#62;Next(1, &#38;mediaType, 0) == S_OK)<br />
        {<br />
            if(mediaType-&#62;majortype == MEDIATYPE_Video)<br />
            {<br />
                VIDEOINFOHEADER *vih = (VIDEOINFOHEADER *)mediaType-&#62;pbFormat;<br />
                DWORD biCompression = vih-&#62;bmiHeader.biCompression;<br />
                int   biWidth = vih-&#62;bmiHeader.biWidth;<br />
                int   biHeight = vih-&#62;bmiHeader.biHeight;<br />
                qDebug(&#8220;DShowVideoManager::dshowSetMediaType() biCompression=%d biW=%d biH=%d&#8221;, biCompression, biWidth, biHeight);<br />
                if (biWidth == w &#38;&#38; biHeight == h)<br />
                {<br />
                    vih-&#62;AvgTimePerFrame = (REFERENCE_TIME) (10000000 / fps);<br />
                    foundIt = true;</p>
<p>                    IAMStreamConfig *streamConfig = 0;<br />
                    hr = pVideoCaptureOutCapture-&#62;QueryInterface(IID_IAMStreamConfig, (void **)&#38;streamConfig);<br />
                    if(SUCCEEDED(hr))<br />
                    {<br />
                        hr = streamConfig-&#62;SetFormat(mediaType);<br />
                        if (SUCCEEDED(hr))<br />
                            setIt = true;<br />
                    }<br />
                }</p>
<p>                if (foundIt)<br />
                    break;<br />
            }<br />
            dshowDeleteMediaType(mediaType);<br />
        }//while<br />
        enumMediaTypes-&#62;Release();<br />
    }</p>
<p>    return (foundIt &#38; setIt);<br />
}//dshowSetMediaType()</p>
<p>void DShowVideoManager::dshowDeleteMediaType(AM_MEDIA_TYPE * mediaType)<br />
{<br />
    if (mediaType == NULL)<br />
        return;</p>
<p>    if (mediaType-&#62;cbFormat != 0) {<br />
        CoTaskMemFree((PVOID)mediaType-&#62;pbFormat);<br />
        mediaType-&#62;cbFormat = 0;<br />
        mediaType-&#62;pbFormat = NULL;<br />
    }</p>
<p>    if (mediaType-&#62;pUnk != NULL) {<br />
        mediaType-&#62;pUnk-&#62;Release();<br />
        mediaType-&#62;pUnk = NULL;<br />
    }</p>
<p>    CoTaskMemFree((PVOID)mediaType);<br />
}//dshowDeleteMediaType()</p>
<p>//===== PTZ related =======================<br />
void DShowVideoManager::queryCameraControl()<br />
{<br />
    if (!m_pCaptureFilter)<br />
        return;</p>
<p>    HRESULT hr = 0;<br />
    m_pCameraControl = 0;<br />
    long omin, omax, ostep, odef, oflags;</p>
<p> // Get a pointer to the IAMCameraControl interface used to control the camera<br />
 hr = m_pCaptureFilter-&#62;QueryInterface(IID_IAMCameraControl, (void **)&#38;m_pCameraControl);<br />
 if(hr != S_OK)<br />
 {<br />
  qDebug(&#8220;ERROR: Unable to access IAMCameraControl interface.&#8221;);<br />
        m_pCameraControl = 0;<br />
        goto LVUVC;<br />
  return;<br />
 }</p>
<p> // Retrieve information about the pan and tilt controls<br />
 hr = m_pCameraControl-&#62;GetRange(CameraControl_Pan, &#38;omin, &#38;omax, &#38;ostep, &#38;odef, &#38;oflags);<br />
 if(hr != S_OK)<br />
 {<br />
  qDebug(&#8220;ERROR: Unable to retrieve CameraControl_Pan property information.&#8221;);<br />
        m_pCameraControl = 0;<br />
        goto LVUVC;<br />
  return;<br />
 }<br />
 qDebug(&#8220;      Pan control:&#8221;);<br />
 printControlInfo(1, omin, omax, ostep, odef, oflags);</p>
<p> hr = m_pCameraControl-&#62;GetRange(CameraControl_Tilt, &#38;omin, &#38;omax, &#38;ostep, &#38;odef, &#38;oflags);<br />
 if(hr != S_OK)<br />
 {<br />
  qDebug(&#8220;ERROR: Unable to retrieve CameraControl_Tilt property information.&#8221;);<br />
        m_pCameraControl = 0;<br />
        goto LVUVC;<br />
  return;<br />
 }<br />
 qDebug(&#8220;      Tilt control:&#8221;);<br />
 printControlInfo(2, omin, omax, ostep, odef, oflags);</p>
<p> hr = m_pCameraControl-&#62;GetRange(CameraControl_Zoom, &#38;omin, &#38;omax, &#38;ostep, &#38;odef, &#38;oflags);<br />
 if(hr != S_OK)<br />
 {<br />
  qDebug(&#8220;ERROR: Unable to retrieve CameraControl_Zoom property information.&#8221;);<br />
        //m_pCameraControl = 0;<br />
        omin = 50;<br />
        omax = 200;<br />
        ostep = 1;<br />
        odef = 50;<br />
        oflags = 0&#215;00000003;<br />
        goto LVUVC;<br />
  return;<br />
 }<br />
 qDebug(&#8220;      Zoom control:&#8221;);<br />
 printControlInfo(3, omin, omax, ostep, odef, oflags);<br />
    return;</p>
<p>LVUVC:<br />
    {<br />
        m_isNewLWS = false;<br />
        qDebug(&#8220;=== try using Logitech UVC Driver Public Property Sets ===&#8221;);<br />
        HRESULT hr2 = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet, (void**)&#38;m_pKsPropertySet);</p>
<p>        DWORD dwReturned = 0;<br />
        //get version<br />
        KSPROPERTY_LP1_VERSION_S version2 = {0, 0};<br />
        hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
                                  KSPROPERTY_LP1_VERSION,<br />
                                  NULL, 0, &#38;version2, sizeof(version2), &#38;dwReturned);<br />
        if (hr2 == S_OK)<br />
            qDebug(&#8220;LVUVC version = %d.%d  ret=%d&#8221;, version2.usMajor, version2.usMinor, dwReturned);<br />
        else<br />
        {<br />
            qDebug(&#8220;LVUVC version failed %x %d&#8221;, hr2, dwReturned);<br />
            return;<br />
        }</p>
<p>        //digital pan<br />
        KSPROPERTY_LP1_DIGITAL_PAN_S pan2 = {0};<br />
        hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
                                  KSPROPERTY_LP1_DIGITAL_PAN,<br />
                                  NULL, 0, &#38;pan2, sizeof(pan2), &#38;dwReturned);<br />
        if (hr2 == S_OK)<br />
            qDebug(&#8220;LVUVC digital pan = %d  ret=%d&#8221;, pan2.lPan, dwReturned);<br />
        else<br />
        {<br />
            qDebug(&#8220;LVUVC digital pan failed %x %d&#8221;, hr2, dwReturned);<br />
            return;<br />
        }</p>
<p>        //digital tilt<br />
        KSPROPERTY_LP1_DIGITAL_TILT_S tilt2 = {0};<br />
        hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
                                  KSPROPERTY_LP1_DIGITAL_TILT,<br />
                                  NULL, 0, &#38;tilt2, sizeof(tilt2), &#38;dwReturned);<br />
        if (hr2 == S_OK)<br />
            qDebug(&#8220;LVUVC digital tilt = %d  ret=%d&#8221;, tilt2.lTilt, dwReturned);<br />
        else<br />
        {<br />
            qDebug(&#8220;LVUVC digital tilt failed %x %d&#8221;, hr2, dwReturned);<br />
            return;<br />
        }</p>
<p>        //digital zoom<br />
        KSPROPERTY_LP1_DIGITAL_ZOOM_S zoom2 = {0};<br />
        hr2 = m_pKsPropertySet-&#62;Get(PROPSETID_LOGITECH_PUBLIC1,<br />
                                  KSPROPERTY_LP1_DIGITAL_ZOOM,<br />
                                  NULL, 0, &#38;zoom2, sizeof(zoom2), &#38;dwReturned);<br />
        if (hr2 == S_OK)<br />
            qDebug(&#8220;LVUVC digital zoom = %d  ret=%d&#8221;, zoom2.ulZoom, dwReturned);<br />
        else<br />
        {<br />
            qDebug(&#8220;LVUVC digital zoom failed %x %d&#8221;, hr2, dwReturned);<br />
            return;<br />
        }</p>
<p>        m_isNewLWS = true;<br />
    }<br />
}//queryCameraControl()</p>
<p>void DShowVideoManager::printControlInfo(int ptzType, long imin, long imax, long istep, long idef, long iflags)<br />
{<br />
 QString flagStr;</p>
<p> if(iflags &#38; KSPROPERTY_CAMERACONTROL_FLAGS_AUTO)<br />
  flagStr += QString(&#8220;AUTO &#124; &#8220;);<br />
 else if(iflags &#38; KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL)<br />
  flagStr += QString(&#8220;MANUAL &#124; &#8220;);</p>
<p> if(iflags &#38; KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE)<br />
    {<br />
  flagStr += QString(&#8220;RELATIVE&#8221;);<br />
        if (ptzType == 1) //pan<br />
            m_ptzInfo.canM_P = true;<br />
        else if (ptzType == 2) //tilt<br />
            m_ptzInfo.canM_T = true;<br />
    }<br />
 else<br />
    {<br />
  flagStr += QString(&#8220;ABSOLUTE&#8221;);<br />
        if (ptzType == 1) //pan<br />
            m_ptzInfo.canD_P = true;<br />
        else if (ptzType == 2) //tilt<br />
            m_ptzInfo.canD_T = true;<br />
        else if (ptzType == 3) //zoom<br />
            m_ptzInfo.canD_Z = true;<br />
    }</p>
<p>    if (ptzType == 1) //pan<br />
    {<br />
        m_ptzInfo.minPan = imin;<br />
        m_ptzInfo.maxPan = imax;<br />
        m_ptzInfo.curPan = idef;<br />
    }<br />
    else if (ptzType == 2) //tilt<br />
    {<br />
        m_ptzInfo.minTilt = imin;<br />
        m_ptzInfo.maxTilt = imax;<br />
        m_ptzInfo.curTilt = idef;<br />
    }<br />
    else if (ptzType == 3) //zoom<br />
    {<br />
        m_ptzInfo.minZoom = imin;<br />
        m_ptzInfo.maxZoom = imax;<br />
        m_ptzInfo.curZoom = idef;<br />
    }</p>
<p>    QString totalMsg;<br />
    totalMsg.sprintf(&#8220;        min:   %d\n&#8221;<br />
               &#8220;        max:   %d\n&#8221;<br />
               &#8220;        step:  %d\n&#8221;<br />
               &#8220;        def:   %d\n&#8221;<br />
               &#8220;        flags: 0x%08X (%s)\n&#8221;,<br />
  imin, imax, istep, idef, iflags, flagStr.data());<br />
    qDebug(&#8220;   totalMsg=&#8221; + totalMsg);<br />
}//printControlInfo()</p>
<p>bool DShowVideoManager::set_mechanical_pan_relative(long _value)<br />
{<br />
/*<br />
 * Pans the camera by a given angle.<br />
 *<br />
 * The angle is given in degrees, positive values are clockwise rotation (seen from the top),<br />
 * negative values are counter-clockwise rotation. If the &#8220;Mirror horizontal&#8221; option is<br />
 * enabled, the panning sense is reversed.<br />
 */<br />
    //old +180 &#60;&#8211;&#62; -180<br />
    //new +70  &#60;&#8211;&#62; -70<br />
   <br />
    if (!m_pCameraControl)<br />
        return false;</p>
<p>    long value = _value;<br />
    if (m_isNewLWS)<br />
        value /= 2;<br />
       <br />
 HRESULT hr = 0;<br />
 long flags = KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE &#124; KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;</p>
<p> hr = m_pCameraControl-&#62;Set(CameraControl_Pan, value, flags);<br />
 if(hr != S_OK)<br />
  qDebug(&#8220;ERROR: Unable to set CameraControl_Pan property value to %d. (Error 0x%08X)&#8221;, value, hr);</p>
<p> // Note that we need to wait until the movement is complete, otherwise the next request will<br />
 // fail with hr == 0&#215;800700AA == HRESULT_FROM_WIN32(ERROR_BUSY).<br />
 return (hr == S_OK);<br />
}//set_mechanical_pan_relative()</p>
<p>bool DShowVideoManager::set_mechanical_tilt_relative(long _value)<br />
{<br />
/*<br />
 * Tilts the camera by a given angle.<br />
 *<br />
 * The angle is given in degrees, positive values are downwards, negative values are upwards.<br />
 * If the &#8220;Mirror vertical&#8221; option is enabled, the tilting sense is reversed.<br />
 */<br />
    //old -180<br />
    //     &#124;<br />
    //    +180</p>
<p>    //new +30<br />
    //     &#124;<br />
    //    -30</p>
<p>    if (!m_pCameraControl)<br />
        return false;</p>
<p>    long value = _value;<br />
    if (m_isNewLWS)<br />
    {<br />
        value /= 2;<br />
        value = 0 &#8211; value;<br />
    }</p>
<p> HRESULT hr = 0;<br />
 long flags = KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE &#124; KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;</p>
<p> hr = m_pCameraControl-&#62;Set(CameraControl_Tilt, value, flags);<br />
 if(hr != S_OK)<br />
  qDebug(&#8220;ERROR: Unable to set CameraControl_Tilt property value to %d. (Error 0x%08X)&#8221;, value, hr);</p>
<p> // Note that we need to wait until the movement is complete, otherwise the next request will<br />
 // fail with hr == 0&#215;800700AA == HRESULT_FROM_WIN32(ERROR_BUSY).<br />
 return (hr == S_OK);<br />
}//set_mechanical_tilt_relative()</p>
<p>void DShowVideoManager::reset_mechanical_pan_tilt()<br />
{<br />
/*<br />
 * Resets the camera&#8217;s pan/tilt position by moving into a corner and then back to the center.<br />
 */<br />
    if (!m_pCameraControl)<br />
        return;<br />
    set_mechanical_pan_relative(180);<br />
 Sleep(800);<br />
    set_mechanical_tilt_relative(180);<br />
 Sleep(800);<br />
    set_mechanical_pan_relative(-64);<br />
 Sleep(800);<br />
    set_mechanical_tilt_relative(-24);<br />
 Sleep(800);</p>
<p>}//reset_machanical_pan_tile()</p>
<p>bool DShowVideoManager::set_digital_zoom_absolute(long _value)<br />
{<br />
    //old 50, 100, 150, 200;   50 = no zoom = 1x, 200 = 4x<br />
    //new 100, 200, 300, 400;  100 = no zoom = 1x, 400 = 4x<br />
    if (!m_pCameraControl)<br />
        return false;</p>
<p>    long value = _value;<br />
    if (m_isNewLWS)<br />
    {<br />
        //&#60;50 -&#62; 100, 100 -&#62; 200, 150 -&#62; 300, &#62;200 -&#62; 400,<br />
        if (value &#60;= 50)<br />
            value = 100;<br />
        else if (value == 100)<br />
            value = 200;<br />
        else if (value == 150)<br />
            value = 300;<br />
        else if (value &#62;= 200)<br />
            value = 400;<br />
    }</p>
<p> HRESULT hr = 0;<br />
 long flags = KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE &#124; KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;</p>
<p> hr = m_pCameraControl-&#62;Set(CameraControl_Zoom, value, flags);<br />
 if(hr != S_OK &#38;&#38; m_isNewLWS)<br />
    {<br />
  qDebug(&#8220;ERROR: Unable to set CameraControl_Zoom property value to %d. (Error 0x%08X)&#8221;, value, hr);</p>
<p>        qDebug(&#8220;try using Logitech UVC Driver Public Property Sets&#8221;);<br />
        KSPROPERTY_LP1_DIGITAL_ZOOM_S zoom2 = {0};<br />
        zoom2.ulZoom = value;<br />
        HRESULT hr2 = m_pKsPropertySet-&#62;Set(PROPSETID_LOGITECH_PUBLIC1,<br />
                                  KSPROPERTY_LP1_DIGITAL_ZOOM,<br />
                                  NULL, 0, &#38;zoom2, sizeof(zoom2));</p>
<p>    }</p>
<p> return (hr == S_OK);<br />
}//set_digital_zoom_absolute()</p>
<p>void DShowVideoManager::reset_digital_zoom()<br />
{<br />
    if (!m_pCameraControl)<br />
        return;<br />
 set_digital_zoom_absolute(50);<br />
}//reset_digital_zoom()</p>
<p>//Motion Tracking Camera<br />
HRESULT DShowVideoManager::mtc_GetPropertyValue(IKsPropertySet *pKsPropSet,<br />
                                        REFGUID guid,<br />
                                        ULONG uID,<br />
                                        LONG &#38;value)<br />
{<br />
    KSPROPERTY_VIDEOPROCAMP_S CustomProperty;<br />
    HRESULT hr;<br />
    DWORD cbReturned;<br />
    // GPIO Output<br />
    memset(&#38;CustomProperty, 0, sizeof(KSPROPERTY_VIDEOPROCAMP_S));<br />
    CustomProperty.Property.Set   = guid;<br />
    CustomProperty.Property.Id    = uID;<br />
    CustomProperty.Property.Flags = KSPROPERTY_TYPE_GET;<br />
    CustomProperty.Value = value;<br />
    hr = pKsPropSet-&#62;Get(guid,<br />
                        uID,<br />
                        &#38;CustomProperty,<br />
                        sizeof(CustomProperty),<br />
                        &#38;CustomProperty,<br />
                        sizeof(CustomProperty),<br />
                        &#38;cbReturned<br />
                        );<br />
    if (!FAILED(hr)) value = CustomProperty.Value;<br />
    return hr;<br />
}</p>
<p>HRESULT DShowVideoManager::mtc_SetPropertyValue(IKsPropertySet *pKsPropSet,<br />
                                        REFGUID guid,<br />
                                        ULONG uID,<br />
                                        LONG value)<br />
{<br />
    KSPROPERTY_VIDEOPROCAMP_S CustomProperty;<br />
    HRESULT hr;<br />
    // GPIO Output<br />
    memset(&#38;CustomProperty, 0, sizeof(KSPROPERTY_VIDEOPROCAMP_S));<br />
    CustomProperty.Property.Set   = guid;<br />
    CustomProperty.Property.Id    = uID;<br />
    CustomProperty.Property.Flags = KSPROPERTY_TYPE_SET;<br />
    CustomProperty.Value = value;<br />
    hr = pKsPropSet-&#62;Set(guid,<br />
                        uID,<br />
                        &#38;CustomProperty,<br />
                        sizeof(CustomProperty),<br />
                        &#38;CustomProperty,<br />
                        sizeof(CustomProperty)<br />
                        );<br />
    return hr;<br />
}</p>
<p>int DShowVideoManager::mtc_GetCurrentInfoParam(LONG &#38;nVID,<br />
                                       LONG &#38;nPID,<br />
                                       LONG &#38;nPreview,<br />
                                       LONG &#38;nMTMode)<br />
{<br />
    //LONG nVID, nPID, nPreview, nMTMode;<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                        (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    switch(m_mtc_DriveMode)<br />
    {<br />
    case 0:<br />
        m_mtc_MotorPosX = m_mtc_MotorPosY = 0;<br />
        // VID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_VID,<br />
                                  nVID);<br />
        if (FAILED(hr)) nRet += 0&#215;01;<br />
        // PID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_PID,<br />
                                  nPID);<br />
        if (FAILED(hr)) nRet += 0&#215;02;<br />
        // Preview<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_PREVIEW,<br />
                                  nPreview);<br />
        if (FAILED(hr)) nRet += 0&#215;04;<br />
        //MTMode<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MT,<br />
                                  nMTMode);<br />
        if (FAILED(hr)) nRet += 0&#215;08;</p>
<p>        if (!nRet)<br />
        {<br />
            //Check OK is Old Mode&#8230;<br />
            m_mtc_MotorPosX = m_mtc_MotorPosY = 0;<br />
            m_mtc_DriveMode = 1;<br />
            pKsPropSet-&#62;Release();<br />
            return 0;<br />
        }<br />
        else<br />
            m_mtc_DriveMode = 2;</p>
<p>        //Start Check New Mode<br />
        nRet=0;<br />
        // VID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_VID,<br />
                                  nVID);<br />
        if (FAILED(hr)) nRet += 0&#215;01;<br />
        // PID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_PID,<br />
                                  nPID);<br />
        if (FAILED(hr)) nRet += 0&#215;02;<br />
        // Preview<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_PREVIEW,<br />
                                  nPreview);<br />
        if (FAILED(hr)) nRet += 0&#215;04;<br />
        //MTMode<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MT,<br />
                                  nMTMode);<br />
        if (FAILED(hr)) nRet += 0&#215;08;<br />
        //<br />
        if (nRet)<br />
            m_mtc_DriveMode = 0;<br />
        else<br />
            m_mtc_MotorPosX = m_mtc_MotorPosY = 0;<br />
    break;</p>
<p>    case 1:  //Old Mode<br />
        // VID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_VID,<br />
                                  nVID);<br />
        if (FAILED(hr)) nRet += 0&#215;01;<br />
        // PID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_PID,<br />
                                  nPID);<br />
        if (FAILED(hr)) nRet += 0&#215;02;<br />
        // Preview<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_PREVIEW,<br />
                                  nPreview);<br />
        if (FAILED(hr)) nRet += 0&#215;04;<br />
        //MTMode<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MT,<br />
                                  nMTMode);<br />
        if (FAILED(hr)) nRet += 0&#215;08;<br />
    break;</p>
<p>    case 2:<br />
        // VID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_VID,<br />
                                  nVID);<br />
        if (FAILED(hr)) nRet += 0&#215;01;<br />
        // PID<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_PID,<br />
                                  nPID);<br />
        if (FAILED(hr)) nRet += 0&#215;02;<br />
        // Preview<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_PREVIEW,<br />
                                  nPreview);<br />
        if (FAILED(hr)) nRet += 0&#215;04;<br />
        //MTMode<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MT,<br />
                                  nMTMode);<br />
        if (FAILED(hr)) nRet += 0&#215;08;</p>
<p>    default:<br />
    break;<br />
    }<br />
    //<br />
    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}//GetCurrentInfoParam()</p>
<p>int DShowVideoManager::mtc_SetMotorUp(LONG Step_Y, LONG &#38;MotorPos_Y)<br />
{<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                         (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
    {</p>
<p>        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_Y,<br />
                                  MotorPos_Y);<br />
        if (FAILED(hr))<br />
        {<br />
            MotorPos_Y = m_mtc_MotorPosY;<br />
            return -3;<br />
        }<br />
        else<br />
            m_mtc_MotorPosY = MotorPos_Y;<br />
    }<br />
    else<br />
    {<br />
     MotorPos_Y = m_mtc_MotorPosY;<br />
     Step_Y=40;<br />
    }</p>
<p>    MotorPos_Y -= Step_Y;<br />
    if(MotorPos_Y&#60;0) MotorPos_Y = 0;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_Y,<br />
                                  MotorPos_Y);<br />
    else<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MOTORPOS_Y,<br />
                                  6);<br />
    if (FAILED(hr)) nRet += 0&#215;02;<br />
 else<br />
  m_mtc_MotorPosY = MotorPos_Y;</p>
<p>    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}</p>
<p>int DShowVideoManager::mtc_SetMotorDown(LONG Step_Y, LONG &#38;MotorPos_Y)<br />
{<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
 LONG MaxY = MOTORRANGE_Y;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                         (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
    {<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_Y,<br />
                                  MotorPos_Y);<br />
        if (FAILED(hr))<br />
            return -3;<br />
        else<br />
            m_mtc_MotorPosY = MotorPos_Y;<br />
    }<br />
    else<br />
    {<br />
     MotorPos_Y = m_mtc_MotorPosY;<br />
     Step_Y = 40;<br />
     MaxY = 720;<br />
    }</p>
<p>    MotorPos_Y += Step_Y;<br />
    if(MotorPos_Y &#62; MaxY) MotorPos_Y = MaxY;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_Y,<br />
                                  MotorPos_Y);<br />
    else<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MOTORPOS_Y,<br />
                                  -6);<br />
    if (FAILED(hr)) nRet += 0&#215;02;<br />
 else<br />
  m_mtc_MotorPosY = MotorPos_Y;<br />
    //<br />
    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}</p>
<p>int DShowVideoManager::mtc_SetMotorLeft(LONG Step_X, LONG &#38;MotorPos_X)<br />
{<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                         (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
    {<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_X,<br />
                                  MotorPos_X);<br />
        if (FAILED(hr))<br />
            return -3;<br />
        else<br />
            m_mtc_MotorPosX = MotorPos_X;<br />
    }<br />
    else<br />
    {<br />
     MotorPos_X = m_mtc_MotorPosX;<br />
     Step_X = 40;<br />
    }</p>
<p>    MotorPos_X -= Step_X;<br />
    if(MotorPos_X &#60; 0) MotorPos_X = 0;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_X,<br />
                                  MotorPos_X);<br />
    else<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MOTORPOS_X,<br />
                                  -6);<br />
    if (FAILED(hr)) nRet += 0&#215;02;<br />
 else<br />
  m_mtc_MotorPosX = MotorPos_X;</p>
<p>    //<br />
    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}</p>
<p>int DShowVideoManager::mtc_SetMotorRight(LONG Step_X, LONG &#38;MotorPos_X)<br />
{<br />
 LONG MaxPos;<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                         (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
    {<br />
        hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_X,<br />
                                  MotorPos_X);<br />
        if (FAILED(hr))<br />
            return -3;<br />
        else<br />
            m_mtc_MotorPosX = MotorPos_X;<br />
    }<br />
    else<br />
    {<br />
     MotorPos_X = m_mtc_MotorPosX;<br />
     Step_X = 40;<br />
    }</p>
<p>    MotorPos_X += Step_X;<br />
    MaxPos = (m_mtc_DriveMode == 1) ? MOTORRANGE_X : 720;<br />
    if(MotorPos_X &#62; MaxPos) MotorPos_X = MaxPos;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_X,<br />
                                  MotorPos_X);<br />
    else<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MOTORPOS_X,<br />
                                  6);<br />
    if (FAILED(hr)) nRet += 0&#215;02;<br />
 else<br />
  m_mtc_MotorPosX = MotorPos_X;</p>
<p>    //<br />
    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}</p>
<p>int DShowVideoManager::mtc_SetMotorHome()<br />
{<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                         (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    //X<br />
    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_X,<br />
                                  MOTORRANGE_X&#62;&#62;1);<br />
    else<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MOTORPOS_X,<br />
                                  MOTOR2RANGE_X);<br />
    if (FAILED(hr))<br />
    {<br />
        nRet += 0&#215;01;<br />
        return nRet;<br />
    }<br />
 else<br />
        m_mtc_MotorPosX = (m_mtc_DriveMode == 1) ? (MOTORRANGE_X&#62;&#62;1) : 360;</p>
<p>    //Y<br />
    if (m_mtc_DriveMode == 1)<br />
        hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORPOS_Y,<br />
                                  MOTORRANGE_Y&#62;&#62;1);</p>
<p>    if (FAILED(hr)) nRet += 0&#215;02;<br />
 else<br />
  m_mtc_MotorPosY = (m_mtc_DriveMode == 1) ? (MOTORRANGE_Y&#62;&#62;1) : 360;</p>
<p>    //reset<br />
    if (m_mtc_DriveMode == 1)<br />
    {<br />
        hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MOTORRESET,<br />
                                  1);<br />
        if (FAILED(hr)) nRet += 0&#215;04;<br />
    }</p>
<p>    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}</p>
<p>int DShowVideoManager::mtc_SetZoomInOut(int zoomValue) //0=reset, 0 ~ 60<br />
{<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
    LONG DigitalZoomState = 0L;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                         (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_DIGITALZOOMSTATE,<br />
                                  DigitalZoomState);<br />
    else<br />
     hr = mtc_GetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_DIGITALZOOMSTATE,<br />
                                  DigitalZoomState);<br />
    if (FAILED(hr))<br />
    {<br />
        nRet += 0&#215;01;<br />
        return nRet;<br />
    }</p>
<p>    if (zoomValue &#62; 59)<br />
        zoomValue = 60;<br />
    if (zoomValue &#60; 0)<br />
        zoomValue = 0;</p>
<p>    DigitalZoomState = zoomValue;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_DIGITALZOOMSTATE,<br />
                                  DigitalZoomState);<br />
    else<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_DIGITALZOOMSTATE,<br />
                                  DigitalZoomState);<br />
    if (FAILED(hr)) nRet += 0&#215;02;</p>
<p>    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}</p>
<p>int DShowVideoManager::mtc_SetAutoTracking(bool on)<br />
{<br />
    int nRet = 0;<br />
    HRESULT hr;<br />
    IKsPropertySet   *pKsPropSet = NULL;<br />
    LONG MTMode = (on == true) ? 1L : 0L;<br />
    //     <br />
    if (!m_pCaptureFilter) return -1;<br />
    hr = m_pCaptureFilter-&#62;QueryInterface(IID_IKsPropertySet,<br />
                                         (void**)&#38;pKsPropSet);<br />
    if (FAILED(hr)) return -2;</p>
<p>    if (m_mtc_DriveMode == 1)<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_OPTIONS,<br />
                                  KSPROPERTY_CUSTOM_OPTIONS_MT,<br />
                                  MTMode);<br />
    else<br />
     hr = mtc_SetPropertyValue(pKsPropSet,<br />
                                  PROPSETID_CUSTOM_PROPERTY,<br />
                                  KSPROPERTY_CUSTOM_OPTION2_MT,<br />
                                  MTMode);<br />
    if (FAILED(hr)) nRet += 0&#215;01;</p>
<p>    pKsPropSet-&#62;Release(); <br />
    return nRet;<br />
}</p>
<p>void DShowVideoManager::checkIsMTC(const QString&#38; deviceName)<br />
{<br />
    LONG VidNo = 0L, PidNo = 0L, PreviewNo = 0L, MTModeNo = 0L;<br />
    if (mtc_GetCurrentInfoParam(VidNo, PidNo, PreviewNo, MTModeNo) == 0)<br />
    {<br />
        if ((VidNo == 0&#215;2770 &#38;&#38; PidNo == 0&#215;930B) &#124;&#124;<br />
            (VidNo == 0&#215;0AD2 &#38;&#38; PidNo == 0&#215;931B))<br />
        {<br />
            m_ptzInfo.isMTC = true;<br />
            m_ptzInfo.isCurrentAutoOrManualTracking = MTModeNo;<br />
        }<br />
    }<br />
}<br />
#ifdef USE_GRABTHREAD<br />
//===================================================<br />
DShowVideoManager::GrabThread::GrabThread(DShowVideoManager *dshowVideoMgr)<br />
                              :InterruptableThread(&#8220;GrabThread&#8221;),<br />
                               m_dshowVideoMgr(dshowVideoMgr),<br />
                               m_ms(100),<br />
                               m_threadSignal()<br />
{<br />
    setThreadSignal(&#38;m_threadSignal);<br />
}</p>
<p>void DShowVideoManager::GrabThread::run()<br />
{<br />
    while (!isInterrupted())<br />
    {<br />
        m_dshowVideoMgr-&#62;dshowTimerTick();<br />
        m_threadSignal.wait(m_ms);<br />
    }<br />
}<br />
//==========================================================<br />
#endif</p>
<p>&#160;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Codec Pack 5.40 (Full)]]></title>
<link>http://netvietnam.org/2009/11/07/k-lite-codec-pack-5-40-full/</link>
<pubDate>Fri, 06 Nov 2009 17:01:47 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/11/07/k-lite-codec-pack-5-40-full/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Codec Pack 5.30 (Full)]]></title>
<link>http://netvietnam.org/2009/10/30/k-lite-codec-pack-5-30-full/</link>
<pubDate>Fri, 30 Oct 2009 15:26:51 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/10/30/k-lite-codec-pack-5-30-full/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Codec Pack 5.20 (Full)]]></title>
<link>http://netvietnam.org/2009/10/14/k-lite-codec-pack-5-20-full/</link>
<pubDate>Wed, 14 Oct 2009 16:54:17 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/10/14/k-lite-codec-pack-5-20-full/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Codec Pack 5.10 (Full)]]></title>
<link>http://netvietnam.org/2009/09/04/k-lite-codec-pack-5-10-full/</link>
<pubDate>Fri, 04 Sep 2009 14:38:33 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/09/04/k-lite-codec-pack-5-10-full/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Codec Pack 5.05 (Full)]]></title>
<link>http://netvietnam.org/2009/08/12/k-lite-codec-pack-5-05-full/</link>
<pubDate>Wed, 12 Aug 2009 01:58:25 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/08/12/k-lite-codec-pack-5-05-full/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[FFDShow MPEG-4 Video Decoder Rev 3036 x86/x64]]></title>
<link>http://filemirrors.wordpress.com/2009/07/29/ffdshow-mpeg-4-video-decoder-rev-3036-x86x64/</link>
<pubDate>Wed, 29 Jul 2009 21:29:42 +0000</pubDate>
<dc:creator>filemirrors</dc:creator>
<guid>http://filemirrors.wordpress.com/2009/07/29/ffdshow-mpeg-4-video-decoder-rev-3036-x86x64/</guid>
<description><![CDATA[FFDshow is a DirectShow decoding filter for decompressing DivX, XviD, H.264, FLV, WMV, MPEG-1 and MP]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img src="http://filemirrors.wordpress.com/files/2009/04/ffdshow-config1.png" alt="ffdshow-config1" title="ffdshow-config1" width="581" height="496" class="alignnone size-full wp-image-70" /></p>
<p>FFDshow is a DirectShow decoding filter for decompressing DivX, XviD, H.264, FLV, WMV, MPEG-1 and MPEG-2, MPEG-4 movies. It uses libavcodec from ffmpeg project for video decompression, postprocessing code from mplayer to enhance visual quality of low bitrate movies, and is based on original DirectShow filter from XviD, which is GPL&#8217;ed educational implementation of MPEG4 encoder. FFDshow can be configured to display subtitles, to enable or disable various built-in codecs, to grab screenshots, to enable keyboard control, and to enhance movies with increased resolution, sharpness, and many other post-processing filters. It has the ability to manipulate audio with effects like an equalizer, a Dolby decoder, reverb, Winamp DSP plugins, and more. Some of the postprocessing is borrowed from the MPlayer project and AviSynth filters.</p>
<p>- <a href="http://uploading.com/files/CBH60SE2/ffdshow_rev3036_20090716_x86-x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3036 x86/x64</b></a><br />
- <a href="http://www.easy-share.com/1907064960/ffdshow_rev3036_20090716_x86-x64.zip" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3036 x86/x64 (mirror 1)</b></a><br />
- <a href="http://hotfile.com/dl/9373909/89bfc9f/ffdshow_rev3036_20090716_x86-x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3036 x86/x64 (mirror 2)</b></a><br />
- <a href="http://qubefiles.com/?file=/getfile/034d4076afbdee5c6d59855c5bd65202d7676a927e72a3df53/ffdshow_rev3036_20090716_x86_x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3036 x86/x64 (mirror 3)</b></a><br />
- <a href="http://sharingmatrix.com/file/216632/ffdshow_rev3036_20090716_x86-x64.zip" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3036 x86/x64 (mirror 4)</b></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Microsoft устранит уязвимость DirectX в файле QuickTime]]></title>
<link>http://hitech21.wordpress.com/2009/07/19/microsoft-directx-quicktime/</link>
<pubDate>Sun, 19 Jul 2009 17:48:29 +0000</pubDate>
<dc:creator>hitech21</dc:creator>
<guid>http://hitech21.wordpress.com/2009/07/19/microsoft-directx-quicktime/</guid>
<description><![CDATA[  Представитель Microsoft объявил, что уже на следующей недели свет увидят шесть новых обновлений, к]]></description>
<content:encoded><![CDATA[  Представитель Microsoft объявил, что уже на следующей недели свет увидят шесть новых обновлений, к]]></content:encoded>
</item>
<item>
<title><![CDATA[Microsoft sửa lỗi DirectShow nguy hiểm]]></title>
<link>http://netvietnam.org/2009/07/15/microsoft-s%e1%bb%ada-l%e1%bb%97i-directshow-nguy-hi%e1%bb%83m/</link>
<pubDate>Wed, 15 Jul 2009 12:11:46 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/07/15/microsoft-s%e1%bb%ada-l%e1%bb%97i-directshow-nguy-hi%e1%bb%83m/</guid>
<description><![CDATA[Bản cập nhật bảo mật tháng 7 do Microsoft phát hành hôm qua (14-7) mới chỉ khắc phục được 2 trong tổ]]></description>
<content:encoded><![CDATA[Bản cập nhật bảo mật tháng 7 do Microsoft phát hành hôm qua (14-7) mới chỉ khắc phục được 2 trong tổ]]></content:encoded>
</item>
<item>
<title><![CDATA[Se multiplican los ataques contra errores no resueltos de Microsoft]]></title>
<link>http://vulnerabilityteam.wordpress.com/2009/07/15/se-multiplican-los-ataques-contra-errores-no-resueltos-de-microsoft/</link>
<pubDate>Wed, 15 Jul 2009 10:55:20 +0000</pubDate>
<dc:creator>komz</dc:creator>
<guid>http://vulnerabilityteam.wordpress.com/2009/07/15/se-multiplican-los-ataques-contra-errores-no-resueltos-de-microsoft/</guid>
<description><![CDATA[Los investigadores no se ponen de acuerdo en torno a la intensidad de los ataques, pero sí coinciden]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;">Los investigadores no se ponen de acuerdo en torno a la intensidad de los ataques, pero sí coinciden al señalar que el fallo de <strong>Active X es una gran amenaza.</strong></p>
<p style="text-align:justify;">Los ataques que explotan la última vulnerabilidad de Microsoft están creciendo rápidamente en cantidad e intensidad, tal y como han advertido numerosas compañías de seguridad, mientras hacen sonar las alarmas sobre el avance de estas amenazas.</p>
<p style="text-align:justify;"><strong>Symantec, Sunbelt Software y el Internet Storm Center (ISC) de SANS han aumentado sus advertencias al respecto,</strong> después de que Microsoft anunciara que los atacantes estaban explotando un fallo en un control ActiveX utilizado por Internet Explorer para mostrar hojas de cálculo de Excel. <strong>No hay, por ahora, solución para esta vulnerabilidad, ni tampoco Microsoft tiene previsto lanzar una en breve.</strong> <strong>Lo que sí está disponible es un parche temporal,</strong> pero los expertos creen que la mayoría de los usuarios no sacarán partido de esta protección.</p>
<p style="text-align:justify;"><strong>Symantec elevó su ranking ThreatCon al segundo puesto de cuatro niveles</strong>. “Estamos viendo que ha sido explotado pero, por ahora, sólo a una escala limitada”, ha explicado Ben Greenbaum, investigador senior de Symantec.</p>
<p style="text-align:justify;">Sunbelt también ha elevado su ranking a un nivel más alto. “Hemos llevado el nivel de amenazas Sunbelt hasta un grado más elevado desde que nuestros investigadores y al menos otras dos grandes compañías encontraran este código vulnerable”, ha declarado Tom Kelchner, investigador de malware de la firma con sede en Florida.</p>
<p style="text-align:justify;">Mientras tanto, en ISC han establecido el nivel Amarillo tras descubrir que numerosas páginas Web contenían estos códigos de ataque. “Se estaba produciendo un ataque de alto nivel contra una empresa que recibió un documento de Microsoft Office con código HTML embebido”, han declarado desde la ISC en un blog. “Era particularmente desagradable, había sido diseñado específicamente para el objetivo al que se dirigía, con el documento etiquetado con la información apropiada del contacto y con el asunto específicamente dirigido al receptor del mismo”.</p>
<p style="text-align:justify;">Otro tipo de ataques más amplios se originan habitualmente <strong>desde páginas webs de China,</strong> señalan desde ISC. “<strong>Un dominio .cn</strong> está utilizando una versión del fallo, lo que puede convertirse en un paquete de ataque y es similar a recientes ataques a DirectShow”.</p>
<p style="text-align:justify;">La semana pasada, Microsoft confirmó que diferentes hackers estaban explotando un fallo no resuelto en un control ActiveX que es parte de DirectShow, un componente de la plataforma gráfica DirectX de Windows.</p>
<p style="text-align:justify;"><strong>Por su parte, McAfee se ha hecho eco de las últimas informaciones de ISC, confirmando que ese código de ataque que se dirigía al fallo de ActiveX ha sido añadido a un conjunto de herramientas Web y está siendo distribuido desde diferentes páginas piratas chinas.</strong></p>
<p style="text-align:justify;">Este conjunto de herramientas también contienen código de ataque para la última vulnerabilidad de DirectShow. Así, algunos equipos de España, Reino Unido y Alemania también mostraron evidencias de haber sido comprometidos por estos ataques. Al menos es lo que afirma el investigador de McAfee Haowei Ren en un post de la firma.</p>
<p style="text-align:justify;">Por su parte, Greenbaum, de Symantec, ha añadido que, mientras que la compañía está viendo cómo se produce sólo un pequeño número de ataques, sí tiene el potencial suficiente como para convertirse en algo grande rápidamente. “<strong>Es el tipo de ataque que puede ser muy fácilmente hospedado en un servidor Web y cumple todos los criterios de los ataques a gran escala en un futuro relativamente cercano”.</strong> El número y diversidad de ataques podría seguir creciendo porque el citado código está públicamente disponible.</p>
<p style="text-align:justify;">Aunque Microsoft está trabajando en una solución para esta nueva vulnerabilidad, aún no está claro cuándo estará disponible. Los usuarios no recibirán a lo largo del día de hoy una protección automática. “Desafortunadamente, la actualización para esta vulnerabilidad no está aún lista para su distribución a gran escala”, ha declarado un portavoz de la firma, “recomendamos a nuestros clientes que realicen una reparación automática para ayudar a asegurar su entorno contra esta vulnerabilidad mientras finalizamos el desarrollo y pruebas de esta actualización”.</p>
<p style="text-align:justify;">Fix It precisa que los usuarios se dirijan hasta la Web de soporte de Microsoft y desde allí se descarguen, instalen y pongan en marcha la herramienta para desactivar este control ActiveX. Eso significa que muchos usuarios no estarán protegidos contra este fallo. “Muchos usuarios no realizarán esta tarea manualmente”, apunta Greenbaum.</p>
<p><a href="http://vulnerabilityteam.wordpress.com/2009/06/24/symantec-preve-un-aumento-de-los-ataques-a-una-brecha-de-dia-cero-en-windows/" target="_blank">OTRAS REFERENCIAS</a></p>
<p><a href="http://www.securityfocus.com/bid/35616/solution" target="_blank">SOLUCIONES SEGUN MICROSOFT</a></p>
<p><em>fuente: idg.es</em></p>
<p><a href="http://vulnerabilityteam.wordpress.com/files/2009/07/win-vista-patch-bandaid-sp1.jpg"><img class="alignnone size-full wp-image-4221" title="win-vista-patch-bandaid-sp1" src="http://vulnerabilityteam.wordpress.com/files/2009/07/win-vista-patch-bandaid-sp1.jpg" alt="win-vista-patch-bandaid-sp1" width="300" height="299" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Mega Codec Pack 5.00 Full]]></title>
<link>http://netvietnam.org/2009/07/12/k-lite-mega-codec-pack-5-00-full/</link>
<pubDate>Sun, 12 Jul 2009 09:13:41 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/07/12/k-lite-mega-codec-pack-5-00-full/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Mega Codec Pack 5.00]]></title>
<link>http://netvietnam.org/2009/07/12/k-lite-mega-codec-pack-5-00/</link>
<pubDate>Sun, 12 Jul 2009 09:11:27 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/07/12/k-lite-mega-codec-pack-5-00/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Mega Codec Pack 4.95 Full]]></title>
<link>http://netvietnam.org/2009/07/02/k-lite-mega-codec-pack-4-95-full/</link>
<pubDate>Thu, 02 Jul 2009 06:16:02 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/07/02/k-lite-mega-codec-pack-4-95-full/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[K-Lite Mega Codec Pack 4.95]]></title>
<link>http://netvietnam.org/2009/07/02/k-lite-mega-codec-pack-4-95/</link>
<pubDate>Thu, 02 Jul 2009 06:11:51 +0000</pubDate>
<dc:creator>Nhân Mã</dc:creator>
<guid>http://netvietnam.org/2009/07/02/k-lite-mega-codec-pack-4-95/</guid>
<description><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></description>
<content:encoded><![CDATA[K-Lite Mega Codec Pack là tập hợp các bộ mã hóa/giải mã, các bộ lọc DirectShow và các công cụ. Các b]]></content:encoded>
</item>
<item>
<title><![CDATA[Symantec prevé un aumento de los ataques a una brecha de día cero en Windows]]></title>
<link>http://vulnerabilityteam.wordpress.com/2009/06/24/symantec-preve-un-aumento-de-los-ataques-a-una-brecha-de-dia-cero-en-windows/</link>
<pubDate>Wed, 24 Jun 2009 11:50:45 +0000</pubDate>
<dc:creator>komz</dc:creator>
<guid>http://vulnerabilityteam.wordpress.com/2009/06/24/symantec-preve-un-aumento-de-los-ataques-a-una-brecha-de-dia-cero-en-windows/</guid>
<description><![CDATA[El código de explotación de una vulnerabilidad aún no parcheada en Microsoft 2000, Windows XP y Serv]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:justify;"><strong>El código de explotación de una vulnerabilidad aún no parcheada en Microsoft 2000, Windows XP y Server 2003 ha sido añadida a un toolkit multiataque,</strong> según ha advertido Symantec, lo que podría hacer que los intentos de explotación de la brecha aumenten pronto.</p>
<p style="text-align:justify;">Symantec ha explicado que el código de ataque en cuestión, diseñado para aprovechar el agujero<a href="http://vulnerabilityteam.wordpress.com/2009/05/29/vulnerabilidad-microsoft-directx-directshow-quicktime-video-remote-code-execution-vulnerability/" target="_blank"> DirectShow</a> cuya existencia Microsoft reconoció hace casi un mes, ha sido añadido al menos a un kit de ataque basado en Web. <strong>“Esto probablemente provocará un uso extensivo de este malware”,</strong> asegura Liam Murchu, investigador del grupo de respuesta de seguridad de Symantec en una entrada de blog corporativa.</p>
<p style="text-align:justify;">La brecha en cuestión no afecta a las últimas versiones del sistema operativo de Microsoft, como Windows Vista o Server 2008, ni tampoco a la próxima versión de la plataforma, Windows 7, actualmente en fase de “edición candidata” (último paso antes de su lanzamiento comercial).</p>
<p style="text-align:justify;">A diferencia de otras ataques a vulnerabilidades de día cero contra agujeros del software de Microsoft, los lanzados contra DirectShow no están dirigidos a individuos u organizaciones específicas. “No se trata de un ataque enfocado, pero sí es de distribución limitada”, señala Ben Greenbaum, director senior de investigación de Symantec.</p>
<p style="text-align:justify;"><strong>Funciona como un ataque de phishing en el que una falsa página de log-in para el software Windows Live de Microsoft hospeda malware que intenta secuestrar los PC de los usuarios</strong>. <strong>El sitio de phishing redirige inadvertidamente al visitante a otra URL que hospeda el código de ataque, que tiene la forma de un archivo .avi malicioso</strong>. También pueden descargarse en el sistema de la víctima múltiples archivos .dll malformateados. Éstos, a su vez contienen un archivo .exe que descarga e instala un troyano que suma el PC comprometido a una botnet en crecimiento.</p>
<p style="text-align:justify;">Aunque el parche para el problema aún no está disponible, Microsoft ha sugerido a los usuarios <strong>deshabilitar la funcionalidad de análisis gramatical de QuickTime sobre Windows 2000, XP y Server 2003. QuickTime, el reproductor multimedia de Apple no es la fuente de la vulnerabilidad, pero el analizador QuickTime en DirectShow, uno de los componentes de DirectX, sí.</strong></p>
<p style="text-align:justify;">Microsof ha publicado <a href="http://support.microsoft.com/default.aspx/kb/971778" target="_blank">una herramienta que automatiza el proceso de cancelación de esta capacidad en Windows</a>, que sin ella requeriría editar el registro Windows, y espera publicar el parche para la brecha en su próximo boletín de seguridad.</p>
<p><em>fuente: idg.es</em></p>
<p><a href="http://go.microsoft.com/?linkid=9668323"><img class="alignleft size-full wp-image-3942" title="win fix it" src="http://vulnerabilityteam.wordpress.com/files/2009/06/win-fix-it.jpg" alt="win fix it" width="248" height="169" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ataques a bug não corrigido do Windows vão aumentar, diz Symantec]]></title>
<link>http://bykillerxd.wordpress.com/2009/06/23/ataques-a-bug-nao-corrigido-do-windows-vao-aumentar-diz-symantec/</link>
<pubDate>Tue, 23 Jun 2009 20:35:18 +0000</pubDate>
<dc:creator>Killer XD</dc:creator>
<guid>http://bykillerxd.wordpress.com/2009/06/23/ataques-a-bug-nao-corrigido-do-windows-vao-aumentar-diz-symantec/</guid>
<description><![CDATA[A exploração de uma vulnerabilidade no Windows 2000, XP e Server 2003 tem sido adicionada a um novo ]]></description>
<content:encoded><![CDATA[A exploração de uma vulnerabilidade no Windows 2000, XP e Server 2003 tem sido adicionada a um novo ]]></content:encoded>
</item>
<item>
<title><![CDATA[FFDShow MPEG-4 Video Decoder Rev 3014 x86/x64]]></title>
<link>http://filemirrors.wordpress.com/2009/06/21/ffdshow-mpeg-4-video-decoder-rev-3014-x86x64/</link>
<pubDate>Sun, 21 Jun 2009 19:58:45 +0000</pubDate>
<dc:creator>filemirrors</dc:creator>
<guid>http://filemirrors.wordpress.com/2009/06/21/ffdshow-mpeg-4-video-decoder-rev-3014-x86x64/</guid>
<description><![CDATA[FFDshow is a DirectShow decoding filter for decompressing DivX, XviD, H.264, FLV, WMV, MPEG-1 and MP]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img src="http://filemirrors.wordpress.com/files/2009/04/ffdshow-config1.png" alt="ffdshow-config1" title="ffdshow-config1" width="581" height="496" class="alignnone size-full wp-image-70" /></p>
<p>FFDshow is a DirectShow decoding filter for decompressing DivX, XviD, H.264, FLV, WMV, MPEG-1 and MPEG-2, MPEG-4 movies. It uses libavcodec from ffmpeg project for video decompression, postprocessing code from mplayer to enhance visual quality of low bitrate movies, and is based on original DirectShow filter from XviD, which is GPL&#8217;ed educational implementation of MPEG4 encoder. FFDshow can be configured to display subtitles, to enable or disable various built-in codecs, to grab screenshots, to enable keyboard control, and to enhance movies with increased resolution, sharpness, and many other post-processing filters. It has the ability to manipulate audio with effects like an equalizer, a Dolby decoder, reverb, Winamp DSP plugins, and more. Some of the postprocessing is borrowed from the MPlayer project and AviSynth filters.</p>
<p>- <a href="http://www.easy-share.com/1905982949/ffdshow_rev3014_20090620__x86_x64.zip" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3014 x86/x64</b></a><br />
- <a href="http://uploading.com/files/BP8UCOLS/ffdshow_rev3014_20090620__x86_x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3014 x86/x64 (mirror 1)</b></a><br />
- <a href="http://hotfile.com/dl/7345672/bdcfe53/ffdshow_rev3014_20090620__x86_x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3014 x86/x64 (mirror 2)</b></a><br />
- <a href="http://saveqube.com/getfile/011b2ff8ae071a72a6e6b1a4faec9de615676a927e72a3df53/ffdshow_rev3014_20090620__x86_x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3014 x86/x64 (mirror 3)</b></a><br />
- <a href="http://sharingmatrix.com/file/170534/ffdshow_rev3014_20090620__x86_x64.zip" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3014 x86/x64 (mirror 4)</b></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[FFDShow MPEG-4 Video Decoder Rev 3008 x86/x64]]></title>
<link>http://filemirrors.wordpress.com/2009/06/17/ffdshow-mpeg-4-video-decoder-rev-3008-x86x64/</link>
<pubDate>Wed, 17 Jun 2009 18:19:28 +0000</pubDate>
<dc:creator>filemirrors</dc:creator>
<guid>http://filemirrors.wordpress.com/2009/06/17/ffdshow-mpeg-4-video-decoder-rev-3008-x86x64/</guid>
<description><![CDATA[FFDshow is a DirectShow decoding filter for decompressing DivX, XviD, H.264, FLV, WMV, MPEG-1 and MP]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img src="http://filemirrors.wordpress.com/files/2009/04/ffdshow-config1.png" alt="ffdshow-config1" title="ffdshow-config1" width="581" height="496" class="alignnone size-full wp-image-70" /></p>
<p>FFDshow is a DirectShow decoding filter for decompressing DivX, XviD, H.264, FLV, WMV, MPEG-1 and MPEG-2, MPEG-4 movies. It uses libavcodec from ffmpeg project for video decompression, postprocessing code from mplayer to enhance visual quality of low bitrate movies, and is based on original DirectShow filter from XviD, which is GPL&#8217;ed educational implementation of MPEG4 encoder. FFDshow can be configured to display subtitles, to enable or disable various built-in codecs, to grab screenshots, to enable keyboard control, and to enhance movies with increased resolution, sharpness, and many other post-processing filters. It has the ability to manipulate audio with effects like an equalizer, a Dolby decoder, reverb, Winamp DSP plugins, and more. Some of the postprocessing is borrowed from the MPlayer project and AviSynth filters.</p>
<p>- <a href="http://uploading.com/files/SQ6Q0VKW/ffdshow_rev3008_20090616_x86_x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3008 x86/x64</b></a><br />
- <a href="http://www.easy-share.com/1905851065/ffdshow_rev3008_20090616_x86_x64.zip" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3008 x86/x64 (mirror 1)</b></a><br />
- <a href="http://hotfile.com/dl/7066228/4119ac3/ffdshow_rev3008_20090616_x86_x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3008 x86/x64 (mirror 2)</b></a><br />
- <a href="http://sharingmatrix.com/file/166956/ffdshow_rev3008_20090616_x86_x64.zip" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3008 x86/x64 (mirror 3)</b></a><br />
- <a href="http://saveqube.com/getfile/0201ba331951cfcee09016aad189dd5817676a927e72a3df53/ffdshow_rev3008_20090616_x86_x64.zip.html" target="_blank"><b>Download FFDShow MPEG-4 Video Decoder Rev 3008 x86/x64 (mirror 4)</b></a></p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
