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