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

Commit 94ea480a authored by Girish's avatar Girish
Browse files

set the metrics handle correctly on error

Bug: 321260365
Test: atest android.media.misc.cts.ResourceManagerTest
Change-Id: I40a0cb81a46594704f3dceb722c37444c63a0131
parent 21c7f857
Loading
Loading
Loading
Loading
+12 −4
Original line number Original line Diff line number Diff line
@@ -2256,7 +2256,10 @@ static const char enableMediaFormatShapingProperty[] = "debug.stagefright.enable
static void mapFormat(AString componentName, const sp<AMessage> &format, const char *kind,
static void mapFormat(AString componentName, const sp<AMessage> &format, const char *kind,
                      bool reverse);
                      bool reverse);


mediametrics_handle_t MediaCodec::createMediaMetrics(const sp<AMessage>& format, uint32_t flags) {
mediametrics_handle_t MediaCodec::createMediaMetrics(const sp<AMessage>& format,
                                                     uint32_t flags,
                                                     status_t* err) {
    *err = OK;
    mediametrics_handle_t nextMetricsHandle = mediametrics_create(kCodecKeyName);
    mediametrics_handle_t nextMetricsHandle = mediametrics_create(kCodecKeyName);
    bool isEncoder = (flags & CONFIGURE_FLAG_ENCODE);
    bool isEncoder = (flags & CONFIGURE_FLAG_ENCODE);


@@ -2336,7 +2339,9 @@ mediametrics_handle_t MediaCodec::createMediaMetrics(const sp<AMessage>& format,
            mErrorLog.log(LOG_TAG, base::StringPrintf(
            mErrorLog.log(LOG_TAG, base::StringPrintf(
                    "Invalid size(s), width=%d, height=%d", mWidth, mHeight));
                    "Invalid size(s), width=%d, height=%d", mWidth, mHeight));
            mediametrics_delete(nextMetricsHandle);
            mediametrics_delete(nextMetricsHandle);
            return BAD_VALUE;
            // Set the error code and return null handle.
            *err = BAD_VALUE;
            return 0;
        }
        }


    } else {
    } else {
@@ -2419,7 +2424,11 @@ status_t MediaCodec::configure(
    updateCodecImportance(format);
    updateCodecImportance(format);


    // Create and set up metrics for this codec.
    // Create and set up metrics for this codec.
    mediametrics_handle_t nextMetricsHandle = createMediaMetrics(format, flags);
    status_t err = OK;
    mediametrics_handle_t nextMetricsHandle = createMediaMetrics(format, flags, &err);
    if (err != OK) {
        return err;
    }


    sp<AMessage> msg = new AMessage(kWhatConfigure, this);
    sp<AMessage> msg = new AMessage(kWhatConfigure, this);
    msg->setMessage("format", format);
    msg->setMessage("format", format);
@@ -2454,7 +2463,6 @@ status_t MediaCodec::configure(


    sp<AMessage> callback = mCallback;
    sp<AMessage> callback = mCallback;


    status_t err;
    std::vector<MediaResourceParcel> resources;
    std::vector<MediaResourceParcel> resources;
    resources.push_back(MediaResource::CodecResource(mFlags & kFlagIsSecure,
    resources.push_back(MediaResource::CodecResource(mFlags & kFlagIsSecure,
            toMediaResourceSubType(mIsHardware, mDomain)));
            toMediaResourceSubType(mIsHardware, mDomain)));
+4 −1
Original line number Original line Diff line number Diff line
@@ -331,7 +331,10 @@ private:
    friend struct ResourceManagerClient;
    friend struct ResourceManagerClient;


    // to create the metrics associated with this codec.
    // to create the metrics associated with this codec.
    mediametrics_handle_t createMediaMetrics(const sp<AMessage>& format, uint32_t flags);
    // Any error in this function will be captured by the output argument err.
    mediametrics_handle_t createMediaMetrics(const sp<AMessage>& format,
                                             uint32_t flags,
                                             status_t* err);


private:
private:
    enum State {
    enum State {