blob: 52b8c23953247bb2ed9631757561dcb8ca0ebe14 [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
Gong Ke3489c0f2020-01-16 18:11:44 +080011typedef void* DVR_RecordHandle_t;
Pengfei Liuc181a982020-01-07 19:27:13 +080012
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,
Gong Ke3489c0f2020-01-16 18:11:44 +080023 DVR_RECORD_PID_KEEP,
24 DVR_RECORD_PID_CLOSE
Pengfei Liuc181a982020-01-07 19:27:13 +080025} 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;
Gong Ke3489c0f2020-01-16 18:11:44 +080084 loff_t ts_offset;
Pengfei Liuc181a982020-01-07 19:27:13 +080085 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 {
Gong Ke3489c0f2020-01-16 18:11:44 +080099 int dmx_dev_id;
100 DVR_RecordFlag_t flags;
101 DVR_CryptoPeriod_t crypto_period;
102 DVR_CryptoFunction_t crypto_fn;
103 void *crypto_data;
Pengfei Liuc181a982020-01-07 19:27:13 +0800104} DVR_RecordOpenParams_t;
105
106typedef struct {
107 uint64_t segment_id;
108 uint32_t nb_pids;
Gong Ke3489c0f2020-01-16 18:11:44 +0800109 DVR_StreamPid_t pids[DVR_MAX_RECORD_PIDS_COUNT];
Pengfei Liuc181a982020-01-07 19:27:13 +0800110 DVR_RecordPidAction_t pid_action[DVR_MAX_RECORD_PIDS_COUNT];
111} DVR_RecordSegmentStartParams_t;
112
113typedef struct {
114 char location[DVR_MAX_LOCATION_SIZE];
115 DVR_RecordSegmentStartParams_t segment;
116} DVR_RecordStartParams_t;
117
118typedef struct {
119} DVR_RecordSegmentInfo_t;
120
121/**\brief Open a recording session for a target giving some open parameters
122 * \param[out] p_handle Return the handle of the newly created dvr session
123 * \param[in] params Open parameters
124 * \return DVR_SUCCESS on success
125 * \return error code
126 */
127int dvr_record_open(DVR_RecordHandle_t *p_handle, DVR_RecordOpenParams_t *params);
128
129/**\brief Close a recording session
130 * \param[in] handle Dvr recording session handle
131 * \return DVR_SUCCESS on success
132 * \return error code
133 */
134int dvr_record_close(DVR_RecordHandle_t handle);
135
Pengfei Liuc181a982020-01-07 19:27:13 +0800136/**\brief Start recording on a segment
137 * \param[in] handle Dvr recording session handle
138 * \param[in] params Dvr start parameters
139 * \return DVR_SUCCESS on success
140 * \return error code
141 */
142int dvr_record_start_segment(DVR_RecordHandle_t handle, DVR_RecordStartParams_t *params);
143
144/**\brief Stop the ongoing segment and start recording a new segment
145 * \param[in] handle Dvr recording session handle
146 * \param[in] params Dvr start parameters
147 * \param[out] p_info
148 * \return DVR_SUCCESS on success
149 * \return error code
150 */
151int dvr_record_next_segment(DVR_RecordHandle_t handle, DVR_RecordStartParams_t *params, DVR_RecordSegmentInfo_t *p_info);
152
153/**\brief Stop the ongoing segment
154 * \param[in] handle Dvr recording session handle
155 * \param[out] p_info
156 * \return DVR_SUCCESS on success
157 * \return error code
158 */
159int dvr_record_stop_segment(DVR_RecordHandle_t handle, DVR_RecordSegmentInfo_t *p_info);
160
161#ifdef __cplusplus
162}
163#endif
164
165#endif /*END _DVR_RECORD_H_*/