# Filter API - manage mediastreamer2 filters.
[Mediastreamer2 API]

Filter API to manage mediastreamer2 filters. More...

## Defines
#define | MS_FILTER_GET_LATENCY MS_FILTER_BASE_METHOD(11,int)
## Typedefs
typedef void(* | MSFilterFunc )(struct _MSFilter *f)
typedef int(* | MSFilterMethodFunc )(struct _MSFilter *f, void *arg)
typedef void(* | MSFilterNotifyFunc )(void *userdata, struct _MSFilter *f, unsigned int id, void *arg)
typedef struct _MSFilterMethod | MSFilterMethod
typedef enum _MSFilterCategory | MSFilterCategory
typedef struct _MSFilterDesc | MSFilterDesc
typedef struct _MSFilter | MSFilter
typedef struct _MSConnectionPoint | MSConnectionPoint
typedef struct _MSConnectionHelper | MSConnectionHelper
## Functions
MS2_PUBLIC void | ms_filter_register (MSFilterDesc *desc)
MS2_PUBLIC MSFilterDesc * | ms_filter_get_encoder (const char *mime)
MS2_PUBLIC MSFilterDesc * | ms_filter_get_decoder (const char *mime)
MS2_PUBLIC MSFilter * | ms_filter_create_encoder (const char *mime)
MS2_PUBLIC MSFilter * | ms_filter_create_decoder (const char *mime)
MS2_PUBLIC bool_t | ms_filter_codec_supported (const char *mime)
MS2_PUBLIC MSFilter * | ms_filter_new (MSFilterId id)
MS2_PUBLIC MSFilter * | ms_filter_new_from_name (const char *name)
MS2_PUBLIC MSFilter * | ms_filter_new_from_desc (MSFilterDesc *desc)
MS2_PUBLIC int | ms_filter_link (MSFilter *f1, int pin1, MSFilter *f2, int pin2)
MS2_PUBLIC int | ms_filter_unlink (MSFilter *f1, int pin1, MSFilter *f2, int pin2)
MS2_PUBLIC int | ms_filter_call_method (MSFilter *f, unsigned int id, void *arg)
MS2_PUBLIC int | ms_filter_call_method_noarg (MSFilter *f, unsigned int id)
MS2_PUBLIC void | ms_filter_set_notify_callback (MSFilter *f, MSFilterNotifyFunc fn, void *userdata)
MS2_PUBLIC void | ms_filter_enable_synchronous_notifcations (MSFilter *f, bool_t yesno)
MS2_PUBLIC MSFilterId | ms_filter_get_id (MSFilter *f)
MS2_PUBLIC MSList * | ms_filter_find_neighbours (MSFilter *me)
MS2_PUBLIC void | ms_filter_destroy (MSFilter *f)
MS2_PUBLIC void | ms_connection_helper_start (MSConnectionHelper *h)
MS2_PUBLIC int | ms_connection_helper_link (MSConnectionHelper *h, MSFilter *f, int inpin, int outpin)
| Enter a MSFilter to be connected into the MSConnectionHelper object.
MS2_PUBLIC int | ms_connection_helper_unlink (MSConnectionHelper *h, MSFilter *f, int inpin, int outpin)
| Enter a MSFilter to be disconnected into the MSConnectionHelper object. Process exactly the same way as ms_connection_helper_link() but calls ms_filter_unlink() on the entered filters.
MS2_PUBLIC void | ms_filter_enable_statistics (bool_t enabled)
| Enable processing time measurements statistics for filters.
MS2_PUBLIC void | ms_filter_reset_statistics (void)
| Reset processing time statistics for filters.
MS2_PUBLIC const MSList * | ms_filter_get_statistics (void)
| Retrieves statistics for running filters. Returns a list of MSFilterStats.
MS2_PUBLIC void | ms_filter_log_statistics (void)
| Logs runtime statistics for running filters.

## Detailed Description

Filter API to manage mediastreamer2 filters.

This file provide the API needed to create, link, unlink, find and destroy filter.

It also provides definitions if you wish to implement your own filters.

## Define Documentation

#define MS_FILTER_GET_LATENCY MS_FILTER_BASE_METHOD(11,int)

Filters can return their latency in milliseconds (if known) using this method:

## Typedef Documentation

MSFilterFunc

Structure for filter's methods (init, preprocess, process, postprocess, uninit).

MSFilterMethodFunc

Structure for filter's methods used to set filter's options.

MSFilterNotifyFunc

Structure for filter's methods used as a callback to notify events.

MSFilterMethod

Structure for holding filter's methods to set filter's options.

MSFilterCategory

Structure to describe filter's category.

         MS_FILTER_OTHER
         MS_FILTER_ENCODER
         MS_FILTER_DECODER

MSFilterDesc

Structure for filter's description.

MSFilter

Structure to create/link/unlink/destroy filter's object.

MSConnectionPoint

Structure that represents a connection point of a MSFilter

MSConnectionHelper

Structure that holds data when using the ms_connection_helper_* functions.

## Function Documentation

MS2_PUBLIC void ms_filter_register | ( | MSFilterDesc * | desc | ) |

Register a filter description. (plugins use only!)

When you build your own plugin, this method will add the encoder or decoder to the internal list of supported codec. Then, this plugin can be used transparently from the application.

ms_filter_get_encoder, ms_filter_get_decoder, ms_filter_create_encoder, ms_filter_create_decoder and ms_filter_codec_supported can then be used as if the codec was internally. supported.

Parameters:

  | desc | a filter description.

MS2_PUBLIC MSFilterDesc* ms_filter_get_encoder | ( | const char * | mime | ) |

Retrieve encoders according to codec name.

Internal supported codecs: PCMU, PCMA, speex, gsm Existing Public plugins: iLBC

Parameters:

  | mime | A string indicating the codec.

Returns: a MSFilterDesc if successfull, NULL otherwise.

MS2_PUBLIC MSFilterDesc* ms_filter_get_decoder | ( | const char * | mime | ) |

Retrieve decoders according to codec name.

Internal supported codecs: PCMU, PCMA, speex, gsm Existing Public plugins: iLBC

Parameters:

  | mime | A string indicating the codec.

Returns: a MSFilterDesc if successfull, NULL otherwise.

MS2_PUBLIC MSFilter* ms_filter_create_encoder | ( | const char * | mime | ) |

Create encoder filter according to codec name.

Internal supported codecs: PCMU, PCMA, speex, gsm Existing Public plugins: iLBC

Parameters:

  | mime | A string indicating the codec.

Returns: a MSFilter if successfull, NULL otherwise.

MS2_PUBLIC MSFilter* ms_filter_create_decoder | ( | const char * | mime | ) |

Create decoder filter according to codec name.

Internal supported codecs: PCMU, PCMA, speex, gsm Existing Public plugins: iLBC

Parameters:

  | mime | A string indicating the codec.

Returns: a MSFilter if successfull, NULL otherwise.

MS2_PUBLIC bool_t ms_filter_codec_supported | ( | const char * | mime | ) |

Check if a encode or decode filter exists for a codec name.

Internal supported codecs: PCMU, PCMA, speex, gsm Existing Public plugins: iLBC

Parameters:

  | mime | A string indicating the codec.

Returns: TRUE if successfull, FALSE otherwise.

MS2_PUBLIC MSFilter* ms_filter_new | ( | MSFilterId | id | ) |

Create decoder filter according to a filter's MSFilterId.

Parameters:

  | id | A MSFilterId identifier for the filter.

Returns: a MSFilter if successfull, NULL otherwise.

MS2_PUBLIC MSFilter* ms_filter_new_from_name | ( | const char * | name | ) |

Create decoder filter according to a filter's name.

Parameters:

  | name | A name for the filter.

Returns: a MSFilter if successfull, NULL otherwise.

MS2_PUBLIC MSFilter* ms_filter_new_from_desc | ( | MSFilterDesc * | desc | ) |

Create decoder filter according to a filter's description.

The primary use is to create your own filter's in your application and avoid registration inside mediastreamer2.

Parameters:

  | desc | A MSFilterDesc for the filter.

Returns: a MSFilter if successfull, NULL otherwise.

MS2_PUBLIC int ms_filter_link | ( | MSFilter * | f1,
|  | int | pin1,
|  | MSFilter * | f2,
|  | int | pin2 |
| ) |  |  |

Link one OUTPUT pin from a filter to an INPUT pin of another filter.

All data coming from the OUTPUT pin of one filter will be distributed to the INPUT pin of the second filter.

Parameters:

  | f1 | A MSFilter object containing the OUTPUT pin
  | pin1 | An index of an OUTPUT pin.
  | f2 | A MSFilter object containing the INPUT pin
  | pin2 | An index of an INPUT pin.

Returns: 0 if sucessful, -1 otherwise.

MS2_PUBLIC int ms_filter_unlink | ( | MSFilter * | f1,
|  | int | pin1,
|  | MSFilter * | f2,
|  | int | pin2 |
| ) |  |  |

Unlink one OUTPUT pin from a filter to an INPUT pin of another filter.

Parameters:

  | f1 | A MSFilter object containing the OUTPUT pin
  | pin1 | An index of an OUTPUT pin.
  | f2 | A MSFilter object containing the INPUT pin
  | pin2 | An index of an INPUT pin.

Returns: 0 if sucessful, -1 otherwise.

MS2_PUBLIC int ms_filter_call_method | ( | MSFilter * | f,
|  | unsigned int | id,
|  | void * | arg |
| ) |  |  |

Call a filter's method to set or get options.

Parameters:

  | f | A MSFilter object.
  | id | A private filter ID for the option.
  | arg | A private user data for the filter.

Returns: 0 if successfull, -1 otherwise.

MS2_PUBLIC int ms_filter_call_method_noarg | ( | MSFilter * | f,
|  | unsigned int | id |
| ) |  |  |

Call a filter's method to set options.

Parameters:

  | f | A MSFilter object.
  | id | A private filter ID for the option.

Returns: 0 if successfull, -1 otherwise.

MS2_PUBLIC void ms_filter_set_notify_callback | ( | MSFilter * | f,
|  | MSFilterNotifyFunc | fn,
|  | void * | userdata |
| ) |  |  |

Set a callback on filter's to be informed of private filter's event. This callback is called from the filter's MSTicker, unless a global event queue is created to receive all filter's notification asynchronously. See ms_event_queue_new() for details.

Parameters:

  | f | A MSFilter object.
  | fn | A MSFilterNotifyFunc that will be called.
  | userdata | A pointer to private data.

MS2_PUBLIC void ms_filter_enable_synchronous_notifcations | ( | MSFilter * | f,
|  | bool_t | yesno |
| ) |  |  |

Forces the filter to synchronously send notifications, that is the notify callback will be called from MSTicker thread instead of being run by a MSEventQueue.

MS2_PUBLIC MSFilterId ms_filter_get_id | ( | MSFilter * | f | ) |

Get MSFilterId's filter.

Parameters:

  | f | A MSFilter object.

Returns: MSFilterId if successfull, -1 otherwise.

MS2_PUBLIC MSList* ms_filter_find_neighbours | ( | MSFilter * | me | ) |

Obtain the list of current filter's neighbours, ie filters that are part of same graph.

Returns: a MSList of MSFilter, that needs to be freed by the caller when no more needed.

MS2_PUBLIC void ms_filter_destroy | ( | MSFilter * | f | ) |

Destroy a filter object.

Parameters:

  | f | A MSFilter object.

MS2_PUBLIC void ms_connection_helper_start | ( | MSConnectionHelper * | h | ) |

Initialize a MSConnectionHelper.

Parameters:

  | h | A MSConnectionHelper, usually (but not necessarily) on stack

MS2_PUBLIC int ms_connection_helper_link | ( | MSConnectionHelper * | h,
|  | MSFilter * | f,
|  | int | inpin,
|  | int | outpin |
| ) |  |  |

Enter a MSFilter to be connected into the MSConnectionHelper object.

This functions enters a MSFilter to be connected into the MSConnectionHelper object and connects it to the last entered if not the first one. The MSConnectionHelper is useful to reduce the amount of code necessary to create graphs in case the connections are made in an ordered manner and some filters are present conditionally in graphs. For example, instead of writing

     ms_filter_link(f1,0,f2,1);
     ms_filter_link(f2,0,f3,0);
     ms_filter_link(f3,1,f4,0);

You can write:

     MSConnectionHelper h;
     ms_connection_helper_start(&h);
     ms_connection_helper_link(&h,f1,-1,0);
     ms_connection_helper_link(&h,f2,1,0);
     ms_connection_helper_link(&h,f3,0,1);
     ms_connection_helper_link(&h,f4,0,-1);

Which is a bit longer to write here, but now imagine f2 needs to be present in the graph only in certain conditions: in the first case you have rewrite the two first lines, in the second case you just need to replace the fourth line by:

     if (my_condition) ms_connection_helper_link(&h,f2,1,0);

Parameters:

  | h | a connection helper
  | f | a MSFilter
  | inpin | an input pin number with which the MSFilter needs to connect to previously entered MSFilter
  | outpin | an output pin number with which the MSFilter needs to be connected to the next entered MSFilter

Returns: the return value of ms_filter_link() that is called internally to this function.