Zugriff auf OSD mit oder ohne abfrage

  • In Skins wird öfters auf OSD-Funktionen zugegriffen (Osd->). Beispiele:

    Code
    Osd->DestroyPixmap(Pixmap);
    Osd->Flush();

    Was mich wundert, ist, dass manchmal ein if (Osd) vorher prüft, ob ein OSD existiert und manchmal nicht.

    Ist die Prüfung nötig oder nicht?

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Hm... also kann man Prüfen oder es auch lassen. Aber wenn, dann hätte ich es doch gerne Einheitlich...

    Aber... Die Vergangenheit hat schon anderes bewiesen.

    Gibt es dazu ein Beispiel?

    Ich tendiere dazu die Prüfungen raus zu nehmen, wenn sie nicht nötig sind

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Grundsätzlich würde ich einen Pointer nur dann nicht prüfen, wenn du ihn vollständig durch deinen eigenen Code im Griff hast.

    Wenn er von irgendwo her kommt, oder von irgendwo geändert werden kann, besser vor jedem Zugriff prüfen.

    Selbst wenn es aktuell geht, weißt du nicht, was sich zukünftig im fremden Code ändern könnte. Der null-ptr Zugriff würde dann aber aus deinem Code kommen.

    just my two cents

    VDR

    Server: Ubuntu 24.04 headless VDR im LXC Container, Plugins: satip (Octopus NET SL SX8), live, epgsearch, epg2vdr, markad

    Clients: LibreELEC auf RasPi3 und RasPi 3+

  • OK, dann werde ich die fehlenden if (Osd) wohl nachrüsten.

    Hab mich halt gewundert, dass mal abgefragt wird und mal nicht

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Gibt es dazu ein Beispiel?

    Konkretes Beispiel habe ich jetzt nicht. VDR-konform bräuchtest Du es nicht, ein Augabegerät muss ein OSD zur Verfügung stellen. Aber warum sollte man sich da eine Baustelle aufmachen, die Abfrage kostet ja nicht viel.

    Hab mich halt gewundert, dass mal abgefragt wird und mal nicht

    Ja, das ist halt Historie, meistens ist es da nachgerüstet worden, wo es auffällig war.

    Grüße

    kamel5

    VDR 2.7.3: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 40 Kernel 6.12 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • cOsdProvider::NewOsd() liefert *immer* einen gültigen Pointer zurück (notfalls auf ein dummy OSD).

    Wer also hiermit einen Pointer auf ein cOsd erzeugt, braucht diesen nicht auf NULL zu prüfen, solange er sicher sein kann, dass der Pointer von keinem anderen deleted und auf NULL gesetzt wird.

  • kls Vielen Dank für die Erklärung!

    :lovevdr

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Noch mal kurz:

    C++
        osd = cOsdProvider::NewOsd(left, top);  // Is always a valid pionter
        if (osd) {
            tArea Area = {0, 0, width, height, 32};
            if (osd->SetAreas(&Area, 1) == oeOk) {
                return;
            }
        }
        esyslog("flatPlus: Create osd FAILED left: %d top: %d width: %d height: %d", left, top, width, height);
        return;

    Ist doch auch quatsch, wenn da immer ein Zeiger zurück gegeben wird. Oder sehe ich das falsch?

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!