aboutsummaryrefslogtreecommitdiffstats
path: root/videocodec/securevideo
diff options
context:
space:
mode:
authorThierry Strudel <thierry.strudel@intel.com>2014-09-15 14:03:57 -0700
committerPatrick Tjin <pattjin@google.com>2014-09-25 22:31:33 -0700
commit11ef2daa6d47bd094dc9925977ca3ebebf625d14 (patch)
tree31dd22eb14fa2d2e8ed8d512560b7650e7846a2c /videocodec/securevideo
parent38fc535af30abec57ff1ec03f26fd1a0c503a9b3 (diff)
downloadandroid_hardware_intel_common_omx-components-11ef2daa6d47bd094dc9925977ca3ebebf625d14.tar.gz
android_hardware_intel_common_omx-components-11ef2daa6d47bd094dc9925977ca3ebebf625d14.tar.bz2
android_hardware_intel_common_omx-components-11ef2daa6d47bd094dc9925977ca3ebebf625d14.zip
Remove direct link to vendor libraries
Also enforce -Werror Bug: 17468185 Change-Id: I30ebb393ee9fd210ce78905f94f45e602dc2753e Signed-off-by: Thierry Strudel <thierry.strudel@intel.com>
Diffstat (limited to 'videocodec/securevideo')
-rwxr-xr-xvideocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp44
-rwxr-xr-xvideocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h4
-rw-r--r--videocodec/securevideo/moorefield/drm_vendor_api.c96
-rw-r--r--videocodec/securevideo/moorefield/drm_vendor_api.h50
4 files changed, 174 insertions, 20 deletions
diff --git a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp
index bed475e..8f708a8 100755
--- a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp
+++ b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp
@@ -23,16 +23,6 @@
#include <signal.h>
#include <pthread.h>
-
-extern "C" {
-#include <sepdrm.h>
-#include <pr_drm_api.h>
-#include <fcntl.h>
-#include <linux/psb_drm.h>
-#include "xf86drm.h"
-#include "xf86drmMode.h"
-}
-
#include "VideoFrameInfo.h"
// Be sure to have an equal string in VideoDecoderHost.cpp (libmix)
@@ -68,6 +58,9 @@ OMXVideoDecoderAVCSecure::OMXVideoDecoderAVCSecure()
: mKeepAliveTimer(0),
mSessionPaused(false){
LOGV("OMXVideoDecoderAVCSecure is constructed.");
+ if (drm_vendor_api_init(&drm_vendor_api)) {
+ LOGE("drm_vendor_api_init failed");
+ }
mVideoDecoder = createVideoDecoder(AVC_SECURE_MIME_TYPE);
if (!mVideoDecoder) {
LOGE("createVideoDecoder failed for \"%s\"", AVC_SECURE_MIME_TYPE);
@@ -80,7 +73,9 @@ OMXVideoDecoderAVCSecure::OMXVideoDecoderAVCSecure()
OMXVideoDecoderAVCSecure::~OMXVideoDecoderAVCSecure() {
LOGI("OMXVideoDecoderAVCSecure is destructed.");
-
+ if (drm_vendor_api_deinit(&drm_vendor_api)) {
+ LOGE("drm_vendor_api_deinit failed");
+ }
}
OMX_ERRORTYPE OMXVideoDecoderAVCSecure::InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput) {
@@ -111,6 +106,9 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::InitInputPortFormatSpecific(OMX_PARAM_PO
OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorInit(void) {
mSessionPaused = false;
+ if (drm_vendor_api.handle == NULL) {
+ return OMX_ErrorUndefined;
+ }
return OMXVideoDecoderBase::ProcessorInit();
}
@@ -120,7 +118,7 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorDeinit(void) {
// Session should be torn down in ProcessorStop, delayed to ProcessorDeinit
// to allow remaining frames completely rendered.
LOGI("Calling Drm_DestroySession.");
- uint32_t ret = drm_stop_playback();
+ uint32_t ret = drm_vendor_api.drm_stop_playback();
if (ret != DRM_WV_MOD_SUCCESS) {
ALOGE("drm_stop_playback failed: (0x%x)", ret);
}
@@ -131,7 +129,7 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorStart(void) {
uint32_t imrOffset = 0;
uint32_t dataBufferSize = DATA_BUFFER_SIZE;
- uint32_t ret = drm_start_playback();
+ uint32_t ret = drm_vendor_api.drm_start_playback();
if (ret != DRM_WV_MOD_SUCCESS) {
ALOGE("drm_start_playback failed: (0x%x)", ret);
}
@@ -236,10 +234,11 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareConfigBuffer(VideoConfigBuffer *p
return ret;
}
-OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareWVCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p){
+OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareWVCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p)
+{
OMX_ERRORTYPE ret = OMX_ErrorNone;
-
+ (void) retain; // unused parameter
p->flag |= HAS_COMPLETE_FRAME;
@@ -272,7 +271,7 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareWVCDecodeBuffer(OMX_BUFFERHEADERT
nalu_headers.p_hdrs_buf = (uint8_t *)(dataBuffer->data + nalu_headers.frame_size + 4);
nalu_headers.parse_size = buffer->nFilledLen;
- uint32_t res = drm_wv_return_naluheaders(WV_SESSION_ID, &nalu_headers);
+ uint32_t res = drm_vendor_api.drm_wv_return_naluheaders(WV_SESSION_ID, &nalu_headers);
if (res == DRM_FAIL_FW_SESSION) {
LOGW("Drm_WV_ReturnNALUHeaders failed. Session is disabled.");
mSessionPaused = true;
@@ -305,8 +304,10 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareWVCDecodeBuffer(OMX_BUFFERHEADERT
dataBuffer->size = NALU_BUFFER_SIZE;
return ret;
}
-OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareCENCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p){
+OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareCENCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p)
+{
OMX_ERRORTYPE ret = OMX_ErrorNone;
+ (void) retain; // unused parameter
// OMX_BUFFERFLAG_CODECCONFIG is an optional flag
// if flag is set, buffer will only contain codec data.
@@ -328,8 +329,10 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareCENCDecodeBuffer(OMX_BUFFERHEADER
}
-OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PreparePRASFDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p){
+OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PreparePRASFDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p)
+{
OMX_ERRORTYPE ret = OMX_ErrorNone;
+ (void) retain; // unused parameter
// OMX_BUFFERFLAG_CODECCONFIG is an optional flag
// if flag is set, buffer will only contain codec data.
@@ -367,7 +370,7 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PreparePRASFDecodeBuffer(OMX_BUFFERHEADE
nalu_headers.p_hdrs_buf = (uint8_t *)(dataBuffer->data + nalu_headers.frame_size + 4);
nalu_headers.parse_size = buffer->nFilledLen;
- uint32_t res = drm_pr_return_naluheaders(dataBuffer->session_id, &nalu_headers);
+ uint32_t res = drm_vendor_api.drm_pr_return_naluheaders(dataBuffer->session_id, &nalu_headers);
if (res == DRM_FAIL_FW_SESSION || !nalu_headers.hdrs_buf_len) {
LOGW("drm_ReturnNALUHeaders failed. Session is disabled.");
@@ -482,6 +485,7 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::GetParamVideoAVCProfileLevel(OMX_PTR pSt
OMX_ERRORTYPE OMXVideoDecoderAVCSecure::SetParamVideoAVCProfileLevel(OMX_PTR pStructure) {
LOGW("SetParamVideoAVCProfileLevel is not supported.");
+ (void) pStructure; // unused parameter
return OMX_ErrorUnsupportedSetting;
}
@@ -563,7 +567,7 @@ void OMXVideoDecoderAVCSecure::KeepAliveTimerCallback(sigval v) {
void OMXVideoDecoderAVCSecure::KeepAliveTimerCallback() {
uint32_t timeout = DRM_KEEP_ALIVE_TIMER;
- uint32_t sepres = drm_keep_alive(WV_SESSION_ID, &timeout);
+ uint32_t sepres = drm_vendor_api.drm_keep_alive(WV_SESSION_ID, &timeout);
if (sepres != 0) {
LOGE("Drm_KeepAlive failed. Result = %#x", sepres);
}
diff --git a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h
index 67639b5..1bddee7 100755
--- a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h
+++ b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h
@@ -19,6 +19,9 @@
#include "OMXVideoDecoderBase.h"
+extern "C" {
+#include "drm_vendor_api.h"
+}
class OMXVideoDecoderAVCSecure : public OMXVideoDecoderBase {
public:
@@ -84,6 +87,7 @@ private:
timer_t mKeepAliveTimer;
bool mSessionPaused;
+ struct drm_vendor_api drm_vendor_api;
};
#endif /* OMX_VIDEO_DECODER_AVC_SECURE_H_ */
diff --git a/videocodec/securevideo/moorefield/drm_vendor_api.c b/videocodec/securevideo/moorefield/drm_vendor_api.c
new file mode 100644
index 0000000..a537a06
--- /dev/null
+++ b/videocodec/securevideo/moorefield/drm_vendor_api.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2014 Intel Corporation. All rights reserved.
+ *
+ * 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.
+ */
+
+#define LOG_TAG "drm_vendor_api"
+
+#include <log/log.h>
+#include <dlfcn.h>
+#include <string.h>
+
+#include "drm_vendor_api.h"
+
+#define LIB_DRM_VENDOR "libsepdrm_cc54.so"
+
+uint32_t drm_vendor_api_init(struct drm_vendor_api *api)
+{
+ uint32_t got_error = 0;
+
+ if (api == NULL) {
+ ALOGE("%s: NULL parameter provided", __func__);
+ return 1;
+ }
+
+ api->handle = dlopen(LIB_DRM_VENDOR, RTLD_NOW);
+ if (api->handle == NULL) {
+ ALOGE("%s: couldn't dlopen %s : %s", __func__, LIB_DRM_VENDOR, dlerror());
+ drm_vendor_api_deinit(api);
+ return 1;
+ } else {
+ api->drm_keep_alive = (drm_keep_alive_t) dlsym(api->handle, "drm_keep_alive");
+ if (api->drm_keep_alive == NULL) {
+ ALOGE("%s: couldn't dlsym drm_keep_alive in %s : %s",
+ __func__, LIB_DRM_VENDOR, dlerror());
+ got_error = 1;
+ }
+ api->drm_start_playback = (drm_start_playback_t) dlsym(api->handle, "drm_start_playback");
+ if (api->drm_start_playback == NULL) {
+ ALOGE("%s: couldn't dlsym drm_start_playback in %s : %s",
+ __func__, LIB_DRM_VENDOR, dlerror());
+ got_error = 1;
+ }
+ api->drm_stop_playback = (drm_stop_playback_t) dlsym(api->handle, "drm_stop_playback");
+ if (api->drm_stop_playback == NULL) {
+ ALOGE("%s: couldn't dlsym drm_stop_playback in %s : %s",
+ __func__, LIB_DRM_VENDOR, dlerror());
+ got_error = 1;
+ }
+ api->drm_pr_return_naluheaders = (drm_pr_return_naluheaders_t) dlsym(api->handle,
+ "drm_pr_return_naluheaders");
+ if (api->drm_pr_return_naluheaders == NULL) {
+ ALOGE("%s: couldn't dlsym drm_pr_return_naluheaders in %s : %s",
+ __func__, LIB_DRM_VENDOR, dlerror());
+ got_error = 1;
+ }
+ api->drm_wv_return_naluheaders =
+ (drm_wv_return_naluheaders_t) dlsym(api->handle, "drm_wv_return_naluheaders");
+ if (api->drm_wv_return_naluheaders == NULL) {
+ ALOGE("%s: couldn't dlsym drm_wv_return_naluheaders in %s : %s",
+ __func__, LIB_DRM_VENDOR, dlerror());
+ got_error = 1;
+ }
+ if (got_error) {
+ drm_vendor_api_deinit(api);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+uint32_t drm_vendor_api_deinit(struct drm_vendor_api *api)
+{
+ if (api == NULL) {
+ ALOGE("%s: NULL parameter provided", __func__);
+ return 1;
+ }
+ if(api->handle) {
+ if (dlclose(api->handle)) {
+ ALOGE("%s: couldn't dlcose %s : %s", __func__, LIB_DRM_VENDOR, dlerror());
+ return 1;
+ }
+ }
+ memset(api, 0, sizeof(struct drm_vendor_api));
+ return 0;
+}
diff --git a/videocodec/securevideo/moorefield/drm_vendor_api.h b/videocodec/securevideo/moorefield/drm_vendor_api.h
new file mode 100644
index 0000000..dd367a4
--- /dev/null
+++ b/videocodec/securevideo/moorefield/drm_vendor_api.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2014 Intel Corporation. All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __DRM_VENDOR_API__
+#define __DRM_VENDOR_API__
+
+#include <sepdrm.h>
+#include <pr_drm_api.h>
+#include <fcntl.h>
+#include <linux/psb_drm.h>
+#include "xf86drm.h"
+#include "xf86drmMode.h"
+
+typedef uint32_t (*drm_keep_alive_t)(uint32_t session_id, uint32_t *timeout);
+typedef uint32_t (*drm_start_playback_t)(void);
+typedef uint32_t (*drm_stop_playback_t)(void);
+typedef uint32_t (*drm_pr_return_naluheaders_t)(uint32_t session_id, struct drm_nalu_headers *nalu_info);
+typedef uint32_t (*drm_wv_return_naluheaders_t)(uint32_t session_id, struct drm_wv_nalu_headers *nalu_info);
+
+struct drm_vendor_api {
+ void *handle;
+ drm_keep_alive_t drm_keep_alive;
+ drm_start_playback_t drm_start_playback;
+ drm_stop_playback_t drm_stop_playback;
+ drm_pr_return_naluheaders_t drm_pr_return_naluheaders;
+ drm_wv_return_naluheaders_t drm_wv_return_naluheaders;
+};
+
+/* Initialize the function pointers structure opening the vendor library
+ Returns 0 on case of success, 1 in case of error */
+uint32_t drm_vendor_api_init(struct drm_vendor_api *api);
+
+/* Close the function pointers structure
+ Returns 0 on case of success, 1 in case of error */
+uint32_t drm_vendor_api_deinit(struct drm_vendor_api *api);
+
+#endif /* #ifndef __DRM_VENDOR_API__ */