• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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