VideoEncParams.cpp
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:3k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. #include "stdafx.h"
  20. #include "atlbase.h"
  21. #include "Dmo.h"
  22. #include "wmcodecconst.h"
  23. #include "wmcodeciface.h"
  24. #include "VideoEncParams.h"
  25. #include "macros.h"
  26. HRESULT CVideoEncParams::DefaultParams()
  27. {
  28. dwTag = WMCFOURCC_WMV3;
  29. fFrameRate = 29.97F;
  30. fIsVBR = FALSE;
  31. nBitrate = 0;
  32. nBufferDelay = 5000;
  33. nKeyDist = 8;
  34. nProfile = P_MAIN;
  35. nQuality = 75;
  36. nVBRQuality = 98;
  37.     // Get the complexity levels for the codec.
  38.     HRESULT hr = GetComplexitySettings(&ComplexityLive, 
  39.                                &ComplexityOffline, 
  40.                                &ComplexityMax);
  41. if(SUCCEEDED(hr))
  42. {
  43. nComplexity = ComplexityLive;
  44. }
  45. return hr;
  46. }
  47. // Get the encoder complexity values for the codec.
  48. HRESULT CVideoEncParams::GetComplexitySettings(DWORD* pLive, DWORD* pOffline, DWORD* pMax)
  49. {
  50.     HRESULT hr = S_OK;
  51.     
  52.     CComPtr<IMediaObject>  pDMO;
  53.     CComPtr<IWMCodecProps> pCodecProps;
  54.     DWORD cbValue = sizeof(DWORD);
  55.     WMT_PROP_DATATYPE dataType;
  56.     
  57.     // Create a video encoder DMO.
  58.     hr = CoCreateInstance(CLSID_CWMVEncMediaObject2,
  59.                           NULL, 
  60.                           CLSCTX_INPROC_SERVER, 
  61.                           IID_IMediaObject, 
  62.                           (void**)&pDMO);
  63.     ON_FAIL("Could not create the encoder DMO.", hr);
  64.     // Get the codec properties interface.
  65.     hr = pDMO->QueryInterface(IID_IWMCodecProps, (void**)&pCodecProps);
  66.     ON_FAIL("Could not get the codec props interface.", hr);
  67.     // Get the setting for live encoding.
  68.     hr = pCodecProps->GetCodecProp(WMCFOURCC_WMV3, 
  69.                                    g_wszWMVCComplexityExLive, 
  70.                                    &dataType, 
  71.                                    (BYTE*)pLive, 
  72.                                    &cbValue);
  73.     ON_FAIL("Could not get the live complexity setting.", hr);
  74.     // Get the setting for offline encoding.
  75.     hr = pCodecProps->GetCodecProp(WMCFOURCC_WMV3, 
  76.                                    g_wszWMVCComplexityExOffline, 
  77.                                    &dataType, 
  78.                                    (BYTE*)pOffline, 
  79.                                    &cbValue);
  80.     ON_FAIL("Could not get the offline complexity setting.", hr);
  81.     // Get the maximum complexity setting.
  82.     hr = pCodecProps->GetCodecProp(WMCFOURCC_WMV3, 
  83.                                    g_wszWMVCComplexityExMax, 
  84.                                    &dataType, 
  85.                                    (BYTE*)pMax, 
  86.                                    &cbValue);
  87.     ON_FAIL("Could not get the maximum complexity setting.", hr);
  88.     return hr;
  89. }