1/*
2Copyright (c) 2012, Broadcom Europe Ltd
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 * Neither the name of the copyright holder nor the
13 names of its contributors may be used to endorse or promote products
14 derived from this software without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*/
27
28#ifndef MMAL_PARAMETERS_COMMON_H
29#define MMAL_PARAMETERS_COMMON_H
30
31/** @defgroup MMAL_PARAMETER_IDS Pre-defined MMAL parameter IDs
32 * @ingroup MmalParameters
33 * @{
34 */
35
36/** @name Parameter groups
37 * Parameters are divided into groups, and then allocated sequentially within
38 * a group using an enum.
39 * @{
40 */
41
42/** Common parameter ID group, used with many types of component. */
43#define MMAL_PARAMETER_GROUP_COMMON (0<<16)
44/** Camera-specific parameter ID group. */
45#define MMAL_PARAMETER_GROUP_CAMERA (1<<16)
46/** Video-specific parameter ID group. */
47#define MMAL_PARAMETER_GROUP_VIDEO (2<<16)
48/** Audio-specific parameter ID group. */
49#define MMAL_PARAMETER_GROUP_AUDIO (3<<16)
50/** Clock-specific parameter ID group. */
51#define MMAL_PARAMETER_GROUP_CLOCK (4<<16)
52/** Miracast-specific parameter ID group. */
53#define MMAL_PARAMETER_GROUP_MIRACAST (5<<16)
54
55
56/**@}*/
57
58/** Common MMAL parameter IDs.
59 */
60enum {
61 MMAL_PARAMETER_UNUSED /**< Never a valid parameter ID */
62 = MMAL_PARAMETER_GROUP_COMMON,
63 MMAL_PARAMETER_SUPPORTED_ENCODINGS, /**< Takes a MMAL_PARAMETER_ENCODING_T */
64 MMAL_PARAMETER_URI, /**< Takes a MMAL_PARAMETER_URI_T */
65 MMAL_PARAMETER_CHANGE_EVENT_REQUEST, /**< Takes a MMAL_PARAMETER_CHANGE_EVENT_REQUEST_T */
66 MMAL_PARAMETER_ZERO_COPY, /**< Takes a MMAL_PARAMETER_BOOLEAN_T */
67 MMAL_PARAMETER_BUFFER_REQUIREMENTS, /**< Takes a MMAL_PARAMETER_BUFFER_REQUIREMENTS_T */
68 MMAL_PARAMETER_STATISTICS, /**< Takes a MMAL_PARAMETER_STATISTICS_T */
69 MMAL_PARAMETER_CORE_STATISTICS, /**< Takes a MMAL_PARAMETER_CORE_STATISTICS_T */
70 MMAL_PARAMETER_MEM_USAGE, /**< Takes a MMAL_PARAMETER_MEM_USAGE_T */
71 MMAL_PARAMETER_BUFFER_FLAG_FILTER, /**< Takes a MMAL_PARAMETER_UINT32_T */
72 MMAL_PARAMETER_SEEK, /**< Takes a MMAL_PARAMETER_SEEK_T */
73 MMAL_PARAMETER_POWERMON_ENABLE, /**< Takes a MMAL_PARAMETER_BOOLEAN_T */
74 MMAL_PARAMETER_LOGGING, /**< Takes a MMAL_PARAMETER_LOGGING_T */
75 MMAL_PARAMETER_SYSTEM_TIME, /**< Takes a MMAL_PARAMETER_UINT64_T */
76 MMAL_PARAMETER_NO_IMAGE_PADDING, /**< Takes a MMAL_PARAMETER_BOOLEAN_T */
77 MMAL_PARAMETER_LOCKSTEP_ENABLE /**< Takes a MMAL_PARAMETER_BOOLEAN_T */
78};
79
80/**@}*/
81
82/** Parameter header type. All parameter structures need to begin with this type.
83 * The \ref id field must be set to a parameter ID, such as one of those listed on
84 * the \ref MMAL_PARAMETER_IDS "Pre-defined MMAL parameter IDs" page.
85 */
86typedef struct MMAL_PARAMETER_HEADER_T
87{
88 uint32_t id; /**< Parameter ID. */
89 uint32_t size; /**< Size in bytes of the parameter (including the header) */
90} MMAL_PARAMETER_HEADER_T;
91
92/** Change event request parameter type.
93 * This is used to control whether a \ref MMAL_EVENT_PARAMETER_CHANGED_T event
94 * is issued should a given parameter change.
95 */
96typedef struct MMAL_PARAMETER_CHANGE_EVENT_REQUEST_T
97{
98 MMAL_PARAMETER_HEADER_T hdr;
99
100 uint32_t change_id; /**< ID of parameter that may change, see \ref MMAL_PARAMETER_IDS */
101 MMAL_BOOL_T enable; /**< True if the event is enabled, false if disabled */
102} MMAL_PARAMETER_CHANGE_EVENT_REQUEST_T;
103
104/** Buffer requirements parameter.
105 * This is mainly used to increase the requirements of a component. */
106typedef struct MMAL_PARAMETER_BUFFER_REQUIREMENTS_T
107{
108 MMAL_PARAMETER_HEADER_T hdr;
109
110 uint32_t buffer_num_min; /**< Minimum number of buffers the port requires */
111 uint32_t buffer_size_min; /**< Minimum size of buffers the port requires */
112 uint32_t buffer_alignment_min; /**< Minimum alignment requirement for the buffers.
113 A value of zero means no special alignment requirements. */
114 uint32_t buffer_num_recommended; /**< Number of buffers the port recommends for optimal performance.
115 A value of zero means no special recommendation. */
116 uint32_t buffer_size_recommended; /**< Size of buffers the port recommends for optimal performance.
117 A value of zero means no special recommendation. */
118} MMAL_PARAMETER_BUFFER_REQUIREMENTS_T;
119
120/** Seek request parameter type.
121 * This is used to issue a seek request to a source component.
122 */
123typedef struct MMAL_PARAMETER_SEEK_T
124{
125 MMAL_PARAMETER_HEADER_T hdr;
126
127 int64_t offset; /**< Offset (in microseconds) to seek to */
128 uint32_t flags; /**< Seeking flags */
129
130#define MMAL_PARAM_SEEK_FLAG_PRECISE 0x1 /**< Choose precise seeking even if slower */
131#define MMAL_PARAM_SEEK_FLAG_FORWARD 0x2 /**< Seek to the next keyframe following the specified offset */
132
133} MMAL_PARAMETER_SEEK_T;
134
135/** Port statistics for debugging/test purposes.
136 * Ports may support query of this parameter to return statistics for debugging or
137 * test purposes. Not all values may be relevant for a given port.
138 */
139typedef struct MMAL_PARAMETER_STATISTICS_T
140{
141 MMAL_PARAMETER_HEADER_T hdr;
142
143 uint32_t buffer_count; /**< Total number of buffers processed */
144 uint32_t frame_count; /**< Total number of frames processed */
145 uint32_t frames_skipped; /**< Number of frames without expected PTS based on frame rate */
146 uint32_t frames_discarded; /**< Number of frames discarded */
147 uint32_t eos_seen; /**< Set if the end of stream has been reached */
148 uint32_t maximum_frame_bytes; /**< Maximum frame size in bytes */
149 int64_t total_bytes; /**< Total number of bytes processed */
150 uint32_t corrupt_macroblocks; /**< Number of corrupt macroblocks in the stream */
151} MMAL_PARAMETER_STATISTICS_T;
152
153typedef enum
154{
155 MMAL_CORE_STATS_RX,
156 MMAL_CORE_STATS_TX,
157 MMAL_CORE_STATS_MAX = 0x7fffffff /* Force 32 bit size for this enum */
158} MMAL_CORE_STATS_DIR;
159
160/** MMAL core statistics. These are collected by the core itself.
161 */
162typedef struct MMAL_PARAMETER_CORE_STATISTICS_T
163{
164 MMAL_PARAMETER_HEADER_T hdr;
165 MMAL_CORE_STATS_DIR dir;
166 MMAL_BOOL_T reset; /**< Reset to zero after reading */
167 MMAL_CORE_STATISTICS_T stats; /**< The statistics */
168} MMAL_PARAMETER_CORE_STATISTICS_T;
169
170/**
171 * Component memory usage statistics.
172 */
173typedef struct MMAL_PARAMETER_MEM_USAGE_T
174{
175 MMAL_PARAMETER_HEADER_T hdr;
176 /**< The amount of memory allocated in image pools by the component */
177 uint32_t pool_mem_alloc_size;
178} MMAL_PARAMETER_MEM_USAGE_T;
179
180/**
181 * Logging control.
182 */
183typedef struct MMAL_PARAMETER_LOGGING_T
184{
185 MMAL_PARAMETER_HEADER_T hdr;
186 uint32_t set; /**< Logging bits to set */
187 uint32_t clear; /**< Logging bits to clear */
188} MMAL_PARAMETER_LOGGING_T;
189
190#endif /* MMAL_PARAMETERS_COMMON_H */
191
192