diff options
| author | Ryan Saffores <ryan.d.saffores@intel.com> | 2014-03-26 17:54:12 -0700 |
|---|---|---|
| committer | Patrick Tjin <pattjin@google.com> | 2014-07-21 22:02:58 -0700 |
| commit | 81b99781be1ad2166a2b97d93de3fd8071c856b0 (patch) | |
| tree | 6ff770eb4fa993ded6189a0dd7596916b834fb75 | |
| parent | d55c1c043b911ce8b4cdd87915e8910335d023a8 (diff) | |
| download | android_hardware_intel_common_omx-components-81b99781be1ad2166a2b97d93de3fd8071c856b0.tar.gz android_hardware_intel_common_omx-components-81b99781be1ad2166a2b97d93de3fd8071c856b0.tar.bz2 android_hardware_intel_common_omx-components-81b99781be1ad2166a2b97d93de3fd8071c856b0.zip | |
Port changes from 173978 to Moorefield
BZ: 182227
Porting changes for WV Modular DRM to Moorefield
Change-Id: Ieee90c27e71f6f0dd87582052f28fe5fc19c7d11
Signed-off-by: Ryan Saffores <ryan.d.saffores@intel.com>
| -rw-r--r-- | videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp | 348 | ||||
| -rw-r--r-- | videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h | 15 |
2 files changed, 189 insertions, 174 deletions
diff --git a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp index 2d1d2a4..c391e42 100644 --- a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp +++ b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.cpp @@ -23,6 +23,7 @@ #include <signal.h> #include <pthread.h> + extern "C" { #include <sepdrm.h> #include <fcntl.h> @@ -31,32 +32,37 @@ extern "C" { #include "xf86drmMode.h" } +#include "VideoFrameInfo.h" + // Be sure to have an equal string in VideoDecoderHost.cpp (libmix) static const char* AVC_MIME_TYPE = "video/avc"; static const char* AVC_SECURE_MIME_TYPE = "video/avc-secure"; -#define IMR_INITIAL_OFFSET 0 //1024 -#define IMR_BUFFER_SIZE (8 * 1024 * 1024) -#define KEEP_ALIVE_INTERVAL 5 // seconds -#define DRM_KEEP_ALIVE_TIMER 1000000 -#define WV_SESSION_ID 0x00000011 -#define NALU_BUFFER_SIZE 8192 -#define FLUSH_WAIT_INTERVAL (30 * 1000) //30 ms - - -#pragma pack(push, 1) -struct IMRDataBuffer { - uint32_t offset; +#define DATA_BUFFER_INITIAL_OFFSET 0 //1024 +#define DATA_BUFFER_SIZE (8 * 1024 * 1024) +#define KEEP_ALIVE_INTERVAL 5 // seconds +#define DRM_KEEP_ALIVE_TIMER 1000000 +#define WV_SESSION_ID 0x00000011 +#define NALU_BUFFER_SIZE 8192 +#define NALU_HEADER_LENGTH 1024 // THis should be changed to 4K +#define FLUSH_WAIT_INTERVAL (30 * 1000) //30 ms + +#define DRM_SCHEME_NONE 0 +#define DRM_SCHEME_WV_CLASSIC 1 +#define DRM_SCHEME_WV_MODULAR 2 + +//#pragma pack(push, 1) +struct DataBuffer { uint32_t size; uint8_t *data; - uint8_t clear; // 0 when IMR offset is valid, 1 when data is valid + uint8_t clear; + uint32_t drmScheme; }; -#pragma pack(pop) +//#pragma pack(pop) OMXVideoDecoderAVCSecure::OMXVideoDecoderAVCSecure() : mKeepAliveTimer(0), - mSessionPaused(false), - mDrmDevFd(-1) { + mSessionPaused(false){ LOGV("OMXVideoDecoderAVCSecure is constructed."); mVideoDecoder = createVideoDecoder(AVC_SECURE_MIME_TYPE); if (!mVideoDecoder) { @@ -66,20 +72,11 @@ OMXVideoDecoderAVCSecure::OMXVideoDecoderAVCSecure() mNativeBufferCount = OUTPORT_NATIVE_BUFFER_COUNT; BuildHandlerList(); - - mDrmDevFd = open("/dev/card0", O_RDWR, 0); - if (mDrmDevFd < 0) { - LOGE("Failed to open drm device."); - } } OMXVideoDecoderAVCSecure::~OMXVideoDecoderAVCSecure() { - LOGV("OMXVideoDecoderAVCSecure is destructed."); + LOGI("OMXVideoDecoderAVCSecure is destructed."); - if (mDrmDevFd) { - close(mDrmDevFd); - mDrmDevFd = 0; - } } OMX_ERRORTYPE OMXVideoDecoderAVCSecure::InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput) { @@ -98,11 +95,11 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::InitInputPortFormatSpecific(OMX_PARAM_PO mParamAvc.eProfile = OMX_VIDEO_AVCProfileHigh; //OMX_VIDEO_AVCProfileBaseline; mParamAvc.eLevel = OMX_VIDEO_AVCLevel41; //OMX_VIDEO_AVCLevel1; - this->ports[INPORT_INDEX]->SetMemAllocator(MemAllocIMR, MemFreeIMR, this); + this->ports[INPORT_INDEX]->SetMemAllocator(MemAllocDataBuffer, MemFreeDataBuffer, this); for (int i = 0; i < INPORT_ACTUAL_BUFFER_COUNT; i++) { - mIMRSlot[i].offset = IMR_INITIAL_OFFSET + i * INPORT_BUFFER_SIZE; - mIMRSlot[i].owner = NULL; + mDataBufferSlot[i].offset = DATA_BUFFER_INITIAL_OFFSET + i * INPORT_BUFFER_SIZE; + mDataBufferSlot[i].owner = NULL; } return OMX_ErrorNone; @@ -121,53 +118,13 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorDeinit(void) { if (sepres != 0) { LOGW("Drm_DestroySession returns %#x", sepres); } - EnableIEDSession(false); - return OMXVideoDecoderBase::ProcessorDeinit(); } OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorStart(void) { uint32_t imrOffset = 0; - uint32_t imrBufferSize = IMR_BUFFER_SIZE; - uint32_t sessionID; + uint32_t dataBufferSize = DATA_BUFFER_SIZE; - EnableIEDSession(true); - uint32_t sepres = drm_wv_create_session( &sessionID); - if (sepres != 0) { - LOGW("Drm_WV_CreateSession failed. Result = %#x", sepres); - // Returning error will cause OMX client to crash. - //return OMX_ErrorHardware; - } - if (sessionID != WV_SESSION_ID) { - LOGE("Invalid session ID %#x created", sessionID); - //return OMX_ErrorHardware; - } - LOGI("drm_wv_create_session: sessionID = %#x", sessionID); - - //drmCommandNone(mDrmDevFd, DRM_PSB_HDCP_DISPLAY_IED_OFF); - - int ret; - struct sigevent sev; - memset(&sev, 0, sizeof(sev)); - sev.sigev_notify = SIGEV_THREAD; - sev.sigev_value.sival_ptr = this; - sev.sigev_notify_function = KeepAliveTimerCallback; - - ret = timer_create(CLOCK_REALTIME, &sev, &mKeepAliveTimer); - if (ret != 0) { - LOGE("Failed to create timer."); - } else { - struct itimerspec its; - its.it_value.tv_sec = -1; // never expire - its.it_value.tv_nsec = 0; - its.it_interval.tv_sec = KEEP_ALIVE_INTERVAL; - its.it_interval.tv_nsec = 0; - - ret = timer_settime(mKeepAliveTimer, TIMER_ABSTIME, &its, NULL); - if (ret != 0) { - LOGE("Failed to set timer."); - } - } mSessionPaused = false; return OMXVideoDecoderBase::ProcessorStart(); } @@ -191,17 +148,44 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorProcess( buffer_retain_t *retains, OMX_U32 numberBuffers) { + int ret_value; + OMX_BUFFERHEADERTYPE *pInput = *pBuffers[INPORT_INDEX]; - IMRDataBuffer *imrBuffer = (IMRDataBuffer *)pInput->pBuffer; - if (imrBuffer->size == 0) { + DataBuffer *dataBuffer = (DataBuffer *)pInput->pBuffer; + + if((dataBuffer->drmScheme == DRM_SCHEME_WV_CLASSIC) && (!mKeepAliveTimer)){ + struct sigevent sev; + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify = SIGEV_THREAD; + sev.sigev_value.sival_ptr = this; + sev.sigev_notify_function = KeepAliveTimerCallback; + + ret_value = timer_create(CLOCK_REALTIME, &sev, &mKeepAliveTimer); + if (ret_value != 0) { + LOGE("Failed to create timer."); + } else { + struct itimerspec its; + its.it_value.tv_sec = -1; // never expire + its.it_value.tv_nsec = 0; + its.it_interval.tv_sec = KEEP_ALIVE_INTERVAL; + its.it_interval.tv_nsec = 0; + + ret_value = timer_settime(mKeepAliveTimer, TIMER_ABSTIME, &its, NULL); + if (ret_value != 0) { + LOGE("Failed to set timer."); + } + } + } + + if (dataBuffer->size == 0) { // error occurs during decryption. - LOGW("size of returned IMR buffer is 0, decryption fails."); + LOGW("size of returned data buffer is 0, decryption fails."); mVideoDecoder->flush(); usleep(FLUSH_WAIT_INTERVAL); OMX_BUFFERHEADERTYPE *pOutput = *pBuffers[OUTPORT_INDEX]; pOutput->nFilledLen = 0; - // reset IMR buffer size - imrBuffer->size = INPORT_BUFFER_SIZE; + // reset Data buffer size + dataBuffer->size = INPORT_BUFFER_SIZE; this->ports[INPORT_INDEX]->FlushPort(); this->ports[OUTPORT_INDEX]->FlushPort(); return OMX_ErrorNone; @@ -226,96 +210,133 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorProcess( } OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorPause(void) { -#if 0 - uint32_t sepres = Drm_Playback_Pause(WV_SESSION_ID); - if (sepres != 0) { - LOGE("Drm_Playback_Pause failed. Result = %#x", sepres); - } -#endif return OMXVideoDecoderBase::ProcessorPause(); } OMX_ERRORTYPE OMXVideoDecoderAVCSecure::ProcessorResume(void) { -#if 0 - uint32_t sepres = Drm_Playback_Resume(WV_SESSION_ID); - if (sepres != 0) { - LOGE("Drm_Playback_Resume failed. Result = %#x", sepres); - } -#endif return OMXVideoDecoderBase::ProcessorResume(); } OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareConfigBuffer(VideoConfigBuffer *p) { OMX_ERRORTYPE ret; - ret = OMXVideoDecoderBase::PrepareConfigBuffer(p); + ret = OMXVideoDecoderBase::PrepareConfigBuffer(p); CHECK_RETURN_VALUE("OMXVideoDecoderBase::PrepareConfigBuffer"); p->flag |= WANT_SURFACE_PROTECTION; return ret; } -OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p) { +OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareClassicWVDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p){ OMX_ERRORTYPE ret; - ret = OMXVideoDecoderBase::PrepareDecodeBuffer(buffer, retain, p); - CHECK_RETURN_VALUE("OMXVideoDecoderBase::PrepareDecodeBuffer"); - if (buffer->nFilledLen == 0) { - return OMX_ErrorNone; - } + // OMX_BUFFERFLAG_CODECCONFIG is an optional flag + // if flag is set, buffer will only contain codec data. + + if (buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { + LOGV("Received AVC codec data."); + return ret; + } + p->flag |= HAS_COMPLETE_FRAME; + + if (buffer->nOffset != 0) { + LOGW("buffer offset %lu is not zero!!!", buffer->nOffset); + } + + DataBuffer *dataBuffer = (DataBuffer *)buffer->pBuffer; + if (dataBuffer->clear) { + p->data = dataBuffer->data + buffer->nOffset; + p->size = buffer->nFilledLen; + } else { + dataBuffer->size = NALU_BUFFER_SIZE; + struct drm_wv_nalu_headers nalu_headers; + nalu_headers.p_enc_ciphertext = dataBuffer->data; + + // TODO: NALU Buffer is supposed to be 4k but using 1k, fix it once chaabi fix is there + + nalu_headers.hdrs_buf_len = NALU_HEADER_LENGTH; + nalu_headers.frame_size = buffer->nFilledLen; + // Make sure that NALU header frame size is 16 bytes aligned + nalu_headers.frame_size = (nalu_headers.frame_size + 0xF) & (~0xF); + // Use same video buffer to fill NALU headers returned by chaabi, + // Adding 4 because the first 4 bytes after databuffer will be used to store length of NALU headers + if((nalu_headers.frame_size + NALU_HEADER_LENGTH) > INPORT_BUFFER_SIZE){ + LOGE("Not enough buffer for NALU headers"); + return OMX_ErrorOverflow; + } + + 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); + if (res == DRM_FAIL_FW_SESSION) { + LOGW("Drm_WV_ReturnNALUHeaders failed. Session is disabled."); + mSessionPaused = true; + ret = OMX_ErrorNotReady; + } else if (res != 0) { + mSessionPaused = false; + LOGE("Drm_WV_ReturnNALUHeaders failed. Error = %#x, frame_size: %d, len = %lu", res, nalu_headers.frame_size, buffer->nFilledLen); + ret = OMX_ErrorHardware; + } else { + mSessionPaused = false; + + // If chaabi returns 0 NALU headers fill the frame size to zero. + if (!nalu_headers.hdrs_buf_len) { + p->size = 0; + return ret; + } + else{ + // NALU headers are appended to encrypted video bitstream + // |...encrypted video bitstream (16 bytes aligned)...| 4 bytes of header size |...NALU headers..| + uint32_t *ptr = (uint32_t*)(dataBuffer->data + nalu_headers.frame_size); + *ptr = nalu_headers.hdrs_buf_len; + p->data = dataBuffer->data; + p->size = nalu_headers.frame_size; + p->flag |= IS_SECURE_DATA; + } + } + } + + // reset Data size + dataBuffer->size = NALU_BUFFER_SIZE; + return ret; +} +OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareModularWVDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p){ + OMX_ERRORTYPE ret = OMX_ErrorNone; + // OMX_BUFFERFLAG_CODECCONFIG is an optional flag // if flag is set, buffer will only contain codec data. if (buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { - LOGV("Received AVC codec data."); - return ret; + LOGI("Received AVC codec data."); + // return ret; } - p->flag |= HAS_COMPLETE_FRAME; + p->flag |= HAS_COMPLETE_FRAME | IS_SUBSAMPLE_ENCRYPTION; if (buffer->nOffset != 0) { LOGW("buffer offset %lu is not zero!!!", buffer->nOffset); } - IMRDataBuffer *imrBuffer = (IMRDataBuffer *)buffer->pBuffer; - if (imrBuffer->clear) { - p->data = imrBuffer->data + buffer->nOffset; - p->size = buffer->nFilledLen; - } else { - imrBuffer->size = NALU_BUFFER_SIZE; - struct drm_wv_nalu_headers nalu_headers; - nalu_headers.p_enc_ciphertext = imrBuffer->data; - - // TODO: NALU Buffer is supposed to be 4k but using 1k, fix it once chaabi fix is there - - nalu_headers.hdrs_buf_len = 1024; - nalu_headers.frame_size = buffer->nFilledLen; - // Make sure that NALU header frame size is 16 bytes aligned - nalu_headers.frame_size = (nalu_headers.frame_size + 0xF) & (~0xF); - // Use same video buffer to fill NALU headers returned by chaabi, - // Adding 4 because the first 4 bytes after databuffer will be used to store length of NALU headers - nalu_headers.p_hdrs_buf = (uint8_t *)(imrBuffer->data + nalu_headers.frame_size + 4); - nalu_headers.parse_size = buffer->nFilledLen; - - uint32_t res = drm_wv_return_naluheaders(WV_SESSION_ID, &nalu_headers); - if (res == DRM_FAIL_FW_SESSION || !nalu_headers.hdrs_buf_len) { - LOGW("Drm_WV_ReturnNALUHeaders failed. Session is disabled."); - mSessionPaused = true; - ret = OMX_ErrorNotReady; - } else if (res != 0) { - mSessionPaused = false; - LOGE("Drm_WV_ReturnNALUHeaders failed. Error = %#x, frame_size: %d, len = %lu", res, nalu_headers.frame_size, buffer->nFilledLen); - ret = OMX_ErrorHardware; - } else { - mSessionPaused = false; - // NALU headers are appended to encrypted video bitstream - // |...encrypted video bitstream (16 bytes aligned)...| 4 bytes of header size |...NALU headers..| - uint32_t *ptr = (uint32_t*)(imrBuffer->data + nalu_headers.frame_size); - *ptr = nalu_headers.hdrs_buf_len; - p->data = imrBuffer->data; - p->size = nalu_headers.frame_size; - p->flag |= IS_SECURE_DATA; - } + DataBuffer *dataBuffer = (DataBuffer *)buffer->pBuffer; + p->data = dataBuffer->data; + p->size = sizeof(frame_info_t); + p->flag |= IS_SECURE_DATA; + return ret; +} + + +OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p) { + OMX_ERRORTYPE ret; + + ret = OMXVideoDecoderBase::PrepareDecodeBuffer(buffer, retain, p); + CHECK_RETURN_VALUE("OMXVideoDecoderBase::PrepareDecodeBuffer"); + + if (buffer->nFilledLen == 0) { + return OMX_ErrorNone; } - // reset IMR size - imrBuffer->size = NALU_BUFFER_SIZE; + DataBuffer *dataBuffer = (DataBuffer *)buffer->pBuffer; + if(dataBuffer->drmScheme == DRM_SCHEME_WV_CLASSIC) + return PrepareClassicWVDecodeBuffer(buffer, retain, p); + else if(dataBuffer->drmScheme == DRM_SCHEME_WV_MODULAR) + return PrepareModularWVDecodeBuffer(buffer, retain, p); return ret; } @@ -368,30 +389,33 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::SetParamVideoAVCProfileLevel(OMX_PTR pSt return OMX_ErrorUnsupportedSetting; } -OMX_U8* OMXVideoDecoderAVCSecure::MemAllocIMR(OMX_U32 nSizeBytes, OMX_PTR pUserData) { +OMX_U8* OMXVideoDecoderAVCSecure::MemAllocDataBuffer(OMX_U32 nSizeBytes, OMX_PTR pUserData) { OMXVideoDecoderAVCSecure* p = (OMXVideoDecoderAVCSecure *)pUserData; if (p) { - return p->MemAllocIMR(nSizeBytes); + return p->MemAllocDataBuffer(nSizeBytes); } LOGE("NULL pUserData."); return NULL; } -void OMXVideoDecoderAVCSecure::MemFreeIMR(OMX_U8 *pBuffer, OMX_PTR pUserData) { +void OMXVideoDecoderAVCSecure::MemFreeDataBuffer(OMX_U8 *pBuffer, OMX_PTR pUserData) { OMXVideoDecoderAVCSecure* p = (OMXVideoDecoderAVCSecure *)pUserData; if (p) { - p->MemFreeIMR(pBuffer); + p->MemFreeDataBuffer(pBuffer); return; } LOGE("NULL pUserData."); } -OMX_U8* OMXVideoDecoderAVCSecure::MemAllocIMR(OMX_U32 nSizeBytes) { - // Ignore passed nSizeBytes, use INPORT_BUFFER_SIZE instead - +OMX_U8* OMXVideoDecoderAVCSecure::MemAllocDataBuffer(OMX_U32 nSizeBytes) { + if (nSizeBytes > INPORT_BUFFER_SIZE) { + LOGE("Invalid size (%lu) of memory to allocate.", nSizeBytes); + return NULL; + } + LOGW_IF(nSizeBytes != INPORT_BUFFER_SIZE, "Size of memory to allocate is %lu", nSizeBytes); for (int i = 0; i < INPORT_ACTUAL_BUFFER_COUNT; i++) { - if (mIMRSlot[i].owner == NULL) { - IMRDataBuffer *pBuffer = new IMRDataBuffer; + if (mDataBufferSlot[i].owner == NULL) { + DataBuffer *pBuffer = new DataBuffer; if (pBuffer == NULL) { LOGE("Failed to allocate memory."); return NULL; @@ -404,29 +428,30 @@ OMX_U8* OMXVideoDecoderAVCSecure::MemAllocIMR(OMX_U32 nSizeBytes) { return NULL; } - pBuffer->offset = mIMRSlot[i].offset; + // Is this required for classic or not? + // pBuffer->offset = mDataBufferSlot[i].offset; pBuffer->size = INPORT_BUFFER_SIZE; - mIMRSlot[i].owner = (OMX_U8 *)pBuffer; + mDataBufferSlot[i].owner = (OMX_U8 *)pBuffer; - LOGV("Allocating buffer = %#x, IMR offset = %#x, data = %#x", (uint32_t)pBuffer, mIMRSlot[i].offset, (uint32_t)pBuffer->data); + LOGV("Allocating buffer = %#x, Data offset = %#x, data = %#x", (uint32_t)pBuffer, mDataBufferSlot[i].offset, (uint32_t)pBuffer->data); return (OMX_U8 *) pBuffer; } } - LOGE("IMR slot is not available."); + LOGE("Data buffer slot is not available."); return NULL; } -void OMXVideoDecoderAVCSecure::MemFreeIMR(OMX_U8 *pBuffer) { - IMRDataBuffer *p = (IMRDataBuffer*) pBuffer; +void OMXVideoDecoderAVCSecure::MemFreeDataBuffer(OMX_U8 *pBuffer) { + DataBuffer *p = (DataBuffer*) pBuffer; if (p == NULL) { return; } for (int i = 0; i < INPORT_ACTUAL_BUFFER_COUNT; i++) { - if (pBuffer == mIMRSlot[i].owner) { - LOGV("Freeing IMR offset = %d, data = %#x", mIMRSlot[i].offset, (uint32_t)p->data); + if (pBuffer == mDataBufferSlot[i].owner) { + LOGV("Freeing Data buffer offset = %d, data = %#x", mDataBufferSlot[i].offset, (uint32_t)p->data); delete [] p->data; delete p; - mIMRSlot[i].owner = NULL; + mDataBufferSlot[i].owner = NULL; return; } } @@ -448,15 +473,4 @@ void OMXVideoDecoderAVCSecure::KeepAliveTimerCallback() { } } - -bool OMXVideoDecoderAVCSecure::EnableIEDSession(bool enable) -{ - if (mDrmDevFd < 0) { - return false; - } - int request = enable ? DRM_PSB_ENABLE_IED_SESSION : DRM_PSB_DISABLE_IED_SESSION; - int ret = drmCommandNone(mDrmDevFd, request); - return ret == 0; -} - DECLARE_OMX_COMPONENT("OMX.Intel.VideoDecoder.AVC.secure", "video_decoder.avc", OMXVideoDecoderAVCSecure); diff --git a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h index 733f959..0d8d028 100644 --- a/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h +++ b/videocodec/securevideo/moorefield/OMXVideoDecoderAVCSecure.h @@ -47,13 +47,15 @@ protected: DECLARE_HANDLER(OMXVideoDecoderAVCSecure, ParamVideoAVCProfileLevel); private: - static OMX_U8* MemAllocIMR(OMX_U32 nSizeBytes, OMX_PTR pUserData); - static void MemFreeIMR(OMX_U8 *pBuffer, OMX_PTR pUserData); - OMX_U8* MemAllocIMR(OMX_U32 nSizeBytes); - void MemFreeIMR(OMX_U8 *pBuffer); + static OMX_U8* MemAllocDataBuffer(OMX_U32 nSizeBytes, OMX_PTR pUserData); + static void MemFreeDataBuffer(OMX_U8 *pBuffer, OMX_PTR pUserData); + OMX_U8* MemAllocDataBuffer(OMX_U32 nSizeBytes); + void MemFreeDataBuffer(OMX_U8 *pBuffer); static void KeepAliveTimerCallback(sigval v); void KeepAliveTimerCallback(); - bool EnableIEDSession(bool enable); + //bool EnableIEDSession(bool enable); + OMX_ERRORTYPE PrepareClassicWVDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p); + OMX_ERRORTYPE PrepareModularWVDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p); private: enum { @@ -75,12 +77,11 @@ private: struct IMRSlot { uint32_t offset; uint8_t *owner; // pointer to OMX buffer that owns this slot - } mIMRSlot[INPORT_ACTUAL_BUFFER_COUNT]; + } mDataBufferSlot[INPORT_ACTUAL_BUFFER_COUNT]; timer_t mKeepAliveTimer; bool mSessionPaused; - int mDrmDevFd; }; #endif /* OMX_VIDEO_DECODER_AVC_SECURE_H_ */ |
