IWMEncProfileCollection::Item

Windows Media Encoder SDK banner art

The Item method retrieves a specific profile from the collection.

Syntax

HRESULT Item(
  long  iIndex,
  IWMEncProfile**  ppProfile
);

Parameters

iIndex

[in]  long containing the index into the collection.

ppProfile

[out]  Pointer to a pointer to the IWMEncProfile interface corresponding to iIndex.

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 indirect pointer to the profile object is NULL.

Remarks

The input parameter is an integer index into the collection. If you do not already know the index associated with the needed profile pointer, you must iterate through the collection starting at item 0. On each iteration, increment iIndex and use the Item method to retrieve a pointer to a profile. Call the IWMEncProfile::get_Name method to find the name of the profile being pointed to and compare the name retrieved to that needed. Exit the loop when a match is found.

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