diff options
author | Harish Mahendrakar <harish.mahendrakar@ittiam.com> | 2015-10-12 19:24:18 +0530 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2016-06-23 15:05:17 -0700 |
commit | a4567c66f4764442c6cb7b5c1858810194480fb5 (patch) | |
tree | 5b8c7a88aaf36f6f4c94ce1f801ff76ddea0f0d8 /media/libstagefright/codecs/hevcdec/SoftHEVC.cpp | |
parent | 42a25c46b844518ff0d0b920c20c519e1417be69 (diff) | |
download | frameworks_av-a4567c66f4764442c6cb7b5c1858810194480fb5.zip frameworks_av-a4567c66f4764442c6cb7b5c1858810194480fb5.tar.gz frameworks_av-a4567c66f4764442c6cb7b5c1858810194480fb5.tar.bz2 |
SoftHEVC: Exit gracefully in case of decoder errors
Exit for error in allocation and unsupported resolutions
Bug: 28816956
Change-Id: Ieb830bedeb3a7431d1d21a024927df630f7eda1e
Diffstat (limited to 'media/libstagefright/codecs/hevcdec/SoftHEVC.cpp')
-rw-r--r-- | media/libstagefright/codecs/hevcdec/SoftHEVC.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/media/libstagefright/codecs/hevcdec/SoftHEVC.cpp b/media/libstagefright/codecs/hevcdec/SoftHEVC.cpp index a70755c..1dac868 100644 --- a/media/libstagefright/codecs/hevcdec/SoftHEVC.cpp +++ b/media/libstagefright/codecs/hevcdec/SoftHEVC.cpp @@ -444,6 +444,9 @@ void SoftHEVC::onQueueFilled(OMX_U32 portIndex) { if (NULL == mCodecCtx) { if (OK != initDecoder()) { + ALOGE("Failed to initialize decoder"); + notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL); + mSignalledError = true; return; } } @@ -540,6 +543,25 @@ void SoftHEVC::onQueueFilled(OMX_U32 portIndex) { IV_API_CALL_STATUS_T status; status = ivdec_api_function(mCodecCtx, (void *)&s_dec_ip, (void *)&s_dec_op); + bool unsupportedResolution = + (IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED == (s_dec_op.u4_error_code & 0xFF)); + + /* Check for unsupported dimensions */ + if (unsupportedResolution) { + ALOGE("Unsupported resolution : %dx%d", mWidth, mHeight); + notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL); + mSignalledError = true; + return; + } + + bool allocationFailed = (IVD_MEM_ALLOC_FAILED == (s_dec_op.u4_error_code & 0xFF)); + if (allocationFailed) { + ALOGE("Allocation failure in decoder"); + notify(OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL); + mSignalledError = true; + return; + } + bool resChanged = (IVD_RES_CHANGED == (s_dec_op.u4_error_code & 0xFF)); GETTIME(&mTimeEnd, NULL); |