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#ifndef NATIVE_MFMAGIC_H
17#define NATIVE_MFMAGIC_H
18
19#include <refbase.h>
20#include "buffer/avbuffer.h"
21#include "buffer/avsharedmemory.h"
22#include "meta/format.h"
23
24#define MF_MAGIC(a, b, c, d) (((a) << 24) + ((b) << 16) + ((c) << 8) + ((d) << 0))
25
26enum class MFMagic {
27    MFMAGIC_UNKNOWN = 0,
28    MFMAGIC_AVBUFFER = MF_MAGIC('B', 'B', 'U', 'F'),
29    MFMAGIC_FORMAT = MF_MAGIC('F', 'R', 'M', 'T'),
30    MFMAGIC_SHARED_MEMORY = MF_MAGIC('S', 'M', 'E', 'M'),
31};
32
33struct MFObjectMagic : public OHOS::RefBase {
34    explicit MFObjectMagic(enum MFMagic m) : magic_(m) {}
35    virtual ~MFObjectMagic() = default;
36    enum MFMagic magic_;
37};
38
39struct OH_AVBuffer : public MFObjectMagic {
40    explicit OH_AVBuffer(const std::shared_ptr<OHOS::Media::AVBuffer> &buf);
41    virtual ~OH_AVBuffer();
42    bool IsEqualBuffer(const std::shared_ptr<OHOS::Media::AVBuffer> &buf);
43    std::shared_ptr<OHOS::Media::AVBuffer> buffer_;
44    bool isUserCreated = false;
45};
46
47struct OH_AVMemory : public MFObjectMagic {
48    explicit OH_AVMemory(const std::shared_ptr<OHOS::Media::AVSharedMemory> &mem);
49    ~OH_AVMemory() override;
50    bool IsEqualMemory(const std::shared_ptr<OHOS::Media::AVSharedMemory> &mem);
51    std::shared_ptr<OHOS::Media::AVSharedMemory> memory_;
52    bool isUserCreated = false;
53};
54
55struct OH_AVFormat : public MFObjectMagic {
56    OH_AVFormat();
57    explicit OH_AVFormat(const OHOS::Media::Format &fmt);
58    ~OH_AVFormat() override;
59    OHOS::Media::Format format_;
60    char *outString_ = nullptr;
61    char *dumpInfo_ = nullptr;
62};
63#endif // NATIVE_MFMAGIC_H