57c74bcce342ab16fc1896c051bc10097a2d42d8
[framework/multimedia/libmm-common.git] / include / mm_message.h
1 /*
2  * libmm-common
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jonghyuk Choi <jhchoi.choi@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22  
23 #ifndef __MM_MESSAGE_H__
24 #define __MM_MESSAGE_H__
25
26 #ifdef __cplusplus
27         extern "C" {
28 #endif
29
30
31 /**
32  *         @addtogroup COMMON
33  *         @{
34                  * @file                mm_message.h
35                  * @brief               This file declares the messages type of Multimedia framework.
36                  * @version             1.0
37                  *
38                  * This file declares the messages type of Multimedia framework.
39  */
40
41 /**
42  * Enumerations of messages type.
43 */
44 enum MMMessageType {
45         /* COMMON */
46         MM_MESSAGE_UNKNOWN = 0x00,                      /**< Unknown message type */
47         MM_MESSAGE_ERROR,                               /**< Error message type */
48         MM_MESSAGE_WARNING,                             /**< Warning message type */
49         MM_MESSAGE_STATE_CHANGED,                       /**< State change message type */
50         MM_MESSAGE_STATE_INTERRUPTED,                   /**< State change by interrupt */
51         MM_MESSAGE_READY_TO_RESUME,                     /**< Ready to resume message type */
52
53         /* PLAYER */
54         MM_MESSAGE_CONNECTING = 0x100,                  /**< Connecting message type */
55         MM_MESSAGE_CONNECTED,                           /**< Rtspsrc has successed to connecting to server */
56         MM_MESSAGE_CONNECTION_TIMEOUT,                  /**< Connection timeout message type */
57         MM_MESSAGE_BUFFERING,                           /**< Buffering message type */
58         MM_MESSAGE_BEGIN_OF_STREAM,                     /**< Streaming begin message type */
59         MM_MESSAGE_END_OF_STREAM,                       /**< End of stream message type */
60         MM_MESSAGE_BLUETOOTH_ON,                        /**< Bluetooth A2DP Connection ON */
61         MM_MESSAGE_BLUETOOTH_OFF,                       /**< Bluetooth A2DP Connection OFF */
62         MM_MESSAGE_RESUMED_BY_REW,                      /**< Resumed by fast rewind message type */
63         MM_MESSAGE_UPDATE_SUBTITLE,                     /**< Update subtitle type */
64         MM_MESSAGE_RTP_SENDER_REPORT,                   /**< RTP sender report */
65         MM_MESSAGE_RTP_RECEIVER_REPORT,                 /**< RTP receiver report */
66         MM_MESSAGE_RTP_SESSION_STATUS,                  /**< RTP session status */
67         MM_MESSAGE_SENDER_STATE,                        /**< Sender state */
68         MM_MESSAGE_RECEIVER_STATE,                      /**< Receiver state */
69         MM_MESSAGE_FILE_NOT_SUPPORTED,                  /**< Not supported file */
70         MM_MESSAGE_FILE_NOT_FOUND,                      /**< Not founded file */
71         MM_MESSAGE_DRM_NOT_AUTHORIZED,                  /**< Not authorized to play the content */
72         MM_MESSAGE_VIDEO_CAPTURED,                      /**< Video frame has been captured */
73         MM_MESSAGE_VIDEO_NOT_CAPTURED,                  /**< video capture failed */
74         MM_MESSAGE_SEEK_COMPLETED,                      /**< Seek completed */
75         MM_MESSAGE_PD_DOWNLOADER_START, /**< PD downloader start message */
76         MM_MESSAGE_PD_DOWNLOADER_END,           /**< PD downloader end message */
77
78         /* CAMCORDER */
79         MM_MESSAGE_CAMCORDER_STATE_CHANGED = 0x200,     /**< State changed.*/
80         MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_ASM,      /**< State change by audio session manager message type */
81         MM_MESSAGE_CAMCORDER_MAX_SIZE,                  /**< Maximum size, camcorder waits for user's order (cam_commit/cancel).*/
82         MM_MESSAGE_CAMCORDER_NO_FREE_SPACE,             /**< No free space, camcorder waits for user's order (cam_commit/cancel).*/
83         MM_MESSAGE_CAMCORDER_TIME_LIMIT,                /**< Time limit, camcorder waits for user's order (cam_commit/cancel)*/
84         MM_MESSAGE_CAMCORDER_CAPTURED,                  /**< Image captured */
85         MM_MESSAGE_CAMCORDER_ERROR,                     /**< Error occurred.*/
86         MM_MESSAGE_CAMCORDER_FOCUS_CHANGED,             /**< Focus changed */
87         MM_MESSAGE_CAMCORDER_CURRENT_VOLUME,            /**< Current volume level of real input stream */
88         MM_MESSAGE_CAMCORDER_FIRMWARE_UPDATE,           /**< Firmware update */
89         MM_MESSAGE_CAMCORDER_RECORDING_STATUS,          /**< Recording status. (Elapsed time, total time, file size(KB))*/
90         MM_MESSAGE_CAMCORDER_STATE_CHANGED_BY_SECURITY, /**< State change by system security(ex:MDM) message type */
91         MM_MESSAGE_CAMCORDER_VIDEO_SNAPSHOT_CAPTURED,   /**< Image captured while video recording */
92         MM_MESSAGE_CAMCORDER_HDR_PROGRESS,              /**< Progressing percent of HDR capture */
93         MM_MESSAGE_CAMCORDER_FACE_DETECT_INFO,          /**< Face detection information */
94         MM_MESSAGE_CAMCORDER_VIDEO_CAPTURED,            /**< Video captured */
95         MM_MESSAGE_CAMCORDER_AUDIO_CAPTURED,            /**< Audio captured */
96
97         /* RADIO */
98         MM_MESSAGE_RADIO_SCAN_START = 0x300,            /**< Radio frequency scanning initiated */
99         MM_MESSAGE_RADIO_SCAN_INFO,                     /**< Founded radio frequency report. check message parameters  */
100         MM_MESSAGE_RADIO_SCAN_FINISH,                   /**< Radio frequency scanning has finished */
101         MM_MESSAGE_RADIO_SCAN_STOP,                     /**< Radio frequency scanning has stopped */
102         MM_MESSAGE_RADIO_SEEK_START,                    /**< Radio seeking has established */
103         MM_MESSAGE_RADIO_SEEK_FINISH,                   /**< Radio seeking has finished */
104
105         /* MEDIA CALL */
106         MM_MESSAGE_MEDIACALL_RESERVED = 0x400,          /**< Reserved message for Media Call */
107
108         /* IMAGE */
109         MM_MESSAGE_IMAGE_RESERVED = 0x500,              /**< Reserved message for Image */
110
111         /* SOUND */
112         MM_MESSAGE_SOUND_PCM_CAPTURE_RESTRICTED = 0x600,        /**< Sound pcm capture is restricted by system */
113         MM_MESSAGE_SOUND_PCM_INTERRUPTED,                       /**< Sound pcm is interrupted by audio system */
114
115         /* FILE INFO */
116         MM_MESSAGE_FILEINFO_RESERVED = 0x700,           /**< Reserved message for File Info */
117
118         MM_MESSAGE_NUM,                                 /**< The number of the messages */
119 };
120
121
122 /**
123  * Union type of 'MMMessageParamType' structure. Please add type when you make new union type of MMMessageParamType
124  */
125 enum MMMessageUnionType {
126         MM_MSG_UNION_CODE,              /**< Default */
127         MM_MSG_UNION_STATE,
128         MM_MSG_UNION_TIME,
129         MM_MSG_UNION_CONNECTION,
130         MM_MSG_UNION_FIRMWARE,
131         MM_MSG_UNION_RTPSENDER_REPORT,
132         MM_MSG_UNION_RTPRECEIVER_REPORT,
133         MM_MSG_UNION_RTPSESSION_STATUS,
134         MM_MSG_UNION_SUBTITLE,
135         MM_MSG_UNION_RADIO_SCAN,
136         MM_MSG_UNION_RECORDING_STATUS,
137         MM_MSG_UNION_REC_VOLUME_DB,
138 };
139
140 /*
141  * Enumerations of code for MM_MESSAGE_STATE_INTERRUPTED messages type.
142  */
143 enum MMMessageInterruptedCode {
144         MM_MSG_CODE_INTERRUPTED_BY_MEDIA = 0,
145         MM_MSG_CODE_INTERRUPTED_BY_CALL_START,
146         MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG,
147         MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT,
148         MM_MSG_CODE_INTERRUPTED_BY_ALARM_START,
149         MM_MSG_CODE_INTERRUPTED_BY_ALARM_END,
150         MM_MSG_CODE_INTERRUPTED_BY_EMERGENCY_START,
151         MM_MSG_CODE_INTERRUPTED_BY_EMERGENCY_END,
152         MM_MSG_CODE_INTERRUPTED_BY_OTHER_PLAYER_APP,
153         MM_MSG_CODE_INTERRUPTED_BY_RESUMABLE_MEDIA,
154 };
155
156 /*
157  * Enumerations of code for MM_MESSAGE_SOUND_PCM_CAPTURE_RESTRICTED messages type.
158  */
159 enum MMMessagePcmCaptureCode {
160         MM_MSG_CODE_PCM_CAPTURE_RESTRICTED = 0,
161         MM_MSG_CODE_PCM_CAPTURE_ALLOWED,
162 };
163
164 /**
165  * Message callback function type.
166  */
167 typedef int     (*MMMessageCallback) (int id, void *param, void *user_param);
168
169 /**
170  * Message Parameter.
171  */
172 typedef struct {
173         void *data;                             /**< Allocated data */
174
175 /**
176  * union.
177  */
178         int union_type;    /**< Type of union. Please refer MMMessageUnionType */
179
180         union {
181                 int code;                       /**< Error or warning code */
182 /**
183  * state.
184  */
185                 struct {
186                         int previous;           /**< Previous state */
187                         int current;            /**< Current state */
188                         int code;               /**< Error or warning code */
189                 } state;
190 /**
191  * time.
192  */
193                 struct {
194                         unsigned int elapsed;   /**< Elapsed time */
195                         unsigned int total;     /**< Total time */
196                 } time;
197 /**
198  * connection.
199  */
200                 struct {
201                         unsigned int buffering; /**< Buffering percent */
202                 } connection;
203
204 /**
205  * firmware.
206  */
207                 struct {
208                         int state;              /**< Update state*/
209                         int progress;           /**< Update progress percentage */
210                 } firmware;
211 /**
212  * RTPSenderReport.
213  */
214                 struct {
215                         unsigned char is_valid;                 /**< Structure is valid or not */
216                         //int64 ntptime;                        /**< The NTP timestamp indicates the point of time measured in wall clock time when this report was sent. */              unsigned int rtptime;                 /**< The RTP timestamp resembles the same time as the NTP timestamp ,but is measured in the same units and with the same random offset as the RTP timestamps in data packets */
217                         unsigned long long ntptime;             /**< The NTP timestamp indicates the point of time measured in wall clock time when this report was sent. */              unsigned int rtptime;                 /**< The RTP timestamp resembles the same time as the NTP timestamp ,but is measured in the same units and with the same random offset as the RTP timestamps in data packets */
218                         unsigned int packet_count;              /**< The sender's packet count totals up the number of RTP data packets transmitted by the sender since joining the RTP session */
219                         unsigned int octet_count;               /**< The total number of payload octets (i.e., not including the header or any padding) transmitted in RTP data packets by the sender since starting up transmission */
220                 } RTPSenderReport;      /**< RTPSenderReport message parameter structure. */
221 /**
222  * RTPReceiverReport.
223  */
224                 struct {
225                           unsigned char is_valid;               /**< Structure is valid or not */
226                           unsigned int ssrc;                    /**< The SSRC identifier of the sender whose reception is reported in this block . who the report is from */
227                           unsigned char fractionlost;           /**< The sender of the receiver report estimates the fraction of the RTP data packets from source SSRC_n that it assumes to be lost since it sent the previous SR or RR packet.*/
228                           unsigned int packetslost;             /**< The sender of a receiver report blocks also tries to estimate the total number of RTP data packets from source SSRC_n that have been lost since the beginning of reception. Packets that arrive late are not counted as lost, and the loss may be negative if there are duplicates. */
229                           unsigned int exthighestseq;           /**< The low 16 bits of the extended highest sequence number contain the highest sequence number received in an RTP data packet from source SSRC_n, and the most significant 16 bits extend that sequence number with the corresponding count of sequence number cycles. */
230                           unsigned int jitter;                  /**< An estimate of the statistical variance of the RTP data packet inter-arrival time, measured in timestamp units and expressed as an unsigned intege */
231                           unsigned int lsr;                     /**< Last SR Timestamp        */
232                           unsigned int dlsr;                    /**< Delay since last SR Timestamp    */
233                 } RTPReceiverReport;    /**< RTPReceiverReport message parameter structure. */
234 /**
235  * RTPSessionStatus.
236  */
237                 struct {
238                         double bandwidth;                       /**< Bandwidth Modifier*/
239                         double sender_fraction;                 /**< Fraction of packet loss by sender*/
240                         double receiver_fraction;               /**< Fraction of packet loss from Receiver*/
241                         double rtcp_bandwidth;                  /**< The total bandwidth that will be used for RTCP packets by all members of this session, in octets per second */
242                         double min_interval;                    /**< Minimum Interval */
243                         unsigned int sender_sources;            /**< Identifies the synchronization source from sender*/
244                         unsigned int active_sources;            /**< Identifies the Active source from sender*/
245                         unsigned int avg_rtcp_packet_size;      /**< Average RTCP packet size */
246                         unsigned int bye_members;               /**< BYE Packet members */
247                 } RTPSessionStatus;     /**< RTPSessionStatus message parameter structure. */
248 /**
249  * subtitle
250  */
251                 struct {
252                         unsigned long duration;         /**< duration */
253                 } subtitle;
254
255 /**
256  * Radio Scan Info
257  */
258                 struct {
259                         int frequency;                  /**< detected active frequency with MM_MESSAGE_RADIO_SCAN_INFO */
260                 } radio_scan;
261 /**
262  * Recording status
263  */
264                 struct {
265                         unsigned long long elapsed;          /**< Elapsed time (ms) */
266                         unsigned long long total;            /**< Total time */
267                         unsigned long long filesize;         /**< Recording File size (KB). An approximate value. */
268                         unsigned long long remained_time;    /**< Remained time (ms).
269                                                                   This is available if time limit is not set or
270                                                                   time limit is bigger than estimated remained time. */
271                 } recording_status;
272
273 /**
274  * Recording volume level - dB
275  */
276                 float rec_volume_dB;
277         };
278
279         int size;       /**< Allocated size of 'data' */
280
281         int reserved;   /**< reserved field for future use */
282 } MMMessageParamType;
283
284 /**
285  * @}
286  */
287
288 #ifdef __cplusplus
289         }
290 #endif
291
292
293 #endif  /* __MM_MESSAGE_H__ */