Posts by beta

    @giga_san: Schön, dass Du mitliest. Ich habe noch eine Idee, aber bevor ich das versuche möchte ich wissen, ob Du es schon probiert hast.

    1.) Der Intel-Treiber hat ein Backend für den Focus-Chip, der diesen offensichtlich auf auf PAL-Auflösung setzen kann (oder ist hier schon mein erster gedanklicher Fehler?). Wenn das funktioniert, kann man die Register des Focus doch auslesen und genau so zurückschreiben. Ich könnte hierzu meinen Source anpassen, so, dass er alles ausliest, speichert und auch z.B. aus einer Datei wieder zurückschreiben kann. Dieses Setting könnte man dann mit dem Framebuffer-Treiber laden. Ich befürchte aber, dass dann die Clock der GPU fehlt, da der Focus vermutlich mit der GPU-clock läuft.
    2.) Der focus intel backend trieber ist nicht gestrippt. Hast Du schonmal versucht, diesen zu disassemblieren? Evtl. gibts da so was wie init_focus oder init_PAL und man kommt an die Registersettings ran. "nm" sieht da schonmal ganz vielbersprechend aus. Ich möchte nur die Arbeit nicht doppelt machen.

    Das ganze macht eben dann keinen Sinn, wenn der Focus Intel Treiber nur mit clock der GPU arbeitet und nicht seine eigene nutzt.

    Gruß,
    beta

    Maniac
    Dann bekomme ich ja doch noch Unterstützung. Wenn ich das richtig verstehe, dann gibt es 2 Modi. Einen, der den Takt von der GPU bekommt und einen, der seinen Takt selbst generieren kann. Mit dem 2. Modus sollte es unabhängig von der GraKa funktionieren. Die Frage, die sich mir immer noch stellt ist die: Warum ist das Bild zerschossen, wenn ich einen ausgelesenen Wert zurückschreibe? Spricht dafür, dass Register in einer bestimmten Reihenfolge beschrieben werden müssen. 2. Warum ändert sich das Bild jedesmal, wenn ich mein Programm mehrmals hintereinander aufrufe. Kann das ein Timing-Problem auf dem I2C-Bus sein, hilft es also, Wait states einzufügen?

    Gruß,
    beta

    mase:
    Hast Du vorher ein modprobe i2c-dev gemacht? Ohne tut sich nichts. Ich habe es nicht mit dem IEGD zusammen versucht, weil der ja einen backend-Treiber für den fs454 hat.

    @giga_san, wenn Du mitliest:
    Warum ändert sich der flackernde Bildschirm, wenn ich mehrfach hintereinander dasselbe in dieselben Register schreibe?

    Gruß,
    beta

    kiwix: Alles Liebe zum Geburtstag Deiner Frau. Ich denke auch, dass das wichtiger ist und Priorität verdient!

    Was mir noch aufgefallen ist: Wenn ich das Programm mehrmals aufrufe, ändern sich die gelben Flecken. Warum?
    Das deckt sich mit der Aussage von Pilotfisch, der ja auch nur den vorhandenen Wert nochmal geschrieben hat.

    Gruß,
    beta

    kiwix:
    Wenn man direkt in die Register des FS454 schreibt, sollte es eigentlich egal sein, welchen Treiber man für den 810 nimmt. Mit dem intel-Treiber gibt es das Problem der hohen Prozessorlast, so dass mit offenem OSD das Bild ruckelt. Daher würde ich lieber auf den Intel-Treiber verzichten und einen framebuffer-Treiber nehmen.
    Im Prinzip ist es auch egal, wie man die Werte in den Focus schreibt (i2cset geht auch). Wichtig ist, alle Register zu erwischen, die entscheidend sind. Keine Ahnung, ob das mit oben angehängten Code möglich ist, ich werde wahrscheinlich in ein paar Tagen zum Testen kommen. Aber ich muss ja nicht der einzige sein ;)

    -> Update: Im Anhang gibts eine Version, die bei mir zumindest compiliert. Ich kann es aber leider nicht testen.


    Gruß,
    beta

    Ich habe folgende Bootsequenz gefunden:

    1.) setup
    // set clock level
    fs454_write(FS454_CR, CR_GCC_CK_LVL, 2);
    // soft reset
    fs454_read(FS454_CR, &data, 2);
    fs454_write(FS454_CR, data | CR_SRESET, 2);
    fs454_write(FS454_CR, data & ~CR_SRESET, 2);
    fs454_write(FS454_BYPASS, fs454_presets.bypass, 2);
    // write QPR
    fs454_write(FS454_QPR, fs454_presets.qpr, 2);
    // setup PLL and NCO
    fs454_write(FS454_NCON, fs454_presets.ncon, 4);
    fs454_write(FS454_NCOD, fs454_presets.ncod, 4);
    fs454_write(FS454_PLL_M_PUMP, fs454_presets.pllm, 2);
    fs454_write(FS454_PLL_N, fs454_presets.plln, 2);
    fs454_write(FS454_PLL_PDIV, fs454_presets.pllpd, 2);
    //latch NCO and PLL
    fs454_read(FS454_CR, &data, 2);
    fs454_write(FS454_CR, data | CR_NCO_EN, 2);
    fs454_write(FS454_CR, data & ~CR_NCO_EN, 2);
    // set presets
    fs454_write(FS454_PWR_MGNT, fs454_presets.pwr_mgmt, 2);
    fs454_write(FS454_IHO, fs454_presets.iho, 2);
    fs454_write(FS454_IVO, fs454_presets.ivo, 2);
    fs454_write(FS454_IHW, fs454_presets.ihw, 2);
    fs454_write(FS454_VSC, fs454_presets.vsc, 2);
    fs454_write(FS454_HSC, fs454_presets.hsc, 2);
    fs454_write(FS454_MISC, fs454_presets.misc, 2);
    fs454_write(FS454_VID_CNTL0, fs454_presets.vid_cntl0, 2);
    fs454_write(FS454_MISC_46, fs454_presets.misc46, 1);
    fs454_write(FS454_MISC_47, fs454_presets.misc47, 1);
    fs454_write(FS454_DAC_CNTL, fs454_presets.dac_cntl, 2);
    fs454_write(FS454_FIFO_LAT, fs454_presets.fifo_lat, 2);

    Danach die Presets für PAL laden:

    qpr = 0x9c41
    pwr_mgmt = 0x0200
    misc = 0x0003
    ncon = 0x00000001
    ncod = 0x00000001
    misc46 = 0x01
    misc47 = 0x00
    pllm = 0x4000 | (296 - 17)
    plln = 30 - 1
    pllpd = ((10 - 1) << 8) | (10 - 1)
    iho = 0
    ivo = 19
    ihw = 768
    vsc = 8200
    hsc = 0x0000
    bypass = 0x000a
    vid_cntl0 = 0x0340
    dac_cntl = 0x00e4
    fifo_lat = 0x0082

    Die Registergrößen und -name sind aus dem Datenblatt bekannt.
    Eine erste C-Implementierung habe ich angehängt.
    Hat jemand Lust, mitzutesten?

    Gruß,
    beta

    Was bei mir funktioniert ist, den x-server von giga_sans tars mit z.B. 800x600 laufen zu lassen. Der Focus macht dann nur einen Ausschnitt des oberen rechten Bildes (640x480). Gibt es denn eine Möglichkeit, den Focus umzustellen auf PAL oder andere Auflösung? Die Register stehen ja in den Datenblättern.

    Gruß,
    beta

    mase
    Genauso wenig. Beim Bild passiert rein gar nichts. Hast Du andere Auflösungen versucht als die 800x600? Vielleicht hat irgendjemand ein Datenblatt vom Focus-Chip. Dann wissen wir zumindest, was wir über den I2C-Bus schicken müssen, um das Ding einzustellen.

    Gruß,
    beta

    so wie es aussieht, kann der x-server ja die hohe Auflösung. Ich werde das Stück source code mal compilieren und schauen, ob es den fs454 umschaltet auf Vollbild, wenn der x-server auf 800x600 läuft.
    -> Ergänzung: Ich habe es getestet, es funktioniert leider nicht (zumindest nicht mit x-server in 800x600 Mode, es ist nur die obere linke Ecke des Schirms sichtbar und das Bild schaltet nicht um, wenn ich bei laufendem x-server den Code (I2C) aufrufe. Schade.

    Gruß,
    beta

    Hat mal jemand folgendes probiert?
    792 x 576 pixel mode
    If you have an Xbox with the Focus FS454 video encoder and use PAL output, you can follow the procedure described here to set it up for overscanned 792x576 resolution, which looks much nicer than the default 640x480. PAL video is usually captured in the resolution 720x576, so the picture lines are not scaled at all in the vertical direction if a frame height of 576 pixels is used. And in the horizontal direction the pixels are fuzzy anyway (since the signal is analog), so the horizontal downscaling is not very noticeable. A completely unscaled 720x576 mode could have been used instead, but the software becomes less messy if the pixels are square, so 720x576 is only used when actually playing video.

    To calculate the number of horizontal pixels needed for a square-pixel frame, use the fact that 702 of the 720 pixels represent 4/3 of the frame height: for square pixels this means that (720/702)*(4/3)*576 = 787.6923 horizontal pixels are needed. This is rounded up to the nearest multiple of 8 (because of hardware requirements) which is 792.

    Non-square pixels are rather tricky beasts. If you want to learn more about this subject, I recommend this excellent web page: A Quick Guide to Digital Video Resolution and Aspect Ratio Conversions.

    Here is the procedure for setting up the 792x576 mode:

    Make X11 recognize the mode. Use something like this in your XF86Config-4-xbox:
    Mode "792x576"
    DotClock 29.750
    HTimings 792 832 912 952
    VTimings 576 599 601 625
    Flags "-Hsync" "-Vsync"
    EndMode

    Then set it as the default mode in the "Display" subsection in the "Screen" section.

    You also need 720x576 so MPlayer can switch to this mode:
    Mode "720x576"
    DotClock 27.000
    HTimings 720 760 824 864
    VTimings 576 599 601 625
    Flags "-Hsync" "-Vsync"
    EndMode

    At the end of the "append" line in your linuxboot.cfg, add video=xbox:hoc=0,voc=0

    The linuxboot.cfg file is found in the same place as where you installed Xebian, e.g. E:\debian\linuxboot.cfg.
    This change sets the horizontal and vertical overscan compensation to zero. It may work for Xboxes with Conexant chips also, I haven't tested that.

    Now the picture needs to be positioned correctly on the TV screen, so that a 792x576 image from the Xbox looks exactly like a broadcast PAL image. I don't know how this is done for Conexant-equipped Xboxes, or if there may be a better way to do this, but here is a program that tells the Focus FS454 to position the picture so it is correctly centered. Try this only on boxes with the FS454 chip:
    #include <fcntl.h>
    #include "linux/i2c-dev.h"

    int main(int argc, char *argv[]) {
    int fd = open("/dev/i2c/0", O_RDWR);
    ioctl(fd, I2C_SLAVE_FORCE, 0x6a);
    i2c_smbus_write_word_data(fd, 0x00, 42);
    i2c_smbus_write_word_data(fd, 0x02, 26);
    close(fd);
    }

    Compile with -I/usr/src/linux/include
    Run it (as root) after X11 has started, otherwise the settings will be overwritten.


    Gruß,
    beta

    Hallo,

    ja, die HD-S2 ist baugleich mit der HVR-4000, ausser dass das FM Radio und DVB-T fehlt. DVB-S funktioniert mit der Karte, DVB-S2 noch nicht (API-Änderungen im Treiber notwendig). Hier ist mal ein kleines HOWTO:

    1.) Die Treiber von http://linuxtv.org/hg/~stoth/hvr4000/ downloaden.
    2.) Die Dateien von http://dev.kewl.org/tmp/hvr4000/ downloaden. cx24116.c.patched ins Treiberverzeichnis (1.)) kopieren und an passender Stelle cx24116.c ersetzen (die Endung .patched weg!)
    3.) wget-fw.sh ausführen. Das Script erstelle automatisch die benötigte Firmware (auch für HD-S2 gültig) namens dvb-fe-.... Diese nach /lib/firmare bzw. /usr/lib/hotplug/firmware (je nach Distribution) kopieren.
    4.) Treiber übersetzen und mit make install installieren. Funktionierte bei mir mit OPensuse 10.2 problemlos.
    5.) szap2 nutzen, um DVB-S Sender zu tunen (./szap -r -a adapternummer, also 0, 1,... "NAME des Programms", also z.B. ZDF. Ist die Karte die 2. (Adapter =1), z.B. ./szap2 -r -a1 "ZDF".
    6.) Mit cat /dev/dvb/adapter1/dvr0 > test.ts kann man das Programm nach test.ts aufnehmen.
    7.) mplayer test.ts spielt das ganze ab.

    Bei mir funktioniert das mit DVB-S ohne Probleme. DVB-S2-Sender kann man tunen, das Device liefert aber noch nicht den Stream, auch nicht nach Angabe der Video-PID.
    Solltest Du noch ne channels.conf für szap benötigen, melde Dich, ansosnten ist google Dein Freund.

    Ich hoffe, ich konnte helfen. Ich habe übrigens unter Windoofs das Problem, dass Cybercinema, wenn ich nicht den Assistentenmodus starte, bei 92% Senderscan stehenbleibt. Im Assistentenmodus geht das. Ich habe Astra 19.2 und Hotbird 13.
    Ach ja, Diseq sollte mit dem HVR-4000 Treiber (szap) auch funktionieren.

    Gruß,
    beta