aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--videocodec/Android.mk131
-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
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__ */