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

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

Merge "Refactor GraphicBufferSource wrappers for OMX HAL"

parents 0012417d 3d32c95e
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