/*
 * Copyright (C) 2018 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 hardware.google.media.c2@1.0;

import android.hardware.graphics.bufferqueue@1.0::IGraphicBufferProducer;

import IConfigurable;
import IComponent;
import IInputSurfaceConnection;

/**
 * Input surface that can be configured for the IComponent.
 */
interface IInputSurface extends IGraphicBufferProducer {

    /**
     * Connects this input surface to a component.
     *
     * This call must return within 100 ms.
     *
     * @param component The component to connect to. This must have type
     *     IComponent.
     * @return status Status of the call, which may be
     *   - OK        - The operation succeeded.
     *   - BAD_STATE - The component is in running state.
     *   - DUPLICATE - The surface is already connected to a component.
     *   - NO_MEMORY - Could not allocate memory to connect to the component.
     *   - CORRUPTED - Some unknown error prevented the connection. (unexpected)
     * @return connection Connection object that is used to disconnect
     *     from the component.
     */
    connectToComponent(
            IComponent component
        ) generates (
            Status status,
            IInputSurfaceConnection connection
        );

    /**
     * Returns the Codec 2.0 configuration object for this surface.
     *
     * @return configurable The configuration object for this surface.
     */
    getConfigurable() generates (IConfigurable configurable);

};