• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023-2025 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 #ifndef CODECBASE_H
16 #define CODECBASE_H
17 
18 #include <string>
19 #include "avcodec_common.h"
20 #include "buffer/avsharedmemorybase.h"
21 #include "surface.h"
22 #include "buffer/avbuffer.h"
23 #include "buffer/avbuffer_queue.h"
24 #include "buffer/avbuffer_queue_consumer.h"
25 #include "buffer/avbuffer_queue_define.h"
26 #include "buffer/avbuffer_queue_producer.h"
27 #include "drm_i_keysession_service.h"
28 
29 namespace OHOS {
30 namespace MediaAVCodec {
31 class CodecBase {
32 public:
33     CodecBase() = default;
34     virtual ~CodecBase() = default;
35     virtual int32_t SetCallback(const std::shared_ptr<AVCodecCallback> &callback);
36     virtual int32_t SetCallback(const std::shared_ptr<MediaCodecCallback> &callback);
37     virtual int32_t Configure(const Format &format) = 0;
38     virtual int32_t Start() = 0;
39     virtual int32_t Stop() = 0;
40     virtual int32_t Flush() = 0;
41     virtual int32_t Reset() = 0;
42     virtual int32_t Release() = 0;
43     virtual int32_t SetParameter(const Format& format) = 0;
44     virtual int32_t GetOutputFormat(Format &format) = 0;
45     virtual int32_t QueueInputBuffer(uint32_t index, const AVCodecBufferInfo &info, AVCodecBufferFlag flag);
46     virtual int32_t QueueInputBuffer(uint32_t index);
47     virtual int32_t ReleaseOutputBuffer(uint32_t index) = 0;
48 
49     virtual int32_t NotifyEos();
50     virtual sptr<Surface> CreateInputSurface();
51     virtual int32_t SetInputSurface(sptr<Surface> surface);
52     virtual int32_t SetOutputSurface(sptr<Surface> surface);
53     virtual int32_t RenderOutputBuffer(uint32_t index);
54     virtual int32_t SignalRequestIDRFrame();
55     virtual int32_t GetInputFormat(Format& format);
56     virtual int32_t SetCustomBuffer(std::shared_ptr<AVBuffer> buffer);
57     virtual int32_t NotifyMemoryRecycle();
58     virtual int32_t NotifyMemoryWriteBack();
ChangePlugin(const std::string & mime,bool isEncoder,const std::shared_ptr<Media::Meta> & meta)59     virtual int32_t ChangePlugin(const std::string &mime, bool isEncoder, const std::shared_ptr<Media::Meta> &meta)
60     {
61         (void)mime;
62         (void)isEncoder;
63         (void)meta;
64         return AVCODEC_ERROR_EXTEND_START;
65     }
66 
SetDumpInfo(bool isDump,uint64_t instanceId)67     virtual void SetDumpInfo(bool isDump, uint64_t instanceId)
68     {
69         (void)isDump;
70         (void)instanceId;
71     }
72 
GetHidumperInfo()73     virtual std::string GetHidumperInfo()
74     {
75         return "";
76     }
77 
78     /* API11 audio codec interface */
CreateCodecByName(const std::string & name)79     virtual int32_t CreateCodecByName(const std::string &name)
80     {
81         (void)name;
82         return AVCODEC_ERROR_EXTEND_START;
83     }
84 
Init(Media::Meta & callerInfo)85     virtual int32_t Init(Media::Meta &callerInfo)
86     {
87         (void)callerInfo;
88         return 0;
89     }
90 
Configure(const std::shared_ptr<Media::Meta> & meta)91     virtual int32_t Configure(const std::shared_ptr<Media::Meta> &meta)
92     {
93         (void)meta;
94         return AVCODEC_ERROR_EXTEND_START;
95     }
96 
SetParameter(const std::shared_ptr<Media::Meta> & parameter)97     virtual int32_t SetParameter(const std::shared_ptr<Media::Meta> &parameter)
98     {
99         (void)parameter;
100         return AVCODEC_ERROR_EXTEND_START;
101     }
102 
GetOutputFormat(std::shared_ptr<Media::Meta> & parameter)103     virtual int32_t GetOutputFormat(std::shared_ptr<Media::Meta> &parameter)
104     {
105         (void)parameter;
106         return AVCODEC_ERROR_EXTEND_START;
107     }
108 
SetOutputBufferQueue(const sptr<Media::AVBufferQueueProducer> & bufferQueueProducer)109     virtual int32_t SetOutputBufferQueue(const sptr<Media::AVBufferQueueProducer> &bufferQueueProducer)
110     {
111         (void)bufferQueueProducer;
112         return AVCODEC_ERROR_EXTEND_START;
113     }
114 
Prepare()115     virtual int32_t Prepare()
116     {
117         return AVCODEC_ERROR_EXTEND_START;
118     }
119 
GetInputBufferQueue()120     virtual sptr<Media::AVBufferQueueProducer> GetInputBufferQueue()
121     {
122         return nullptr;
123     }
124 
ProcessInputBuffer()125     virtual void ProcessInputBuffer()
126     {
127         return;
128     }
129 
SetAudioDecryptionConfig(const sptr<DrmStandard::IMediaKeySessionService> & keySession,const bool svpFlag)130     virtual int32_t SetAudioDecryptionConfig(const sptr<DrmStandard::IMediaKeySessionService> &keySession,
131         const bool svpFlag)
132     {
133         (void)keySession;
134         (void)svpFlag;
135         return 0;
136     }
137 
GetInputBufferQueueConsumer()138     virtual sptr<Media::AVBufferQueueConsumer> GetInputBufferQueueConsumer()
139     {
140         return nullptr;
141     }
142 
GetOutputBufferQueueProducer()143     virtual sptr<Media::AVBufferQueueProducer> GetOutputBufferQueueProducer()
144     {
145         return nullptr;
146     }
147 
ProcessInputBufferInner(bool isTriggeredByOutPort,bool isFlushed)148     virtual void ProcessInputBufferInner(bool isTriggeredByOutPort, bool isFlushed)
149     {
150         (void)isTriggeredByOutPort;
151         (void)isFlushed;
152     }
153 };
154 } // namespace MediaAVCodec
155 } // namespace OHOS
156 #endif // CODECBASE_H