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

Commit 0e4b8e9c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'fix omxnode fd leak'

* changes:
  Fix Omx emptyBuffer fd leak in GraphicBufferSource
  Revert "Revert "Refactor GraphicBufferSource wrappers for OMX HAL""
parents c7700a8a 694ebf67
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -190,6 +190,19 @@ inline ::android::binder::Status toBinderStatus(
            t.description().c_str());
}

/**
 * \brief Convert `Return<Status>` to `binder::Status`.
 *
 * \param[in] t The source `Return<Status>`.
 * \return The corresponding `binder::Status`.
 */
// convert: Return<Status> -> ::android::binder::Status
inline ::android::binder::Status toBinderStatus(
        Return<Status> const& t) {
    return ::android::binder::Status::fromStatusT(
            t.isOk() ? static_cast<status_t>(static_cast<Status>(t)) : UNKNOWN_ERROR);
}

/**
 * \brief Convert `Return<Status>` to `status_t`. This is for legacy binder
 * calls.
+11 −29
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::sp;

using ::android::IOMXNode;

/**
@@ -60,7 +59,7 @@ using ::android::IOMXNode;
 * - TW = Treble Wrapper --- It wraps a legacy object inside a Treble object.
 */

typedef ::android::IGraphicBufferSource LGraphicBufferSource;
typedef ::android::binder::Status BnStatus;
typedef ::android::BnGraphicBufferSource BnGraphicBufferSource;
typedef ::android::hardware::media::omx::V1_0::IGraphicBufferSource
        TGraphicBufferSource;
@@ -68,36 +67,19 @@ typedef ::android::hardware::media::omx::V1_0::IGraphicBufferSource
struct LWGraphicBufferSource : public BnGraphicBufferSource {
    sp<TGraphicBufferSource> mBase;
    LWGraphicBufferSource(sp<TGraphicBufferSource> const& base);
    ::android::binder::Status configure(
    BnStatus configure(
            const sp<IOMXNode>& omxNode, int32_t dataSpace) override;
    ::android::binder::Status setSuspend(bool suspend, int64_t timeUs) override;
    ::android::binder::Status setRepeatPreviousFrameDelayUs(
    BnStatus setSuspend(bool suspend, int64_t timeUs) override;
    BnStatus setRepeatPreviousFrameDelayUs(
            int64_t repeatAfterUs) override;
    ::android::binder::Status setMaxFps(float maxFps) override;
    ::android::binder::Status setTimeLapseConfig(
            int64_t timePerFrameUs, int64_t timePerCaptureUs) override;
    ::android::binder::Status setStartTimeUs(int64_t startTimeUs) override;
    ::android::binder::Status setStopTimeUs(int64_t stopTimeUs) override;
    ::android::binder::Status setColorAspects(int32_t aspects) override;
    ::android::binder::Status setTimeOffsetUs(int64_t timeOffsetsUs) override;
    ::android::binder::Status signalEndOfInputStream() override;
};

struct TWGraphicBufferSource : public TGraphicBufferSource {
    sp<LGraphicBufferSource> mBase;
    TWGraphicBufferSource(sp<LGraphicBufferSource> const& base);
    Return<void> configure(
            const sp<IOmxNode>& omxNode, Dataspace dataspace) override;
    Return<void> setSuspend(bool suspend, int64_t timeUs) override;
    Return<void> setRepeatPreviousFrameDelayUs(int64_t repeatAfterUs) override;
    Return<void> setMaxFps(float maxFps) override;
    Return<void> setTimeLapseConfig(
    BnStatus setMaxFps(float maxFps) override;
    BnStatus setTimeLapseConfig(
            int64_t timePerFrameUs, int64_t timePerCaptureUs) override;
    Return<void> setStartTimeUs(int64_t startTimeUs) override;
    Return<void> setStopTimeUs(int64_t stopTimeUs) override;
    Return<void> setColorAspects(const ColorAspects& aspects) override;
    Return<void> setTimeOffsetUs(int64_t timeOffsetUs) override;
    Return<void> signalEndOfInputStream() override;
    BnStatus setStartTimeUs(int64_t startTimeUs) override;
    BnStatus setStopTimeUs(int64_t stopTimeUs) override;
    BnStatus setColorAspects(int32_t aspects) override;
    BnStatus setTimeOffsetUs(int64_t timeOffsetsUs) override;
    BnStatus signalEndOfInputStream() override;
};

}  // namespace utils
+0 −12
Original line number Diff line number Diff line
@@ -70,18 +70,6 @@ struct LWOmx : public BnOMX {
            sp<::android::IGraphicBufferSource>* bufferSource) override;
};

struct TWOmx : public IOmx {
    sp<IOMX> mBase;
    TWOmx(sp<IOMX> const& base);
    Return<void> listNodes(listNodes_cb _hidl_cb) override;
    Return<void> allocateNode(
            const hidl_string& name,
            const sp<IOmxObserver>& observer,
            allocateNode_cb _hidl_cb) override;
    Return<void> createInputSurface(createInputSurface_cb _hidl_cb) override;

};

}  // namespace utils
}  // namespace V1_0
}  // namespace omx
+10 −74
Original line number Diff line number Diff line
@@ -14,8 +14,6 @@
 * limitations under the License.
 */

#include <stagefright/foundation/ColorUtils.h>

#include <media/omx/1.0/WGraphicBufferSource.h>
#include <media/omx/1.0/WOmxNode.h>
#include <media/omx/1.0/Conversion.h>
@@ -27,14 +25,12 @@ namespace omx {
namespace V1_0 {
namespace utils {

using android::ColorUtils;

// LWGraphicBufferSource
LWGraphicBufferSource::LWGraphicBufferSource(
        sp<TGraphicBufferSource> const& base) : mBase(base) {
}

::android::binder::Status LWGraphicBufferSource::configure(
BnStatus LWGraphicBufferSource::configure(
        const sp<IOMXNode>& omxNode, int32_t dataSpace) {
    sp<IOmxNode> hOmxNode = omxNode->getHalInterface();
    return toBinderStatus(mBase->configure(
@@ -42,111 +38,51 @@ LWGraphicBufferSource::LWGraphicBufferSource(
            toHardwareDataspace(dataSpace)));
}

::android::binder::Status LWGraphicBufferSource::setSuspend(
BnStatus LWGraphicBufferSource::setSuspend(
        bool suspend, int64_t timeUs) {
    return toBinderStatus(mBase->setSuspend(suspend, timeUs));
}

::android::binder::Status LWGraphicBufferSource::setRepeatPreviousFrameDelayUs(
BnStatus LWGraphicBufferSource::setRepeatPreviousFrameDelayUs(
        int64_t repeatAfterUs) {
    return toBinderStatus(mBase->setRepeatPreviousFrameDelayUs(repeatAfterUs));
}

::android::binder::Status LWGraphicBufferSource::setMaxFps(float maxFps) {
BnStatus LWGraphicBufferSource::setMaxFps(float maxFps) {
    return toBinderStatus(mBase->setMaxFps(maxFps));
}

::android::binder::Status LWGraphicBufferSource::setTimeLapseConfig(
BnStatus LWGraphicBufferSource::setTimeLapseConfig(
        int64_t timePerFrameUs, int64_t timePerCaptureUs) {
    return toBinderStatus(mBase->setTimeLapseConfig(
            timePerFrameUs, timePerCaptureUs));
}

::android::binder::Status LWGraphicBufferSource::setStartTimeUs(
BnStatus LWGraphicBufferSource::setStartTimeUs(
        int64_t startTimeUs) {
    return toBinderStatus(mBase->setStartTimeUs(startTimeUs));
}

::android::binder::Status LWGraphicBufferSource::setStopTimeUs(
BnStatus LWGraphicBufferSource::setStopTimeUs(
        int64_t stopTimeUs) {
    return toBinderStatus(mBase->setStopTimeUs(stopTimeUs));
}

::android::binder::Status LWGraphicBufferSource::setColorAspects(
BnStatus LWGraphicBufferSource::setColorAspects(
        int32_t aspects) {
    return toBinderStatus(mBase->setColorAspects(
            toHardwareColorAspects(aspects)));
}

::android::binder::Status LWGraphicBufferSource::setTimeOffsetUs(
BnStatus LWGraphicBufferSource::setTimeOffsetUs(
        int64_t timeOffsetsUs) {
    return toBinderStatus(mBase->setTimeOffsetUs(timeOffsetsUs));
}

::android::binder::Status LWGraphicBufferSource::signalEndOfInputStream() {
BnStatus LWGraphicBufferSource::signalEndOfInputStream() {
    return toBinderStatus(mBase->signalEndOfInputStream());
}

// TWGraphicBufferSource
TWGraphicBufferSource::TWGraphicBufferSource(
        sp<LGraphicBufferSource> const& base) : mBase(base) {
}

Return<void> TWGraphicBufferSource::configure(
        const sp<IOmxNode>& omxNode, Dataspace dataspace) {
    mBase->configure(new LWOmxNode(omxNode), toRawDataspace(dataspace));
    return Void();
}

Return<void> TWGraphicBufferSource::setSuspend(
        bool suspend, int64_t timeUs) {
    mBase->setSuspend(suspend, timeUs);
    return Void();
}

Return<void> TWGraphicBufferSource::setRepeatPreviousFrameDelayUs(
        int64_t repeatAfterUs) {
    mBase->setRepeatPreviousFrameDelayUs(repeatAfterUs);
    return Void();
}

Return<void> TWGraphicBufferSource::setMaxFps(float maxFps) {
    mBase->setMaxFps(maxFps);
    return Void();
}

Return<void> TWGraphicBufferSource::setTimeLapseConfig(
        int64_t timePerFrameUs, int64_t timePerCaptureUs) {
    mBase->setTimeLapseConfig(timePerFrameUs, timePerCaptureUs);
    return Void();
}

Return<void> TWGraphicBufferSource::setStartTimeUs(int64_t startTimeUs) {
    mBase->setStartTimeUs(startTimeUs);
    return Void();
}

Return<void> TWGraphicBufferSource::setStopTimeUs(int64_t stopTimeUs) {
    mBase->setStopTimeUs(stopTimeUs);
    return Void();
}

Return<void> TWGraphicBufferSource::setColorAspects(
        const ColorAspects& aspects) {
    mBase->setColorAspects(toCompactColorAspects(aspects));
    return Void();
}

Return<void> TWGraphicBufferSource::setTimeOffsetUs(int64_t timeOffsetUs) {
    mBase->setTimeOffsetUs(timeOffsetUs);
    return Void();
}

Return<void> TWGraphicBufferSource::signalEndOfInputStream() {
    mBase->signalEndOfInputStream();
    return Void();
}

}  // namespace utils
}  // namespace V1_0
}  // namespace omx
+0 −39
Original line number Diff line number Diff line
@@ -79,45 +79,6 @@ status_t LWOmx::createInputSurface(
    return transStatus == NO_ERROR ? fnStatus : transStatus;
}

// TWOmx
TWOmx::TWOmx(sp<IOMX> const& base) : mBase(base) {
}

Return<void> TWOmx::listNodes(listNodes_cb _hidl_cb) {
    List<IOMX::ComponentInfo> lList;
    Status status = toStatus(mBase->listNodes(&lList));

    hidl_vec<IOmx::ComponentInfo> tList;
    tList.resize(lList.size());
    size_t i = 0;
    for (auto const& lInfo : lList) {
        convertTo(&(tList[i++]), lInfo);
    }
    _hidl_cb(status, tList);
    return Void();
}

Return<void> TWOmx::allocateNode(
        const hidl_string& name,
        const sp<IOmxObserver>& observer,
        allocateNode_cb _hidl_cb) {
    sp<IOMXNode> omxNode;
    Status status = toStatus(mBase->allocateNode(
            name, new LWOmxObserver(observer), &omxNode));
    _hidl_cb(status, new TWOmxNode(omxNode));
    return Void();
}

Return<void> TWOmx::createInputSurface(createInputSurface_cb _hidl_cb) {
    sp<::android::IGraphicBufferProducer> lProducer;
    sp<::android::IGraphicBufferSource> lSource;
    status_t status = mBase->createInputSurface(&lProducer, &lSource);
    _hidl_cb(toStatus(status),
             new TWOmxBufferProducer(lProducer),
             new TWGraphicBufferSource(lSource));
    return Void();
}

}  // namespace utils
}  // namespace V1_0
}  // namespace omx
Loading