Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b234d604 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

release-request-2950741e-0b24-4d70-b748-67bb2b5435b5-for-git_oc-mr1-release-43...

release-request-2950741e-0b24-4d70-b748-67bb2b5435b5-for-git_oc-mr1-release-4357583 snap-temp-L55500000105655441

Change-Id: I3feb62c280d18fe1498c882988dddc30b34a6b93
parents 2fc333ee 01fc3aee
Loading
Loading
Loading
Loading
+39 −5
Original line number Diff line number Diff line
@@ -78,6 +78,8 @@ static const char *kCodecProfile = "android.media.mediacodec.profile"; /* 0..n
static const char *kCodecLevel = "android.media.mediacodec.level";  /* 0..n */
static const char *kCodecMaxWidth = "android.media.mediacodec.maxwidth";  /* 0..n */
static const char *kCodecMaxHeight = "android.media.mediacodec.maxheight";  /* 0..n */
static const char *kCodecError = "android.media.mediacodec.errcode";
static const char *kCodecErrorState = "android.media.mediacodec.errstate";


static int64_t getId(const sp<IResourceManagerClient> &client) {
@@ -465,6 +467,7 @@ MediaCodec::MediaCodec(const sp<ALooper> &looper, pid_t pid, uid_t uid)
      mFlags(0),
      mStickyError(OK),
      mSoftRenderer(NULL),
      mAnalyticsItem(NULL),
      mResourceManagerClient(new ResourceManagerClient(this)),
      mResourceManagerService(new ResourceManagerServiceProxy(pid)),
      mBatteryStatNotified(false),
@@ -483,6 +486,18 @@ MediaCodec::MediaCodec(const sp<ALooper> &looper, pid_t pid, uid_t uid)
    } else {
        mUid = uid;
    }
    initAnalyticsItem();
}

MediaCodec::~MediaCodec() {
    CHECK_EQ(mState, UNINITIALIZED);
    mResourceManagerService->removeResource(getId(mResourceManagerClient));

    flushAnalyticsItem();
}

void MediaCodec::initAnalyticsItem() {
    CHECK(mAnalyticsItem == NULL);
    // set up our new record, get a sessionID, put it into the in-progress list
    mAnalyticsItem = new MediaAnalyticsItem(kCodecKeyName);
    if (mAnalyticsItem != NULL) {
@@ -492,11 +507,9 @@ MediaCodec::MediaCodec(const sp<ALooper> &looper, pid_t pid, uid_t uid)
    }
}

MediaCodec::~MediaCodec() {
    CHECK_EQ(mState, UNINITIALIZED);
    mResourceManagerService->removeResource(getId(mResourceManagerClient));

void MediaCodec::flushAnalyticsItem() {
    if (mAnalyticsItem != NULL) {
        // don't log empty records
        if (mAnalyticsItem->count() > 0) {
            mAnalyticsItem->setFinalized(true);
            mAnalyticsItem->selfrecord();
@@ -1425,6 +1438,12 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {

                        case CONFIGURING:
                        {
                            if (actionCode == ACTION_CODE_FATAL) {
                                mAnalyticsItem->setInt32(kCodecError, err);
                                mAnalyticsItem->setInt32(kCodecErrorState, mState);
                                flushAnalyticsItem();
                                initAnalyticsItem();
                            }
                            setState(actionCode == ACTION_CODE_FATAL ?
                                    UNINITIALIZED : INITIALIZED);
                            break;
@@ -1432,6 +1451,12 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {

                        case STARTING:
                        {
                            if (actionCode == ACTION_CODE_FATAL) {
                                mAnalyticsItem->setInt32(kCodecError, err);
                                mAnalyticsItem->setInt32(kCodecErrorState, mState);
                                flushAnalyticsItem();
                                initAnalyticsItem();
                            }
                            setState(actionCode == ACTION_CODE_FATAL ?
                                    UNINITIALIZED : CONFIGURED);
                            break;
@@ -1468,6 +1493,11 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
                        case FLUSHING:
                        {
                            if (actionCode == ACTION_CODE_FATAL) {
                                mAnalyticsItem->setInt32(kCodecError, err);
                                mAnalyticsItem->setInt32(kCodecErrorState, mState);
                                flushAnalyticsItem();
                                initAnalyticsItem();

                                setState(UNINITIALIZED);
                            } else {
                                setState(
@@ -1496,6 +1526,10 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
                                setState(INITIALIZED);
                                break;
                            default:
                                mAnalyticsItem->setInt32(kCodecError, err);
                                mAnalyticsItem->setInt32(kCodecErrorState, mState);
                                flushAnalyticsItem();
                                initAnalyticsItem();
                                setState(UNINITIALIZED);
                                break;
                            }
+17 −2
Original line number Diff line number Diff line
@@ -302,10 +302,27 @@ void SoftFlacDecoder::onQueueFilled(OMX_U32 /* portIndex */) {
    while (!inQueue.empty() && !outQueue.empty()) {
        BufferInfo *inInfo = *inQueue.begin();
        OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader;
        BufferInfo *outInfo = *outQueue.begin();
        OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
        uint8_t* inBuffer = inHeader->pBuffer + inHeader->nOffset;
        uint32_t inBufferLength = inHeader->nFilledLen;
        bool endOfInput = (inHeader->nFlags & OMX_BUFFERFLAG_EOS) != 0;

        if (inHeader->nFilledLen == 0) {
            if (endOfInput) {
                outHeader->nFilledLen = 0;
                outHeader->nFlags = OMX_BUFFERFLAG_EOS;
                outInfo->mOwnedByUs = false;
                outQueue.erase(outQueue.begin());
                notifyFillBufferDone(outHeader);
            } else {
                ALOGE("onQueueFilled: emptyInputBuffer received");
            }
            inInfo->mOwnedByUs = false;
            inQueue.erase(inQueue.begin());
            notifyEmptyBufferDone(inHeader);
            return;
        }
        if (mInputBufferCount == 0 && !(inHeader->nFlags & OMX_BUFFERFLAG_CODECCONFIG)) {
            ALOGE("onQueueFilled: first buffer should have OMX_BUFFERFLAG_CODECCONFIG set");
            inHeader->nFlags |= OMX_BUFFERFLAG_CODECCONFIG;
@@ -343,8 +360,6 @@ void SoftFlacDecoder::onQueueFilled(OMX_U32 /* portIndex */) {
            return;
        }

        BufferInfo *outInfo = *outQueue.begin();
        OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
        short *outBuffer =
                reinterpret_cast<short *>(outHeader->pBuffer + outHeader->nOffset);
        size_t outBufferSize = outHeader->nAllocLen - outHeader->nOffset;
+2 −0
Original line number Diff line number Diff line
@@ -314,6 +314,8 @@ private:
    SoftwareRenderer *mSoftRenderer;

    MediaAnalyticsItem *mAnalyticsItem;
    void initAnalyticsItem();
    void flushAnalyticsItem();

    sp<AMessage> mOutputFormat;
    sp<AMessage> mInputFormat;
+8 −6
Original line number Diff line number Diff line
@@ -53,21 +53,25 @@ AImage::isClosed() const {

void
AImage::close(int releaseFenceFd) {
    lockReader();
    Mutex::Autolock _l(mLock);
    if (mIsClosed) {
        return;
    }
    sp<AImageReader> reader = mReader.promote();
    if (reader == nullptr) {
        LOG_ALWAYS_FATAL("Error: AImage not closed before AImageReader close!");
        return;
    }
    if (reader != nullptr) {
        reader->releaseImageLocked(this, releaseFenceFd);
    } else if (mBuffer != nullptr) {
        LOG_ALWAYS_FATAL("%s: parent AImageReader closed without releasing image %p",
                __FUNCTION__, this);
    }

    // Should have been set to nullptr in releaseImageLocked
    // Set to nullptr here for extra safety only
    mBuffer = nullptr;
    mLockedBuffer = nullptr;
    mIsClosed = true;
    unlockReader();
}

void
@@ -618,9 +622,7 @@ EXPORT
void AImage_deleteAsync(AImage* image, int releaseFenceFd) {
    ALOGV("%s", __FUNCTION__);
    if (image != nullptr) {
        image->lockReader();
        image->close(releaseFenceFd);
        image->unlockReader();
        if (!image->isClosed()) {
            LOG_ALWAYS_FATAL("Image close failed!");
        }
+1 −0
Original line number Diff line number Diff line
@@ -349,6 +349,7 @@ AImageReader::~AImageReader() {
    for (auto it = mAcquiredImages.begin();
              it != mAcquiredImages.end(); it++) {
        AImage* image = *it;
        releaseImageLocked(image, /*releaseFenceFd*/-1);
        image->close();
    }

Loading