IWMEncProfileCollection::Refresh

Windows Media Encoder SDK banner art

The Refresh method removes the old profile collection and populates a new collection.

Syntax

HRESULT Refresh();

Parameters

This method takes no parameters.

Return Values

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

Remarks

Use the Refresh method to update all of the available profiles after you have modified the collection, for example by changing the custom profile directory.

Example Code

// Include libraries.

#include <windows.h>
#include <atlbase.h>    // Includes CComBSTR.
#include "wmencode.h"

// Declare variables.

    HRESULT hr;
    IWMEncoder* pEncoder;
    IWMEncSourceGroupCollection* pSrcGrpColl;
    IWMEncSourceGroup* pSrcGrp;
    IWMEncSource* pAudSrc;
    IWMEncSource* pVidSrc;
    IWMEncProfileCollection* pProColl;
    IWMEncProfile* pPro;
    long lCount;
    int i;

// 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 an empty source group to the collection.

if ( SUCCEEDED( hr ) )
{
    hr = pSrcGrpColl->Add(CComBSTR("SG_1"), &pSrcGrp);
}

// Add an audio and video source to the source group.

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

// Specify an .avi source file and a .wmv output file.

CComBSTR m_bstrInFile("C:\\filename.avi");
if ( SUCCEEDED( hr ) )
{
    hr = pAudSrc->SetInput(m_bstrInFile);
}
if ( SUCCEEDED( hr ) )
{
    hr = pVidSrc->SetInput(m_bstrInFile);
}

// Loop through the profile collection and retrieve a specific
// profile.

if ( SUCCEEDED( hr ) )
{
    hr = pEncoder->get_ProfileCollection(&pProColl);
}
    CComBSTR bstrName("");
    CComBSTR bstrDesc("");
    long lMaxPacketSz;
    short iMediaCount;
    VARIANT_BOOL vbMultiBitrate;
if ( SUCCEEDED( hr ) )
{
    hr = pProColl->get_Count(&lCount);
}
for (i=0; i<lCount; i++)
{
    if ( SUCCEEDED( hr ) )
    {
        hr = pProColl->Item(i, &pPro);
    }
    if ( SUCCEEDED( hr ) )
    {
        hr = pPro->get_Name(&bstrName);
    }
    if (_wcsicmp(bstrName, CComBSTR("profile_name"))==0)
    {
        if ( SUCCEEDED( hr ) )
        {
            hr = pSrcGrp->put_Profile(CComVariant(pPro));
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPro->get_Description(&bstrDesc);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPro->get_MaxPacketSize(&lMaxPacketSz);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPro->get_MediaCount(WMENC_VIDEO, &iMediaCount);
        }
        if ( SUCCEEDED( hr ) )
        {
            hr = pPro->get_MultipleBitrate(&vbMultiBitrate);
        }
        break;
    }
}

// Start the encoding process.

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

// Release pointers.
if ( pSrcGrpColl )
{
    pSrcGrpColl->Release();
    pSrcGrpColl = NULL;
}
if ( pSrcGrp )
{
    pSrcGrp->Release();
    pSrcGrp = NULL;
}
if ( pAudSrc )
{
    pAudSrc->Release();
    pAudSrc = NULL;
}
if ( pVidSrc )
{
    pVidSrc->Release();
    pVidSrc = NULL;
}
if ( pProColl )
{
    pProColl->Release();
    pProColl = NULL;
}
if ( pPro )
{
    pPro->Release();
    pPro = NULL;
}
if ( pEncoder )
{
    pEncoder->Release();
    pEncoder = NULL;
}

Requirements

Header: wmencode.h

Library: wmenc.exe

See Also