설치된 모든 Windows 미디어 코덱을 열거하려면
[이 페이지와 연결된 기능인 Windows Media Format 11 SDK는 레거시 기능입니다. 원본 판독기 및 싱크 작성기에 의해 대체되었습니다. 원본 판독기 및 싱크 작성기는 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 소스 판독기 및 싱크 기록기를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
코덱 정보 인터페이스는 모두 코덱 인덱스를 사용하여 개별 코덱을 식별합니다. 코덱은 오디오 및 비디오에 대해 독립적으로 인덱싱됩니다. 코덱의 한 형식 내에서 인덱스는 0부터 해당 형식의 코덱 수보다 1개까지 다양합니다.
다음 예제 코드는 각 코덱과 연결된 인덱스 가져오기 방법을 보여줍니다. 애플리케이션에서 이 코드를 컴파일하려면 stdio.h를 포함합니다.
HRESULT GetCodecNames(IWMCodecInfo3* pCodecInfo)
{
HRESULT hr = S_OK;
DWORD cCodecs = 0;
WCHAR* pwszCodecName = NULL;
DWORD cchCodecName = 0;
// Retrieve the number of supported audio codecs on the system.
hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs);
if(SUCCEEDED(hr))
printf("Number of audio codecs: %d\n\n", cCodecs);
else
{
printf("Could not get the count of audio codecs.\n");
return hr;
}
// Loop through all the audio codecs.
for(DWORD dwCodecIndex = 0; dwCodecIndex < cCodecs; dwCodecIndex++)
{
// Get the codec name:
// First, get the size of the name.
hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio,
dwCodecIndex,
NULL,
&cchCodecName);
if(FAILED(hr))
{
printf("Could not get the size of the codec name.\n");
return hr;
}
// Allocate a string of the appropriate size.
pwszCodecName = new WCHAR[cchCodecName];
if(pwszCodecName == NULL)
{
printf("Could not allocate memory.\n");
return E_OUTOFMEMORY;
}
// Retrieve the codec name.
hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio,
dwCodecIndex,
pwszCodecName,
&cchCodecName);
if(FAILED(hr))
{
delete[] pwszCodecName;
printf("Could not get the codec name.\n");
return hr;
}
// Print the codec name.
printf("%d %S\n", dwCodecIndex, pwszCodecName);
// Clean up for the next iteration.
delete[] pwszCodecName;
pwszCodecName = NULL;
cchCodecName = 0;
}
// Retrieve the number of supported video codecs on the system.
hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Video, &cCodecs);
if(SUCCEEDED(hr))
printf("\n\nNumber of video codecs: %d.\n\n", cCodecs);
else
{
printf("Could not get the count of video codecs.\n");
return hr;
}
// Loop through all the video codecs.
for(dwCodecIndex = 0; dwCodecIndex < cCodecs; dwCodecIndex++)
{
// Get the codec name:
// First, get the size of the name.
hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Video,
dwCodecIndex,
NULL,
&cchCodecName);
if(FAILED(hr))
{
printf("Could not get the size of the codec name.\n");
return hr;
}
// Allocate a string of the appropriate size.
pwszCodecName = new WCHAR[cchCodecName];
if(pwszCodecName == NULL)
{
printf("Could not allocate memory.\n");
return E_OUTOFMEMORY;
}
// Retrieve the codec name.
hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Video,
dwCodecIndex,
pwszCodecName,
&cchCodecName);
if(FAILED(hr))
{
printf("Could not get the codec name.\n");
return hr;
}
// Print the codec name.
printf("%d %S\n", dwCodecIndex, pwszCodecName);
delete[] pwszCodecName;
pwszCodecName = NULL;
cchCodecName = 0;
}
return S_OK;
}
관련 항목