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

Commit 32b4f494 authored by Jayant Chowdhary's avatar Jayant Chowdhary
Browse files

libmediautils: move AImageReader_getHGBPFromHandle from libmediandk.



This allows us to remove camerserver's dependency on libmediandk,
thereby reducing its vss increase (brought about due to many of
libmediandk's dependencies, which cameraserver does not need)

Bug: 119582723

Test: mm -j64
Test: showmap <pid of cameraserver> vss before change: 50628
Test: showmap <pid of cameraserver> vss after change: 31256
Test: AImageReaderWindowHandleTest

Change-Id: I8dec6430adda538cb293cdd0d087b9ae1767b900
Signed-off-by: default avatarJayant Chowdhary <jchowdhary@google.com>
parent 6fdd7d07
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@ cc_test {
    shared_libs: [
        "libbinder",
        "libmediandk",
        "libmediautils",
        "libnativewindow",
        "libgui",
        "libutils",
+0 −25
Original line number Diff line number Diff line
@@ -647,31 +647,6 @@ static native_handle_t *convertHalTokenToNativeHandle(
    return nh;
}

static sp<HGraphicBufferProducer> convertNativeHandleToHGBP (
        const native_handle_t *handle) {
    // Read the size of the halToken vec<uint8_t>
    hidl_vec<uint8_t> halToken;
    halToken.setToExternal(
        reinterpret_cast<uint8_t *>(const_cast<int *>(&(handle->data[1]))),
        handle->data[0]);
    sp<HGraphicBufferProducer> hgbp =
        HGraphicBufferProducer::castFrom(retrieveHalInterface(halToken));
    return hgbp;
}

EXPORT
sp<HGraphicBufferProducer> AImageReader_getHGBPFromHandle(
    const native_handle_t *handle) {
    if (handle == nullptr) {
        return nullptr;
    }
    if (handle->numFds != 0  ||
        handle->numInts < ceil(sizeof(size_t) / sizeof(int))) {
        return nullptr;
    }
    return convertNativeHandleToHGBP(handle);
}

EXPORT
media_status_t AImageReader_new(
        int32_t width, int32_t height, int32_t format, int32_t maxImages,
+0 −4
Original line number Diff line number Diff line
@@ -169,8 +169,4 @@ struct AImageReader : public RefBase {
    Mutex                      mLock;
};

// Retrieves HGraphicBufferProducer corresponding to the native_handle_t
// provided (this native handle MUST have been obtained by AImageReader_getWindowNativeHandle()).
sp<HGraphicBufferProducer> AImageReader_getHGBPFromHandle(const native_handle_t *handle);

#endif // _NDK_IMAGE_READER_PRIV_H
+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <gtest/gtest.h>
#include <media/NdkImageReader.h>
#include <media/NdkImage.h>
#include <mediautils/AImageReaderUtils.h>
#include <gui/IGraphicBufferProducer.h>
#include <gui/bufferqueue/1.0/H2BGraphicBufferProducer.h>
#include <NdkImageReaderPriv.h>
@@ -26,6 +27,8 @@
namespace android {

using hardware::graphics::bufferqueue::V1_0::utils::H2BGraphicBufferProducer;
using aimg::AImageReader_getHGBPFromHandle;

typedef IGraphicBufferProducer::QueueBufferInput QueueBufferInput;
typedef IGraphicBufferProducer::QueueBufferOutput QueueBufferOutput;

+52 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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.
 */

#include <cmath>

#include <mediautils/AImageReaderUtils.h>
#include <hidl/HybridInterface.h>

namespace android {
namespace aimg {

using hardware::hidl_vec;

static sp<HGraphicBufferProducer> convertNativeHandleToHGBP (
        const native_handle_t *handle) {
    // Read the size of the halToken vec<uint8_t>
    hidl_vec<uint8_t> halToken;
    halToken.setToExternal(
        reinterpret_cast<uint8_t *>(const_cast<int *>(&(handle->data[1]))),
        handle->data[0]);
    sp<HGraphicBufferProducer> hgbp =
        HGraphicBufferProducer::castFrom(retrieveHalInterface(halToken));
    return hgbp;
}

sp<HGraphicBufferProducer> AImageReader_getHGBPFromHandle(
    const native_handle_t *handle) {
    if (handle == nullptr) {
        return nullptr;
    }
    if (handle->numFds != 0  ||
        handle->numInts < std::ceil(sizeof(size_t) / sizeof(int))) {
        return nullptr;
    }
    return convertNativeHandleToHGBP(handle);
}

} //namespace aimg
} //namespace android
Loading