mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 15:25:52 +00:00
46a1552995
Now that GMPParent detects whether gmp-clearkey can decode using AAC/H.264 using WMF before reporting gmp-clearkey's GMPParent can decode AAC/H.264, we don't need the GMPDecryptorCallback::SetCapabilities() callback from the GMP to signal to the PDMFactory that the GMP can decode. We can now trust what the GMPService tells us. So we can remove the "waiting for CDM caps" step in the state machine's startup sequence. And all the plumbing. :) If we need more caps, like for an decode-and-render path, we can declare those as API strings in the info file. MozReview-Commit-ID: E0QhU4cYhjo --HG-- extra : rebase_source : 7d15ab6a45bac88c15c053f416d941b5fe0807b0
90 lines
2.3 KiB
C++
90 lines
2.3 KiB
C++
/*
|
|
* Copyright 2015, Mozilla Foundation and contributors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "ClearKeyAsyncShutdown.h"
|
|
#include "ClearKeySessionManager.h"
|
|
#include "gmp-api/gmp-async-shutdown.h"
|
|
#include "gmp-api/gmp-decryption.h"
|
|
#include "gmp-api/gmp-platform.h"
|
|
|
|
#if defined(ENABLE_WMF)
|
|
#include "WMFUtils.h"
|
|
#include "AudioDecoder.h"
|
|
#include "VideoDecoder.h"
|
|
#endif
|
|
|
|
#if defined(WIN32)
|
|
#define GMP_EXPORT __declspec(dllexport)
|
|
#else
|
|
#define GMP_EXPORT __attribute__((visibility("default")))
|
|
#endif
|
|
|
|
static GMPPlatformAPI* sPlatform = nullptr;
|
|
GMPPlatformAPI*
|
|
GetPlatform()
|
|
{
|
|
return sPlatform;
|
|
}
|
|
|
|
extern "C" {
|
|
|
|
GMP_EXPORT GMPErr
|
|
GMPInit(GMPPlatformAPI* aPlatformAPI)
|
|
{
|
|
sPlatform = aPlatformAPI;
|
|
return GMPNoErr;
|
|
}
|
|
|
|
GMP_EXPORT GMPErr
|
|
GMPGetAPI(const char* aApiName, void* aHostAPI, void** aPluginAPI)
|
|
{
|
|
CK_LOGD("ClearKey GMPGetAPI |%s|", aApiName);
|
|
assert(!*aPluginAPI);
|
|
|
|
if (!strcmp(aApiName, GMP_API_DECRYPTOR)) {
|
|
*aPluginAPI = new ClearKeySessionManager();
|
|
}
|
|
#if defined(ENABLE_WMF)
|
|
else if (!strcmp(aApiName, GMP_API_AUDIO_DECODER) &&
|
|
wmf::EnsureLibs()) {
|
|
*aPluginAPI = new AudioDecoder(static_cast<GMPAudioHost*>(aHostAPI));
|
|
} else if (!strcmp(aApiName, GMP_API_VIDEO_DECODER) &&
|
|
wmf::EnsureLibs()) {
|
|
*aPluginAPI = new VideoDecoder(static_cast<GMPVideoHost*>(aHostAPI));
|
|
}
|
|
#endif
|
|
else if (!strcmp(aApiName, GMP_API_ASYNC_SHUTDOWN)) {
|
|
*aPluginAPI = new ClearKeyAsyncShutdown(static_cast<GMPAsyncShutdownHost*> (aHostAPI));
|
|
} else {
|
|
CK_LOGE("GMPGetAPI couldn't resolve API name |%s|\n", aApiName);
|
|
}
|
|
|
|
return *aPluginAPI ? GMPNoErr : GMPNotImplementedErr;
|
|
}
|
|
|
|
GMP_EXPORT GMPErr
|
|
GMPShutdown(void)
|
|
{
|
|
CK_LOGD("ClearKey GMPShutdown");
|
|
return GMPNoErr;
|
|
}
|
|
|
|
}
|