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> ¶meter) 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> ¶meter) 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