Merge "media.c2 aidl: add input surface for encoders" into main
This commit is contained in:
commit
3d0eeb9cfc
11 changed files with 321 additions and 0 deletions
|
@ -22,6 +22,9 @@ aidl_interface {
|
||||||
"android.hardware.common-V2",
|
"android.hardware.common-V2",
|
||||||
"android.hardware.media.bufferpool2-V1",
|
"android.hardware.media.bufferpool2-V1",
|
||||||
],
|
],
|
||||||
|
include_dirs: [
|
||||||
|
"frameworks/native/aidl/gui",
|
||||||
|
],
|
||||||
stability: "vintf",
|
stability: "vintf",
|
||||||
backend: {
|
backend: {
|
||||||
cpp: {
|
cpp: {
|
||||||
|
|
|
@ -45,6 +45,8 @@ interface IComponent {
|
||||||
void reset();
|
void reset();
|
||||||
void start();
|
void start();
|
||||||
void stop();
|
void stop();
|
||||||
|
android.hardware.media.c2.IInputSurfaceConnection connectToInputSurface(in android.hardware.media.c2.IInputSurface inputSurface);
|
||||||
|
android.hardware.media.c2.IInputSink asInputSink();
|
||||||
parcelable BlockPool {
|
parcelable BlockPool {
|
||||||
long blockPoolId;
|
long blockPoolId;
|
||||||
android.hardware.media.c2.IConfigurable configurable;
|
android.hardware.media.c2.IConfigurable configurable;
|
||||||
|
|
|
@ -41,6 +41,7 @@ interface IComponentStore {
|
||||||
android.hardware.media.bufferpool2.IClientManager getPoolClientManager();
|
android.hardware.media.bufferpool2.IClientManager getPoolClientManager();
|
||||||
android.hardware.media.c2.StructDescriptor[] getStructDescriptors(in int[] indices);
|
android.hardware.media.c2.StructDescriptor[] getStructDescriptors(in int[] indices);
|
||||||
android.hardware.media.c2.IComponentStore.ComponentTraits[] listComponents();
|
android.hardware.media.c2.IComponentStore.ComponentTraits[] listComponents();
|
||||||
|
android.hardware.media.c2.IInputSurface createInputSurface();
|
||||||
@VintfStability
|
@VintfStability
|
||||||
parcelable ComponentTraits {
|
parcelable ComponentTraits {
|
||||||
String name;
|
String name;
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||||
|
// two cases:
|
||||||
|
// 1). this is a frozen version file - do not edit this in any case.
|
||||||
|
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||||
|
// the interface (from the latest frozen version), the build system will
|
||||||
|
// prompt you to update this file with `m <name>-update-api`.
|
||||||
|
//
|
||||||
|
// You must not make a backward incompatible change to any AIDL file built
|
||||||
|
// with the aidl_interface module type with versions property set. The module
|
||||||
|
// type is used to build AIDL files in a way that they can be used across
|
||||||
|
// independently updatable components of the system. If a device is shipped
|
||||||
|
// with such a backward incompatible change, it has a high risk of breaking
|
||||||
|
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||||
|
|
||||||
|
package android.hardware.media.c2;
|
||||||
|
@VintfStability
|
||||||
|
interface IInputSink {
|
||||||
|
void queue(in android.hardware.media.c2.WorkBundle workBundle);
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||||
|
// two cases:
|
||||||
|
// 1). this is a frozen version file - do not edit this in any case.
|
||||||
|
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||||
|
// the interface (from the latest frozen version), the build system will
|
||||||
|
// prompt you to update this file with `m <name>-update-api`.
|
||||||
|
//
|
||||||
|
// You must not make a backward incompatible change to any AIDL file built
|
||||||
|
// with the aidl_interface module type with versions property set. The module
|
||||||
|
// type is used to build AIDL files in a way that they can be used across
|
||||||
|
// independently updatable components of the system. If a device is shipped
|
||||||
|
// with such a backward incompatible change, it has a high risk of breaking
|
||||||
|
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||||
|
|
||||||
|
package android.hardware.media.c2;
|
||||||
|
@VintfStability
|
||||||
|
interface IInputSurface {
|
||||||
|
android.view.Surface getSurface();
|
||||||
|
android.hardware.media.c2.IConfigurable getConfigurable();
|
||||||
|
android.hardware.media.c2.IInputSurfaceConnection connect(in android.hardware.media.c2.IInputSink sink);
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||||
|
// two cases:
|
||||||
|
// 1). this is a frozen version file - do not edit this in any case.
|
||||||
|
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||||
|
// the interface (from the latest frozen version), the build system will
|
||||||
|
// prompt you to update this file with `m <name>-update-api`.
|
||||||
|
//
|
||||||
|
// You must not make a backward incompatible change to any AIDL file built
|
||||||
|
// with the aidl_interface module type with versions property set. The module
|
||||||
|
// type is used to build AIDL files in a way that they can be used across
|
||||||
|
// independently updatable components of the system. If a device is shipped
|
||||||
|
// with such a backward incompatible change, it has a high risk of breaking
|
||||||
|
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||||
|
|
||||||
|
package android.hardware.media.c2;
|
||||||
|
@VintfStability
|
||||||
|
interface IInputSurfaceConnection {
|
||||||
|
void disconnect();
|
||||||
|
void signalEndOfStream();
|
||||||
|
}
|
|
@ -20,6 +20,9 @@ import android.hardware.common.NativeHandle;
|
||||||
import android.hardware.media.c2.IComponentInterface;
|
import android.hardware.media.c2.IComponentInterface;
|
||||||
import android.hardware.media.c2.IConfigurable;
|
import android.hardware.media.c2.IConfigurable;
|
||||||
import android.hardware.media.c2.IGraphicBufferAllocator;
|
import android.hardware.media.c2.IGraphicBufferAllocator;
|
||||||
|
import android.hardware.media.c2.IInputSink;
|
||||||
|
import android.hardware.media.c2.IInputSurface;
|
||||||
|
import android.hardware.media.c2.IInputSurfaceConnection;
|
||||||
import android.hardware.media.c2.WorkBundle;
|
import android.hardware.media.c2.WorkBundle;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
|
|
||||||
|
@ -307,4 +310,32 @@ interface IComponent {
|
||||||
* - `Status::CORRUPTED` - Some unknown error occurred.
|
* - `Status::CORRUPTED` - Some unknown error occurred.
|
||||||
*/
|
*/
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts using an input surface.
|
||||||
|
*
|
||||||
|
* The component must be in running state.
|
||||||
|
*
|
||||||
|
* @param inputSurface Input surface to connect to.
|
||||||
|
* @return connection `IInputSurfaceConnection` object, which can be used to
|
||||||
|
* query and configure properties of the connection. This cannot be
|
||||||
|
* null.
|
||||||
|
* @throws ServiceSpecificException with one of the following values:
|
||||||
|
* - `Status::CANNOT_DO` - The component does not support an input surface.
|
||||||
|
* - `Status::BAD_STATE` - The component is not in running state.
|
||||||
|
* - `Status::DUPLICATE` - The component is already connected to an input surface.
|
||||||
|
* - `Status::REFUSED` - The input surface is already in use.
|
||||||
|
* - `Status::NO_MEMORY` - Not enough memory to start the component.
|
||||||
|
* - `Status::TIMED_OUT` - The operation cannot be finished in a timely manner.
|
||||||
|
* - `Status::CORRUPTED` - Some unknown error occurred.
|
||||||
|
*/
|
||||||
|
IInputSurfaceConnection connectToInputSurface(in IInputSurface inputSurface);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an @ref IInputSink instance that has the component as the
|
||||||
|
* underlying implementation.
|
||||||
|
*
|
||||||
|
* @return sink `IInputSink` instance.
|
||||||
|
*/
|
||||||
|
IInputSink asInputSink();
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import android.hardware.media.c2.IComponent;
|
||||||
import android.hardware.media.c2.IComponentInterface;
|
import android.hardware.media.c2.IComponentInterface;
|
||||||
import android.hardware.media.c2.IComponentListener;
|
import android.hardware.media.c2.IComponentListener;
|
||||||
import android.hardware.media.c2.IConfigurable;
|
import android.hardware.media.c2.IConfigurable;
|
||||||
|
import android.hardware.media.c2.IInputSurface;
|
||||||
import android.hardware.media.c2.StructDescriptor;
|
import android.hardware.media.c2.StructDescriptor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -182,4 +183,16 @@ interface IComponentStore {
|
||||||
* - `Status::CORRUPTED` - Some unknown error occurred.
|
* - `Status::CORRUPTED` - Some unknown error occurred.
|
||||||
*/
|
*/
|
||||||
ComponentTraits[] listComponents();
|
ComponentTraits[] listComponents();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a persistent input surface that can be used as an input surface
|
||||||
|
* for any IComponent instance
|
||||||
|
*
|
||||||
|
* @return IInputSurface A persistent input surface.
|
||||||
|
* @throws ServiceSpecificException with one of following values:
|
||||||
|
* - `Status::NO_MEMORY` - Not enough memory to complete this method.
|
||||||
|
* - `Status::TIMED_OUT` - The operation cannot be finished in a timely manner.
|
||||||
|
* - `Status::CORRUPTED` - Some unknown error occurred.
|
||||||
|
*/
|
||||||
|
IInputSurface createInputSurface();
|
||||||
}
|
}
|
||||||
|
|
45
media/c2/aidl/android/hardware/media/c2/IInputSink.aidl
Normal file
45
media/c2/aidl/android/hardware/media/c2/IInputSink.aidl
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package android.hardware.media.c2;
|
||||||
|
|
||||||
|
import android.hardware.media.c2.WorkBundle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An `IInputSink` is a receiver of work items.
|
||||||
|
*
|
||||||
|
* An @ref IComponent instance can present itself as an `IInputSink` via a thin
|
||||||
|
* wrapper.
|
||||||
|
*
|
||||||
|
* @sa IInputSurface, IComponent.
|
||||||
|
*/
|
||||||
|
@VintfStability
|
||||||
|
interface IInputSink {
|
||||||
|
/**
|
||||||
|
* Feeds work to the sink.
|
||||||
|
*
|
||||||
|
* @param workBundle `WorkBundle` object containing a list of `Work` objects
|
||||||
|
* to queue to the component.
|
||||||
|
* @throws ServiceSpecificException with one of the following values:
|
||||||
|
* - `Status::BAD_INDEX` - Some component id in some `Worklet` is not valid.
|
||||||
|
* - `Status::CANNOT_DO` - Tunneling has not been set up for this sink, but some
|
||||||
|
* `Work` object contains tunneling information.
|
||||||
|
* - `Status::NO_MEMORY` - Not enough memory to queue @p workBundle.
|
||||||
|
* - `Status::TIMED_OUT` - The operation cannot be finished in a timely manner.
|
||||||
|
* - `Status::CORRUPTED` - Some unknown error occurred.
|
||||||
|
*/
|
||||||
|
void queue(in WorkBundle workBundle);
|
||||||
|
}
|
68
media/c2/aidl/android/hardware/media/c2/IInputSurface.aidl
Normal file
68
media/c2/aidl/android/hardware/media/c2/IInputSurface.aidl
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package android.hardware.media.c2;
|
||||||
|
|
||||||
|
import android.hardware.media.c2.IConfigurable;
|
||||||
|
import android.hardware.media.c2.IInputSink;
|
||||||
|
import android.hardware.media.c2.IInputSurfaceConnection;
|
||||||
|
import android.view.Surface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Input surface for a Codec2 component.
|
||||||
|
*
|
||||||
|
* An <em>input surface</em> is an instance of `IInputSurface`, which may be
|
||||||
|
* created by calling IComponentStore::createInputSurface(). Once created, the
|
||||||
|
* client may
|
||||||
|
* 1. write data to it via the `NativeWindow` interface; and
|
||||||
|
* 2. use it as input to a Codec2 encoder.
|
||||||
|
*
|
||||||
|
* @sa IInputSurfaceConnection, IComponentStore::createInputSurface(),
|
||||||
|
* IComponent::connectToInputSurface().
|
||||||
|
*/
|
||||||
|
@VintfStability
|
||||||
|
interface IInputSurface {
|
||||||
|
/**
|
||||||
|
* Returns the producer interface into the internal buffer queue.
|
||||||
|
*
|
||||||
|
* @return producer `Surface` instance(actually ANativeWindow). This must not
|
||||||
|
* be null.
|
||||||
|
*/
|
||||||
|
Surface getSurface();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the @ref IConfigurable instance associated to this input surface.
|
||||||
|
*
|
||||||
|
* @return configurable `IConfigurable` instance. This must not be null.
|
||||||
|
*/
|
||||||
|
IConfigurable getConfigurable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects the input surface to an input sink.
|
||||||
|
*
|
||||||
|
* This function is generally called from inside the implementation of
|
||||||
|
* IComponent::connectToInputSurface(), where @p sink is a thin wrapper of
|
||||||
|
* the component that consumes buffers from this surface.
|
||||||
|
*
|
||||||
|
* @param sink Input sink. See `IInputSink` for more information.
|
||||||
|
* @return connection `IInputSurfaceConnection` object. This must not be
|
||||||
|
* null if @p status is `OK`.
|
||||||
|
* @throws ServiceSpecificException with one of following values:
|
||||||
|
* - `Status::BAD_VALUE` - @p sink is invalid.
|
||||||
|
* - `Status::CORRUPTED` - Some unknown error occurred.
|
||||||
|
*/
|
||||||
|
IInputSurfaceConnection connect(in IInputSink sink);
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package android.hardware.media.c2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connection between an IInputSink and an IInpuSurface.
|
||||||
|
*/
|
||||||
|
@VintfStability
|
||||||
|
interface IInputSurfaceConnection {
|
||||||
|
/**
|
||||||
|
* Destroys the connection between an input surface and a component.
|
||||||
|
*
|
||||||
|
* @throws ServiceSpecificException with one of following values:
|
||||||
|
* - `Status::BAD_STATE` - The component is not in running state.
|
||||||
|
* - `Status::NOT_FOUND` - The surface is not connected to a component.
|
||||||
|
* - `Status::CORRUPTED` - Some unknown error occurred.
|
||||||
|
*/
|
||||||
|
void disconnect();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signal the end of stream.
|
||||||
|
|
||||||
|
* @throws ServiceSpecificException with one of following values:
|
||||||
|
* - `Status::BAD_STATE` - The component is not in running state.
|
||||||
|
*/
|
||||||
|
void signalEndOfStream();
|
||||||
|
}
|
Loading…
Reference in a new issue