aboutsummaryrefslogtreecommitdiffstats
path: root/videocodec
diff options
context:
space:
mode:
authorRupaliX <rupalix.sharma@intel.com>2014-04-04 12:30:54 -0700
committerPatrick Tjin <pattjin@google.com>2014-07-21 22:02:58 -0700
commit3b0d10f89c07a36bec7e554a9cccc32c44291f4e (patch)
treed98c4f01ab4572f446448fb4cb714fac50f9965a /videocodec
parent39007118cdc61495e672ab276a977dcb730395ed (diff)
downloadandroid_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-xvideocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.cpp19
-rwxr-xr-xvideocodec/securevideo/merrifield/OMXVideoDecoderAVCSecure.h1
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;