Home | History | Annotate | Download | only in media
      1 /*
      2  * Copyright 2016, The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef _OMXBUFFER_H_
     18 #define _OMXBUFFER_H_
     19 
     20 #include <cutils/native_handle.h>
     21 #include <media/IOMX.h>
     22 #include <utils/StrongPointer.h>
     23 #include <hidl/HidlSupport.h>
     24 
     25 namespace android {
     26 
     27 class OMXBuffer;
     28 
     29 // This is needed temporarily for the OMX HIDL transition.
     30 namespace hardware { namespace media { namespace omx {
     31 namespace V1_0 {
     32     struct CodecBuffer;
     33 namespace implementation {
     34     inline bool wrapAs(::android::hardware::media::omx::V1_0::CodecBuffer* t,
     35             ::android::OMXBuffer const& l);
     36     inline bool convertTo(::android::OMXBuffer* l,
     37             ::android::hardware::media::omx::V1_0::CodecBuffer const& t);
     38 }
     39 namespace utils {
     40     inline bool wrapAs(::android::hardware::media::omx::V1_0::CodecBuffer* t,
     41             ::android::OMXBuffer const& l);
     42     inline bool convertTo(::android::OMXBuffer* l,
     43             ::android::hardware::media::omx::V1_0::CodecBuffer const& t);
     44 }
     45 }}}}
     46 
     47 class GraphicBuffer;
     48 class IMemory;
     49 class MediaCodecBuffer;
     50 class NativeHandle;
     51 struct OMXNodeInstance;
     52 using hardware::hidl_memory;
     53 
     54 // TODO: After complete HIDL transition, this class would be replaced by
     55 // CodecBuffer.
     56 class OMXBuffer {
     57 public:
     58     // sPreset is used in places where we are referring to a pre-registered
     59     // buffer on a port. It has type kBufferTypePreset and mRangeLength of 0.
     60     static OMXBuffer sPreset;
     61 
     62     // Default constructor, constructs a buffer of type kBufferTypeInvalid.
     63     OMXBuffer();
     64 
     65     // Constructs a buffer of type kBufferTypePreset with mRangeOffset set to
     66     // |codecBuffer|'s offset and mRangeLength set to |codecBuffer|'s size (or 0
     67     // if |codecBuffer| is NULL).
     68     OMXBuffer(const sp<MediaCodecBuffer> &codecBuffer);
     69 
     70     // Constructs a buffer of type kBufferTypePreset with specified mRangeOffset
     71     // and mRangeLength.
     72     OMXBuffer(OMX_U32 rangeOffset, OMX_U32 rangeLength);
     73 
     74     // Constructs a buffer of type kBufferTypeSharedMem.
     75     OMXBuffer(const sp<IMemory> &mem);
     76 
     77     // Constructs a buffer of type kBufferTypeANWBuffer.
     78     OMXBuffer(const sp<GraphicBuffer> &gbuf);
     79 
     80     // Constructs a buffer of type kBufferTypeNativeHandle.
     81     OMXBuffer(const sp<NativeHandle> &handle);
     82 
     83     // Constructs a buffer of type kBufferTypeHidlMemory.
     84     OMXBuffer(const hidl_memory &hidlMemory);
     85 
     86     // Parcelling/Un-parcelling.
     87     status_t writeToParcel(Parcel *parcel) const;
     88     status_t readFromParcel(const Parcel *parcel);
     89 
     90     ~OMXBuffer();
     91 
     92 private:
     93     friend struct OMXNodeInstance;
     94 
     95     // This is needed temporarily for OMX HIDL transition.
     96     friend inline bool (::android::hardware::media::omx::V1_0::implementation::
     97             wrapAs)(::android::hardware::media::omx::V1_0::CodecBuffer* t,
     98             OMXBuffer const& l);
     99     friend inline bool (::android::hardware::media::omx::V1_0::implementation::
    100             convertTo)(OMXBuffer* l,
    101             ::android::hardware::media::omx::V1_0::CodecBuffer const& t);
    102     friend inline bool (::android::hardware::media::omx::V1_0::utils::
    103             wrapAs)(::android::hardware::media::omx::V1_0::CodecBuffer* t,
    104             OMXBuffer const& l);
    105     friend inline bool (::android::hardware::media::omx::V1_0::utils::
    106             convertTo)(OMXBuffer* l,
    107             ::android::hardware::media::omx::V1_0::CodecBuffer const& t);
    108 
    109     enum BufferType {
    110         kBufferTypeInvalid = 0,
    111         kBufferTypePreset,
    112         kBufferTypeSharedMem,
    113         kBufferTypeANWBuffer, // Use only for non-Treble
    114         kBufferTypeNativeHandle,
    115         kBufferTypeHidlMemory // Mapped to CodecBuffer::Type::SHARED_MEM.
    116     };
    117 
    118     BufferType mBufferType;
    119 
    120     // kBufferTypePreset
    121     // If the port is operating in byte buffer mode, mRangeLength is the valid
    122     // range length. Otherwise the range info should also be ignored.
    123     OMX_U32 mRangeOffset;
    124     OMX_U32 mRangeLength;
    125 
    126     // kBufferTypeSharedMem
    127     sp<IMemory> mMem;
    128 
    129     // kBufferTypeANWBuffer
    130     sp<GraphicBuffer> mGraphicBuffer;
    131 
    132     // kBufferTypeNativeHandle
    133     sp<NativeHandle> mNativeHandle;
    134 
    135     // kBufferTypeHidlMemory
    136     hidl_memory mHidlMemory;
    137 
    138     // Move assignment
    139     OMXBuffer &operator=(OMXBuffer&&);
    140 
    141     // Deleted copy constructor and assignment.
    142     OMXBuffer(const OMXBuffer&) = delete;
    143     OMXBuffer& operator=(const OMXBuffer&) = delete;
    144 };
    145 
    146 }  // namespace android
    147 
    148 #endif  // _OMXBUFFER_H_
    149