1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*
* SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
* SPDX-License-Identifier: Apache-2.0
*
* 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.
*/
#ifndef VIDEO_DRV_H
#define VIDEO_DRV_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
/* Video Channel */
#define VIDEO_DRV_IN0 (0UL) ///< Video Input channel 0
#define VIDEO_DRV_OUT0 (1UL) ///< Video Output channel 0
#define VIDEO_DRV_IN1 (2UL) ///< Video Input channel 1
#define VIDEO_DRV_OUT1 (3UL) ///< Video Output channel 1
/* Video Event */
#define VIDEO_DRV_EVENT_FRAME (1UL << 0) ///< Video frame received
#define VIDEO_DRV_EVENT_OVERFLOW (1UL << 1) ///< Video buffer overflow
#define VIDEO_DRV_EVENT_UNDERFLOW (1UL << 2) ///< Video buffer underflow
#define VIDEO_DRV_EVENT_EOS (1UL << 3) ///< Video end of stream
/* Video Mode */
#define VIDEO_DRV_MODE_SINGLE (0UL) ///< Single frame
#define VIDEO_DRV_MODE_CONTINUOS (1UL) ///< Continuos stream
/* Return code */
#define VIDEO_DRV_OK (0) ///< Operation succeeded
#define VIDEO_DRV_ERROR (-1) ///< Unspecified error
#define VIDEO_DRV_ERROR_PARAMETER (-2) ///< Parameter error
/// Video Color Format
#define COLOR_FORMAT_BEGIN (0UL)
#define COLOR_GRAYSCALE8 (1UL)
#define COLOR_RGB888 (2UL)
#define COLOR_BGR565 (3UL)
#define COLOR_YUV420 (4UL)
#define COLOR_NV12 (5UL)
#define COLOR_NV21 (6UL)
#define COLOR_FORMAT_END (7UL)
/// Video Status
typedef struct {
uint32_t active : 1; ///< Video stream active
uint32_t buf_empty : 1; ///< Video stream buffer empty
uint32_t buf_full : 1; ///< Video stream buffer full
uint32_t overflow : 1; ///< Video buffer overflow (cleared on GetStatus)
uint32_t underflow : 1; ///< Video buffer underflow (cleared on GetStatus)
uint32_t eos : 1; ///< Video end of stream (cleared on GetStatus)
uint32_t reserved : 26;
} VideoDrv_Status_t;
/// \brief Video Events callback function type.
/// \param[in] channel channel number
/// \param[in] event events notification mask
/// \return none
typedef void (*VideoDrv_Event_t) (uint32_t channel, uint32_t event);
/// \brief Initialize Video Interface.
/// \param[in] cb_event pointer to \ref VideoDrv_Event_t
/// \return return code
int32_t VideoDrv_Initialize (VideoDrv_Event_t cb_event);
/// \brief De-initialize Video Interface.
/// \return return code
int32_t VideoDrv_Uninitialize (void);
/// \brief Set Video Interface file.
/// \param[in] channel channel number
/// \param[in] name video filename (pointer to NULL terminated string)
/// \return return code
int32_t VideoDrv_SetFile (uint32_t channel, const char *name);
/// \brief Configure Video Interface.
/// \param[in] channel channel number
/// \param[in] frame_width frame width in pixels
/// \param[in] frame_height frame height in pixels
/// \param[in] color_format pixel color format
/// \param[in] frame_rate frame rate (frames per second)
/// \return return code
int32_t VideoDrv_Configure (uint32_t channel, uint32_t frame_width, uint32_t frame_height, uint32_t color_format, uint32_t frame_rate);
/// \brief Set Video Interface buffer.
/// \param[in] channel channel number
/// \param[in] buf pointer to buffer for video stream
/// \param[in] buf_size video stream buffer size in bytes
/// \return return code
int32_t VideoDrv_SetBuf (uint32_t channel, void *buf, uint32_t buf_size);
/// \brief Flush Video Interface buffer.
/// \param[in] channel channel number
/// \return return code
int32_t VideoDrv_FlushBuf (uint32_t channel);
/// \brief Start Stream on Video Interface.
/// \param[in] channel channel number
/// \param[in] mode stream mode
/// \return return code
int32_t VideoDrv_StreamStart (uint32_t channel, uint32_t mode);
/// \brief Stop Stream on Video Interface.
/// \param[in] channel channel number
/// \return return code
int32_t VideoDrv_StreamStop (uint32_t channel);
/// \brief Get Video Frame buffer.
/// \param[in] channel channel number
/// \return pointer to frame buffer
void *VideoDrv_GetFrameBuf (uint32_t channel);
/// \brief Release Video Frame.
/// \param[in] channel channel number
/// \return return code
int32_t VideoDrv_ReleaseFrame (uint32_t channel);
/// \brief Get Video Interface status.
/// \param[in] channel channel number
/// \return \ref VideoDrv_Status_t
VideoDrv_Status_t VideoDrv_GetStatus (uint32_t channel);
#ifdef __cplusplus
}
#endif
#endif /* VIDEO_DRV_H */
|