linphone-developers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Linphone-developers] Mediastreamer2: check if a filter is a source


From: damico
Subject: [Linphone-developers] Mediastreamer2: check if a filter is a source
Date: Mon, 09 Mar 2009 10:39:15 +0100
User-agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103)

Hi all,
I'm proposing a little modification to mediastreamer API:
In order to check if a MSFilter is a source we must look at ninputs member of the description: if it is 0 is a source, otherwise a filter. Maybe it is more useful check if a istance of a filter is used as a source or not. My idea is to check if "there is a configured input" instead to check if "an input could be configured". By the attached patch I could use the same filter as a filter or a source simply by liking or not to other filters. Moreover, ms_filter_is_source() could be used in the process callback of the filter too for choosing if we must produce samples of filter incoming samples.

I hope it could be useful...

Note: the patch preserves a backward compatibility with the old implementations.

Regards

--Michele


Index: include/mediastreamer2/msfilter.h
===================================================================
--- include/mediastreamer2/msfilter.h    (revision 313)
+++ include/mediastreamer2/msfilter.h    (working copy)
@@ -333,6 +333,15 @@
MSFilterId ms_filter_get_id(MSFilter *f);

/**
+ * Check if a filter is a source: no input are linked to that filter.
+ *
+ * @param f        A MSFilter object.
+ *
+ * Returns: TRUE if f is a source, FALSE otherwise.
+ */
+bool_t ms_filter_is_source(MSFilter *f);
+
+/**
 * Destroy a filter object.
 *
 * @param f        A MSFilter object.
Index: src/msticker.c
===================================================================
--- src/msticker.c    (revision 313)
+++ src/msticker.c    (working copy)
@@ -106,7 +106,7 @@
    MSFilter *f;
    for(;filters!=NULL;filters=filters->next){
        f=(MSFilter*)filters->data;
-        if (f->desc->ninputs==0){
+        if (ms_filter_is_source(f)){
            sources=ms_list_append(sources,f);
        }
    }
@@ -190,7 +190,7 @@

static void call_process(MSFilter *f){
    bool_t process_done=FALSE;
-    if (f->desc->ninputs==0 || f->desc->flags & MS_FILTER_IS_PUMP){
+    if (ms_filter_is_source(f) || f->desc->flags & MS_FILTER_IS_PUMP){
        ms_filter_process(f);
    }else{
        while (ms_filter_inputs_have_data(f)) {
Index: src/msfilter.c
===================================================================
--- src/msfilter.c    (revision 313)
+++ src/msfilter.c    (working copy)
@@ -233,3 +233,14 @@
    if (f->notify!=NULL)
        f->notify(f->notify_ud,id,NULL);
}
+
+bool_t ms_filter_is_source(MSFilter *f){
+    int i;
+    for (i=0;i<f->desc->ninputs;++i){
+        if (f->inputs[i]){
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]