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