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 | |
| 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>
| -rw-r--r-- | videocodec/Android.mk | 131 | ||||
| -rwxr-xr-x | videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp | 44 | ||||
| -rwxr-xr-x | videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h | 4 | ||||
| -rw-r--r-- | videocodec/securevideo/moorefield/drm_vendor_api.c | 96 | ||||
| -rw-r--r-- | videocodec/securevideo/moorefield/drm_vendor_api.h | 50 |
5 files changed, 247 insertions, 78 deletions
diff --git a/videocodec/Android.mk b/videocodec/Android.mk index ff838bf..3eef8c9 100644 --- a/videocodec/Android.mk +++ b/videocodec/Android.mk @@ -5,6 +5,8 @@ ifeq ($(strip $(USE_VIDEO_EFFECT)),true) LOCAL_C_FLAGS := -DUSE_VIDEO_EFFECT endif +################################################################################ + include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) @@ -21,7 +23,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ $(TARGET_OUT_HEADERS)/khronos/openmax \ - $(PV_INCLUDES) \ $(TARGET_OUT_HEADERS)/libmix_videodecoder \ $(TARGET_OUT_HEADERS)/libva \ $(call include-path-for, frameworks-native)/media/hardware \ @@ -64,6 +65,7 @@ endif include $(BUILD_SHARED_LIBRARY) +################################################################################ PLATFORM_SUPPORT_VP8 := \ merrifield \ @@ -89,7 +91,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ $(TARGET_OUT_HEADERS)/khronos/openmax \ - $(PV_INCLUDES) \ $(TARGET_OUT_HEADERS)/libmix_videodecoder \ $(TARGET_OUT_HEADERS)/libva \ $(call include-path-for, frameworks-native)/media/hardware \ @@ -99,6 +100,7 @@ LOCAL_SRC_FILES := \ OMXComponentCodecBase.cpp\ OMXVideoDecoderBase.cpp\ OMXVideoDecoderVP8.cpp +LOCAL_CFLAGS += -Werror LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libOMXVideoDecoderVP8 @@ -129,6 +131,8 @@ endif include $(BUILD_SHARED_LIBRARY) endif +################################################################################ + # VP9 with SW decode and HW Render include $(CLEAR_VARS) @@ -184,10 +188,11 @@ ifeq ($(TARGET_BOARD_PLATFORM),baytrail) LOCAL_CFLAGS += -DUSE_GEN_HW endif include $(BUILD_SHARED_LIBRARY) -# end VP9 SW decode and HW Render +################################################################################ include $(CLEAR_VARS) + ifeq ($(TARGET_HAS_VPP),true) LOCAL_CFLAGS += -DTARGET_HAS_VPP endif @@ -202,7 +207,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ $(TARGET_OUT_HEADERS)/khronos/openmax \ - $(PV_INCLUDES) \ $(TARGET_OUT_HEADERS)/libmix_videodecoder \ $(TARGET_OUT_HEADERS)/libva \ $(call include-path-for, frameworks-native)/media/hardware \ @@ -241,6 +245,8 @@ endif include $(BUILD_SHARED_LIBRARY) +################################################################################ + include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) LOCAL_CFLAGS += -DTARGET_HAS_VPP @@ -256,7 +262,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ $(TARGET_OUT_HEADERS)/khronos/openmax \ - $(PV_INCLUDES) \ $(TARGET_OUT_HEADERS)/libmix_videodecoder \ $(TARGET_OUT_HEADERS)/libva \ $(call include-path-for, frameworks-native)/media/hardware \ @@ -295,6 +300,8 @@ endif include $(BUILD_SHARED_LIBRARY) +################################################################################ + include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) LOCAL_CFLAGS += -DTARGET_HAS_VPP @@ -310,7 +317,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ $(TARGET_OUT_HEADERS)/khronos/openmax \ - $(PV_INCLUDES) \ $(TARGET_OUT_HEADERS)/libmix_videodecoder \ $(TARGET_OUT_HEADERS)/libva \ $(call include-path-for, frameworks-native)/media/hardware \ @@ -353,6 +359,8 @@ endif include $(BUILD_SHARED_LIBRARY) +################################################################################ + #Build secure AVC video decoder only on supported platforms ifeq ($(USE_INTEL_SECURE_AVC),true) @@ -372,12 +380,9 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ $(TARGET_OUT_HEADERS)/khronos/openmax \ - $(PV_INCLUDES) \ $(TARGET_OUT_HEADERS)/libmix_videodecoder \ $(TARGET_OUT_HEADERS)/libva \ - $(TARGET_OUT_HEADERS)/drm \ $(TARGET_OUT_HEADERS)/libdrm \ - $(TARGET_OUT_HEADERS)/libttm \ $(call include-path-for, frameworks-native)/media/hardware \ $(call include-path-for, frameworks-native)/media/openmax \ @@ -386,16 +391,14 @@ LOCAL_SRC_FILES := \ OMXVideoDecoderBase.cpp ifeq ($(TARGET_BOARD_PLATFORM),moorefield) -#Secure AVC decoder for Moorefield V0 (uses IED) -LOCAL_SHARED_LIBRARIES += \ - libsepdrm_cc54 \ - libdx_cc7 - -LOCAL_SRC_FILES += securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp - +LOCAL_SRC_FILES += \ + securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp \ + securevideo/moorefield/drm_vendor_api.c LOCAL_CFLAGS += -DVED_TILING +LOCAL_SHARED_LIBRARIES += libdl endif +LOCAL_CFLAGS += -Werror LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libOMXVideoDecoderAVCSecure @@ -403,22 +406,24 @@ include $(BUILD_SHARED_LIBRARY) endif #USE_INTEL_SECURE_AVC +################################################################################ + include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) LOCAL_CFLAGS += -DTARGET_HAS_VPP endif LOCAL_SHARED_LIBRARIES := \ - libwrs_omxil_common \ - liblog \ - libva_videoencoder \ - libva \ - libva-android \ - libva-tpi \ - libutils \ - libcutils \ - libhardware \ - libintelmetadatabuffer + libwrs_omxil_common \ + liblog \ + libva_videoencoder \ + libva \ + libva-android \ + libva-tpi \ + libutils \ + libcutils \ + libhardware \ + libintelmetadatabuffer LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ @@ -434,10 +439,12 @@ LOCAL_SRC_FILES := \ OMXVideoEncoderAVC.cpp LOCAL_CFLAGS += $(LOCAL_C_FLAGS) +LOCAL_CFLAGS += -Werror LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libOMXVideoEncoderAVC include $(BUILD_SHARED_LIBRARY) +################################################################################ include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) @@ -445,16 +452,16 @@ LOCAL_CFLAGS += -DTARGET_HAS_VPP endif LOCAL_SHARED_LIBRARIES := \ - libwrs_omxil_common \ - liblog \ - libva_videoencoder \ - libva \ - libva-android \ - libva-tpi \ - libutils \ - libcutils \ - libhardware \ - libintelmetadatabuffer + libwrs_omxil_common \ + liblog \ + libva_videoencoder \ + libva \ + libva-android \ + libva-tpi \ + libutils \ + libcutils \ + libhardware \ + libintelmetadatabuffer LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ @@ -479,22 +486,24 @@ LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libOMXVideoEncoderH263 include $(BUILD_SHARED_LIBRARY) +################################################################################ + include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) LOCAL_CFLAGS += -DTARGET_HAS_VPP endif LOCAL_SHARED_LIBRARIES := \ - libwrs_omxil_common \ - liblog \ - libva_videoencoder \ - libva \ - libva-android \ - libva-tpi \ - libutils \ - libcutils \ - libhardware \ - libintelmetadatabuffer + libwrs_omxil_common \ + liblog \ + libva_videoencoder \ + libva \ + libva-android \ + libva-tpi \ + libutils \ + libcutils \ + libhardware \ + libintelmetadatabuffer LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ @@ -511,10 +520,13 @@ LOCAL_SRC_FILES := \ LOCAL_CFLAGS += $(LOCAL_C_FLAGS) +LOCAL_CFLAGS += -Werror LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libOMXVideoEncoderMPEG4 include $(BUILD_SHARED_LIBRARY) +################################################################################ + include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) LOCAL_CFLAGS += -DTARGET_HAS_VPP @@ -530,7 +542,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ $(TARGET_OUT_HEADERS)/khronos/openmax \ - $(PV_INCLUDES) \ $(TARGET_OUT_HEADERS)/libmix_videodecoder \ $(TARGET_OUT_HEADERS)/libva \ $(call include-path-for, frameworks-native)/media/hardware \ @@ -541,6 +552,7 @@ LOCAL_SRC_FILES := \ OMXVideoDecoderBase.cpp\ OMXVideoDecoderPAVC.cpp +LOCAL_CFLAGS += -Werror LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libOMXVideoDecoderPAVC ifeq ($(TARGET_BOARD_PLATFORM),clovertrail) @@ -557,22 +569,24 @@ endif include $(BUILD_SHARED_LIBRARY) +################################################################################ + include $(CLEAR_VARS) ifeq ($(TARGET_HAS_VPP),true) LOCAL_CFLAGS += -DTARGET_HAS_VPP endif LOCAL_SHARED_LIBRARIES := \ - libwrs_omxil_common \ - liblog \ - libva_videoencoder \ - libva \ - libva-android \ - libva-tpi \ - libutils \ - libcutils \ - libhardware \ - libintelmetadatabuffer + libwrs_omxil_common \ + liblog \ + libva_videoencoder \ + libva \ + libva-android \ + libva-tpi \ + libutils \ + libcutils \ + libhardware \ + libintelmetadatabuffer LOCAL_C_INCLUDES := \ $(TARGET_OUT_HEADERS)/wrs_omxil_core \ @@ -588,8 +602,9 @@ LOCAL_SRC_FILES := \ OMXVideoEncoderVP8.cpp LOCAL_CFLAGS += $(LOCAL_C_FLAGS) +LOCAL_CFLAGS += -Werror LOCAL_MODULE_TAGS := optional LOCAL_MODULE := libOMXVideoEncoderVP8 include $(BUILD_SHARED_LIBRARY) -endif +endif # ifeq ($(strip $(BOARD_USES_WRS_OMXIL_CORE)),true) 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__ */ |
