IWMEncProfileCollection::Item
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