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 23 namespace OHOS { 24 namespace HDI { 25 namespace Camera { 26 namespace V1_0 { 27 using namespace OHOS::HDI::Base; 28 29 class BufferHandleSequenceable::BufferHandleWrap { 30 public: BufferHandleWrap(BufferHandle * bufferHandle=nullptr)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 BufferHandleSequenceable(const BufferHandle & bufferHandle)43BufferHandleSequenceable::BufferHandleSequenceable(const BufferHandle &bufferHandle) 44 { 45 auto newBufferHandle = NewBufferHandle(bufferHandle.reserveFds, bufferHandle.reserveInts); 46 bufferHandleWrap_ = std::make_shared<BufferHandleWrap>(newBufferHandle); 47 } 48 BufferHandleSequenceable(BufferHandle * bufferHandle)49BufferHandleSequenceable::BufferHandleSequenceable(BufferHandle *bufferHandle) 50 { 51 bufferHandleWrap_ = std::make_shared<BufferHandleWrap>(bufferHandle); 52 } 53 NewBufferHandle(uint32_t reserveFds,uint32_t reserveInts)54BufferHandle* BufferHandleSequenceable::NewBufferHandle(uint32_t reserveFds, uint32_t reserveInts) 55 { 56 return AllocateNativeBufferHandle(reserveFds, reserveInts); 57 } 58 SetBufferHandle(BufferHandle * handle)59void BufferHandleSequenceable::SetBufferHandle(BufferHandle *handle) 60 { 61 if (bufferHandleWrap_->nativeBuffer_ != nullptr) { 62 bufferHandleWrap_->nativeBuffer_->SetBufferHandle(handle); 63 } 64 } GetBufferHandle()65BufferHandle* BufferHandleSequenceable::GetBufferHandle() 66 { 67 if (bufferHandleWrap_->nativeBuffer_ == nullptr) { 68 return nullptr; 69 } 70 return bufferHandleWrap_->nativeBuffer_->GetBufferHandle(); 71 } 72 Marshalling(Parcel & parcel) const73bool BufferHandleSequenceable::Marshalling(Parcel &parcel) const 74 { 75 if (bufferHandleWrap_->nativeBuffer_ == nullptr) { 76 return false; 77 } 78 return bufferHandleWrap_->nativeBuffer_->Marshalling(parcel); 79 } 80 Unmarshalling(Parcel & parcel)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