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