نحن ندرس محرك Mediastreamer2 VoIP. الجزء 12

مادة المقالة مأخوذة من قناة zen الخاصة بي .



في المقالة الأخيرة ، وعدت بالنظر في مسألة تقدير الحمل على المؤشر وطرق التعامل مع حمل الحوسبة المفرط في مشغل الوسائط. لكنني قررت أنه سيكون من المنطقي أكثر تغطية مشكلات تصحيح الفلاتر الحرفية المرتبطة بنقل البيانات ثم النظر في مشكلات تحسين الأداء فقط.


تصحيح مرشحات الحرف


بعد فحص آلية نقل البيانات في دفق الوسائط في مقال سابق ، سيكون من المنطقي التحدث عن الأخطار الكامنة فيها. تتمثل إحدى ميزات مبدأ "تدفق البيانات" في أن تخصيص الذاكرة من الكومة يحدث في عوامل التصفية الموجودة في مصدر دفق البيانات ، والفلاتر الموجودة في نهاية مسار الدفق تجعل الذاكرة خالية وتعود إلى كومة الذاكرة المؤقتة. بالإضافة إلى ذلك ، يمكن أن يحدث إنشاء بيانات جديدة وتدميرها في مكان ما في نقاط وسيطة. في الحالة العامة ، يتم تنفيذ تحرير الذاكرة بواسطة عامل التصفية الخاطئ الذي أنشأ كتلة البيانات.


, , , , . — , . , , — / .


, , ( ). "" "" . , . . "" , MS_TEE , . , : ms_free(). , , .. "". ( ) .


"" , . — . , . , , , "" , .


?


, top , .


, - , . , . , , ..


( ). Valgrind ( ) gcc MemorySanitizer - . , , .



, , . "" , , , . , , .


"" , , .


, . , .



. .



, F1...F4, , . , . , , N- . , MS_VOID_SOURCE. — . . .. .


, , , , "" , , . . , , . — , . - .


voidsourse:


, , , . , ( ). , . , , , "" . , . "" , . ( ). "" , .


-


. :


/*  iso_filter.h    . */

#ifndef iso_filter_h
#define iso_filter_h

/*   . */
#include <mediastreamer2/msfilter.h>

#define MY_ISO_FILTER_ID 1024

extern MSFilterDesc iso_filter_desc;

#endif

:


/*  iso_filter.c    . */

#include "iso_filter.h"

    static void
iso_init (MSFilter * f)
{
}
    static void
iso_uninit (MSFilter * f)
{
}

    static void
iso_process (MSFilter * f)
{
    mblk_t *im;

    while ((im = ms_queue_get (f->inputs[0])) != NULL)
    {
        ms_queue_put (f->outputs[0], copymsg (im));
        freemsg (im);
    }
}

static MSFilterMethod iso_methods[] = {
    {0, NULL}
};

MSFilterDesc iso_filter_desc = {
    MY_ISO_FILTER_ID,
    "iso_filter",
    "A filter that reads from input and copy to its output.",
    MS_FILTER_OTHER,
    NULL,
    1,
    1,
    iso_init,
    NULL,
    iso_process,
    NULL,
    iso_uninit,
    iso_methods
};

MS_FILTER_DESC_EXPORT (iso_desc)


, , ", ". . :


OrtpMemoryFunctions reserv;
OrtpMemoryFunctions my;

reserv.malloc_fun = ortp_malloc;
reserv.realloc_fun = ortp_realloc;
reserv.free_fun = ortp_free;

my.malloc_fun = &my_malloc;
my.realloc_fun = &my_realloc;
my.free_fun = &my_free;

ortp_set_memory_functions(&my);

, , . .


, . , , .


في المقالة التالية ، سننظر في مسألة تقدير الحمل على المؤشر وطرق التعامل مع حمل الحوسبة المفرط في مشغل الوسائط.


All Articles