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

Commit f62ea801 authored by Pawin Vongmasa's avatar Pawin Vongmasa
Browse files

Use HIDL's memory in CodecBuffer and add wrapper classes for

IOmxBufferProducer and IOmxProducerListener.

Test: Compiles
Bug: 31399200
Change-Id: Ia09973ee7b25120bc35cff02b1409f33b28a4b4e
parent 1d399328
Loading
Loading
Loading
Loading
+17 −3
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 {

@@ -42,6 +43,7 @@ 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 +56,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 +74,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);
@@ -88,8 +98,9 @@ private:
        kBufferTypeInvalid = 0,
        kBufferTypePreset,
        kBufferTypeSharedMem,
        kBufferTypeANWBuffer,
        kBufferTypeANWBuffer, // Use only for non-Treble
        kBufferTypeNativeHandle,
        kBufferTypeHidlMemory // Mapped to CodecBuffer::Type::SHARED_MEM.
    };

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

    // kBufferTypeHidlMemory
    hidl_memory mHidlMemory;

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

+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

+4 −1
Original line number Diff line number Diff line
@@ -27,11 +27,14 @@
#include <utils/SortedVector.h>
#include "OmxNodeOwner.h"

#include <android/hidl/memory/1.0/IMemory.h>

namespace android {
class IOMXBufferSource;
class IOMXObserver;
struct OMXMaster;
class OMXBuffer;
typedef hidl::memory::V1_0::IMemory IHidlMemory;

struct OMXNodeInstance : public BnOMXNode {
    OMXNodeInstance(
@@ -184,7 +187,7 @@ private:

    status_t useBuffer_l(
            OMX_U32 portIndex, const sp<IMemory> &params,
            IOMX::buffer_id *buffer);
            const sp<IHidlMemory> &hParams, IOMX::buffer_id *buffer);

    status_t useGraphicBuffer_l(
            OMX_U32 portIndex, const sp<GraphicBuffer> &graphicBuffer,
Loading