leidiges Thema "buffer empty"

  • Hi,


    habe immer noch keine Lösung gefunden dazu.
    Da habe ich mal gesucht wo es herrührt, es scheit der VDR zu sein, desse Buffer leerlaufen.


    Code
    in ./tools.h
    fand ich das
    ...
    #define MEGABYTE(n) ((n) * 1024 * 1024)
    ...
    
    
    das wird wieder in 
    ./transfer.c verwendet...
    und noch woanderst


    Jetzt meine Frage, wie könnte ich den Buffer vergrößern?
    Irgendwie ist da immer noch das n, woher das herkommt konnte ich nicht so recht finden.


    Denn beim MPlayer ruckelt es immer so nach ca. 2min, dann hat der VDR ca. 50% CPU, da kommt der buffer empty und das alle Nase lang.

    Gruß Martin (linuxdep)

  • Hi,


    such mal in transfer.c nach:


    if (!gotBufferReserve && Setup.BufferReserve) {


    (bei Dir wird das Setup.BufferReserve fehlen ;o))


    und entkommentiere diese Funktion.
    Damit wird,wenn Zeit da ist, ein Reserve Buffer
    angelegt.


    Grüße,
    Reinhard

  • Danke erst mal für den Tip...
    Aber bei mir ist nur das drin?

    Code
    MP:/usr/local/src/VDR# grep gotBufferReserve transfer.*
    transfer.c:  gotBufferReserve = false;
    transfer.c:        if (!gotBufferReserve) {
    transfer.c:              gotBufferReserve = true;
    transfer.h:  bool gotBufferReserve;
    Binary file transfer.o matches


    nutze VDR 1.1.25 mit Elchi3 und DVB Treibern vom 04.02.2003 (cvs)
    Weiß nicht, jedenfalls sieht es nicht so aus wie du geschrieben hast?
    Oder kann ich einfach das gotBufferReserve = false in ein true ändern?


    Ah ja, bei der mailinglist hast auch geantwortet ;D
    Habe mich da mal angemeldet, dort tummeln sich ja wohl die Entwickler, also am Puls der Zeit...aber mein englisch ist nicht so toll, aber dann muß ich öfters mal im gelben Buch suchen :]

    Gruß Martin (linuxdep)

    Einmal editiert, zuletzt von linuxdep ()

  • Hi,


    Ja, klar ist der Aufruf etwas anders. Ich schrieb ja
    Setup.blablabal würde bei Dir fehlen (das ist ein
    Mod von mir ;o))


    Irgendwo VOR dem


    if (!gotBufferReserve) {


    ist ein /* das muss weg


    Am Ende der Funktion ist ein */ dass muß auch weg.


    Das /* hier viel code */


    kommentiert die ganze Passage aus. Wobei // nur die
    eine Zeile auskommentiert.


    Mach mal transfer.c mit einem Editor auf und suche
    nach dem obigen. (grep nutzt Dir zum ändern eh
    nichts ;o))



    Danach abspeichern und vdr neu kompilieren.


    Die Funktion sieht in etwa so aus:


    while (active) {


    //XXX+ Maybe we need this to avoid "buffer empty" log messages from the driver.
    if (!gotBufferReserve && Setup.BufferReserve) {
    if (ringBuffer->Available() < 4 * MAXFRAMESIZE) {
    usleep(100000); // allow the buffer to collect some reserve
    isyslog("reserving buffer");
    continue;
    }
    else
    gotBufferReserve = true;
    }


    Grüße,
    Reinhard

  • Danke, das mit den /* komentar .../*
    war mir nicht bewußt :( aber jetzt schon... :]
    dank deiner Hilfe, aber was macht dein mod noch so alles? Kann man das auch irgendwo runterladen dein mod?


    Das mit dem grep ist mir schon klar, wollte doch nur wissen was wo drin ist, weil ich deine Zeile nicht gefunden hatte so wie angegeben...


    Warum ist das denn auskommentiert, bringt das an anderer stelle etwa Nachteile?

    Gruß Martin (linuxdep)

  • Hi,


    Klick mal auf www unter meinem Namen. Da gibt
    es unter downloads ein altes Readme. Aber es ist
    schon jede Menge (zum Teil habe ich es auch hier
    im Forum gepostet) Neues dazu gekommen.


    Nächstes Releasedate kann ich leider noch nicht
    sagen.


    > Warum ist das denn auskommentiert, bringt das an
    anderer stelle etwa Nachteile?


    Klaus versucht immer mit minimalen System-
    anforderungen auszukommen. Einige User haben hier
    Probleme mit hoher CPU Last. Warum daß so ist,
    ist nicht ganz klar. Da es *meistens* ohne Reserve
    Buffer klappt, ist es standardmäßig auskommentiert.


    Ich habe die Option setupable gemacht, weil das
    AC3overDVB den Reservebuffer dringend braucht.


    Grüße,
    Reinhard

  • ah so, schaue ich mir mal an...


    aber das war es nicht, habe es rausgenommen, aber es liegt wohl daran, das der VDR ab und an auf 30-50% CPU Last kommt und dann nicht mehr viel für den MPlayer übrig bleibt... bleibt wohl doch nur SLOW_CPU Option im mplayer.sh.conf


    warten wir mal, womöglich ist das Problem ja bald geschichte...

    Gruß Martin (linuxdep)

  • Ich nochmal...


    Jetzt ist das mit dem buffer empty wirklich nicht mehr aufgetaucht...prima, jedoch war das wohl nicht alleine die Ursache, sondern nur eine weitere Meldung.


    Ursache scheint es der VDR selber zu sein, der durch die hohe CPU Last alles kurze Zeit anhält... arbeite Klaus da schon dran? oder ist ihm das Überhaupt bekannt? Möchte meinen, die vorige (1.1.23) hatte das problem nicht, da konnte ich die DivX flüssig schauen mit meinem P3 1,1GHz.


    Nur mal so als Anmerkung meiner Tests heute...

    Gruß Martin (linuxdep)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!