xref: /aosp_15_r20/external/v4l2_codec2/v4l2/V4L2ComponentStore.cpp (revision 0ec5a0ec62797f775085659156625e7f1bdb369f)
1*0ec5a0ecSAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors. All rights reserved.
2*0ec5a0ecSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*0ec5a0ecSAndroid Build Coastguard Worker // found in the LICENSE file.
4*0ec5a0ecSAndroid Build Coastguard Worker 
5*0ec5a0ecSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
6*0ec5a0ecSAndroid Build Coastguard Worker #define LOG_TAG "V4L2ComponentStore"
7*0ec5a0ecSAndroid Build Coastguard Worker 
8*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/v4l2/V4L2ComponentStore.h>
9*0ec5a0ecSAndroid Build Coastguard Worker 
10*0ec5a0ecSAndroid Build Coastguard Worker #include <stdint.h>
11*0ec5a0ecSAndroid Build Coastguard Worker 
12*0ec5a0ecSAndroid Build Coastguard Worker #include <memory>
13*0ec5a0ecSAndroid Build Coastguard Worker #include <mutex>
14*0ec5a0ecSAndroid Build Coastguard Worker 
15*0ec5a0ecSAndroid Build Coastguard Worker #include <C2.h>
16*0ec5a0ecSAndroid Build Coastguard Worker #include <C2Config.h>
17*0ec5a0ecSAndroid Build Coastguard Worker #include <log/log.h>
18*0ec5a0ecSAndroid Build Coastguard Worker #include <media/stagefright/foundation/MediaDefs.h>
19*0ec5a0ecSAndroid Build Coastguard Worker 
20*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/components/ComponentStore.h>
21*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/v4l2/V4L2ComponentCommon.h>
22*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/v4l2/V4L2ComponentFactory.h>
23*0ec5a0ecSAndroid Build Coastguard Worker 
24*0ec5a0ecSAndroid Build Coastguard Worker namespace android {
25*0ec5a0ecSAndroid Build Coastguard Worker 
26*0ec5a0ecSAndroid Build Coastguard Worker // static
Create()27*0ec5a0ecSAndroid Build Coastguard Worker std::shared_ptr<C2ComponentStore> V4L2ComponentStore::Create() {
28*0ec5a0ecSAndroid Build Coastguard Worker     ALOGV("%s()", __func__);
29*0ec5a0ecSAndroid Build Coastguard Worker 
30*0ec5a0ecSAndroid Build Coastguard Worker     static std::mutex mutex;
31*0ec5a0ecSAndroid Build Coastguard Worker     static std::weak_ptr<C2ComponentStore> platformStore;
32*0ec5a0ecSAndroid Build Coastguard Worker 
33*0ec5a0ecSAndroid Build Coastguard Worker     std::lock_guard<std::mutex> lock(mutex);
34*0ec5a0ecSAndroid Build Coastguard Worker     std::shared_ptr<C2ComponentStore> store = platformStore.lock();
35*0ec5a0ecSAndroid Build Coastguard Worker     if (store != nullptr) return store;
36*0ec5a0ecSAndroid Build Coastguard Worker 
37*0ec5a0ecSAndroid Build Coastguard Worker     auto builder = ComponentStore::Builder("android.componentStore.v4l2");
38*0ec5a0ecSAndroid Build Coastguard Worker 
39*0ec5a0ecSAndroid Build Coastguard Worker     builder.encoder(V4L2ComponentName::kH264Encoder, VideoCodec::H264,
40*0ec5a0ecSAndroid Build Coastguard Worker                     &V4L2ComponentFactory::create);
41*0ec5a0ecSAndroid Build Coastguard Worker     builder.encoder(V4L2ComponentName::kVP8Encoder, VideoCodec::VP8, &V4L2ComponentFactory::create);
42*0ec5a0ecSAndroid Build Coastguard Worker     builder.encoder(V4L2ComponentName::kVP9Encoder, VideoCodec::VP9, &V4L2ComponentFactory::create);
43*0ec5a0ecSAndroid Build Coastguard Worker 
44*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kH264Decoder, VideoCodec::H264,
45*0ec5a0ecSAndroid Build Coastguard Worker                     &V4L2ComponentFactory::create);
46*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kVP8Decoder, VideoCodec::VP8, &V4L2ComponentFactory::create);
47*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kVP9Decoder, VideoCodec::VP9, &V4L2ComponentFactory::create);
48*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kHEVCDecoder, VideoCodec::HEVC,
49*0ec5a0ecSAndroid Build Coastguard Worker                     &V4L2ComponentFactory::create);
50*0ec5a0ecSAndroid Build Coastguard Worker 
51*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kH264SecureDecoder, VideoCodec::H264,
52*0ec5a0ecSAndroid Build Coastguard Worker                     &V4L2ComponentFactory::create);
53*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kVP8SecureDecoder, VideoCodec::VP8,
54*0ec5a0ecSAndroid Build Coastguard Worker                     &V4L2ComponentFactory::create);
55*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kVP9SecureDecoder, VideoCodec::VP9,
56*0ec5a0ecSAndroid Build Coastguard Worker                     &V4L2ComponentFactory::create);
57*0ec5a0ecSAndroid Build Coastguard Worker     builder.decoder(V4L2ComponentName::kHEVCSecureDecoder, VideoCodec::HEVC,
58*0ec5a0ecSAndroid Build Coastguard Worker                     &V4L2ComponentFactory::create);
59*0ec5a0ecSAndroid Build Coastguard Worker 
60*0ec5a0ecSAndroid Build Coastguard Worker     store = std::shared_ptr<C2ComponentStore>(std::move(builder).build());
61*0ec5a0ecSAndroid Build Coastguard Worker     platformStore = store;
62*0ec5a0ecSAndroid Build Coastguard Worker     return store;
63*0ec5a0ecSAndroid Build Coastguard Worker }
64*0ec5a0ecSAndroid Build Coastguard Worker 
65*0ec5a0ecSAndroid Build Coastguard Worker }  // namespace android
66