1 /* 2 * Copyright (c) 2023 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_CODEC_DECODER_ADAPTER_IMPL_H 17 #define MEDIA_CODEC_DECODER_ADAPTER_IMPL_H 18 19 #include <map> 20 #include "native_avcodec_base.h" 21 #include "native_avcodec_videodecoder.h" 22 #include "native_avformat.h" 23 #include "native_cencinfo.h" 24 #include "native_averrors.h" 25 #include "native_avcodec_audiodecoder.h" 26 #include "avcodec_common.h" 27 #include "native_avcapability.h" 28 #include "media_codec_decoder_adapter.h" 29 #include "audio_codec_decoder_adapter.h" 30 #include "audio_cenc_info_adapter.h" 31 32 namespace OHOS::NWeb { 33 class MediaCodecDecoderAdapterImpl : public MediaCodecDecoderAdapter { 34 public: 35 MediaCodecDecoderAdapterImpl() = default; 36 37 ~MediaCodecDecoderAdapterImpl() override; 38 39 DecoderAdapterCode CreateVideoDecoderByMime(const std::string& mimetype) override; 40 41 DecoderAdapterCode CreateVideoDecoderByName(const std::string& name) override; 42 43 DecoderAdapterCode ConfigureDecoder(const std::shared_ptr<DecoderFormatAdapter> format) override; 44 45 DecoderAdapterCode SetParameterDecoder(const std::shared_ptr<DecoderFormatAdapter> format) override; 46 47 DecoderAdapterCode SetOutputSurface(void* window) override; 48 49 DecoderAdapterCode PrepareDecoder() override; 50 51 DecoderAdapterCode StartDecoder() override; 52 53 DecoderAdapterCode StopDecoder() override; 54 55 DecoderAdapterCode FlushDecoder() override; 56 57 DecoderAdapterCode ResetDecoder() override; 58 59 DecoderAdapterCode ReleaseDecoder() override; 60 61 DecoderAdapterCode QueueInputBufferDec( 62 uint32_t index, int64_t presentationTimeUs, int32_t size, int32_t offset, BufferFlag flag) override; 63 64 DecoderAdapterCode GetOutputFormatDec(std::shared_ptr<DecoderFormatAdapter> format) override; 65 66 DecoderAdapterCode ReleaseOutputBufferDec(uint32_t index, bool isRender) override; 67 68 DecoderAdapterCode SetCallbackDec(const std::shared_ptr<DecoderCallbackAdapter> callback) override; 69 70 DecoderAdapterCode SetDecryptionConfig(void *session, bool isSecure) override; 71 72 DecoderAdapterCode SetAVCencInfo(uint32_t index, const std::shared_ptr<AudioCencInfoAdapter> cencInfo) override; 73 74 static BufferFlag GetBufferFlag(OH_AVCodecBufferFlags codecBufferFlag); 75 76 static OH_AVCodecBufferFlags GetAVBufferFlag(BufferFlag bufferFlag); 77 78 void OnError(int32_t errorCode); 79 80 void OnOutputFormatChanged(OH_AVFormat* format); 81 82 void OnInputBufferAvailable(uint32_t index, OH_AVBuffer* buffer); 83 84 void OnOutputBufferAvailable(uint32_t index, OH_AVBuffer* buffer); 85 86 DecoderAdapterCode SetAVCencInfoStruct(OH_AVCencInfo *avCencInfo, std::shared_ptr<AudioCencInfoAdapter> cencInfo); 87 GetAVDecoder()88 OH_AVCodec* GetAVDecoder() { return decoder_; } 89 90 private: 91 OH_AVCodec* decoder_ = nullptr; 92 std::shared_ptr<DecoderCallbackAdapter> callback_ = nullptr; 93 std::map<uint32_t, OH_AVBuffer*> bufferMap_; 94 std::mutex bufferMutex_; 95 bool isHardwareDecode_ = true; 96 bool isSecure_ = false; 97 OH_AVCapability *avCap_ = nullptr; 98 }; 99 } // namespace OHOS::NWeb 100 101 #endif // MEDIA_CODEC_DECODER_ADAPTER_IMPL_H 102