diff options
| author | RupaliX <rupalix.sharma@intel.com> | 2014-04-04 12:30:54 -0700 |
|---|---|---|
| committer | Patrick Tjin <pattjin@google.com> | 2014-07-21 22:02:58 -0700 |
| commit | 3b0d10f89c07a36bec7e554a9cccc32c44291f4e (patch) | |
| tree | d98c4f01ab4572f446448fb4cb714fac50f9965a /videocodec | |
| parent | 39007118cdc61495e672ab276a977dcb730395ed (diff) | |
| download | android_hardware_intel_common_omx-components-3b0d10f89c07a36bec7e554a9cccc32c44291f4e.tar.gz android_hardware_intel_common_omx-components-3b0d10f89c07a36bec7e554a9cccc32c44291f4e.tar.bz2 android_hardware_intel_common_omx-components-3b0d10f89c07a36bec7e554a9cccc32c44291f4e.zip | |
New flag for drmScheme and stop playback during cleanup
BZ: 183353
Introduced a new flag for drmScheme specifying widevine as CLASSIC or
MODULAR, using which we bypass a drm_destory_session call failing in
modular. Also, added a stop playback call during ProcessDeinit().
Built and verified the fix on merrifield platform on daily build - 3139
Change-Id: Ie3c8c25228d2b9597f18d22a6c25f951f190e3b7
Signed-off-by: Rupali Sharma <rupalix.sharma@intel.com>
Diffstat (limited to 'videocodec')
| -rwxr-xr-x | videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.cpp | 19 | ||||
| -rwxr-xr-x | videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.h | 1 |
2 files changed, 16 insertions, 4 deletions
diff --git a/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.cpp b/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.cpp index e271b20..cf477c4 100755 --- a/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.cpp +++ b/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.cpp @@ -114,9 +114,17 @@ 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 sepres = drm_destroy_session(WV_SESSION_ID); - if (sepres != 0) { - LOGW("Drm_DestroySession returns %#x", sepres); + if (mDrmScheme == DRM_SCHEME_WV_CLASSIC) { + uint32_t sepres = drm_destroy_session(WV_SESSION_ID); + if (sepres != 0) { + LOGW("Drm_DestroySession returns %#x", sepres); + } + } + else if(mDrmScheme == DRM_SCHEME_WV_MODULAR) { + uint32_t ret = drm_wv_mod_stop_playback(WV_SESSION_ID); + if (ret != DRM_WV_MOD_SUCCESS) { + LOGW("Modular WV - drm_wv_mod_stop_playback returns %#x", ret); + } } return OMXVideoDecoderBase::ProcessorDeinit(); } @@ -332,14 +340,17 @@ OMX_ERRORTYPE OMXVideoDecoderAVCSecure::PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE // OMX_BUFFERFLAG_CODECCONFIG is an optional flag // if flag is set, buffer will only contain codec data. + mDrmScheme = DRM_SCHEME_WV_CLASSIC; if (buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { LOGV("Received AVC codec data."); return ret; } return PrepareClassicWVDecodeBuffer(buffer, retain, p); } - else if(dataBuffer->drmScheme == DRM_SCHEME_WV_MODULAR) + else if(dataBuffer->drmScheme == DRM_SCHEME_WV_MODULAR) { + mDrmScheme = DRM_SCHEME_WV_MODULAR; return PrepareModularWVDecodeBuffer(buffer, retain, p); + } return ret; } diff --git a/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.h b/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.h index 497db0f..f9eaa8c 100755 --- a/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.h +++ b/videocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.h @@ -73,6 +73,7 @@ private: }; OMX_VIDEO_PARAM_AVCTYPE mParamAvc; + uint32_t mDrmScheme; struct IMRSlot { uint32_t offset; |
