IWMEncDataView2::get_ViewAvailable

Windows Media Encoder SDK banner art

The get_ViewAvailable method retrieves a value indicating whether the stream view is available.

Syntax

HRESULT get_ViewAvailable(
  DWORD  dwStreamCookie,
  VARIANT_BOOL*  pfAvail
);

Parameters

dwStreamCookie

[in]  DWORD containing the stream cookie.

pfAvail

[out]  Pointer to a VARIANT_BOOL that indicates availability.

Return Values

If the method succeeds, it returns S_OK. If it fails, it supports the IErrorInfo interface and returns an HRESULT error code.

Return code Number Description
E_POINTER 0x80004003 The pointer to the Boolean value is NULL.

Example Code

#include <windows.h>
#include <atlbase.h>
#include "C:\WMSDK\WMEncSDK9\include\wmencode.h"
#include "C:\WMSDK\WMEncSDK9\include\wmencvu.h"
#include <conio.h> // for kbhit()

    // Declare variables.
    HRESULT hr;
    IWMEncoder* pEncoder;
    IWMEncDataView* pPreview;
    IWMEncDataView2* pPreview2;
    IWMEncDataViewCollection* pPreviewColl;
    IWMEncSourceGroupCollection* pSrcGrpColl;
    IWMEncSourceGroup* pSrcGrp;
    IWMEncSource* pSrcAud;
    IWMEncSource* pSrcVid;
    IWMEncProfileCollection* pProColl;
    IWMEncProfile* pPro;
    IWMEncBroadcast* pBrdCst;

    CComBSTR bstrName = NULL;

    // Initialize the COM library and retrieve a pointer
    // to an IWMEncoder interface.
    hr = CoInitialize(NULL);

    if ( SUCCEEDED( hr ) )
    {
        hr = CoCreateInstance(CLSID_WMEncoder,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_IWMEncoder,
            (void**) &pEncoder);
    }

    // Retrieve a pointer to an IWMEncSourceGroupCollection interface.
    if ( SUCCEEDED( hr ) )
    {
        hr = pEncoder->get_SourceGroupCollection(&pSrcGrpColl);
    }

    // Add a source group to the collection.
    if ( SUCCEEDED( hr ) )
    {
        hr = pSrcGrpColl->Add(CComBSTR("SG_1"), &pSrcGrp);
    }

    // Add an audio source and a video source.
    if ( SUCCEEDED( hr ) )
    {
        hr = pSrcGrp->AddSource(WMENC_VIDEO, &pSrcVid);
    }

    if ( SUCCEEDED( hr ) )
    {
        hr = pSrcGrp->AddSource(WMENC_AUDIO, &pSrcAud);
    }

    // Specify the sources.
    if ( SUCCEEDED( hr ) )
    {
        hr = pSrcVid->SetInput(CComBSTR("Device://default_video_device"));
    }

    if ( SUCCEEDED( hr ) )
    {
        hr = pSrcAud->SetInput(CComBSTR("Device://default_audio_device"));
    }

    // Specify the output.
    if ( SUCCEEDED( hr ) )
    {
        hr = pEncoder->get_Broadcast(&pBrdCst); 
    }

    if ( SUCCEEDED( hr ) )
    {
        hr = pBrdCst->put_PortNumber(WMENC_PROTOCOL_HTTP, 8080);
    }

    // Select the 5th profile from the collection and set it into the source group.
    if ( SUCCEEDED( hr ) )
    {
        hr = pEncoder->get_ProfileCollection(&pProColl);
    }

    if ( SUCCEEDED( hr ) )
    {
        hr = pProColl->Item(4, &pPro); 
    }

    if ( SUCCEEDED( hr ) )
    {
        hr = pSrcGrp->put_Profile(CComVariant(pPro));
    }

    // Retrieve a pointer to a preview object.
    if ( SUCCEEDED( hr ) )
    {
        hr = CoCreateInstance( CLSID_WMEncPreview,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_IWMEncDataView,
            (void**)&pPreview);
    }

    // Retrieve the preview collection.
    if ( SUCCEEDED( hr ) )
    {
        hr = pSrcVid->get_PreviewCollection( &pPreviewColl );
    }

    // Add the postiew object to the data view collection. If you set the
    // cookie to -1, the encoder engine automatically generates a unique cookie.
    long lCookie = -1;
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreviewColl->Add( pPreview, &lCookie);
    }

    // Continue configuring the encoder engine.
    // Initialize the encoder engine.
    if ( SUCCEEDED( hr ) )
    {
        hr = pEncoder->PrepareToEncode(VARIANT_TRUE);
    }

    // Start encoding.
    if ( SUCCEEDED( hr ) )
    {
        hr = pEncoder->Start();
    }

    // Start viewing the stream in a pop-up window.
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview->Start(lCookie);
    }

    // Retrieve a pointer to an IWMEncDataView2 interface.
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview->QueryInterface(IID_IWMEncDataView2, (void**)&pPreview2);
    }

    // Set the view to available. 
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview2->put_ViewAvailable(lCookie, VARIANT_TRUE);
    }

    // Determine whether the view is available. 
    VARIANT_BOOL bIsViewAvailable;
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview2->get_ViewAvailable(lCookie, &bIsViewAvailable);
    }

    // Set the frame rate to balanced. 
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview2->put_FrameRateBalance(lCookie, VARIANT_TRUE);
    }

    // Determine whether the frame rate is balanced. 
    VARIANT_BOOL bIsBalanced;
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview2->get_FrameRateBalance(lCookie, &bIsBalanced);
    }

    // Determine whether the view is running. 
    VARIANT_BOOL bIsRunning;
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview2->IsRunning(lCookie, &bIsRunning);
    }

    // Let the process run 10 seconds.
    int i = 0;
    while ( i < 100 )
    {
        MSG msg;
        Sleep ( 100 );

        while ( PeekMessage( &msg, 0, 0, 0, PM_REMOVE) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
        i++;
    }

    // When finished, stop the preview.
    if ( SUCCEEDED( hr ) )
    {
        hr = pPreview->Stop(lCookie);
    }

    // Stop the encoding process.
    if ( SUCCEEDED( hr ) )
    {
        hr = pEncoder->Stop();
    }

    // Release pointers.
    if ( pPreview )
    {
        pPreview->Release();
        pPreview = NULL;
    }
    if ( pPreview2 )
    {
        pPreview2->Release();
        pPreview2 = NULL;
    }
    if ( pPreviewColl )
    {
        pPreviewColl->Release();
        pPreviewColl = NULL;
    }
    if ( pSrcGrpColl )
    {
        pSrcGrpColl->Release();
        pSrcGrpColl = NULL;
    }
    if ( pSrcGrp )
    {
        pSrcGrp->Release();
        pSrcGrp = NULL;
    }
    if ( pSrcAud )
    {
        pSrcAud->Release();
        pSrcAud = NULL;
    }
    if ( pSrcVid )
    {
        pSrcVid->Release();
        pSrcVid = NULL;
    }
    if ( pProColl )
    {
        pProColl->Release();
        pProColl = NULL;
    }
    if ( pPro )
    {
        pPro->Release();
        pPro = NULL;
    }
    if ( pEncoder )
    {
        pEncoder->Release();
        pEncoder = NULL;
    }

Requirements

Header: wmencvu.h

Library: wmprevu.dll

See Also