summaryrefslogtreecommitdiffstats
path: root/media/wmf-clearkey/WMFClearKeyCDMAccess.cpp
blob: 709690e48f614a86dfd018a9f95f4ac179b98a8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "WMFClearKeyCDMAccess.h"

#include <Mferror.h>
#include <oleauto.h>

#include "WMFClearKeyCDM.h"
#include "WMFClearKeyUtils.h"

namespace mozilla {

using Microsoft::WRL::ComPtr;
using Microsoft::WRL::MakeAndInitialize;

STDMETHODIMP WMFClearKeyCDMAccess::CreateContentDecryptionModule(
    IPropertyStore* aProperties, IMFContentDecryptionModule** aCdm) {
  ENTRY_LOG();
  if (!aProperties) {
    ENTRY_LOG_ARGS("Null properties!");
    return MF_E_UNEXPECTED;
  }

  *aCdm = nullptr;
  ComPtr<IMFContentDecryptionModule> cdm;
  RETURN_IF_FAILED(
      (MakeAndInitialize<WMFClearKeyCDM, IMFContentDecryptionModule>(
          &cdm, aProperties)));
  *aCdm = cdm.Detach();
  ENTRY_LOG_ARGS("Created clearkey CDM!");
  return S_OK;
}

STDMETHODIMP WMFClearKeyCDMAccess::GetConfiguration(IPropertyStore** aConfig) {
  NOT_IMPLEMENTED();
  return E_NOTIMPL;
}

STDMETHODIMP WMFClearKeyCDMAccess::GetKeySystem(LPWSTR* aKeySystem) {
  ENTRY_LOG();
  *aKeySystem = (LPWSTR)CoTaskMemAlloc((wcslen(kCLEARKEY_SYSTEM_NAME) + 1) *
                                       sizeof(wchar_t));
  if (*aKeySystem == NULL) {
    return E_OUTOFMEMORY;
  }
  wcscpy_s(*aKeySystem, wcslen(kCLEARKEY_SYSTEM_NAME) + 1,
           kCLEARKEY_SYSTEM_NAME);
  return S_OK;
}

}  // namespace mozilla