diff options
| author | Thierry Strudel <thierry.strudel@intel.com> | 2014-09-15 14:03:57 -0700 |
|---|---|---|
| committer | Patrick Tjin <pattjin@google.com> | 2014-09-25 22:31:33 -0700 |
| commit | 11ef2daa6d47bd094dc9925977ca3ebebf625d14 (patch) | |
| tree | 31dd22eb14fa2d2e8ed8d512560b7650e7846a2c /videocodec/securevideo | |
| parent | 38fc535af30abec57ff1ec03f26fd1a0c503a9b3 (diff) | |
| download | android_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')
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__ */ |
