msinterfaces.h 9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
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
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#ifndef msinterfaces_h
#define msinterfaces_h

Ghislain MARY's avatar
Ghislain MARY committed
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
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;
};

38 39 40 41
/**
 * Interface definition for video display filters.
**/

42 43 44 45 46 47 48
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 */
};

49 50
/** whether the video window should be resized to the stream's resolution*/
#define MS_VIDEO_DISPLAY_ENABLE_AUTOFIT \
unknown's avatar
unknown committed
51
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,0,int)
52 53

/**position of the local view */
54
#define MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE \
55 56 57 58 59 60 61 62 63 64
	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 \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,3,long)

65

unknown's avatar
unknown committed
66 67 68 69 70
/**Sets an external native window id where the video is to be drawn */
#define MS_VIDEO_DISPLAY_SET_NATIVE_WINDOW_ID \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,4,long)


71 72 73 74
/**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
75
/**Set the background colour for video window */
76 77 78
#define MS_VIDEO_DISPLAY_SET_BACKGROUND_COLOR \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,8,int[3])

79 80 81 82
/**Show video. Useful to free XV port */
#define MS_VIDEO_DISPLAY_SHOW_VIDEO \
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,9,int)

83
#define MS_VIDEO_DISPLAY_ZOOM \
84 85
	MS_FILTER_METHOD(MSFilterVideoDisplayInterface,10,int[4])

86 87
/**Specifiy device orientation from portrait */
#define MS_VIDEO_DISPLAY_SET_DEVICE_ORIENTATION \
88
   MS_FILTER_METHOD(MSFilterVideoDisplayInterface,11,int)
Simon Morlat's avatar
Simon Morlat committed
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

/**
  * Interface definitions for players
**/

enum _MSPlayerState{
	MSPlayerClosed,
	MSPlayerPaused,
	MSPlayerPlaying
};

typedef enum _MSPlayerState MSPlayerState;

/**open a media file*/
#define MS_PLAYER_OPEN \
104
	MS_FILTER_METHOD(MSFilterPlayerInterface,0,const char )
Simon Morlat's avatar
Simon Morlat committed
105 106 107 108 109 110 111 112 113 114 115 116 117 118

#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 \
119
	MS_FILTER_METHOD(MSFilterPlayerInterface,5,MSPlayerState)
120 121 122 123 124 125 126 127 128 129

/**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)

#define MS_PLAYER_EOF \
	MS_FILTER_EVENT_NO_ARG(MSFilterPlayerInterface,0)

#define MS_PLAYER_FORMAT_CHANGED\
	MS_FILTER_EVENT_NO_ARG(MSFilterPlayerInterface,1)
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157

/**
  * 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)
158 159


Simon Morlat's avatar
Simon Morlat committed
160 161


162
/** Interface definitions for echo cancellers */
163 164 165 166 167 168 169 170 171 172 173 174

/** 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
175 176 177 178 179 180
/** 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)
181

182 183 184 185 186 187 188 189
/** retrieve echo canceller internal state, as a base64 encoded string */
#define MS_ECHO_CANCELLER_GET_STATE_STRING \
	MS_FILTER_METHOD(MSFilterEchoCancellerInterface,5,char **)

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

190 191 192 193


/** Interface definitions for video decoders */
#define MS_VIDEO_DECODER_DECODING_ERRORS \
194
	MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface,0)
195
#define MS_VIDEO_DECODER_FIRST_IMAGE_DECODED \
196 197 198
	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
199 200 201 202
#define MS_VIDEO_DECODER_SEND_SLI \
	MS_FILTER_EVENT(MSFilterVideoDecoderInterface, 3, const MSVideoCodecSLI *)
#define MS_VIDEO_DECODER_SEND_RPSI \
	MS_FILTER_EVENT(MSFilterVideoDecoderInterface, 4, const MSVideoCodecRPSI *)
203
#define MS_VIDEO_DECODER_RESET_FIRST_IMAGE_NOTIFICATION \
204
	MS_FILTER_METHOD_NO_ARG(MSFilterVideoDecoderInterface, 5)
205
#define MS_VIDEO_DECODER_ENABLE_AVPF \
206 207 208
	MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 6, bool_t)
#define MS_VIDEO_DECODER_SUPPORT_RENDERING \
	MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 7, MSVideoDisplayDecodingSupport*)
jehan's avatar
jehan committed
209

210 211 212
/** Interface definitions for video capture */
#define MS_VIDEO_CAPTURE_SET_DEVICE_ORIENTATION \
	MS_FILTER_METHOD(MSFilterVideoCaptureInterface,0,int)
213 214
#define MS_VIDEO_CAPTURE_GET_CAMERA_SENSOR_ROTATION \
	MS_FILTER_METHOD(MSFilterVideoCaptureInterface, 1, int)
215

216 217 218 219
/** Interface definitions for audio decoder */

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

221
#define MS_DECODER_HAVE_PLC MS_AUDIO_DECODER_HAVE_PLC /*for backward compatibility*/
Yann Diorcet's avatar
Yann Diorcet committed
222

Ghislain MARY's avatar
Ghislain MARY committed
223 224 225 226
/**
 * Interface definition for video encoders.
**/

227 228
#define MS_VIDEO_ENCODER_HAS_BUILTIN_CONVERTER \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 0, bool_t)
229 230 231
/* 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)
232 233 234 235
#define MS_VIDEO_ENCODER_GET_CONFIGURATION_LIST \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 2, const MSVideoConfiguration **)
#define MS_VIDEO_ENCODER_SET_CONFIGURATION \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 3, const MSVideoConfiguration *)
236 237 238 239
#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
240 241 242 243
#define MS_VIDEO_ENCODER_NOTIFY_SLI \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 6, const MSVideoCodecSLI *)
#define MS_VIDEO_ENCODER_NOTIFY_RPSI \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 7, const MSVideoCodecRPSI *)
244 245
#define MS_VIDEO_ENCODER_ENABLE_AVPF \
	MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 8, bool_t)
246

247 248 249 250 251
/** Interface definitions for audio capture */
/* Start numbering from the end for hacks */
#define MS_AUDIO_CAPTURE_FORCE_SPEAKER_STATE \
	MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 255, bool_t)

252 253 254
/** Interface definitions for audio encoder */
#define MS_AUDIO_ENCODER_SET_PTIME \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,0,int)
255

256 257 258
#define MS_AUDIO_ENCODER_GET_PTIME \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,1,int)

Simon Morlat's avatar
Simon Morlat committed
259 260 261
/* Enable encoder's builtin forward error correction, if available*/
#define MS_AUDIO_ENCODER_ENABLE_FEC \
	MS_FILTER_METHOD(MSFilterAudioEncoderInterface,2,int)
262

Simon Morlat's avatar
Simon Morlat committed
263 264 265
/* 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)
266
#endif