Anpassung TVonscreen an variables OSD bei VDR 1.7.7/8

  • Hallo zusammen,


    ich möchte das TVonscreen Plugin an die aktuelle VDR Entwicklerversion
    anpassen um die Anzeige entsprechend der OSD-Auflösung anzupassen.


    hierzu habe ich, im ersten Schritt, folgende Funktionen zusammengehackt:


    int getTimelineWidth()
    {
    int Width;
    int Height;
    int tWidth;
    double Aspect;
    cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
    tWidth = floor((((Width * 90) / 100) * 7) / 100);
    return tWidth;
    }
    int getScheduleWidth()
    {
    int Width;
    int Height;
    int sWidth;
    double Aspect;
    cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
    sWidth = floor((((Width * 90) / 100) * 31) / 100);
    return sWidth;
    }



    Meine Idee war es, im folgenden Orginal-Code die Werte "45" durch
    getTimelineWidth() und die Werte "184" durch getScheduleWidth()
    zu ersetzen:




    static tArea Areas[NUMBER_OF_AREAS] =
    {
    #ifndef MULTINAMES
    { 8+45, 0, 8+45 + 188*2+184 - 1, 0 + 48/*20*/ - 1, 8 }, // NAMES_AREA
    #else
    { 8+45, 0, 8+45 + 184 - 1, 0 + 48/*20*/ - 1, 4 }, // NAME1_AREA
    { 8+45+188, 0, 8+45+188 + 184 - 1, 0 + 48/*20*/ - 1, 4 }, // NAME2_AREA
    { 8+45+188*2, 0, 8+45+188*2 + 184 - 1, 0 + 48/*20*/ - 1, 4 }, // NAME3_AREA
    #endif
    { 0, 0, 0 + 8+40 - 1, TL_YSTART + 384 - 1, 2 }, // TIMELINE_AREA
    { 8+45, TL_YSTART, 8+45 + 184 - 1, TL_YSTART + 384 - 1, 2 }, // SCHED1_AREA
    { 8+45+188, TL_YSTART, 8+45+188 + 184 - 1, TL_YSTART + 384 - 1, 2 }, // SCHED2_AREA
    { 8+45+188*2, TL_YSTART, 8+45+188*2 + 184 - 1, TL_YSTART + 384 - 1, 2 }, // SCHED3_AREA
    { 50, 384+TL_YSTART+8, 50 + 8+45+188*2+184-101 - 1, 384+TL_YSTART+8 + 20 - 1, 2 }, // CONTROL_AREA
    };



    Die Funktionen geben die gewünschten Werte zurück aber leider führt die
    Ändereung im obigen code zu einem Segfault :(


    Ersetze ich die Werte durch fix-Werte, die einer OSD-Größe von
    1152x648 (90% 1280x720) entsprechen, so funktioniert das ganze
    einwandfrei.


    Da ich so gut wie keine Ahnung von C-Programmierung habe benötige ich
    ein Tip von Euch :)


    Wäre klasse, wenn mir jemand weiterhelfen könnte.


    bis denn


    Andreas

  • Hallo zusammen,


    hat keiner einen Tip ?


    Mit statischen Werten funktioniert alles wunderbar, und auch bei
    1280x720 OSD size bekomme ich dann nicht nur ein Mini-Bild aber
    dann ist das ganze eben auf diese Auflösung festgelegt :(


    bis denn


    Andreas

  • Kann es sein, dass der erste Aufruf von deinen Funktionen stattfindet bevor der VDR die Daten bereit stellt?


    ... ist aber nur ein Schuss ins blaue, wirklich viel Ahnung hab ich da nicht.

    Gruss
    SHF


  • Hallo SHF,


    es scheint wirklich so zu sein, dass


    cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);


    zum Zeitpunkt des Zugriffes durch meine Funktionen noch keine
    Werte zurückgeben kann, da das OSD noch nicht per newOsd()
    initialisiert wurde :(


    Muss wohl doch einiges umbauen.


    Danke für deine Antwort.


    Andreas

  • Na da hatte ich dann echt Glück beim Raten :hat3.

    Gruss
    SHF


  • Hallo zusammen,


    hier eine neue Version des Patches mit Font Anpassung in
    Abhängigkeit der OSD-Width. Leider noch nicht optimal,
    bei kleinen Auflösungen wird der Font zu klein und "blockig"
    muss ich noch mal überarbeiten.


    Achtung: wird die OSD-Auflösung im xine-plugin geändert das
    Menü komplett verlassen und erst danach das TVonscreen
    aufrufen, da es sonst zum Absturz kommen kann !


    bis denn


    Andreas

Jetzt mitmachen!

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