1049e185fSopenharmony_ci/*
2049e185fSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3049e185fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4049e185fSopenharmony_ci * you may not use this file except in compliance with the License.
5049e185fSopenharmony_ci * You may obtain a copy of the License at
6049e185fSopenharmony_ci *
7049e185fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8049e185fSopenharmony_ci *
9049e185fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10049e185fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11049e185fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12049e185fSopenharmony_ci * See the License for the specific language governing permissions and
13049e185fSopenharmony_ci * limitations under the License.
14049e185fSopenharmony_ci */
15049e185fSopenharmony_ci
16049e185fSopenharmony_ci#include "avdatasrcmemory.h"
17049e185fSopenharmony_ci#include "media_errors.h"
18049e185fSopenharmony_ci#include "media_log.h"
19049e185fSopenharmony_ci
20049e185fSopenharmony_cinamespace {
21049e185fSopenharmony_ci    constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, LOG_DOMAIN_PLAYER, "AVDataSrcMemory"};
22049e185fSopenharmony_ci}
23049e185fSopenharmony_ci
24049e185fSopenharmony_cinamespace OHOS {
25049e185fSopenharmony_cinamespace Media {
26049e185fSopenharmony_cistruct AVSharedMemoryBaseImpl : public AVDataSrcMemory {
27049e185fSopenharmony_cipublic:
28049e185fSopenharmony_ci    AVSharedMemoryBaseImpl(int32_t fd, int32_t size, uint32_t flags, const std::string &name)
29049e185fSopenharmony_ci        : AVDataSrcMemory(fd, size, flags, name) {}
30049e185fSopenharmony_ci};
31049e185fSopenharmony_ci
32049e185fSopenharmony_cistd::shared_ptr<AVSharedMemory> AVDataSrcMemory::CreateFromLocal(
33049e185fSopenharmony_ci    int32_t size, uint32_t flags, const std::string &name)
34049e185fSopenharmony_ci{
35049e185fSopenharmony_ci    std::shared_ptr<AVDataSrcMemory> memory = std::make_shared<AVDataSrcMemory>(size, flags, name);
36049e185fSopenharmony_ci    int32_t ret = memory->Init();
37049e185fSopenharmony_ci    CHECK_AND_RETURN_RET_LOG(ret == MSERR_OK, nullptr, "Create avsharedmemory failed, ret = %{public}d", ret);
38049e185fSopenharmony_ci
39049e185fSopenharmony_ci    return memory;
40049e185fSopenharmony_ci}
41049e185fSopenharmony_ci
42049e185fSopenharmony_cistd::shared_ptr<AVSharedMemory> AVDataSrcMemory::CreateFromRemote(
43049e185fSopenharmony_ci    int32_t fd, int32_t size, uint32_t flags, const std::string &name)
44049e185fSopenharmony_ci{
45049e185fSopenharmony_ci    std::shared_ptr<AVDataSrcMemory> memory = std::make_shared<AVSharedMemoryBaseImpl>(fd, size, flags, name);
46049e185fSopenharmony_ci    int32_t ret = memory->Init();
47049e185fSopenharmony_ci    if (ret != MSERR_OK) {
48049e185fSopenharmony_ci        MEDIA_LOGE("Create avsharedmemory failed, ret = %{public}d", ret);
49049e185fSopenharmony_ci        return nullptr;
50049e185fSopenharmony_ci    }
51049e185fSopenharmony_ci
52049e185fSopenharmony_ci    return memory;
53049e185fSopenharmony_ci}
54049e185fSopenharmony_ci
55049e185fSopenharmony_ciAVDataSrcMemory::AVDataSrcMemory(int32_t size, uint32_t flags, const std::string &name)
56049e185fSopenharmony_ci    : AVSharedMemoryBase(size, flags, name)
57049e185fSopenharmony_ci{
58049e185fSopenharmony_ci    MEDIA_LOGD("enter ctor, instance: 0x%{public}06" PRIXPTR ", name = %{public}s",
59049e185fSopenharmony_ci               FAKE_POINTER(this), name.c_str());
60049e185fSopenharmony_ci    offset_ = 0;
61049e185fSopenharmony_ci}
62049e185fSopenharmony_ci
63049e185fSopenharmony_ciAVDataSrcMemory::AVDataSrcMemory(int32_t fd, int32_t size, uint32_t flags, const std::string &name)
64049e185fSopenharmony_ci    : AVSharedMemoryBase(fd, size, flags, name)
65049e185fSopenharmony_ci{
66049e185fSopenharmony_ci    MEDIA_LOGD("enter ctor, instance: 0x%{public}06" PRIXPTR ", name = %{public}s",
67049e185fSopenharmony_ci               FAKE_POINTER(this), name.c_str());
68049e185fSopenharmony_ci    offset_ = 0;
69049e185fSopenharmony_ci}
70049e185fSopenharmony_ci
71049e185fSopenharmony_ciAVDataSrcMemory::~AVDataSrcMemory()
72049e185fSopenharmony_ci{
73049e185fSopenharmony_ci    MEDIA_LOGD("enter dtor, instance: 0x%{public}06" PRIXPTR ", name = %{public}s",
74049e185fSopenharmony_ci               FAKE_POINTER(this), GetName().c_str());
75049e185fSopenharmony_ci}
76049e185fSopenharmony_ci} // namespace Media
77049e185fSopenharmony_ci} // namespace OHOS
78