2013年6月22日土曜日

オーディオコーデックの数を取得:Window Media SDK


#include <stdio.h>//printf とかで必要
#include<windows.h>//MessageBox とかで必要

#include <wmsdk.h>
#pragma comment(lib, "wmvcore.lib")

void main(void)
{
 printf("コンソール表示開始\n");

 HRESULT GetCodecNames(IWMCodecInfo3* pCodecInfo);

 IWMCodecInfo3* pCodecInfo = NULL;
 IWMProfileManager* pProfileManager = NULL;
 HRESULT hr = S_FALSE;
 DWORD   cCodecs  = 0;

 hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

 hr = WMCreateProfileManager(&pProfileManager);

 hr = pProfileManager->QueryInterface(IID_IWMCodecInfo3, (void**)(&pCodecInfo));\

 //システム上でサポートされているオーディオコーデックの数を取得します。
 hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs);

 if(SUCCEEDED(hr))
  printf("オーディオコーデックの数: %d\n\n", cCodecs);
 else
 {
  printf("オーディオコーデックの数を取得できませんでした。\n");
  return;
 }

 MessageBox(0,0,TEXT("OK"),0);
}

コーデックの数が正しいか調べてみたがよく分からない。

Windows Media Player のヘルプ-バージョン情報-テクニカルサポート情報
でコーデックを確認してみた。

コーデック名の取得
参考:http://msdn.microsoft.com/ja-jp/library/windows/desktop/dd743771(v=vs.85).aspx
#include <stdio.h>//printf とかで必要
#include<windows.h>//MessageBox とかで必要

#include <wmsdk.h>
#pragma comment(lib, "wmvcore.lib")

void main(void)
{
 printf("コンソール表示開始\n");

 HRESULT GetCodecNames(IWMCodecInfo3* pCodecInfo);

 IWMCodecInfo3* pCodecInfo = NULL;
 IWMProfileManager* pProfileManager = NULL;
 HRESULT hr = S_FALSE;
 DWORD   cCodecs  = 0;
 WCHAR*  pwszCodecName  = NULL;
 DWORD   cchCodecName     = 0;

 hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

 hr = WMCreateProfileManager(&pProfileManager);

 hr = pProfileManager->QueryInterface(IID_IWMCodecInfo3, (void**)(&pCodecInfo));\

  //システム上でサポートされているオーディオコーデックの数を取得します。
  hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs);

 if(SUCCEEDED(hr))
  printf("オーディオコーデックの数: %d\n\n", cCodecs);
 else
 {
  printf("オーディオコーデックの数を取得できませんでした。\n");
  return;
 }

 /* ----------- オーディオコーデックの名前を取得 ----------- */
 //すべてのオーディオコーデックをループ。
 for(DWORD dwCodecIndex = 0; dwCodecIndex < cCodecs; dwCodecIndex++)
 {
  //まず、名前のサイズを取得する。
  hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio, dwCodecIndex, NULL, &cchCodecName);

  if(FAILED(hr))
  {
   printf("コーデック名のサイズを取得できませんでした。\n");
   return;
  }

  //適切なサイズの文字列を割り当てます。
  pwszCodecName = new WCHAR[cchCodecName];
  if(pwszCodecName == NULL)
  {
   printf("メモリを割り当てられませんでした\n");
   return;
  }

  // コーデック名を取得します。
  hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio,dwCodecIndex,pwszCodecName,&cchCodecName);
  if(FAILED(hr))
  {
   delete[] pwszCodecName;
   printf("コーデック名を取得できませんでした。\n");
   return;
  }

  // コーデック名を出力する。
  printf("%d %S\n", dwCodecIndex, pwszCodecName);

  // 次の繰り返しのためにクリーンアップします。
  delete[] pwszCodecName;
  pwszCodecName = NULL;
  cchCodecName  = 0;
 }

 MessageBox(0,0,TEXT("OK"),0);
}


よくわからないな・・・・・

0 件のコメント:

コメントを投稿