android8.1 SoundPool加载资源文件反复操作会出现crash

应用在使用soundpool这个类去播放声音,设置资源文件点击home键后退出后,再进入应用,反复操作会导致系统crash:

android8.1出现此类Bug,需要修改系统:

[sdm660_8.1/frameworks/av/.git] / media / libstagefright / ACodec.cpp
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 0630f85..519d662 100644 (file)
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -64,7 +64,7 @@
 
 #include <stagefright/AVExtensions.h>
 #include <common/LogOverride.h>
-
+#include <utils/Mutex.h>
 #define QTI_FLAC_DECODER
 namespace android {
 
@@ -73,7 +73,7 @@ using binder::Status;
 enum {
     kMaxIndicesToCheck = 32, // used when enumerating supported formats and profiles
 };
-
+Mutex gLock; //vos-add-modify libhidlbase.so crash-#6287-zhoujy-181224
 // OMX errors are directly mapped into status_t range if
 // there is no corresponding MediaError status code.
 // Use the statusFromOMXError(int32_t omxError) function.
@@ -834,6 +834,7 @@ status_t ACodec::setPortMode(int32_t portIndex, IOMX::PortMode mode) {
 }
 
 status_t ACodec::allocateBuffersOnPort(OMX_U32 portIndex) {
+        Mutex::Autolock _l(gLock);//vos-add-modify libhidlbase.so crash-#6287-zhoujy-181224
     if (portIndex == kPortIndexInputExtradata ||
             portIndex == kPortIndexOutputExtradata) {
         return OK;
@@ -7928,7 +7929,7 @@ bool ACodec::OutputPortSettingsChangedState::onOMXFrameRendered(
 
 bool ACodec::OutputPortSettingsChangedState::onOMXEvent(
         OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) {
-    switch (event) {
+switch (event) {
         case OMX_EventCmdComplete:
         {
             if (data1 == (OMX_U32)OMX_CommandPortDisable) {
@@ -7936,7 +7937,6 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent(
                     ALOGW("ignoring EventCmdComplete CommandPortDisable for port %u", data2);
                     return false;
                 }
-
                 ALOGV("[%s] Output port now disabled.", mCodec->mComponentName.c_str());
 
                 status_t err = OK;
@@ -7946,12 +7946,16 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent(
                     err = FAILED_TRANSACTION;
                 } else {
                     if (mCodec->getTrebleFlag()) {
-                        mCodec->mAllocator[kPortIndexOutput].clear();
+                                               /**modify libhidelbase.so crash-zhoujy-181224 start*/
+                                            if (mCodec->allYourBuffersAreBelongToUs(kPortIndexOutput)) {
+                                                            mCodec->freeBuffersOnPort(kPortIndexOutput);
+                                               }
+                       // mCodec->mAllocator[kPortIndexOutput].clear();
+                                          /**modify libhidlbase.so crash-zhoujy-181224 end*/

                     } else {
                         mCodec->mDealer[kPortIndexOutput].clear();
                     }
                 }
-
                 if (err == OK) {
                     err = mCodec->mOMXNode->sendCommand(
                             OMX_CommandPortEnable, kPortIndexOutput);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值