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

Commit 8fa70197 authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue Committed by Automerger Merge Worker
Browse files

Merge "Avoid MTP open binder call to MediaProvider" into sc-dev am: 0d0a5832

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/15027810

Change-Id: I9e3f7a41c9634b049b8e8430a40dbc47bcaaa38e
parents 624b46a9 0d0a5832
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -794,18 +794,28 @@ MtpResponseCode MtpServer::doGetObject() {
    struct stat sstat;
    uint64_t finalsize;
    bool transcode = android::base::GetBoolProperty("sys.fuse.transcode_mtp", false);
    bool filePathAccess = true;
    ALOGD("Mtp transcode = %d", transcode);
    mfr.fd = mDatabase->openFilePath(filePath, transcode);
    // Doing this here because we want to update fileLength only for this case and leave the
    // regular path as unchanged as possible.
    if (mfr.fd >= 0) {

    // For performance reasons, only attempt a ContentResolver open when transcode is required.
    // This is fine as long as we don't transcode by default on the device. If we suddenly
    // transcode by default, we'll need to ensure that MTP doesn't transcode by default and we
    // might need to make a binder call to avoid transcoding or come up with a better strategy.
    if (transcode) {
        mfr.fd = mDatabase->openFilePath(filePath, true);
        fstat(mfr.fd, &sstat);
        finalsize = sstat.st_size;
        fileLength = finalsize;
    } else {
        if (mfr.fd < 0) {
            ALOGW("Mtp open via IMtpDatabase failed for %s. Falling back to the original",
                  filePath);
            filePathAccess = true;
        } else {
            filePathAccess = false;
        }
    }

    if (filePathAccess) {
        mfr.fd = open(filePath, O_RDONLY);
        if (mfr.fd < 0) {
            return MTP_RESPONSE_GENERAL_ERROR;