1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License.
5da853ecaSopenharmony_ci * You may obtain a copy of the License at
6da853ecaSopenharmony_ci *
7da853ecaSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8da853ecaSopenharmony_ci *
9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and
13da853ecaSopenharmony_ci * limitations under the License.
14da853ecaSopenharmony_ci */
15da853ecaSopenharmony_ci
16da853ecaSopenharmony_ci#ifndef MEDIA_AVCODEC_AVSOURCE_H
17da853ecaSopenharmony_ci#define MEDIA_AVCODEC_AVSOURCE_H
18da853ecaSopenharmony_ci
19da853ecaSopenharmony_ci#include <vector>
20da853ecaSopenharmony_ci#include <memory>
21da853ecaSopenharmony_ci#include <string>
22da853ecaSopenharmony_ci#include "meta/format.h"
23da853ecaSopenharmony_ci#include "media_demuxer.h"
24da853ecaSopenharmony_ci
25da853ecaSopenharmony_cinamespace OHOS {
26da853ecaSopenharmony_cinamespace MediaAVCodec {
27da853ecaSopenharmony_ciclass AVSource {
28da853ecaSopenharmony_cipublic:
29da853ecaSopenharmony_ci    virtual ~AVSource() = default;
30da853ecaSopenharmony_ci
31da853ecaSopenharmony_ci    /**
32da853ecaSopenharmony_ci     * @brief Get the format info of source.
33da853ecaSopenharmony_ci     * @param format The Format handle pointer to get format info.
34da853ecaSopenharmony_ci     * @return Returns {@link AVCS_ERR_OK} if success; returns an error code otherwise.
35da853ecaSopenharmony_ci     * @since 4.0
36da853ecaSopenharmony_ci     */
37da853ecaSopenharmony_ci    virtual int32_t GetSourceFormat(OHOS::Media::Format &format) = 0;
38da853ecaSopenharmony_ci
39da853ecaSopenharmony_ci    /**
40da853ecaSopenharmony_ci     * @brief Gets the parameters of the source.
41da853ecaSopenharmony_ci     * @param format The Format handle pointer to get format info.
42da853ecaSopenharmony_ci     * @param trackIndex The track index to get format.
43da853ecaSopenharmony_ci     * @return Returns {@link AVCS_ERR_OK} if success; returns an error code otherwise.
44da853ecaSopenharmony_ci     * @since 4.0
45da853ecaSopenharmony_ci     */
46da853ecaSopenharmony_ci    virtual int32_t GetTrackFormat(OHOS::Media::Format &format, uint32_t trackIndex) = 0;
47da853ecaSopenharmony_ci
48da853ecaSopenharmony_ci    /**
49da853ecaSopenharmony_ci     * @brief Gets the user meta for media.
50da853ecaSopenharmony_ci     * @param format The Format handle pointer to get format info.
51da853ecaSopenharmony_ci     * @return Returns {@link AVCS_ERR_OK} if success; returns an error code otherwise.
52da853ecaSopenharmony_ci     * @since 5.0
53da853ecaSopenharmony_ci     */
54da853ecaSopenharmony_ci    virtual int32_t GetUserMeta(OHOS::Media::Format &format) = 0;
55da853ecaSopenharmony_ci
56da853ecaSopenharmony_ci    std::string sourceUri;
57da853ecaSopenharmony_ci    std::shared_ptr<Media::MediaDemuxer> mediaDemuxer = nullptr;
58da853ecaSopenharmony_ci};
59da853ecaSopenharmony_ci
60da853ecaSopenharmony_ciclass __attribute__((visibility("default"))) AVSourceFactory {
61da853ecaSopenharmony_cipublic:
62da853ecaSopenharmony_ci#ifdef UNSUPPORT_SOURCE
63da853ecaSopenharmony_ci    static std::shared_ptr<AVSource> CreateWithURI(const std::string &uri)
64da853ecaSopenharmony_ci    {
65da853ecaSopenharmony_ci        (void)uri;
66da853ecaSopenharmony_ci        return nullptr;
67da853ecaSopenharmony_ci    }
68da853ecaSopenharmony_ci
69da853ecaSopenharmony_ci    static std::shared_ptr<AVSource> CreateWithFD(int32_t fd, int64_t offset, int64_t size)
70da853ecaSopenharmony_ci    {
71da853ecaSopenharmony_ci        (void)uri;
72da853ecaSopenharmony_ci        return nullptr;
73da853ecaSopenharmony_ci    }
74da853ecaSopenharmony_ci
75da853ecaSopenharmony_ci    static std::shared_ptr<AVSource> CreateWithDataSource(const std::shared_ptr<Media::IMediaDataSource> &dataSource)
76da853ecaSopenharmony_ci    {
77da853ecaSopenharmony_ci        (void)uri;
78da853ecaSopenharmony_ci        return nullptr;
79da853ecaSopenharmony_ci    }
80da853ecaSopenharmony_ci
81da853ecaSopenharmony_ci#else
82da853ecaSopenharmony_ci    /**
83da853ecaSopenharmony_ci     * @brief Instantiate the preferred source of the uri.
84da853ecaSopenharmony_ci     * @param uri The file's uri.
85da853ecaSopenharmony_ci     * @return Returns the preferred source.
86da853ecaSopenharmony_ci     * @since 4.0
87da853ecaSopenharmony_ci     */
88da853ecaSopenharmony_ci    static std::shared_ptr<AVSource> CreateWithURI(const std::string &uri);
89da853ecaSopenharmony_ci
90da853ecaSopenharmony_ci    /**
91da853ecaSopenharmony_ci     * @brief Instantiate the preferred source of the fd.
92da853ecaSopenharmony_ci     * @param fd The fileDescriptor data source.
93da853ecaSopenharmony_ci     * @param offset The offset into the file to start reading.
94da853ecaSopenharmony_ci     * @param size the length in bytes to read.
95da853ecaSopenharmony_ci     * @return Returns the preferred source.
96da853ecaSopenharmony_ci     * @since 4.0
97da853ecaSopenharmony_ci     */
98da853ecaSopenharmony_ci    static std::shared_ptr<AVSource> CreateWithFD(int32_t fd, int64_t offset, int64_t size);
99da853ecaSopenharmony_ci
100da853ecaSopenharmony_ci    static std::shared_ptr<AVSource> CreateWithDataSource(const std::shared_ptr<Media::IMediaDataSource> &dataSource);
101da853ecaSopenharmony_ci
102da853ecaSopenharmony_ci#endif
103da853ecaSopenharmony_ciprivate:
104da853ecaSopenharmony_ci    AVSourceFactory() = default;
105da853ecaSopenharmony_ci    ~AVSourceFactory() = default;
106da853ecaSopenharmony_ci};
107da853ecaSopenharmony_ci} // namespace MediaAVCodec
108da853ecaSopenharmony_ci} // namespace OHOS
109da853ecaSopenharmony_ci#endif // MEDIA_AVCODEC_AVSOURCE_H
110da853ecaSopenharmony_ci
111