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 16 #ifndef MEDIA_AVCODEC_AUDIO_CODEC_H 17 #define MEDIA_AVCODEC_AUDIO_CODEC_H 18 19 #include "avcodec_errors.h" 20 #include "avcodec_common.h" 21 #include "meta/format.h" 22 #include "meta/meta.h" 23 #include "buffer/avbuffer_queue_producer.h" 24 #include "drm_i_keysession_service.h" 25 26 namespace OHOS { 27 namespace MediaAVCodec { 28 class AVCodecAudioCodec { 29 public: 30 virtual ~AVCodecAudioCodec() = default; 31 32 virtual int32_t Configure(const std::shared_ptr<Media::Meta> &meta); 33 34 virtual int32_t SetOutputBufferQueue(const sptr<Media::AVBufferQueueProducer> &bufferQueueProducer); 35 36 virtual int32_t Prepare(); 37 38 virtual sptr<Media::AVBufferQueueProducer> GetInputBufferQueue(); 39 40 virtual int32_t Start(); 41 42 virtual int32_t Stop(); 43 44 virtual int32_t Flush(); 45 46 virtual int32_t Reset(); 47 48 virtual int32_t Release(); 49 50 virtual int32_t NotifyEos(); 51 52 virtual int32_t SetParameter(const std::shared_ptr<Media::Meta> ¶meter); 53 54 virtual int32_t GetOutputFormat(std::shared_ptr<Media::Meta> ¶meter); 55 56 virtual int32_t ChangePlugin(const std::string &mime, bool isEncoder, const std::shared_ptr<Media::Meta> &meta); 57 58 virtual int32_t SetCodecCallback(const std::shared_ptr<MediaCodecCallback> &codecCallback); 59 60 virtual int32_t SetAudioDecryptionConfig(const sptr<DrmStandard::IMediaKeySessionService> &keySession, 61 const bool svpFlag); 62 63 virtual void ProcessInputBuffer(); 64 65 virtual void SetDumpInfo(bool isDump, uint64_t instanceId); 66 GetInputBufferQueueConsumer()67 virtual sptr<Media::AVBufferQueueConsumer> GetInputBufferQueueConsumer() 68 { 69 return nullptr; 70 } 71 GetOutputBufferQueueProducer()72 virtual sptr<Media::AVBufferQueueProducer> GetOutputBufferQueueProducer() 73 { 74 return nullptr; 75 } 76 ProcessInputBufferInner(bool isTriggeredByOutPort,bool isFlushed,uint32_t & bufferStatus)77 virtual void ProcessInputBufferInner(bool isTriggeredByOutPort, bool isFlushed, uint32_t &bufferStatus) 78 { 79 (void)isTriggeredByOutPort; 80 (void)isFlushed; 81 (void)bufferStatus; 82 } 83 QueryInputBuffer(uint32_t * index,int32_t bufferSize,int64_t timeoutUs)84 virtual int32_t QueryInputBuffer(uint32_t *index, int32_t bufferSize, int64_t timeoutUs) 85 { 86 (void)index; 87 (void)bufferSize; 88 (void)timeoutUs; 89 return AVCodecServiceErrCode::AVCS_ERR_UNKNOWN; 90 } 91 GetInputBuffer(uint32_t index)92 virtual std::shared_ptr<AVBuffer> GetInputBuffer(uint32_t index) 93 { 94 (void)index; 95 return nullptr; 96 } 97 GetOutputBuffer(int64_t timeoutUs)98 virtual std::shared_ptr<AVBuffer> GetOutputBuffer(int64_t timeoutUs) 99 { 100 (void)timeoutUs; 101 return nullptr; 102 } 103 PushInputBuffer(uint32_t index,bool available)104 virtual int32_t PushInputBuffer(uint32_t index, bool available) 105 { 106 (void)index; 107 (void)available; 108 return AVCodecServiceErrCode::AVCS_ERR_UNKNOWN; 109 } 110 ReleaseOutputBuffer(const std::shared_ptr<AVBuffer> & buffer)111 virtual int32_t ReleaseOutputBuffer(const std::shared_ptr<AVBuffer> &buffer) 112 { 113 (void)buffer; 114 return AVCodecServiceErrCode::AVCS_ERR_UNKNOWN; 115 } 116 }; 117 118 class __attribute__((visibility("default"))) AudioCodecFactory { 119 public: 120 #ifdef UNSUPPORT_CODEC CreateByMime(const std::string & mime,bool isEncoder)121 static std::shared_ptr<AVCodecAudioCodec> CreateByMime(const std::string &mime, bool isEncoder) 122 { 123 (void)mime; 124 return nullptr; 125 } 126 CreateByName(const std::string & name)127 static std::shared_ptr<AVCodecAudioCodec> CreateByName(const std::string &name) 128 { 129 (void)name; 130 return nullptr; 131 } 132 #else 133 /** 134 * @brief Instantiate the preferred decoder of the given mime type. 135 * @param mime The mime type. 136 * @return Returns the preferred decoder. 137 * @since 4.1 138 */ 139 static std::shared_ptr<AVCodecAudioCodec> CreateByMime(const std::string &mime, bool isEncoder); 140 141 /** 142 * @brief Instantiates the designated decoder. 143 * @param name The codec's name. 144 * @return Returns the designated decoder. 145 * @since 4.1 146 */ 147 static std::shared_ptr<AVCodecAudioCodec> CreateByName(const std::string &name); 148 #endif 149 private: 150 AudioCodecFactory() = default; 151 ~AudioCodecFactory() = default; 152 }; 153 154 } // namespace MediaAVCodec 155 } // namespace OHOS 156 #endif // MEDIA_AVCODEC_AUDIO_CODEC_H