Archiv verlassen und diese Seite im Standarddesign anzeigen : /dev/ost/* - Experimente
andreas.koch
26.02.2005, 13:53:48
Hallo!
Habe mal ein bischen mit den Devices in /dev/ost/ der Box experimentiert.
Was ich bis jetzt raus gefunden habe:
Die Devices stellen weite Teile der Linux DVB API bereit. (wäre auch merkwürdig wenn nicht, schließlich wurde die API ursprünglich im Auftrag von Siemens entwickelt...).
Die einzelnen Devices benutzten aber offensichtlich unterschiedliche Versionen dieser API:
/dev/ost/frontend* V.3
/dev/ost/audio* V.2
/dev/ost/video* V.2
/dev/ost/demux* V.2
(/dev/ost/dvr* V.2 , sind logische Devices von /dev/ost/demux*)
Alle andern werden nicht unterünterstützt bzw. nicht benötigt (für DVB-T).
Anfrage noch dem was ein Device kann werden in fast keinem Fall beanwortet (nur mit EPERM).
Schickt man allerdings blind ioctls, funktioniert das meiste.
Habe mal ein kleines Test-Programm geschrieben, das erfolgreich einen Sender auf dem TV ausgibt. Wenn Interesse bzw. Bedarf besteht kann ich es ja mal hier posten.
Das OSD wird über den Framebuffer /dev/fb0 realisiert (720x576x32 interlaced). Damit habe ich noch nicht viel experimentiert.
P.S.: Die Aussgagen/Experimente beziehen sich auf die Firmware Version 1.12.1, kann mir aber kaum vorstellen das Siemens das Interface nachträglich ändert.
Grüße
Andreas
gambler
26.02.2005, 13:58:07
sehr fein, mich wuerde es schon sehr interessieren.
kannst du es + source zur verfuegung stellen?
andreas.koch
26.02.2005, 14:15:33
Hallo
Kein Problem. Wenn du nicht gerade in Dortmund/Ruhrgebiet wohnst, bringen dir sowie so nur die Sourcen was. Der Sender ist Hardcoded...
Das Programm heißt dvb_test_tune.c. (Steht noch eine Menge Müll drin). Die defines am Anfang muß man entsprechend dem gewünschten Programm anpassen (PCRPID ist nicht notwendig).
Die Header-Files in m740av/ sind von mir teilweise veränderte Header der V. 3 der API.
Bei mir lief es dann, wenn ich vorher wavebox und record_backend auf der Box komplett gekillt habe.
An Erfahrungsberichten bin ich sehr interessiert (Ausgaben von /proc/kmsg, sind auch nicht uninteressant.)
Viel Spaß damit
Gruß
Andreas
maotv
27.02.2005, 09:55:17
Hi,
dvb_test_tune läuft auch mit FW1.29.5, allerdings fast
ohne ton (stottern, immer das gleiche bruchstück).
Dennoch glaube ich dass es ein entscheidender
Schritt in Richtung eigene FW ist. Ich habe die letzten
Tage ein bischen mit vdr rumgespielt. Sowohl die Version
1.0.4 als auch 1.2.6 lassen sich mit ein paar kleinen
Anpassungen für die Box kompilieren. LIRC geht,
das OSD müsste man als Plugin realisieren, hierfür
gibt es im Netz sogar code den man nutzen könnte
(softdevice plugin). Leider gibt vdr weder Bild noch
Ton aus. dvb_test_tune beweist aber dass es prinzipiell
geht. Das macht Hoffnung dass wir
die "wavebox" eines Tages endgültig killen können.
.mao
gambler
27.02.2005, 12:04:41
hi, dein poc geht bis auf den sound echt gut.
hab allerdings auch auf 1.29.5 getestet und das gleiche stottern gehabt, bzw spaeter gar keinen ton mehr. gebaut hab ich das ganze mit deinem compiler.
hier die kmsg:
<4>live_video_pids = -1 -1 buf_idx=0 decoder=0 elog_video_pid = -1
<4>remove startcode callback
<4>tuner_open 0
<4>AUDIO_STOP
<4>tuner_ioctl: cmd = 0
<4>tuner_idx=0
<4>sending CMD_TUNE to tuner thread
<4>TDA10046: tune = 538000 nim = 0; arg->NIM 10
<4>FQ1216SetTuner: nim = 0 freq = 538000
<4>TDA10046SetBW: BW = 1
<4>TDA10046SetStart NIM = 10 0
<4>TDA10046GetSyncStatus: LOCKED
<4>TDA10046SetChannel LOCKED 12
<4>TDA10046: LOCKED tune = 18 !
<4>tuner_thread:result = 7
<4>tuned ok t=2732030
<4>wake has_event=1
<4>tuner_ioctl: cmd = 0
<4>FE_GET_EVENT has_event
<4>open_input id=0 usage=1
<4>live_video_pids = 337 -1 buf_idx=0 decoder=0 elog_video_pid = -1
<4>open_input id=0 usage=2
<4>MMAC_RTOS_Sleep <= 10ms too short delay=79748
<4>init_audio sync=1
<4>MMAC_RTOS_Sleep <= 10ms too short delay=202328
<4>MMAC_RTOS_Sleep <= 10ms too short delay=202041
<4>MMAC_RTOS_Sleep <= 10ms too short delay=199637
<4>MMAC_RTOS_Sleep <= 10ms too short delay=197274
<4>AUDIO_PLAY: SetInputSelector
<4>AUDIO_PLAY: SetOutputSelector spdif_enable=0 analog_enable=1 ac3=0
<4>AUDIO_PLAY: Decode
<4>MMAC_RTOS_Sleep <= 10ms too short delay=152011
<4>MMAC_RTOS_Sleep <= 10ms too short delay=150605
<4>MMAC_RTOS_Sleep <= 10ms too short delay=148594
<4>MMAC_RTOS_Sleep <= 10ms too short delay=116495
<4>MMAC_RTOS_Sleep <= 10ms too short delay=115400
<4>MMAC_RTOS_Sleep <= 10ms too short delay=115869
<4>MMAC_RTOS_Sleep <= 10ms too short delay=113767
<4>MMAC_RTOS_Sleep <= 10ms too short delay=112577
<4>MMAC_RTOS_Sleep <= 10ms too short delay=111862
<4>MMAC_RTOS_Sleep <= 10ms too short delay=110980
<4>MMAC_RTOS_Sleep <= 10ms too short delay=112493
<4>MMAC_RTOS_Sleep <= 10ms too short delay=109365
<4>MMAC_RTOS_Sleep <= 10ms too short delay=107828
<4>MMAC_RTOS_Sleep <= 10ms too short delay=99668
<4>AUDIO_PLAY: Mute false
<4>AUDIO_PLAY0: done
<4>AUDIO API: Hit upper bound of maximum executable counts
<4>set volume left=140 right=140 (only left=right)
<4>open_video dev_no=0
<4>ac3_out=0
<4>videoConfig.monitorFormat = 2
<4>display 1
<4>set_plane_alpha 1 255
<4>set_plane_alpha done
<4>videoConfig.startUpMode=0 ac3_out=0
<4>video_play
<4>MMAC_RTOS_Sleep <= 10ms too short delay=79450
<4>AUDIO API:Stream Input Stop? or too slow?
<4>0 3uncor = 7f
<4>0 3uncor = 7f
<4>0 3uncor = 7f
<4>live_video_pids = -1 -1 buf_idx=0 d
<4>AUDIO API:Stream Input Stop? or too slow?
wird das der audiofehler sein...?
dein poc hat noch einiges an potenzial.
sehr feine sache :D
andreas.koch
27.02.2005, 13:42:38
Hallo!
Den Fehler hatte ich hier Anfangs auch (Ton stottert, Bildaussetzter). Es lag an einem zu kleinen Buffersize des Video-Stream-Demuxers, dann versucht die Box ständig Bild und Ton zu syncronisieren.
Evtl. reicht in der neuen Firmware der Buffer vom Audio-Stream auch nicht aus. Muß man mal ausprobieren. Einfach mal Video komplett rausnehmen, wenn Audio dann nicht mehr stottert liegts am Video-Buffer.
Mit einem zu großen Buffer hatte ich im übrigen auch Probleme (Artefakte auf dm Screen).
Gerade lief bei mir Audio gar nicht (mit dem selben Prog, das gestern lief).
Habe jetzt rausgefunden woran es lag: PCR muß gesetzt werden (obwohl PCRPID normalerweise = VPID ), dann gehts . Im Anhang dann die modifizierte Version des poc (hoffe jetzt funktioniet es auch mit 1.29.5, habe bis jetzt noch keine Notwendigkeit gesehen darauf zu updaten).
Hier mal meine Ausgabe von kmsg:
<4>tuner_open 0
<4>AUDIO_STOP
<4>tuner_ioctl: cmd = 0
<4>tuner_idx=0
<4>sending CMD_TUNE to tuner thread
<4>TDA10046: tune = 538000 nim = 0; arg->NIM 10
<4>FQ1216SetTuner: nim = 0 freq = 538000
<4>TDA10046SetBW: BW = 1
<4>TDA10046GetSyncStatus: LOCKED
<4>TDA10046SetChannel LOCKED 12
<4>TDA10046: LOCKED tune = 18 !
<4>tuner_thread:result = 7
<4>tuned ok t=255412
<4>wake has_event=1
<4>tuner_ioctl: cmd = 0
<4>FE_GET_EVENT has_event
<4>open_input id=0 usage=1
<4>live_video_pids = 337 -1 buf_idx=0 decoder=0 elog_video_pid = -1
<4>open_input id=0 usage=2
<4>open_input id=0 usage=3
<4>MMAC_RTOS_Sleep <= 10ms too short delay=88437
<4>init_audio sync=1
<4>MMAC_RTOS_Sleep <= 10ms too short delay=203135
<4>MMAC_RTOS_Sleep <= 10ms too short delay=201230
<4>MMAC_RTOS_Sleep <= 10ms too short delay=199160
<4>MMAC_RTOS_Sleep <= 10ms too short delay=197634
<4>AUDIO_PLAY: SetInputSelector
<4>AUDIO_PLAY: SetOutputSelector
<4>AUDIO_PLAY: Decode
<4>MMAC_RTOS_Sleep <= 10ms too short delay=152694
<4>MMAC_RTOS_Sleep <= 10ms too short delay=149604
<4>MMAC_RTOS_Sleep <= 10ms too short delay=148699
<4>MMAC_RTOS_Sleep <= 10ms too short delay=116676
<4>MMAC_RTOS_Sleep <= 10ms too short delay=115596
<4>MMAC_RTOS_Sleep <= 10ms too short delay=116535
<4>MMAC_RTOS_Sleep <= 10ms too short delay=114041
<4>MMAC_RTOS_Sleep <= 10ms too short delay=113032
<4>MMAC_RTOS_Sleep <= 10ms too short delay=113034
<4>MMAC_RTOS_Sleep <= 10ms too short delay=112086
<4>MMAC_RTOS_Sleep <= 10ms too short delay=112770
<4>MMAC_RTOS_Sleep <= 10ms too short delay=111470
<4>MMAC_RTOS_Sleep <= 10ms too short delay=109381
<4>MMAC_RTOS_Sleep <= 10ms too short delay=100808
<4>AUDIO_PLAY: Mute false
<4>AUDIO_PLAY0: done
<4>AUDIO API: Hit upper bound of maximum executable counts
<4>set volume left=140 right=140 (only left=right)
<4>open_video dev_no=0
<4>videoConfig.monitorFormat = 2
<4>display 1
<4>set_plane_alpha 1 254
<4>set_plane_alpha done
<4>video_play
<4>MMAC_RTOS_Sleep <= 10ms too short delay=80853
<4>AUDIO API:Stream Input Stop? or too slow?
<4>AUDIO API: cancel AUDIO mute of stream empty.
<4>AUDIO SYNC: count [1] before un-mute
<4>AUDIO SYNC: get AUDIO SYNC and un-muted
<4>AUDIO SYNC: sound out delay was 601056571/45000 second
<4>live_video_pids = -1 -1 buf_idx=0 decoder=0 elog_video_pid = -1
<4>remove startcode callback
@maotv
Meine Motivation für das Prog. war eben vdr. Softdevice kenn ich nicht besonders, mal sehen ob sich da etwas verwenden läßt. Aber trotzdem werden wohl einige Modifikationen an vdr notwendig sein damit er auf der Box läuft. Es bleiben auch sonst noch ein paar Fragen offen: Wie geht die AC3 Ausgabe auf der Box, wie funktioniert PiP ...
Grüße
Andreas
maotv
27.02.2005, 14:35:43
@andreas
Ich gucke gerade mal wie weit ich komme. Glücklicherweise ist
beim vdr ja der ganze dvb-api Kram in dvbdevice.c zusammengefasst.
Da sind natürlich viele Änderungen notwendig. Im restlichen code
ist es nicht so schlimm, ein paar Sachen wegen der uclibc (scanf, pthreads)
aber das ist überschaubar. Zur Zeit hängt der vdr in einer Schleife weil
der tuner ihm kein lock meldet...
andreas.koch
27.02.2005, 15:16:19
Zur Zeit hängt der vdr in einer Schleife weil
der tuner ihm kein lock meldet...
Stell mal alle Parameter des Tuners auf Auto. Hatte nämlich mal das Problem, das in der channels.conf, falsche Parameter drin waren (code_rate_LP war FEC_2_3 angeben statt FEC_1_2).
maotv
27.02.2005, 15:45:53
Stell mal alle Parameter des Tuners auf Auto. Hatte nämlich mal das Problem, das in der channels.conf, falsche Parameter drin waren (code_rate_LP war FEC_2_3 angeben statt FEC_1_2).
Danke! Sehr cool, der Tuner läuft jetzt. Immer noch kein Bild, ich glaube
vdr startet den DMX noch nicht...
Powered by vBulletin® Version 4.1.9 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.