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

Commit 2b118b8f authored by Pawin Vongmasa's avatar Pawin Vongmasa Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'OMX Treble 2'

* changes:
  Split Treble conversion module into two sides: impl and utils.
  Use HIDL's memory in CodecBuffer and add wrapper classes for IOmxBufferProducer and IOmxProducerListener.
parents fb388a72 eeac97b1
Loading
Loading
Loading
Loading
+31 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <media/IOMX.h>
#include <system/window.h>
#include <utils/StrongPointer.h>
#include <hidl/HidlSupport.h>

namespace android {

@@ -35,13 +36,21 @@ namespace implementation {
            ::android::OMXBuffer const& l);
    inline bool convertTo(::android::OMXBuffer* l,
            ::android::hardware::media::omx::V1_0::CodecBuffer const& t);
}}}}}
}
namespace utils {
    inline bool wrapAs(::android::hardware::media::omx::V1_0::CodecBuffer* t,
            ::android::OMXBuffer const& l);
    inline bool convertTo(::android::OMXBuffer* l,
            ::android::hardware::media::omx::V1_0::CodecBuffer const& t);
}
}}}}

class GraphicBuffer;
class IMemory;
class MediaCodecBuffer;
class NativeHandle;
struct OMXNodeInstance;
using hardware::hidl_memory;

// TODO: After complete HIDL transition, this class would be replaced by
// CodecBuffer.
@@ -54,10 +63,15 @@ public:
    // Default constructor, constructs a buffer of type kBufferTypeInvalid.
    OMXBuffer();

    // Constructs a buffer of type kBufferTypePreset with mRangeLength set to
    // |codecBuffer|'s size (or 0 if |codecBuffer| is NULL).
    // Constructs a buffer of type kBufferTypePreset with mRangeOffset set to
    // |codecBuffer|'s offset and mRangeLength set to |codecBuffer|'s size (or 0
    // if |codecBuffer| is NULL).
    OMXBuffer(const sp<MediaCodecBuffer> &codecBuffer);

    // Constructs a buffer of type kBufferTypePreset with specified mRangeOffset
    // and mRangeLength.
    OMXBuffer(OMX_U32 rangeOffset, OMX_U32 rangeLength);

    // Constructs a buffer of type kBufferTypeSharedMem.
    OMXBuffer(const sp<IMemory> &mem);

@@ -67,6 +81,9 @@ public:
    // Constructs a buffer of type kBufferTypeNativeHandle.
    OMXBuffer(const sp<NativeHandle> &handle);

    // Constructs a buffer of type kBufferTypeHidlMemory.
    OMXBuffer(const hidl_memory &hidlMemory);

    // Parcelling/Un-parcelling.
    status_t writeToParcel(Parcel *parcel) const;
    status_t readFromParcel(const Parcel *parcel);
@@ -83,13 +100,20 @@ private:
    friend inline bool (::android::hardware::media::omx::V1_0::implementation::
            convertTo)(OMXBuffer* l,
            ::android::hardware::media::omx::V1_0::CodecBuffer const& t);
    friend inline bool (::android::hardware::media::omx::V1_0::utils::
            wrapAs)(::android::hardware::media::omx::V1_0::CodecBuffer* t,
            OMXBuffer const& l);
    friend inline bool (::android::hardware::media::omx::V1_0::utils::
            convertTo)(OMXBuffer* l,
            ::android::hardware::media::omx::V1_0::CodecBuffer const& t);

    enum BufferType {
        kBufferTypeInvalid = 0,
        kBufferTypePreset,
        kBufferTypeSharedMem,
        kBufferTypeANWBuffer,
        kBufferTypeANWBuffer, // Use only for non-Treble
        kBufferTypeNativeHandle,
        kBufferTypeHidlMemory // Mapped to CodecBuffer::Type::SHARED_MEM.
    };

    BufferType mBufferType;
@@ -109,6 +133,9 @@ private:
    // kBufferTypeNativeHandle
    sp<NativeHandle> mNativeHandle;

    // kBufferTypeHidlMemory
    hidl_memory mHidlMemory;

    // Move assignment
    OMXBuffer &operator=(OMXBuffer&&);

+16 −2
Original line number Diff line number Diff line
@@ -26,12 +26,20 @@ struct OMXFenceParcelable;
// This is needed temporarily for the OMX HIDL transition.
namespace hardware {
    struct hidl_handle;
namespace media { namespace omx { namespace V1_0 { namespace implementation {
namespace media { namespace omx { namespace V1_0 {
namespace implementation {
    void wrapAs(::android::OMXFenceParcelable* l,
            ::android::hardware::hidl_handle const& t);
    bool convertTo(::android::OMXFenceParcelable* l,
            ::android::hardware::hidl_handle const& t);
}}}}}
}
namespace utils {
    void wrapAs(::android::OMXFenceParcelable* l,
            ::android::hardware::hidl_handle const& t);
    bool convertTo(::android::OMXFenceParcelable* l,
            ::android::hardware::hidl_handle const& t);
}
}}}}

struct OMXFenceParcelable : public Parcelable {
    OMXFenceParcelable() : mFenceFd(-1) {}
@@ -56,6 +64,12 @@ private:
    friend bool (::android::hardware::media::omx::V1_0::implementation::
            convertTo)(OMXFenceParcelable* l,
            ::android::hardware::hidl_handle const& t);
    friend void (::android::hardware::media::omx::V1_0::utils::
            wrapAs)(OMXFenceParcelable* l,
            ::android::hardware::hidl_handle const& t);
    friend bool (::android::hardware::media::omx::V1_0::utils::
            convertTo)(OMXFenceParcelable* l,
            ::android::hardware::hidl_handle const& t);
};

inline status_t OMXFenceParcelable::readFromParcel(const Parcel* parcel) {
+4 −2
Original line number Diff line number Diff line
@@ -60,7 +60,8 @@ LOCAL_SHARED_LIBRARIES := \
        libui liblog libcutils libutils libbinder libsonivox libicuuc libicui18n libexpat \
        libcamera_client libstagefright_foundation \
        libgui libdl libaudioutils libaudioclient \
        libmedia_helper
        libmedia_helper \
        libhidlbase \

LOCAL_EXPORT_SHARED_LIBRARY_HEADERS := libbinder libsonivox

@@ -72,6 +73,7 @@ LOCAL_MODULE:= libmedia
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk

LOCAL_C_INCLUDES := \
    $(TOP)/system/libhidl/base/include \
    $(TOP)/frameworks/native/include/media/openmax \
    $(TOP)/frameworks/av/include/media/ \
    $(TOP)/frameworks/av/media/libstagefright \
+16 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "OMXBuffer"

#include <media/stagefright/foundation/ADebug.h>
#include <media/MediaCodecBuffer.h>
#include <media/OMXBuffer.h>
#include <binder/IMemory.h>
@@ -39,6 +40,12 @@ OMXBuffer::OMXBuffer(const sp<MediaCodecBuffer>& codecBuffer)
      mRangeLength(codecBuffer != NULL ? codecBuffer->size() : 0) {
}

OMXBuffer::OMXBuffer(OMX_U32 rangeOffset, OMX_U32 rangeLength)
    : mBufferType(kBufferTypePreset),
      mRangeOffset(rangeOffset),
      mRangeLength(rangeLength) {
}

OMXBuffer::OMXBuffer(const sp<IMemory> &mem)
    : mBufferType(kBufferTypeSharedMem),
      mMem(mem) {
@@ -54,10 +61,16 @@ OMXBuffer::OMXBuffer(const sp<NativeHandle> &handle)
      mNativeHandle(handle) {
}

OMXBuffer::OMXBuffer(const hidl_memory &hidlMemory)
    : mBufferType(kBufferTypeHidlMemory),
      mHidlMemory(hidlMemory) {
}

OMXBuffer::~OMXBuffer() {
}

status_t OMXBuffer::writeToParcel(Parcel *parcel) const {
    CHECK(mBufferType != kBufferTypeHidlMemory);
    parcel->writeInt32(mBufferType);

    switch(mBufferType) {
@@ -93,6 +106,7 @@ status_t OMXBuffer::writeToParcel(Parcel *parcel) const {

status_t OMXBuffer::readFromParcel(const Parcel *parcel) {
    BufferType bufferType = (BufferType) parcel->readInt32();
    CHECK(bufferType != kBufferTypeHidlMemory);

    switch(bufferType) {
        case kBufferTypePreset:
@@ -147,10 +161,12 @@ status_t OMXBuffer::readFromParcel(const Parcel *parcel) {

OMXBuffer& OMXBuffer::operator=(OMXBuffer&& source) {
    mBufferType = std::move(source.mBufferType);
    mRangeOffset = std::move(source.mRangeOffset);
    mRangeLength = std::move(source.mRangeLength);
    mMem = std::move(source.mMem);
    mGraphicBuffer = std::move(source.mGraphicBuffer);
    mNativeHandle = std::move(source.mNativeHandle);
    mHidlMemory = source.mHidlMemory; // TODO(b/34093434): Use move when available
    return *this;
}

+1 −0
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ LOCAL_SHARED_LIBRARIES += \
        libstagefright_foundation \
        libdl \
        libRScpp \
	libhidlbase \

LOCAL_EXPORT_SHARED_LIBRARY_HEADERS := libmedia

Loading