/* * Copyright (C) 2019 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.tv.tuner@1.0; import IDvr; import IDvrCallback; import IFilter; import IFilterCallback; import ITimeFilter; /** * Demultiplexer(Demux) takes a single multiplexed input and splits it into * one or more output. */ interface IDemux { /** * Set a frontend resource as data input of the demux * * It is used by the client to specify a hardware frontend as data source of * this demux instance. A demux instance can have only one data source. * * @return result Result status of the operation. * SUCCESS if successful, * INVALID_STATE if failed for wrong state. * UNKNOWN_ERROR if failed for other reasons. */ setFrontendDataSource(FrontendId frontendId) generates (Result result); /** * Open a new filter in the demux * * It is used by the client to open a filter in the demux. * * @param type the type of the filter to be added. * @param bufferSize the buffer size of the filter to be opened. It's used * to create a FMQ(Fast Message Queue) to hold data output from the filter. * @param cb the callback for the filter to be used to send notifications * back to the client. * @return result Result status of the operation. * SUCCESS if successful, * INVALID_STATE if failed for wrong state. * UNKNOWN_ERROR if failed for other reasons. * @return filter the filter instance of the newly added. */ openFilter(DemuxFilterType type, uint32_t bufferSize, IFilterCallback cb) generates (Result result, IFilter filter); /** * Open time filter of the demux * * It is used by the client to open time filter of the demux. * * @return result Result status of the operation. * SUCCESS if successful, * UNAVAILABLE if time filter is not supported. * INVALID_STATE if failed for wrong state. * UNKNOWN_ERROR if failed for other reasons. * @return timeFilter the time filter instance of the newly added. */ openTimeFilter() generates (Result result, ITimeFilter timeFilter); /** * Get hardware sync ID for audio and video. * * It is used by the client to get the hardware sync ID for audio and video. * * @param filter the filter instance. * @return result Result status of the operation. * SUCCESS if successful, * INVALID_ARGUMENT if failed for a wrong filter ID. * UNKNOWN_ERROR if failed for other reasons. * @return avSyncHwId the id of hardware A/V sync. */ getAvSyncHwId(IFilter filter) generates (Result result, AvSyncHwId avSyncHwId); /** * Get current time stamp to use for A/V sync * * It is used by the client to get current time stamp for A/V sync. HW is * supported to increment and maintain current time stamp. * * @param avSyncHwId the hardware id of A/V sync. * @return result Result status of the operation. * SUCCESS if successful, * INVALID_ARGUMENT if failed for a wrong hardware ID of A/V sync. * UNKNOWN_ERROR if failed for other reasons. * @return time the current time stamp of hardware A/V sync. The time stamp * based on 90KHz has the same format as PTS (Presentation Time Stamp). */ getAvSyncTime(AvSyncHwId avSyncHwId) generates (Result result, uint64_t time); /** * Close the Demux instance * * It is used by the client to release the demux instance. HAL clear * underneath resource. client mustn't access the instance any more. * * @return result Result status of the operation. * SUCCESS if successful, * UNKNOWN_ERROR if failed for other reasons. */ close() generates (Result result); /** * Open a DVR (Digital Video Record) instance in the demux * * It is used by the client to record and playback. * * @param type specify which kind of DVR to open. * @param bufferSize the buffer size of the output to be added. It's used to * create a FMQ(Fast Message Queue) to hold data from selected filters. * @param cb the callback for the DVR to be used to send notifications * back to the client. * @return result Result status of the operation. * SUCCESS if successful, * OUT_OF_MEMORY if failed for not enough memory. * UNKNOWN_ERROR if failed for other reasons. * @return dvr a DVR instance. */ openDvr(DvrType type, uint32_t bufferSize, IDvrCallback cb) generates (Result result, IDvr dvr); /** * Connect Conditional Access Modules (CAM) through Common Interface (CI) * * It is used by the client to connect CI-CAM. The demux uses the output * from the frontend as the input by default, and must change to use the * output from CI-CAM as the input after this call take place. * * @param ciCamId specify CI-CAM Id to connect. * @return result Result status of the operation. * SUCCESS if successful, * UNKNOWN_ERROR if failed for other reasons. */ connectCiCam(uint32_t ciCamId) generates (Result result); /** * Disconnect Conditional Access Modules (CAM) * * It is used by the client to disconnect CI-CAM. The demux will use the * output from the frontend as the input after this call take place. * * @return result Result status of the operation. * SUCCESS if successful, * UNKNOWN_ERROR if failed for other reasons. */ disconnectCiCam() generates (Result result); };