blob: de63391a7ca5e350d2927b171d1e7b64b020bb0d [file] [log] [blame]
Pengfei Liuc181a982020-01-07 19:27:13 +08001#ifndef _DVR_RECORD_H_
2#define _DVR_RECORD_H_
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8#include "dvr_common.h"
Pengfei Liub038b6a2020-01-14 15:57:01 +08009#include "dvr_types.h"
Pengfei Liuc181a982020-01-07 19:27:13 +080010
11typedef uint32_t DVR_RecordHandle_t;
12
13typedef enum {
14 DVR_RECORD_STATE_OPENED,
15 DVR_RECORD_STATE_STARTED,
16 DVR_RECORD_STATE_STOPPED,
17 DVR_RECORD_STATE_CLOSED,
18} DVR_RecordState;
19
20typedef enum
21{
22 DVR_RECORD_PID_CREATE,
23 DVR_PID_KEEP,
24 DVR_PID_CLOSE
25} DVR_RecordPidAction_t;
26
27#if 0
28struct HAL_PVR_Param_s {
29 PVR_Record_Open_Params_t open_params;
30 PVR_Record_Notify_Fn_t func;
31 PVR_Size_v2_t notification_size;
32 char root_location[PVR_MAX_LOCATION_SIZE];
33};
34
35struct HAL_PVR_Chunk_s {
36 PVR_Chunk_Info_t info;
37 PVR_Chunk_ID_t chunk_id;
38 u32_t nb_pids;
39 PVR_PID_t pids[PVR_MAX_UPDATED_RECORD_PIDS];
40 PVR_PID_Action_t update_info[PVR_MAX_UPDATED_RECORD_PIDS];
41 //int state;
42 char fname[HAL_PVR_MAX_LOCATION_SIZE];
43 struct list_head list;
44};
45
46struct HAL_PVR_Device_s {
47 int dev_no;
48 int state;
49 struct HAL_PVR_Param_s param;
50 struct list_head head;
51 pthread_mutex_t lock;
52 pthread_t thread;
53 int current_chunk_id;
54};
55#endif
56
57typedef enum {
58 DVR_RECORD_SOURCE_MEMORY,
59 DVR_RECORD_SOURCE_DEMUX_0,
60 DVR_RECORD_SOURCE_DEMUX_1,
61 DVR_RECORD_SOURCE_DEMUX_2
62} DVR_RecordSource_t;
63
64typedef enum {
65 DVR_RECORD_FLAG_SCRAMBLED = (1 << 0),
66 DVR_RECORD_FLAG_ACCURATE = (1 << 1),
67} DVR_RecordFlag_t;
68
69typedef enum {
70 DVR_CRYPTO_PARITY_CLEAR,
71 DVR_CRYPTO_PARITY_ODD,
72 DVR_CRYPTO_PARITY_EVEN,
73} DVR_CryptoParity_t;
74
75typedef enum {
76 DVR_CRYPTO_FILTER_TYPE_AUDIO,
77 DVR_CRYPTO_FILTER_TYPE_VIDEO,
78} DVR_CryptoFilterType_t;
79
80typedef struct
81{
Pengfei Liub038b6a2020-01-14 15:57:01 +080082 DVR_Bool_t transition;
Pengfei Liuc181a982020-01-07 19:27:13 +080083 DVR_CryptoParity_t parity;
84 uint32_t ts_offset;
85 DVR_CryptoFilterType_t filter_type;
86} DVR_CryptoPeriodInfo_t;
87
88typedef void (*DVR_CryptoPeriodNotifyFn_t)(
89 DVR_RecordHandle_t handle,
90 const DVR_CryptoPeriodInfo_t *p_info);
91
92typedef struct {
93 DVR_CryptoPeriodNotifyFn_t notify_func;
94 uint64_t interval_bytes;
Pengfei Liub038b6a2020-01-14 15:57:01 +080095 DVR_Bool_t notify_clear_periods;
Pengfei Liuc181a982020-01-07 19:27:13 +080096} DVR_CryptoPeriod_t;;
97
98typedef struct {
99 DVR_RecordSource_t src_type;
100 DVR_RecordFlag_t flags;
101 DVR_CryptoPeriod_t crypto_period;
102} DVR_RecordOpenParams_t;
103
104typedef struct {
105 uint64_t segment_id;
106 uint32_t nb_pids;
107 DVR_PidInfo_t pids[DVR_MAX_RECORD_PIDS_COUNT];
108 DVR_RecordPidAction_t pid_action[DVR_MAX_RECORD_PIDS_COUNT];
109} DVR_RecordSegmentStartParams_t;
110
111typedef struct {
112 char location[DVR_MAX_LOCATION_SIZE];
113 DVR_RecordSegmentStartParams_t segment;
114} DVR_RecordStartParams_t;
115
116typedef struct {
117} DVR_RecordSegmentInfo_t;
118
119/**\brief Open a recording session for a target giving some open parameters
120 * \param[out] p_handle Return the handle of the newly created dvr session
121 * \param[in] params Open parameters
122 * \return DVR_SUCCESS on success
123 * \return error code
124 */
125int dvr_record_open(DVR_RecordHandle_t *p_handle, DVR_RecordOpenParams_t *params);
126
127/**\brief Close a recording session
128 * \param[in] handle Dvr recording session handle
129 * \return DVR_SUCCESS on success
130 * \return error code
131 */
132int dvr_record_close(DVR_RecordHandle_t handle);
133
134int dvr_record_set_encrypt();
135/**\brief Start recording on a segment
136 * \param[in] handle Dvr recording session handle
137 * \param[in] params Dvr start parameters
138 * \return DVR_SUCCESS on success
139 * \return error code
140 */
141int dvr_record_start_segment(DVR_RecordHandle_t handle, DVR_RecordStartParams_t *params);
142
143/**\brief Stop the ongoing segment and start recording a new segment
144 * \param[in] handle Dvr recording session handle
145 * \param[in] params Dvr start parameters
146 * \param[out] p_info
147 * \return DVR_SUCCESS on success
148 * \return error code
149 */
150int dvr_record_next_segment(DVR_RecordHandle_t handle, DVR_RecordStartParams_t *params, DVR_RecordSegmentInfo_t *p_info);
151
152/**\brief Stop the ongoing segment
153 * \param[in] handle Dvr recording session handle
154 * \param[out] p_info
155 * \return DVR_SUCCESS on success
156 * \return error code
157 */
158int dvr_record_stop_segment(DVR_RecordHandle_t handle, DVR_RecordSegmentInfo_t *p_info);
159
160#ifdef __cplusplus
161}
162#endif
163
164#endif /*END _DVR_RECORD_H_*/