blob: 6991a6cdfa337baf80f3184302fa506d4af622a6 [file] [log] [blame]
Zhiqiang Hana67a8252023-02-25 18:23:48 +08001/*
2* Copyright (c) 2014 Amlogic, Inc. All rights reserved.
3*
4* This source code is subject to the terms and conditions defined in the
5* file 'LICENSE' which is part of this source code package.
6*
7* Description: */
Chuangcheng Pengae4ec202020-08-19 13:19:11 +08008/**\file
9 * \brief Demux module
10 *
Chuangcheng Pengae4ec202020-08-19 13:19:11 +080011 * \author Gong Ke <ke.gong@amlogic.com>
12 * \date 2010-05-21: create the document
13 ***************************************************************************/
14
15#ifndef _AM_DMX_H
16#define _AM_DMX_H
17
18#include "am_types.h"
19/*add for config define for linux dvb *.h*/
20//#include "am_config.h"
21#include "dmx.h"
22
23#ifdef __cplusplus
24extern "C"
25{
26#endif
27
28/****************************************************************************
29 * Macro definitions
30 ***************************************************************************/
31
32/****************************************************************************
33 * Error code definitions
34 ****************************************************************************/
35
36/**\brief Error code of the demux module*/
37enum AM_DMX_ErrorCode
38{
hualing chen002e5b92022-02-23 17:51:21 +080039 AM_DMX_ERROR_BASE=AM_ERROR_BASE(AM_MOD_DMX),
40 AM_DMX_ERR_INVALID_DEV_NO, /**< Invalid device number*/
41 AM_DMX_ERR_INVALID_ID, /**< Invalid filer handle*/
42 AM_DMX_ERR_BUSY, /**< The device has already been openned*/
43 AM_DMX_ERR_NOT_ALLOCATED, /**< The device has not been allocated*/
44 AM_DMX_ERR_CANNOT_CREATE_THREAD, /**< Cannot create new thread*/
45 AM_DMX_ERR_CANNOT_OPEN_DEV, /**< Cannot open device*/
46 AM_DMX_ERR_NOT_SUPPORTED, /**< Not supported*/
47 AM_DMX_ERR_NO_FREE_FILTER, /**< No free filter*/
48 AM_DMX_ERR_NO_MEM, /**< Not enough memory*/
49 AM_DMX_ERR_TIMEOUT, /**< Timeout*/
50 AM_DMX_ERR_SYS, /**< System error*/
51 AM_DMX_ERR_NO_DATA, /**< No data received*/
52 AM_DMX_ERR_END
Chuangcheng Pengae4ec202020-08-19 13:19:11 +080053};
54
55/****************************************************************************
56 * Type definitions
57 ***************************************************************************/
58
59/**\brief Input source of the demux*/
60typedef enum
61{
hualing chen002e5b92022-02-23 17:51:21 +080062 AM_DMX_SRC_TS0, /**< TS input port 0*/
63 AM_DMX_SRC_TS1, /**< TS input port 1*/
64 AM_DMX_SRC_TS2, /**< TS input port 2*/
65 AM_DMX_SRC_TS3, /**< TS input port 3*/
66 AM_DMX_SRC_HIU, /**< HIU input (memory)*/
67 AM_DMX_SRC_HIU1
Chuangcheng Pengae4ec202020-08-19 13:19:11 +080068} AM_DMX_Source_t;
69
70/**\brief Demux device open parameters*/
71typedef struct
72{
hualing chen002e5b92022-02-23 17:51:21 +080073 AM_Bool_t use_sw_filter; /**< M_TURE to use DVR software filters.*/
74 int dvr_fifo_no; /**< Async fifo number if use software filters.*/
75 int dvr_buf_size; /**< Async fifo buffer size if use software filters.*/
Chuangcheng Pengae4ec202020-08-19 13:19:11 +080076} AM_DMX_OpenPara_t;
77
78/**\brief Filter received data callback function
79 * \a fandle is the filter's handle.
80 * \a data is the received data buffer pointer.
81 * \a len is the data length.
82 * If \a data == null, means timeout.
83 */
84typedef void (*AM_DMX_DataCb) (int dev_no, int fhandle, const uint8_t *data, int len, void *user_data);
85
86
87/****************************************************************************
88 * Function prototypes
89 ***************************************************************************/
90
91/**\brief Open a demux device
92 * \param dev_no Demux device number
93 * \param[in] para Demux device's open parameters
94 * \retval AM_SUCCESS On success
95 * \return Error code
96 */
97extern AM_ErrorCode_t AM_DMX_Open(int dev_no, const AM_DMX_OpenPara_t *para);
98
99/**\brief Close a demux device
100 * \param dev_no Demux device number
101 * \retval AM_SUCCESS On success
102 * \return Error code
103 */
104extern AM_ErrorCode_t AM_DMX_Close(int dev_no);
105
106/**\brief Allocate a filter
107 * \param dev_no Demux device number
108 * \param[out] fhandle Return the allocated filter's handle
109 * \retval AM_SUCCESS On success
110 * \return Error Code
111 */
112extern AM_ErrorCode_t AM_DMX_AllocateFilter(int dev_no, int *fhandle);
113
114/**\brief Set a section filter's parameters
115 * \param dev_no Demux device number
116 * \param fhandle Filter handle
117 * \param[in] params Section filter's parameters
118 * \retval AM_SUCCESS On success
119 * \return Error code
120 */
121extern AM_ErrorCode_t AM_DMX_SetSecFilter(int dev_no, int fhandle, const struct dmx_sct_filter_params *params);
122
123/**\brief Set a PES filter's parameters
124 * \param dev_no Demux device number
125 * \param fhandle Filter handle
126 * \param[in] params PES filter's parameters
127 * \retval AM_SUCCESS On success
128 * \return Error code
129 */
130extern AM_ErrorCode_t AM_DMX_SetPesFilter(int dev_no, int fhandle, const struct dmx_pes_filter_params *params);
131
132/**\brief Release an unused filter
133 * \param dev_no Demux device number
134 * \param fhandle Filter handle
135 * \retval AM_SUCCESS On success
136 * \return Error code
137 */
138extern AM_ErrorCode_t AM_DMX_FreeFilter(int dev_no, int fhandle);
139
140/**\brief Start filtering
141 * \param dev_no Demux device number
142 * \param fhandle Filter handle
143 * \retval AM_SUCCESS On success
144 * \return Error code
145 */
146extern AM_ErrorCode_t AM_DMX_StartFilter(int dev_no, int fhandle);
147
148/**\brief Stop filtering
149 * \param dev_no Demux device number
150 * \param fhandle Filter handle
151 * \retval AM_SUCCESS On success
152 * \return Error code
153 */
154extern AM_ErrorCode_t AM_DMX_StopFilter(int dev_no, int fhandle);
155
156/**\brief Set the ring queue buffer size of a filter
157 * \param dev_no Demux device number
158 * \param fhandle Filter handle
159 * \param size Ring queue buffer size in bytes
160 * \retval AM_SUCCESS On success
161 * \return Error code
162 */
163extern AM_ErrorCode_t AM_DMX_SetBufferSize(int dev_no, int fhandle, int size);
164
165/**\brief Get a filter's data callback function
166 * \param dev_no Demux device number
167 * \param fhandle Filter handle
168 * \param[out] cb Return the data callback function of the filter
169 * \param[out] data Return the user defined parameter of the callback function
170 * \retval AM_SUCCESS On success
171 * \return Error code
172 */
173extern AM_ErrorCode_t AM_DMX_GetCallback(int dev_no, int fhandle, AM_DMX_DataCb *cb, void **data);
174
175/**\brief Set a filter's data callback function
176 * \param dev_no Demux device number
177 * \param fhandle Filter handle
178 * \param[in] cb New data callback function
179 * \param[in] data User defined parameter of the callback function
180 * \retval AM_SUCCESS On success
181 * \return Error code
182 */
183extern AM_ErrorCode_t AM_DMX_SetCallback(int dev_no, int fhandle, AM_DMX_DataCb cb, void *data);
184
185/**\brief Set the demux's input source
186 * \param dev_no Demux device number
187 * \param src Input source
188 * \retval AM_SUCCESS On success
189 * \return Error code
190 */
191extern AM_ErrorCode_t AM_DMX_SetInput(int dev_no, int input);
192
193/**\cond */
194/**\brief Sync the demux data
195 * \param dev_no Demux device number
196 * \retval AM_SUCCESS On success
197 * \return Error code
198 */
199extern AM_ErrorCode_t AM_DMX_Sync(int dev_no);
200/**\endcond */
201
202/**
203 * Get the scramble status of the AV channels in the demux
204 * \param dev_no Demux device number
205 * \param[out] dev_status Return the AV channels's scramble status.
206 * dev_status[0] is the video status, dev_status[1] is the audio status.
207 * AM_TRUE means the channel is scrambled, AM_FALSE means the channel is not scrambled.
208 * \retval AM_SUCCESS On success
209 * \return Error code
210 */
211extern AM_ErrorCode_t AM_DMX_GetScrambleStatus(int dev_no, AM_Bool_t dev_status[2]);
212
213extern AM_ErrorCode_t AM_DMX_GetSTC(int dev_no, int fhandle);
214
215#ifdef __cplusplus
216}
217#endif
218
219#endif
220