msinterfaces.h 11.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*
mediastreamer2 library - modular sound and video processing and streaming
Copyright (C) 2010  Simon MORLAT (simon.morlat@linphone.org)

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 19 20 21 22
*/

#ifndef msinterfaces_h
#define msinterfaces_h

Simon Morlat's avatar
Simon Morlat committed
23 24
#include "mediastreamer2/mscodecutils.h"

Ghislain MARY's avatar
Ghislain MARY committed
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
typedef struct _MSVideoCodecSLI MSVideoCodecSLI;

struct _MSVideoCodecSLI {
	uint16_t first;
	uint16_t number;
	uint8_t picture_id;
};

typedef struct _MSVideoCodecRPSI MSVideoCodecRPSI;

struct _MSVideoCodecRPSI {
	uint8_t *bit_string;
	uint16_t bit_string_len;
};

40 41 42 43 44 45 46
typedef struct _MSVideoEncoderPixFmt MSVideoEncoderPixFmt;

struct _MSVideoEncoderPixFmt {
	uint32_t pixfmt;
	bool_t supported;
};

47 48 49 50
/**
 * Interface definition for video display filters.
**/

51 52 53 54 55 56 57
typedef struct _MSVideoDisplayDecodingSupport MSVideoDisplayDecodingSupport;

struct _MSVideoDisplayDecodingSupport {
	const char *mime_type;	/**< Input parameter to asking if the display supports decoding of this mime type */
	bool_t supported;	/**< Output telling whether the display supports decoding to the specified mime type */
};

58 59
/** whether the video window should be resized to the stream's resolution*/
#define MS_VIDEO_DISPLAY_ENABLE_AUTOFIT \
unknown's avatar
unknown committed
60
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,0,int)
61 62

/**position of the local view */
63
#define MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE \
64 65 66 67 68 69 70 71
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,1,int)

/**whether the video should be reversed as in mirror */
#define MS_VIDEO_DISPLAY_ENABLE_MIRRORING \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,2,int)

/**returns a platform dependant window id where the video is drawn */
#define MS_VIDEO_DISPLAY_GET_NATIVE_WINDOW_ID \
72
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,3,void*)
73

74

unknown's avatar
unknown committed
75 76
/**Sets an external native window id where the video is to be drawn */
#define MS_VIDEO_DISPLAY_SET_NATIVE_WINDOW_ID \
77
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,4,void*)
unknown's avatar
unknown committed
78 79


80 81 82 83
/**scale factor of the local view */
#define MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_SCALEFACTOR \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,5,float)

Simon Morlat's avatar
Simon Morlat committed
84
/**Set the background colour for video window */
85 86 87
#define MS_VIDEO_DISPLAY_SET_BACKGROUND_COLOR \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,8,int[3])

88 89 90 91
/**Show video. Useful to free XV port */
#define MS_VIDEO_DISPLAY_SHOW_VIDEO \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,9,int)

92
#define MS_VIDEO_DISPLAY_ZOOM \
93 94
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,10,int[4])

95 96
/**Specifiy device orientation from portrait */
#define MS_VIDEO_DISPLAY_SET_DEVICE_ORIENTATION \
97
   MS_FILTER_METHOD(MSFilterVideoDisplayInterface,11,int)
Simon Morlat's avatar
Simon Morlat committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

/**
  * Interface definitions for players
**/

enum _MSPlayerState{
	MSPlayerClosed,
	MSPlayerPaused,
	MSPlayerPlaying
};

typedef enum _MSPlayerState MSPlayerState;

/**open a media file*/
#define MS_PLAYER_OPEN \
113
	MS_FILTER_METHOD(MSFilterPlayerInterface,0,const char )
Simon Morlat's avatar
Simon Morlat committed
114 115 116 117 118 119 120 121 122 123 124 125 126 127

#define MS_PLAYER_START \
	MS_FILTER_METHOD_NO_ARG(MSFilterPlayerInterface,1)

#define MS_PLAYER_PAUSE \
	MS_FILTER_METHOD_NO_ARG(MSFilterPlayerInterface,2)

#define MS_PLAYER_CLOSE \
	MS_FILTER_METHOD_NO_ARG(MSFilterPlayerInterface,3)

#define MS_PLAYER_SEEK_MS \
	MS_FILTER_METHOD(MSFilterPlayerInterface,4,int)

#define MS_PLAYER_GET_STATE \
128
	MS_FILTER_METHOD(MSFilterPlayerInterface,5,MSPlayerState)
129 130 131 132 133

/**enable loop mode. Argument is a pause interval in milliseconds to be observed between end of play and resuming at start. A value of -1 disables loop mode*/
#define MS_PLAYER_SET_LOOP \
	MS_FILTER_METHOD(MSFilterPlayerInterface,6,int)

134 135 136 137
#define MS_PLAYER_GET_DURATION \
	MS_FILTER_METHOD(MSFilterPlayerInterface,7,int)

#define MS_PLAYER_GET_CURRENT_POSITION \
138
	MS_FILTER_METHOD(MSFilterPlayerInterface,8,int64_t)
139

140 141 142
#define MS_PLAYER_EOF \
	MS_FILTER_EVENT_NO_ARG(MSFilterPlayerInterface,0)

143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

/**
  * Interface definitions for recorders
**/

enum _MSRecorderState{
	MSRecorderClosed,
	MSRecorderPaused,
	MSRecorderRunning
};

typedef enum _MSRecorderState MSRecorderState;

/**open a media file for recording*/
#define MS_RECORDER_OPEN \
	MS_FILTER_METHOD(MSFilterRecorderInterface,0,const char )

#define MS_RECORDER_START \
	MS_FILTER_METHOD_NO_ARG(MSFilterRecorderInterface,1)

#define MS_RECORDER_PAUSE \
	MS_FILTER_METHOD_NO_ARG(MSFilterRecorderInterface,2)

#define MS_RECORDER_CLOSE \
	MS_FILTER_METHOD_NO_ARG(MSFilterRecorderInterface,3)

#define MS_RECORDER_GET_STATE \
	MS_FILTER_METHOD(MSFilterRecorderInterface,5,MSRecorderState)
171

172 173
#define MS_RECORDER_NEEDS_FIR \
	MS_FILTER_EVENT_NO_ARG(MSFilterRecorderInterface,0)
Simon Morlat's avatar
Simon Morlat committed
174

175 176 177 178 179 180
#define MS_RECORDER_SET_MAX_SIZE \
	MS_FILTER_METHOD(MSFilterRecorderInterface,6,int)

#define MS_RECORDER_MAX_SIZE_REACHED \
	MS_FILTER_EVENT_NO_ARG(MSFilterRecorderInterface,1)

Simon Morlat's avatar
Simon Morlat committed
181

182
/** Interface definitions for echo cancellers */
183 184 185 186 187 188 189 190 191 192 193 194

/** sets the echo delay in milliseconds*/
#define MS_ECHO_CANCELLER_SET_DELAY \
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,0,int)

#define MS_ECHO_CANCELLER_SET_FRAMESIZE \
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,1,int)

/** sets tail length in milliseconds */
#define MS_ECHO_CANCELLER_SET_TAIL_LENGTH \
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,2,int)

jehan's avatar
jehan committed
195 196 197 198 199 200
/** put filter in bypass mode */
#define MS_ECHO_CANCELLER_SET_BYPASS_MODE \
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,3,bool_t)
/** get filter bypass mode */
#define MS_ECHO_CANCELLER_GET_BYPASS_MODE \
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,4,bool_t)
201

202 203
/** retrieve echo canceller internal state, as a base64 encoded string */
#define MS_ECHO_CANCELLER_GET_STATE_STRING \
204
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,5,char *)
205 206 207

/** restore a previous state suppling the echo canceller config as base64 encoded string */
#define MS_ECHO_CANCELLER_SET_STATE_STRING \
208
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,6, const char)
209

210 211


212
/** Event definitions for video decoders */
213
#define MS_VIDEO_DECODER_DECODING_ERRORS \
214
	MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface,0)
215
#define MS_VIDEO_DECODER_FIRST_IMAGE_DECODED \
216 217 218
	MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface,1)
#define MS_VIDEO_DECODER_SEND_PLI \
	MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface, 2)
Ghislain MARY's avatar
Ghislain MARY committed
219
#define MS_VIDEO_DECODER_SEND_SLI \
220
	MS_FILTER_EVENT(MSFilterVideoDecoderInterface, 3, MSVideoCodecSLI)
Ghislain MARY's avatar
Ghislain MARY committed
221
#define MS_VIDEO_DECODER_SEND_RPSI \
222
	MS_FILTER_EVENT(MSFilterVideoDecoderInterface, 4, MSVideoCodecRPSI)
223 224
#define MS_VIDEO_DECODER_SEND_FIR \
	MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface, 5)
225 226

/** Method definitions for video decoders */
227
#define MS_VIDEO_DECODER_RESET_FIRST_IMAGE_NOTIFICATION \
228
	MS_FILTER_METHOD_NO_ARG(MSFilterVideoDecoderInterface, 5)
229
#define MS_VIDEO_DECODER_ENABLE_AVPF \
230 231
	MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 6, bool_t)
#define MS_VIDEO_DECODER_SUPPORT_RENDERING \
232
	MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 7, MSVideoDisplayDecodingSupport)
233 234
#define MS_VIDEO_DECODER_FREEZE_ON_ERROR \
	MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 8, bool_t)
235 236
#define MS_VIDEO_DECODER_RECOVERED_FROM_ERRORS \
	MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface, 9)
237 238
#define MS_VIDEO_DECODER_RESET \
	MS_FILTER_METHOD_NO_ARG(MSFilterVideoDecoderInterface, 10)
239 240
#define MS_VIDEO_DECODER_FREEZE_ON_ERROR_ENABLED \
	MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 11, bool_t)
241

242

jehan's avatar
jehan committed
243

244 245 246
/** Interface definitions for video capture */
#define MS_VIDEO_CAPTURE_SET_DEVICE_ORIENTATION \
	MS_FILTER_METHOD(MSFilterVideoCaptureInterface,0,int)
247 248
#define MS_VIDEO_CAPTURE_GET_CAMERA_SENSOR_ROTATION \
	MS_FILTER_METHOD(MSFilterVideoCaptureInterface, 1, int)
249

250 251 252 253
/** Interface definitions for audio decoder */

#define MS_AUDIO_DECODER_HAVE_PLC \
	MS_FILTER_METHOD(MSFilterAudioDecoderInterface,0,int)
254

255
#define MS_DECODER_HAVE_PLC MS_AUDIO_DECODER_HAVE_PLC /*for backward compatibility*/
Yann Diorcet's avatar
Yann Diorcet committed
256

Simon Morlat's avatar
Simon Morlat committed
257
#define MS_AUDIO_DECODER_SET_RTP_PAYLOAD_PICKER \
258
	MS_FILTER_METHOD(MSFilterAudioDecoderInterface,1,MSRtpPayloadPickerContext)
Simon Morlat's avatar
Simon Morlat committed
259

260
#define MS_DECODER_ENABLE_PLC MS_FILTER_METHOD(MSFilterAudioDecoderInterface,2,int)
Ghislain MARY's avatar
Ghislain MARY committed
261 262 263 264
/**
 * Interface definition for video encoders.
**/

265
#define MS_VIDEO_ENCODER_SUPPORTS_PIXFMT \
266
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 0, MSVideoEncoderPixFmt)
267 268 269
/* request a video-fast-update (=I frame for H263,MP4V-ES) to a video encoder*/
#define MS_VIDEO_ENCODER_REQ_VFU \
	MS_FILTER_METHOD_NO_ARG(MSFilterVideoEncoderInterface, 1)
270
#define MS_VIDEO_ENCODER_GET_CONFIGURATION_LIST \
271
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 2, const MSVideoConfiguration *)
272
#define MS_VIDEO_ENCODER_SET_CONFIGURATION \
273
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 3, const MSVideoConfiguration )
274 275 276 277
#define MS_VIDEO_ENCODER_NOTIFY_PLI \
	MS_FILTER_METHOD_NO_ARG(MSFilterVideoEncoderInterface, 4)
#define MS_VIDEO_ENCODER_NOTIFY_FIR \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 5, uint8_t *)
Ghislain MARY's avatar
Ghislain MARY committed
278
#define MS_VIDEO_ENCODER_NOTIFY_SLI \
279
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 6, MSVideoCodecSLI)
Ghislain MARY's avatar
Ghislain MARY committed
280
#define MS_VIDEO_ENCODER_NOTIFY_RPSI \
281
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 7, MSVideoCodecRPSI)
282 283
#define MS_VIDEO_ENCODER_ENABLE_AVPF \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 8, bool_t)
284 285 286 287
#define MS_VIDEO_ENCODER_SET_CONFIGURATION_LIST \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 9, const MSVideoConfiguration *)
#define MS_VIDEO_ENCODER_IS_HARDWARE_ACCELERATED \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 10, bool_t)
288

289 290
/** Interface definitions for audio capture */
/* Start numbering from the end for hacks */
291
#define MS_AUDIO_CAPTURE_SET_VOLUME_GAIN \
292
	MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 0, float)
293
#define MS_AUDIO_CAPTURE_GET_VOLUME_GAIN \
294
	MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 1, float)
295 296
#define MS_AUDIO_CAPTURE_FORCE_SPEAKER_STATE \
	MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 255, bool_t)
297

298
/** Interface definitions for audio playback */
299 300 301 302 303 304
enum _MSAudioRoute{
	MSAudioRouteEarpiece,
	MSAudioRouteSpeaker
};
typedef enum _MSAudioRoute MSAudioRoute;

305
#define MS_AUDIO_PLAYBACK_SET_VOLUME_GAIN \
306
	MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 0, float)
307
#define MS_AUDIO_PLAYBACK_GET_VOLUME_GAIN \
308
	MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 1, float)
309 310
#define MS_AUDIO_PLAYBACK_SET_ROUTE \
	MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 2, MSAudioRoute)
311 312
#define MS_AUDIO_PLAYBACK_MUTE \
	MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 3, int)
313

314 315 316
/** Interface definitions for audio encoder */
#define MS_AUDIO_ENCODER_SET_PTIME \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,0,int)
317

318 319 320
#define MS_AUDIO_ENCODER_GET_PTIME \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,1,int)

Simon Morlat's avatar
Simon Morlat committed
321 322 323
/* Enable encoder's builtin forward error correction, if available*/
#define MS_AUDIO_ENCODER_ENABLE_FEC \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,2,int)
324

Simon Morlat's avatar
Simon Morlat committed
325 326 327
/* Set the packet loss percentage reported, so that encoder may compensate if forward-correction is enabled and implemented.*/
#define MS_AUDIO_ENCODER_SET_PACKET_LOSS \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,3,int)
328

329 330 331 332
#define MS_AUDIO_ENCODER_CAP_AUTO_PTIME (1)

#define MS_AUDIO_ENCODER_GET_CAPABILITIES \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,4,int)
333 334 335 336 337

/** Interface definitions for void source/sink */
#define MS_VOID_SOURCE_SEND_SILENCE \
	MS_FILTER_METHOD(MSFilterVoidInterface, 0, bool_t)

338
#endif