IWMEncProfileCollection::get_ProfileDirectory

Windows Media Encoder SDK banner art

The get_ProfileDirectory method retrieves the path of the directory containing custom profiles.

Syntax

HRESULT get_ProfileDirectory(
  BSTR*  bstrDirectory
);

Parameters

bstrDirectory

[out]  Pointer to a BSTR containing the path.

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 profile directory is NULL.

Remarks

Use the put_ProfileDirectory method to specify where to get custom profiles for the current encoding session. For custom profiles to be included in the profile collection, and therefore available for encoding content, they must be located in the custom profile directory. After you specify a different directory, use the Refresh method to update the profile collection.

The put_ProfileDirectory method modifies only the custom profile directory for that particular encoding session. To change this directory permanently, or to view the default directory, see the registry key My Computer\HKEY_CLASSES_ROOT\Software\Microsoft\Windows Media Tools\Encoder\ProfileMgr\Directory.

The file name extension for profiles is .prx.

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 a 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