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#ifndef CODECBASE_H
16da853ecaSopenharmony_ci#define CODECBASE_H
17da853ecaSopenharmony_ci
18da853ecaSopenharmony_ci#include <string>
19da853ecaSopenharmony_ci#include "avcodec_common.h"
20da853ecaSopenharmony_ci#include "buffer/avsharedmemorybase.h"
21da853ecaSopenharmony_ci#include "surface.h"
22da853ecaSopenharmony_ci#include "buffer/avbuffer.h"
23da853ecaSopenharmony_ci#include "buffer/avbuffer_queue.h"
24da853ecaSopenharmony_ci#include "buffer/avbuffer_queue_consumer.h"
25da853ecaSopenharmony_ci#include "buffer/avbuffer_queue_define.h"
26da853ecaSopenharmony_ci#include "buffer/avbuffer_queue_producer.h"
27da853ecaSopenharmony_ci#include "drm_i_keysession_service.h"
28da853ecaSopenharmony_ci
29da853ecaSopenharmony_cinamespace OHOS {
30da853ecaSopenharmony_cinamespace MediaAVCodec {
31da853ecaSopenharmony_ciclass CodecBase {
32da853ecaSopenharmony_cipublic:
33da853ecaSopenharmony_ci    CodecBase() = default;
34da853ecaSopenharmony_ci    virtual ~CodecBase() = default;
35da853ecaSopenharmony_ci    virtual int32_t SetCallback(const std::shared_ptr<AVCodecCallback> &callback);
36da853ecaSopenharmony_ci    virtual int32_t SetCallback(const std::shared_ptr<MediaCodecCallback> &callback);
37da853ecaSopenharmony_ci    virtual int32_t Configure(const Format &format) = 0;
38da853ecaSopenharmony_ci    virtual int32_t Start() = 0;
39da853ecaSopenharmony_ci    virtual int32_t Stop() = 0;
40da853ecaSopenharmony_ci    virtual int32_t Flush() = 0;
41da853ecaSopenharmony_ci    virtual int32_t Reset() = 0;
42da853ecaSopenharmony_ci    virtual int32_t Release() = 0;
43da853ecaSopenharmony_ci    virtual int32_t SetParameter(const Format& format) = 0;
44da853ecaSopenharmony_ci    virtual int32_t GetOutputFormat(Format &format) = 0;
45da853ecaSopenharmony_ci    virtual int32_t QueueInputBuffer(uint32_t index, const AVCodecBufferInfo &info, AVCodecBufferFlag flag);
46da853ecaSopenharmony_ci    virtual int32_t QueueInputBuffer(uint32_t index);
47da853ecaSopenharmony_ci    virtual int32_t ReleaseOutputBuffer(uint32_t index) = 0;
48da853ecaSopenharmony_ci
49da853ecaSopenharmony_ci    virtual int32_t NotifyEos();
50da853ecaSopenharmony_ci    virtual sptr<Surface> CreateInputSurface();
51da853ecaSopenharmony_ci    virtual int32_t SetInputSurface(sptr<Surface> surface);
52da853ecaSopenharmony_ci    virtual int32_t SetOutputSurface(sptr<Surface> surface);
53da853ecaSopenharmony_ci    virtual int32_t RenderOutputBuffer(uint32_t index);
54da853ecaSopenharmony_ci    virtual int32_t SignalRequestIDRFrame();
55da853ecaSopenharmony_ci    virtual int32_t GetInputFormat(Format& format);
56da853ecaSopenharmony_ci    virtual int32_t SetCustomBuffer(std::shared_ptr<AVBuffer> buffer);
57da853ecaSopenharmony_ci
58da853ecaSopenharmony_ci    virtual std::string GetHidumperInfo()
59da853ecaSopenharmony_ci    {
60da853ecaSopenharmony_ci        return "";
61da853ecaSopenharmony_ci    }
62da853ecaSopenharmony_ci
63da853ecaSopenharmony_ci    /* API11 audio codec interface */
64da853ecaSopenharmony_ci    virtual int32_t CreateCodecByName(const std::string &name)
65da853ecaSopenharmony_ci    {
66da853ecaSopenharmony_ci        (void)name;
67da853ecaSopenharmony_ci        return AVCODEC_ERROR_EXTEND_START;
68da853ecaSopenharmony_ci    }
69da853ecaSopenharmony_ci
70da853ecaSopenharmony_ci    virtual int32_t Init(Media::Meta &callerInfo)
71da853ecaSopenharmony_ci    {
72da853ecaSopenharmony_ci        (void)callerInfo;
73da853ecaSopenharmony_ci        return 0;
74da853ecaSopenharmony_ci    }
75da853ecaSopenharmony_ci
76da853ecaSopenharmony_ci    virtual int32_t Configure(const std::shared_ptr<Media::Meta> &meta)
77da853ecaSopenharmony_ci    {
78da853ecaSopenharmony_ci        (void)meta;
79da853ecaSopenharmony_ci        return AVCODEC_ERROR_EXTEND_START;
80da853ecaSopenharmony_ci    }
81da853ecaSopenharmony_ci
82da853ecaSopenharmony_ci    virtual int32_t SetParameter(const std::shared_ptr<Media::Meta> &parameter)
83da853ecaSopenharmony_ci    {
84da853ecaSopenharmony_ci        (void)parameter;
85da853ecaSopenharmony_ci        return AVCODEC_ERROR_EXTEND_START;
86da853ecaSopenharmony_ci    }
87da853ecaSopenharmony_ci
88da853ecaSopenharmony_ci    virtual int32_t GetOutputFormat(std::shared_ptr<Media::Meta> &parameter)
89da853ecaSopenharmony_ci    {
90da853ecaSopenharmony_ci        (void)parameter;
91da853ecaSopenharmony_ci        return AVCODEC_ERROR_EXTEND_START;
92da853ecaSopenharmony_ci    }
93da853ecaSopenharmony_ci
94da853ecaSopenharmony_ci    virtual int32_t SetOutputBufferQueue(const sptr<Media::AVBufferQueueProducer> &bufferQueueProducer)
95da853ecaSopenharmony_ci    {
96da853ecaSopenharmony_ci        (void)bufferQueueProducer;
97da853ecaSopenharmony_ci        return AVCODEC_ERROR_EXTEND_START;
98da853ecaSopenharmony_ci    }
99da853ecaSopenharmony_ci
100da853ecaSopenharmony_ci    virtual int32_t Prepare()
101da853ecaSopenharmony_ci    {
102da853ecaSopenharmony_ci        return AVCODEC_ERROR_EXTEND_START;
103da853ecaSopenharmony_ci    }
104da853ecaSopenharmony_ci
105da853ecaSopenharmony_ci    virtual sptr<Media::AVBufferQueueProducer> GetInputBufferQueue()
106da853ecaSopenharmony_ci    {
107da853ecaSopenharmony_ci        return nullptr;
108da853ecaSopenharmony_ci    }
109da853ecaSopenharmony_ci
110da853ecaSopenharmony_ci    virtual void ProcessInputBuffer()
111da853ecaSopenharmony_ci    {
112da853ecaSopenharmony_ci        return;
113da853ecaSopenharmony_ci    }
114da853ecaSopenharmony_ci
115da853ecaSopenharmony_ci    virtual int32_t SetAudioDecryptionConfig(const sptr<DrmStandard::IMediaKeySessionService> &keySession,
116da853ecaSopenharmony_ci        const bool svpFlag)
117da853ecaSopenharmony_ci    {
118da853ecaSopenharmony_ci        (void)keySession;
119da853ecaSopenharmony_ci        (void)svpFlag;
120da853ecaSopenharmony_ci        return 0;
121da853ecaSopenharmony_ci    }
122da853ecaSopenharmony_ci};
123da853ecaSopenharmony_ci} // namespace MediaAVCodec
124da853ecaSopenharmony_ci} // namespace OHOS
125da853ecaSopenharmony_ci#endif // CODECBASE_H