1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "securec.h" 17#include <message_parcel.h> 18#include "buffer_handle_sequenceable.h" 19#include "buffer_util.h" 20#include "hdi_log.h" 21#include "native_buffer.h" 22 23namespace OHOS { 24namespace HDI { 25namespace Camera { 26namespace V1_0 { 27using namespace OHOS::HDI::Base; 28 29class BufferHandleSequenceable::BufferHandleWrap { 30public: 31 explicit BufferHandleWrap(BufferHandle *bufferHandle = nullptr) 32 { 33 nativeBuffer_ = new (std::nothrow) NativeBuffer(); 34 if (nativeBuffer_ == nullptr) { 35 HDI_CAMERA_LOGE("Native buffer object create failed."); 36 return; 37 } 38 nativeBuffer_->SetBufferHandle(bufferHandle); 39 } 40 sptr<NativeBuffer> nativeBuffer_; 41}; 42 43BufferHandleSequenceable::BufferHandleSequenceable(const BufferHandle &bufferHandle) 44{ 45 auto newBufferHandle = NewBufferHandle(bufferHandle.reserveFds, bufferHandle.reserveInts); 46 bufferHandleWrap_ = std::make_shared<BufferHandleWrap>(newBufferHandle); 47} 48 49BufferHandleSequenceable::BufferHandleSequenceable(BufferHandle *bufferHandle) 50{ 51 bufferHandleWrap_ = std::make_shared<BufferHandleWrap>(bufferHandle); 52} 53 54BufferHandle* BufferHandleSequenceable::NewBufferHandle(uint32_t reserveFds, uint32_t reserveInts) 55{ 56 return AllocateNativeBufferHandle(reserveFds, reserveInts); 57} 58 59void BufferHandleSequenceable::SetBufferHandle(BufferHandle *handle) 60{ 61 if (bufferHandleWrap_->nativeBuffer_ != nullptr) { 62 bufferHandleWrap_->nativeBuffer_->SetBufferHandle(handle); 63 } 64} 65BufferHandle* BufferHandleSequenceable::GetBufferHandle() 66{ 67 if (bufferHandleWrap_->nativeBuffer_ == nullptr) { 68 return nullptr; 69 } 70 return bufferHandleWrap_->nativeBuffer_->GetBufferHandle(); 71} 72 73bool BufferHandleSequenceable::Marshalling(Parcel &parcel) const 74{ 75 if (bufferHandleWrap_->nativeBuffer_ == nullptr) { 76 return false; 77 } 78 return bufferHandleWrap_->nativeBuffer_->Marshalling(parcel); 79} 80 81sptr<BufferHandleSequenceable> BufferHandleSequenceable::Unmarshalling(Parcel &parcel) 82{ 83 sptr<BufferHandleSequenceable> sequenceObj(new BufferHandleSequenceable()); 84 if (sequenceObj->bufferHandleWrap_ == nullptr) { 85 return nullptr; 86 } 87 sequenceObj->bufferHandleWrap_->nativeBuffer_ = NativeBuffer::Unmarshalling(parcel); 88 return sequenceObj; 89} 90 91} // V1_0 92} // Camera 93} // HDI 94} // OHOS