11c1b0f19Sopenharmony_ci/* 21c1b0f19Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 31c1b0f19Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41c1b0f19Sopenharmony_ci * you may not use this file except in compliance with the License. 51c1b0f19Sopenharmony_ci * You may obtain a copy of the License at 61c1b0f19Sopenharmony_ci * 71c1b0f19Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81c1b0f19Sopenharmony_ci * 91c1b0f19Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101c1b0f19Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111c1b0f19Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121c1b0f19Sopenharmony_ci * See the License for the specific language governing permissions and 131c1b0f19Sopenharmony_ci * limitations under the License. 141c1b0f19Sopenharmony_ci */ 151c1b0f19Sopenharmony_ci 161c1b0f19Sopenharmony_ci#include "data_buffer.h" 171c1b0f19Sopenharmony_ci#include "distributed_camera_errno.h" 181c1b0f19Sopenharmony_ci#include "distributed_camera_constants.h" 191c1b0f19Sopenharmony_ci 201c1b0f19Sopenharmony_cinamespace OHOS { 211c1b0f19Sopenharmony_cinamespace DistributedHardware { 221c1b0f19Sopenharmony_ciDataBuffer::DataBuffer(size_t capacity) 231c1b0f19Sopenharmony_ci{ 241c1b0f19Sopenharmony_ci if (capacity != 0 && capacity <= DCAMERA_MAX_RECV_DATA_LEN) { 251c1b0f19Sopenharmony_ci data_ = new uint8_t[capacity] {0}; 261c1b0f19Sopenharmony_ci if (data_ != nullptr) { 271c1b0f19Sopenharmony_ci capacity_ = capacity; 281c1b0f19Sopenharmony_ci rangeLength_ = capacity; 291c1b0f19Sopenharmony_ci } 301c1b0f19Sopenharmony_ci } 311c1b0f19Sopenharmony_ci} 321c1b0f19Sopenharmony_ci 331c1b0f19Sopenharmony_cisize_t DataBuffer::Capacity() const 341c1b0f19Sopenharmony_ci{ 351c1b0f19Sopenharmony_ci return capacity_; 361c1b0f19Sopenharmony_ci} 371c1b0f19Sopenharmony_ci 381c1b0f19Sopenharmony_cisize_t DataBuffer::Size() const 391c1b0f19Sopenharmony_ci{ 401c1b0f19Sopenharmony_ci return rangeLength_; 411c1b0f19Sopenharmony_ci} 421c1b0f19Sopenharmony_ci 431c1b0f19Sopenharmony_cisize_t DataBuffer::Offset() const 441c1b0f19Sopenharmony_ci{ 451c1b0f19Sopenharmony_ci return rangeOffset_; 461c1b0f19Sopenharmony_ci} 471c1b0f19Sopenharmony_ci 481c1b0f19Sopenharmony_ciuint8_t *DataBuffer::Data() const 491c1b0f19Sopenharmony_ci{ 501c1b0f19Sopenharmony_ci return data_ + rangeOffset_; 511c1b0f19Sopenharmony_ci} 521c1b0f19Sopenharmony_ci 531c1b0f19Sopenharmony_ciint32_t DataBuffer::SetRange(size_t offset, size_t size) 541c1b0f19Sopenharmony_ci{ 551c1b0f19Sopenharmony_ci if (!(offset <= capacity_) || !(offset + size <= capacity_)) { 561c1b0f19Sopenharmony_ci return DCAMERA_BAD_VALUE; 571c1b0f19Sopenharmony_ci } 581c1b0f19Sopenharmony_ci 591c1b0f19Sopenharmony_ci rangeOffset_ = offset; 601c1b0f19Sopenharmony_ci rangeLength_ = size; 611c1b0f19Sopenharmony_ci return DCAMERA_OK; 621c1b0f19Sopenharmony_ci} 631c1b0f19Sopenharmony_ci 641c1b0f19Sopenharmony_civoid DataBuffer::SetInt32(const std::string name, int32_t value) 651c1b0f19Sopenharmony_ci{ 661c1b0f19Sopenharmony_ci int32Map_[name] = value; 671c1b0f19Sopenharmony_ci} 681c1b0f19Sopenharmony_ci 691c1b0f19Sopenharmony_civoid DataBuffer::SetInt64(const std::string name, int64_t value) 701c1b0f19Sopenharmony_ci{ 711c1b0f19Sopenharmony_ci int64Map_[name] = value; 721c1b0f19Sopenharmony_ci} 731c1b0f19Sopenharmony_ci 741c1b0f19Sopenharmony_civoid DataBuffer::SetString(const std::string name, std::string value) 751c1b0f19Sopenharmony_ci{ 761c1b0f19Sopenharmony_ci stringMap_[name] = value; 771c1b0f19Sopenharmony_ci} 781c1b0f19Sopenharmony_ci 791c1b0f19Sopenharmony_cibool DataBuffer::FindInt32(const std::string& name, int32_t& value) 801c1b0f19Sopenharmony_ci{ 811c1b0f19Sopenharmony_ci if (int32Map_.count(name) != 0) { 821c1b0f19Sopenharmony_ci value = int32Map_[name]; 831c1b0f19Sopenharmony_ci return true; 841c1b0f19Sopenharmony_ci } else { 851c1b0f19Sopenharmony_ci value = 0; 861c1b0f19Sopenharmony_ci return false; 871c1b0f19Sopenharmony_ci } 881c1b0f19Sopenharmony_ci} 891c1b0f19Sopenharmony_ci 901c1b0f19Sopenharmony_cibool DataBuffer::FindInt64(const std::string& name, int64_t& value) 911c1b0f19Sopenharmony_ci{ 921c1b0f19Sopenharmony_ci if (int64Map_.count(name) != 0) { 931c1b0f19Sopenharmony_ci value = int64Map_[name]; 941c1b0f19Sopenharmony_ci return true; 951c1b0f19Sopenharmony_ci } else { 961c1b0f19Sopenharmony_ci value = 0; 971c1b0f19Sopenharmony_ci return false; 981c1b0f19Sopenharmony_ci } 991c1b0f19Sopenharmony_ci} 1001c1b0f19Sopenharmony_ci 1011c1b0f19Sopenharmony_cibool DataBuffer::FindString(const std::string& name, std::string& value) 1021c1b0f19Sopenharmony_ci{ 1031c1b0f19Sopenharmony_ci if (stringMap_.count(name) != 0) { 1041c1b0f19Sopenharmony_ci value = stringMap_[name]; 1051c1b0f19Sopenharmony_ci return true; 1061c1b0f19Sopenharmony_ci } else { 1071c1b0f19Sopenharmony_ci value = ""; 1081c1b0f19Sopenharmony_ci return false; 1091c1b0f19Sopenharmony_ci } 1101c1b0f19Sopenharmony_ci} 1111c1b0f19Sopenharmony_ci 1121c1b0f19Sopenharmony_ciint64_t DataBuffer::GetTimeStamp() 1131c1b0f19Sopenharmony_ci{ 1141c1b0f19Sopenharmony_ci return frameInfo_.pts; 1151c1b0f19Sopenharmony_ci} 1161c1b0f19Sopenharmony_ci 1171c1b0f19Sopenharmony_ciDataBuffer::~DataBuffer() 1181c1b0f19Sopenharmony_ci{ 1191c1b0f19Sopenharmony_ci if (data_ != nullptr) { 1201c1b0f19Sopenharmony_ci delete[] data_; 1211c1b0f19Sopenharmony_ci data_ = nullptr; 1221c1b0f19Sopenharmony_ci } 1231c1b0f19Sopenharmony_ci} 1241c1b0f19Sopenharmony_ci} // namespace DistributedHardware 1251c1b0f19Sopenharmony_ci} // namespace OHOS 126