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

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

Snap for 6188276 from 20758384 to qt-qpr3-release

Change-Id: I8bad220d9f41aa712a1a7541d785c1a004d636d9
parents 3d6e9fd3 20758384
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -264,8 +264,12 @@ status_t BnCrypto::onTransact(
        {
            CHECK_INTERFACE(ICrypto, data, reply);

            uint8_t uuid[16];
            data.read(uuid, sizeof(uuid));
            uint8_t uuid[16] = {0};
            if (data.read(uuid, sizeof(uuid)) != NO_ERROR) {
                android_errorWriteLog(0x534e4554, "144767096");
                reply->writeInt32(BAD_VALUE);
                return OK;
            }

            size_t opaqueSize = data.readInt32();
            void *opaqueData = NULL;
@@ -281,6 +285,11 @@ status_t BnCrypto::onTransact(
            }

            data.read(opaqueData, opaqueSize);
            if (data.read(opaqueData, opaqueSize) != NO_ERROR) {
                android_errorWriteLog(0x534e4554, "144767096");
                reply->writeInt32(BAD_VALUE);
                return OK;
            }
            reply->writeInt32(createPlugin(uuid, opaqueData, opaqueSize));

            free(opaqueData);
+64 −49
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ void InputBufferManager::_registerFrameData(
                 << ".";
    std::lock_guard<std::mutex> lock(mMutex);

    std::set<TrackedBuffer> &bufferIds =
    std::set<TrackedBuffer*> &bufferIds =
            mTrackedBuffersMap[listener][frameIndex];

    for (size_t i = 0; i < input.buffers.size(); ++i) {
@@ -79,13 +79,14 @@ void InputBufferManager::_registerFrameData(
                         << "Input buffer at index " << i << " is null.";
            continue;
        }
        const TrackedBuffer &bufferId =
                *bufferIds.emplace(listener, frameIndex, i, input.buffers[i]).
                first;
        TrackedBuffer *bufferId =
            new TrackedBuffer(listener, frameIndex, i, input.buffers[i]);
        mTrackedBufferCache.emplace(bufferId);
        bufferIds.emplace(bufferId);

        c2_status_t status = input.buffers[i]->registerOnDestroyNotify(
                onBufferDestroyed,
                const_cast<void*>(reinterpret_cast<const void*>(&bufferId)));
                reinterpret_cast<void*>(bufferId));
        if (status != C2_OK) {
            LOG(DEBUG) << "InputBufferManager::_registerFrameData -- "
                       << "registerOnDestroyNotify() failed "
@@ -119,31 +120,32 @@ void InputBufferManager::_unregisterFrameData(

    auto findListener = mTrackedBuffersMap.find(listener);
    if (findListener != mTrackedBuffersMap.end()) {
        std::map<uint64_t, std::set<TrackedBuffer>> &frameIndex2BufferIds
        std::map<uint64_t, std::set<TrackedBuffer*>> &frameIndex2BufferIds
                = findListener->second;
        auto findFrameIndex = frameIndex2BufferIds.find(frameIndex);
        if (findFrameIndex != frameIndex2BufferIds.end()) {
            std::set<TrackedBuffer> &bufferIds = findFrameIndex->second;
            for (const TrackedBuffer& bufferId : bufferIds) {
                std::shared_ptr<C2Buffer> buffer = bufferId.buffer.lock();
            std::set<TrackedBuffer*> &bufferIds = findFrameIndex->second;
            for (TrackedBuffer* bufferId : bufferIds) {
                std::shared_ptr<C2Buffer> buffer = bufferId->buffer.lock();
                if (buffer) {
                    c2_status_t status = buffer->unregisterOnDestroyNotify(
                            onBufferDestroyed,
                            const_cast<void*>(
                            reinterpret_cast<const void*>(&bufferId)));
                            reinterpret_cast<void*>(bufferId));
                    if (status != C2_OK) {
                        LOG(DEBUG) << "InputBufferManager::_unregisterFrameData "
                                   << "-- unregisterOnDestroyNotify() failed "
                                   << "(listener @ 0x"
                                        << std::hex
                                        << bufferId.listener.unsafe_get()
                                        << bufferId->listener.unsafe_get()
                                   << ", frameIndex = "
                                        << std::dec << bufferId.frameIndex
                                   << ", bufferIndex = " << bufferId.bufferIndex
                                        << std::dec << bufferId->frameIndex
                                   << ", bufferIndex = " << bufferId->bufferIndex
                                   << ") => status = " << status
                                   << ".";
                    }
                }
                mTrackedBufferCache.erase(bufferId);
                delete bufferId;
            }

            frameIndex2BufferIds.erase(findFrameIndex);
@@ -179,31 +181,32 @@ void InputBufferManager::_unregisterFrameData(

    auto findListener = mTrackedBuffersMap.find(listener);
    if (findListener != mTrackedBuffersMap.end()) {
        std::map<uint64_t, std::set<TrackedBuffer>> &frameIndex2BufferIds =
        std::map<uint64_t, std::set<TrackedBuffer*>> &frameIndex2BufferIds =
                findListener->second;
        for (auto findFrameIndex = frameIndex2BufferIds.begin();
                findFrameIndex != frameIndex2BufferIds.end();
                ++findFrameIndex) {
            std::set<TrackedBuffer> &bufferIds = findFrameIndex->second;
            for (const TrackedBuffer& bufferId : bufferIds) {
                std::shared_ptr<C2Buffer> buffer = bufferId.buffer.lock();
            std::set<TrackedBuffer*> &bufferIds = findFrameIndex->second;
            for (TrackedBuffer* bufferId : bufferIds) {
                std::shared_ptr<C2Buffer> buffer = bufferId->buffer.lock();
                if (buffer) {
                    c2_status_t status = buffer->unregisterOnDestroyNotify(
                            onBufferDestroyed,
                            const_cast<void*>(
                            reinterpret_cast<const void*>(&bufferId)));
                            reinterpret_cast<void*>(bufferId));
                    if (status != C2_OK) {
                        LOG(DEBUG) << "InputBufferManager::_unregisterFrameData "
                                   << "-- unregisterOnDestroyNotify() failed "
                                   << "(listener @ 0x"
                                        << std::hex
                                        << bufferId.listener.unsafe_get()
                                        << bufferId->listener.unsafe_get()
                                   << ", frameIndex = "
                                        << std::dec << bufferId.frameIndex
                                   << ", bufferIndex = " << bufferId.bufferIndex
                                        << std::dec << bufferId->frameIndex
                                   << ", bufferIndex = " << bufferId->bufferIndex
                                   << ") => status = " << status
                                   << ".";
                    }
                    mTrackedBufferCache.erase(bufferId);
                    delete bufferId;
                }
            }
        }
@@ -236,50 +239,59 @@ void InputBufferManager::_onBufferDestroyed(const C2Buffer* buf, void* arg) {
                     << std::dec << ".";
        return;
    }
    TrackedBuffer id(*reinterpret_cast<TrackedBuffer*>(arg));

    std::lock_guard<std::mutex> lock(mMutex);
    TrackedBuffer *bufferId = reinterpret_cast<TrackedBuffer*>(arg);

    if (mTrackedBufferCache.find(bufferId) == mTrackedBufferCache.end()) {
        LOG(VERBOSE) << "InputBufferManager::_onBufferDestroyed -- called with "
                     << "unregistered buffer: "
                     << "buf @ 0x" << std::hex << buf
                     << ", arg @ 0x" << std::hex << arg
                     << std::dec << ".";
        return;
    }

    LOG(VERBOSE) << "InputBufferManager::_onBufferDestroyed -- called with "
                 << "buf @ 0x" << std::hex << buf
                 << ", arg @ 0x" << std::hex << arg
                 << std::dec << " -- "
                 << "listener @ 0x" << std::hex << id.listener.unsafe_get()
                 << ", frameIndex = " << std::dec << id.frameIndex
                 << ", bufferIndex = " << id.bufferIndex
                 << "listener @ 0x" << std::hex << bufferId->listener.unsafe_get()
                 << ", frameIndex = " << std::dec << bufferId->frameIndex
                 << ", bufferIndex = " << bufferId->bufferIndex
                 << ".";

    std::lock_guard<std::mutex> lock(mMutex);

    auto findListener = mTrackedBuffersMap.find(id.listener);
    auto findListener = mTrackedBuffersMap.find(bufferId->listener);
    if (findListener == mTrackedBuffersMap.end()) {
        LOG(DEBUG) << "InputBufferManager::_onBufferDestroyed -- "
        LOG(VERBOSE) << "InputBufferManager::_onBufferDestroyed -- "
                     << "received invalid listener: "
                   << "listener @ 0x" << std::hex << id.listener.unsafe_get()
                   << " (frameIndex = " << std::dec << id.frameIndex
                   << ", bufferIndex = " << id.bufferIndex
                     << "listener @ 0x" << std::hex << bufferId->listener.unsafe_get()
                     << " (frameIndex = " << std::dec << bufferId->frameIndex
                     << ", bufferIndex = " << bufferId->bufferIndex
                     << ").";
        return;
    }

    std::map<uint64_t, std::set<TrackedBuffer>> &frameIndex2BufferIds
    std::map<uint64_t, std::set<TrackedBuffer*>> &frameIndex2BufferIds
            = findListener->second;
    auto findFrameIndex = frameIndex2BufferIds.find(id.frameIndex);
    auto findFrameIndex = frameIndex2BufferIds.find(bufferId->frameIndex);
    if (findFrameIndex == frameIndex2BufferIds.end()) {
        LOG(DEBUG) << "InputBufferManager::_onBufferDestroyed -- "
                   << "received invalid frame index: "
                   << "frameIndex = " << id.frameIndex
                   << " (listener @ 0x" << std::hex << id.listener.unsafe_get()
                   << ", bufferIndex = " << std::dec << id.bufferIndex
                   << "frameIndex = " << bufferId->frameIndex
                   << " (listener @ 0x" << std::hex << bufferId->listener.unsafe_get()
                   << ", bufferIndex = " << std::dec << bufferId->bufferIndex
                   << ").";
        return;
    }

    std::set<TrackedBuffer> &bufferIds = findFrameIndex->second;
    auto findBufferId = bufferIds.find(id);
    std::set<TrackedBuffer*> &bufferIds = findFrameIndex->second;
    auto findBufferId = bufferIds.find(bufferId);
    if (findBufferId == bufferIds.end()) {
        LOG(DEBUG) << "InputBufferManager::_onBufferDestroyed -- "
                   << "received invalid buffer index: "
                   << "bufferIndex = " << id.bufferIndex
                   << " (frameIndex = " << id.frameIndex
                   << ", listener @ 0x" << std::hex << id.listener.unsafe_get()
                   << "bufferIndex = " << bufferId->bufferIndex
                   << " (frameIndex = " << bufferId->frameIndex
                   << ", listener @ 0x" << std::hex << bufferId->listener.unsafe_get()
                   << std::dec << ").";
        return;
    }
@@ -292,10 +304,13 @@ void InputBufferManager::_onBufferDestroyed(const C2Buffer* buf, void* arg) {
        }
    }

    DeathNotifications &deathNotifications = mDeathNotifications[id.listener];
    deathNotifications.indices[id.frameIndex].emplace_back(id.bufferIndex);
    DeathNotifications &deathNotifications = mDeathNotifications[bufferId->listener];
    deathNotifications.indices[bufferId->frameIndex].emplace_back(bufferId->bufferIndex);
    ++deathNotifications.count;
    mOnBufferDestroyed.notify_one();

    mTrackedBufferCache.erase(bufferId);
    delete bufferId;
}

// Notify the clients about buffer destructions.
+12 −6
Original line number Diff line number Diff line
@@ -196,13 +196,9 @@ private:
                frameIndex(frameIndex),
                bufferIndex(bufferIndex),
                buffer(buffer) {}
        TrackedBuffer(const TrackedBuffer&) = default;
        bool operator<(const TrackedBuffer& other) const {
            return bufferIndex < other.bufferIndex;
        }
    };

    // Map: listener -> frameIndex -> set<TrackedBuffer>.
    // Map: listener -> frameIndex -> set<TrackedBuffer*>.
    // Essentially, this is used to store triples (listener, frameIndex,
    // bufferIndex) that's searchable by listener and (listener, frameIndex).
    // However, the value of the innermost map is TrackedBuffer, which also
@@ -210,7 +206,7 @@ private:
    // because onBufferDestroyed() needs to know listener and frameIndex too.
    typedef std::map<wp<IComponentListener>,
                     std::map<uint64_t,
                              std::set<TrackedBuffer>>> TrackedBuffersMap;
                              std::set<TrackedBuffer*>>> TrackedBuffersMap;

    // Storage for pending (unsent) death notifications for one listener.
    // Each pair in member named "indices" are (frameIndex, bufferIndex) from
@@ -247,6 +243,16 @@ private:
    // Mutex for the management of all input buffers.
    std::mutex mMutex;

    // Cache for all TrackedBuffers.
    //
    // Whenever registerOnDestroyNotify() is called, an argument of type
    // TrackedBuffer is created and stored into this cache.
    // Whenever unregisterOnDestroyNotify() or onBufferDestroyed() is called,
    // the TrackedBuffer is removed from this cache.
    //
    // mTrackedBuffersMap stores references to TrackedBuffers inside this cache.
    std::set<TrackedBuffer*> mTrackedBufferCache;

    // Tracked input buffers.
    TrackedBuffersMap mTrackedBuffersMap;

+0 −2
Original line number Diff line number Diff line
@@ -129,7 +129,6 @@ cc_library {
        "CameraSource.cpp",
        "CameraSourceTimeLapse.cpp",
        "DataConverter.cpp",
        "DataSourceBase.cpp",
        "DataSourceFactory.cpp",
        "DataURISource.cpp",
        "ClearFileSource.cpp",
@@ -267,7 +266,6 @@ cc_library_static {
    srcs: [
        "ClearFileSource.cpp",
        "DataURISource.cpp",
        "DataSourceBase.cpp",
        "HTTPBase.cpp",
        "HevcUtils.cpp",
        "MediaClock.cpp",
+0 −130
Original line number Diff line number Diff line
/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//#define LOG_NDEBUG 0
#define LOG_TAG "DataSourceBase"

#include <media/DataSourceBase.h>
#include <media/stagefright/foundation/ByteUtils.h>
#include <media/stagefright/MediaErrors.h>
#include <utils/String8.h>

namespace android {

bool DataSourceBase::getUInt16(off64_t offset, uint16_t *x) {
    *x = 0;

    uint8_t byte[2];
    if (readAt(offset, byte, 2) != 2) {
        return false;
    }

    *x = (byte[0] << 8) | byte[1];

    return true;
}

bool DataSourceBase::getUInt24(off64_t offset, uint32_t *x) {
    *x = 0;

    uint8_t byte[3];
    if (readAt(offset, byte, 3) != 3) {
        return false;
    }

    *x = (byte[0] << 16) | (byte[1] << 8) | byte[2];

    return true;
}

bool DataSourceBase::getUInt32(off64_t offset, uint32_t *x) {
    *x = 0;

    uint32_t tmp;
    if (readAt(offset, &tmp, 4) != 4) {
        return false;
    }

    *x = ntohl(tmp);

    return true;
}

bool DataSourceBase::getUInt64(off64_t offset, uint64_t *x) {
    *x = 0;

    uint64_t tmp;
    if (readAt(offset, &tmp, 8) != 8) {
        return false;
    }

    *x = ntoh64(tmp);

    return true;
}

bool DataSourceBase::getUInt16Var(off64_t offset, uint16_t *x, size_t size) {
    if (size == 2) {
        return getUInt16(offset, x);
    }
    if (size == 1) {
        uint8_t tmp;
        if (readAt(offset, &tmp, 1) == 1) {
            *x = tmp;
            return true;
        }
    }
    return false;
}

bool DataSourceBase::getUInt32Var(off64_t offset, uint32_t *x, size_t size) {
    if (size == 4) {
        return getUInt32(offset, x);
    }
    if (size == 2) {
        uint16_t tmp;
        if (getUInt16(offset, &tmp)) {
            *x = tmp;
            return true;
        }
    }
    return false;
}

bool DataSourceBase::getUInt64Var(off64_t offset, uint64_t *x, size_t size) {
    if (size == 8) {
        return getUInt64(offset, x);
    }
    if (size == 4) {
        uint32_t tmp;
        if (getUInt32(offset, &tmp)) {
            *x = tmp;
            return true;
        }
    }
    return false;
}

status_t DataSourceBase::getSize(off64_t *size) {
    *size = 0;

    return ERROR_UNSUPPORTED;
}

bool DataSourceBase::getUri(char *uriString __unused, size_t bufferSize __unused) {
    return false;
}

}  // namespace android
Loading