1c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa/*
2c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * Copyright (C) 2018 The Android Open Source Project
3c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa *
4c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * Licensed under the Apache License, Version 2.0 (the "License");
5c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * you may not use this file except in compliance with the License.
6c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * You may obtain a copy of the License at
7c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa *
8c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa *      http://www.apache.org/licenses/LICENSE-2.0
9c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa *
10c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * Unless required by applicable law or agreed to in writing, software
11c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * distributed under the License is distributed on an "AS IS" BASIS,
12c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * See the License for the specific language governing permissions and
14c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * limitations under the License.
15c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa */
16c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
17c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#ifndef HARDWARE_GOOGLE_MEDIA_C2_V1_0_UTILS_CONFIGURABLEC2INTF_H
18c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#define HARDWARE_GOOGLE_MEDIA_C2_V1_0_UTILS_CONFIGURABLEC2INTF_H
19c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
20c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <C2Work.h>
21c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <C2Component.h>
22c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <C2Param.h>
23c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <C2.h>
24c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
25c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <hidl/HidlSupport.h>
26c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <utils/StrongPointer.h>
27c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <vector>
28c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#include <memory>
29c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
30c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace hardware {
31c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace google {
32c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace media {
33c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace c2 {
34c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace V1_0 {
35c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasanamespace utils {
36c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
37c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasausing ::android::sp;
38c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasausing ::android::hardware::hidl_string;
39c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasausing ::android::hardware::hidl_vec;
40c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasausing ::android::hardware::Return;
41c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasausing ::android::hardware::Void;
42c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
43c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa/**
44c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa * Common Codec 2.0 interface wrapper.
45c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa */
46c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasastruct ConfigurableC2Intf {
47c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    C2String getName() const { return mName; }
48c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    /** C2ComponentInterface::query_vb sans stack params */
49c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    virtual c2_status_t query(
50c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            const std::vector<C2Param::Index> &indices,
51c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            c2_blocking_t mayBlock,
52c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            std::vector<std::unique_ptr<C2Param>>* const params) const = 0;
53c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    /** C2ComponentInterface::config_vb */
54c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    virtual c2_status_t config(
55c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            const std::vector<C2Param*> &params,
56c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            c2_blocking_t mayBlock,
57c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            std::vector<std::unique_ptr<C2SettingResult>>* const failures) = 0;
58c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    /** C2ComponentInterface::querySupportedParams_nb */
59c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    virtual c2_status_t querySupportedParams(
60c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            std::vector<std::shared_ptr<C2ParamDescriptor>>* const params) const = 0;
61c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    /** C2ComponentInterface::querySupportedParams_nb */
62c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    virtual c2_status_t querySupportedValues(
63c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa            std::vector<C2FieldSupportedValuesQuery>& fields, c2_blocking_t mayBlock) const = 0;
64c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
65c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    virtual ~ConfigurableC2Intf() = default;
66c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
67c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    ConfigurableC2Intf(const C2String& name) : mName(name) {}
68c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
69c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasaprotected:
70c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa    C2String mName; /* cache component name */
71c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa};
72c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
73c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa}  // namespace utils
74c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa}  // namespace V1_0
75c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa}  // namespace c2
76c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa}  // namespace media
77c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa}  // namespace google
78c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa}  // namespace hardware
79c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa
80c470281b28a572f8e3331341a3855344608d0f72Pawin Vongmasa#endif  // HARDWARE_GOOGLE_MEDIA_C2_V1_0_UTILS_CONFIGURABLEC2INTF_H
81