Seite 1 von 7

GarbRec TAP

Verfasst: Do 30. Aug 2007, 22:09
von stefan999
Auf Anregung von Twilight habe ich die nachfolgende Info in diesen Beitrag editiert:

GarbRec 0.01d
Das TAP ist auf Wunsch von Homer entstanden. (Werdegang siehe diesen Thread) Kurz zusammengefasst, prüft das TAP alle Aufnahmen im Hauptverzeichnis daraufhin, ob sich innerhalb der Aufnahme eine (zeitliche) Lücke befindet.

Dabei wird aus Performancegründen nicht die komplette Datei durchgeackert, sondern (ähnlich wie bei RecCopy) von jedem Cluster ein Sample gezogen. Soll heißen. Von jedem Cluster werden die ersten 30 Sektoren gelesen und der erste PCR gesucht (mit Hilfe der FirebirdLib Funktion HDD_FindPCR). Da diese Funktion Minutenwerte zurückgibt, wird geprüft, ob die Differenz zwischen dem zuletzt gefundenen und dem aktuell gefundenen PCR größer als 1 Minute ist. Da ja alle 100ms ein PCR im TS-Stream kommen muss, wird bei einem PCR-Unterschied von mehr als 1 Minute eine Lücke unterstellt. Das war's eigentlich im groben.

Das TAP legt beim allerersten Start ein Verzeichnis GarbRec an und speichert dort die Logs sowie die INI-Datei.

Die INI-hat folgende Standard-Parameter:
LogAllPCR=0
StopOnWrongDate=1
IgnoreLastCluster=1

Bedeutung:
  • LogAllPCR legt fest, ob im Log alle PCRs aufgelistet werden (0=nein,1=ja, sollte nur für Debugzwecke genutzt werden).
  • StopOnWrongDate legt fest, ob bei einem ungültigen Startdatum im Header der Scan der Aufnahme gestoppt werden soll (0=nein,1=ja) Wenn "0" ==> Es wird so getan, als wenn die Aufnahme am 01.01.2003 0:00 Uhr gestartet wurde (Wunsch Homer).
  • IgnoreLastCluster legt fest ob der letzte (meist nicht vollständig gefüllte Cluster ignoriert wird. (0=wird nicht ignoriert,1=wird ignoriert)
Die Dialoge werden mit FirebirdLib erstellt, sodass bereits vorhandene Dialogeinstellungen auch hier wiederfinden. (Ausdrücklicher Dank an Firebird :hello: )

Gruß
Stefan

AW: Laufende Wiedergabe erkennen

Verfasst: Do 30. Aug 2007, 22:17
von Sigittarius-E
[quote=""stefan999""]Natürlich bin ich jetzt auch "heiß" drauf, mein erstes persönliches TAP zu schreiben.
[/quote]

:up:


bzgl. deiner Frage bin ich z.Zt. zu :zzz: . Müsste nachsehen :o

Bin sicher es können dir andere die diese API Funktionen in deren TAPs regelmässig verwenden auswendig sagen.
BTW: ich sollte mir den Code zum TSBProtector auch mal wieder ansehen :thinker: :wink:

AW: Laufende Wiedergabe erkennen

Verfasst: Do 30. Aug 2007, 22:26
von stefan999
Wow,

das war Antwort in Echtzeit ! :hello:

Sofern Bedarf besteht, würde ich mich gerne hier in die TAP-Gemeinde langsam "eingemeinden". Wenn ich also irgendwo unterstützen kann, dann sagt Bescheid. Nur bei der hardwarenahen Geschichte (Assembler / Firmware) bin ich im Moment noch ahnungslos, wie ein Neugeborenes. Aber: Kommt Zeit, kommt Rat.

Und da das hier eine tolle Community zu sein scheint, wird das bestimmt Spaß machen.

Danke nochmal für deine schnelle Antwort.

Gruß
Stefan

AW: Laufende Wiedergabe erkennen

Verfasst: Do 30. Aug 2007, 22:29
von Sigittarius-E
[quote=""stefan999""]Wow,

das war Antwort in Echtzeit ! :hello:
[/quote]

normalerweise geht das hier schneller. :D
Sofern Bedarf besteht, würde ich mich gerne hier in die TAP-Gemeinde langsam "eingemeinden".
Willkommen im TAP-Club :hello:
Wenn ich also irgendwo unterstützen kann, dann sagt Bescheid. Nur bei der hardwarenahen Geschichte (Assembler / Firmware) bin ich im Moment noch ahnungslos, wie ein Neugeborenes. Aber: Kommt Zeit, kommt Rat.
@Firebird: ich glaube, hier drängt sich jemand auf :wink: :D
Und da das hier eine tolle Community zu sein scheint, wird das bestimmt Spaß machen.
auf viele neue TAPs :up:

AW: Laufende Wiedergabe erkennen

Verfasst: Do 30. Aug 2007, 23:24
von FireBird
[quote=""stefan999""]
  1. TAP_Hdd_GetPlayInfo aufrufen
  2. wenn return == FALSE ==> dann keine Wiedergabe
  3. wenn return == TRUE UND playInfo.playMode == PLAYMODE_Playing ==> dann lfd. Wiedergabe
[/quote]
Sieht gut aus, außer dass ein FALSE eher darauf hindeutet, dass die Funktion selbst fehlgeschlagen ist und nicht, dass keine Wiedergabe läuft. Und hier hast Du Dir gleich eine gute Funktion ausgesucht: eine der Lieblingsbeschäftigungen der Topfield-Programmierer ist nämlich, Buffergrössen zu ignorieren.

GetPlayInfo und GetRecInfo schreiben mehr, als die TYPE_*Info hergibt. Entweder deklarierst Du direkt nach der TYPE_PlayInfo-Variablen einen 512-Byte-Buffer, um den Überhang abzufangen, oder Du bindest die FireBirdLib ein und machst ein InitTAPAPIFix(). Dann kümmert sich die Lib um die Firmwarebugs.

MfG. Alex

AW: Laufende Wiedergabe erkennen

Verfasst: Do 30. Aug 2007, 23:26
von FireBird
[quote=""Sigittarius-E""]@Firebird: ich glaube, hier drängt sich jemand auf :wink: :D
[/quote]
Geben wir ihm einen Tag, wir sind ja nicht so. :D

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 08:33
von Sigittarius-E
[quote=""FireBird""]Geben wir ihm einen Tag, wir sind ja nicht so. :D [/quote]

Dachte mir ja, dass du diesen Thread nicht übersiehst. :D

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 09:02
von stefan999
Hi.


Ich danke euch. Das werde ich dann Wochenende gleich mal ausprobieren.

Gruß
Stefan

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 10:29
von Sigittarius-E
Viel Spass dabei.

Und melde dich halt bei Fragen. :D :

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 16:56
von stefan999
[quote=""FireBird""]
GetPlayInfo und GetRecInfo schreiben mehr, als die TYPE_*Info hergibt. Entweder deklarierst Du direkt nach der TYPE_PlayInfo-Variablen einen 512-Byte-Buffer, um den Überhang abzufangen, oder Du bindest die FireBirdLib ein und machst ein InitTAPAPIFix(). Dann kümmert sich die Lib um die Firmwarebugs.
[/quote]

Hi,

warum steht dann in der FirebirdLib aber ein 128 Byte und kein 512 Byte Buffer nach dem PlayInfo ? (ich weiß, ich bin neu und stell dumme Fragen).

Gruß
Stefan

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 16:58
von FireBird
Dann waren es nur 128 Bytes. Ich habe das gestern schnell von einem Freund aus geschrieben.

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 17:00
von ibbi
[quote=""stefan999""]warum steht dann in der FirebirdLib aber ein 128 Byte und kein 512 Byte Buffer nach dem PlayInfo ? (ich weiß, ich bin neu und stell dumme Fragen).[/quote]

Wo?

Für den Benutzer (und auch die FireBirdLib ist ihr eigener Benutzer ändert sich sich mit Einsatz der FireBirdLib nichts). Das ist ja gerade das Schöne, dass man keine Änderungen in seinem TAP vornehmen muss.

Es wird dann letztlich die Fixed_TAP_Hdd_GetPlayInfo() aus der tapapifix.c verwendet, wo Du die angesprochenen Überlaufpuffer findest.

EDIT: Upps. Wenn die Frage nur auf die Größe zielte, vergiss meine Antwort.

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 17:46
von stefan999
[quote=""FireBird""]Dann waren es nur 128 Bytes. Ich habe das gestern schnell von einem Freund aus geschrieben.[/quote]


Ist ja nicht schlimm. Ich will ja nur lernen und nicht einfach "abschreiben".

Übrigens: Eine Frage habe ich noch an dich als Firmware-Guru:

Ist eigentlich sichergestellt, dass während ein Event vom TAP abgearbeitet wird, kein weiterer Event-Aufruf stattfindet?

Falls nicht, gibt es einen sicheren Lock? Sofern keine DMA-Zugriffe stattfinden würde ja auch dein intLock und intUnlock gehen. Verwendet Topfield DMA-Zugriffe?

Gruß
Stefan

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 18:16
von FireBird
[quote=""stefan999""]Ist eigentlich sichergestellt, dass während ein Event vom TAP abgearbeitet wird, kein weiterer Event-Aufruf stattfindet? [/quote]
Theoretisch sollte es nicht vorkommen (ausser via TAP_SystemProc()) , praktisch gibt es aber ein paar Bugs (siehe z.B. hier). In dem Fall crasht der Topf, weil ein CPU-Register nicht richtig gesetzt ist. Ich will aber nicht ausschliessen, dass durch den Aufruf einer Funktion ein Event generiert wird und der Event-Handler nochmals aufgerufen wird.

Es gibt mehrere Tasks, die sich kooperativ die CPU-Zeit teilen. Alle TAPs laufen im Task 0 (Main) und durch einen Interrupt kommt es zu keiner Auslösung eines Events - intLock bringt hier nichts.
Verwendet Topfield DMA-Zugriffe?
DMA wird z.B: für die Festplatte verwendet.

MfG. Alex

AW: Laufende Wiedergabe erkennen

Verfasst: Fr 31. Aug 2007, 19:32
von Twilight
noch so ein verrückter :D :up:

weiter so ;)

twilight

AW: Laufende Wiedergabe erkennen

Verfasst: So 2. Sep 2007, 22:47
von stefan999
Hi,

ich wollte nur mal berichten:

Zum Glück habe ich es geschafft, ein kleines Erfolgserlebnis gehabt zu haben. Und dank Firebirds Library auch ohne in die Falle mit dem Buffer zu gehen.

Um die Begeisterung meiner Frau dafür zu wecken, dass ich mich der TAP-Programmierung widme, habe ich zunächst ein kleines TAP geschrieben, dass beim Betätigen einer beliegen Taste die aktuelle Ausgabe stoppt, das angehaltene Programm dann im Nebenfester anzeigt und im OSD dann ein schönes Bild von ihr anzeigt (natürlich in Plane2, damit der Film zu sehen bleibt). Das hat auch wunderbar geklappt. Meine Frau "erlaubt" mir jetzt das Programmieren :D .

Dann habe ich mich an das gesetzt, weswegen ich euch hier auch schon gefragt hatte:

Ich habe TAP geschrieben, dass bei laufender Wiedergabe einer Aufnahme im Falle des Stoppens auch ein Bookmark setzt, es sei denn, man drückt innerhalb einer gewissen Zeit nochmals die Stop-Taste, dann wird nur gestoppt.

Und was ich gar nicht zu hoffen wagte, trat ein: Das Ding lief im ersten Anlauif. Feintuning war natürlich noch nötig, damit man genügend Zeit zum zweiten Druck der Taste hatte, aber immerhin: Es hat ohne Fehler funktioniert.

Ich vermute jetzt mal, es gibt bestimmt schon ein solches TAP, aber zum Aufwärmen war das schon mal eine schöne Übung.

Mal sehen, was mir als nächstes so einfällt. Habe im Moment keine Idee, aber jede Menge Tatendrang.

Das wollte ich nur mal loswerden.

Viele Grüße
Stefan

AW: Laufende Wiedergabe erkennen

Verfasst: Mo 3. Sep 2007, 20:52
von Sigittarius-E
[quote=""stefan999""]Und was ich gar nicht zu hoffen wagte, trat ein: Das Ding lief im ersten Anlauif.[/quote]
ich kann es zwar manchmal gar nicht glauben aber auch mir passiert das gelegentlich. zuletzt als ich im SimpleCharEditor TAP die Handytastatur dazuprogrammiert habe. Ich konnte es gar nicht glauben dass es auf anhieb funktionierte :oops:
Ich vermute jetzt mal, es gibt bestimmt schon ein solches TAP, aber zum Aufwärmen war das schon mal eine schöne Übung.
ja. Bookmark TAP. Macht beim beenden einen Bookmark und AFAIK wenn man innerhalb einer gewissen Zeit die Stop-Taste ein zweites mal gedrückt hat wurde der Bookmark nicht gesetzt... :D
Mal sehen, was mir als nächstes so einfällt. Habe im Moment keine Idee, aber jede Menge Tatendrang.
Nur weiter so :up:

AW: Laufende Wiedergabe erkennen

Verfasst: Di 4. Sep 2007, 01:24
von Homer
Ich gratuliere dir zum Erfolg.[quote=""stefan999""]Mal sehen, was mir als nächstes so einfällt. Habe im Moment keine Idee, aber jede Menge Tatendrang.[/quote]Ein TAP, wie ich es hier beschrieben habe, fehlt leider noch immer.

Viele Grüße
Homer

AW: Laufende Wiedergabe erkennen

Verfasst: Mi 5. Sep 2007, 07:57
von Elle4u
Falls Du immer noch etwas suchst:

Für Filer suche ich immer noch Hilfe/Unterstützung da es zeitlich bei mir etwas eng aussieht :wink:

Die Sourcen liegen bei und man müsste sich dann eben nur absprechen...

AW: Laufende Wiedergabe erkennen

Verfasst: Mi 5. Sep 2007, 17:31
von stefan999
[quote=""Homer""]Ich gratuliere dir zum Erfolg.Ein TAP, wie ich es hier beschrieben habe, fehlt leider noch immer.

Viele Grüße
Homer[/quote]

Hi,

ich helfe immer gerne und wo ich kann. Da es bei mir mit MPEG-Kenntnissen etc. ziemlich mau ist, sehe ich hier auch keine Möglichkeit, wo man hier ansetzen kann, außer den üblichen simplen Methoden. Die ja aber auch schon in dem von dir gelinkten Thread erörtert worden und auch dort ist man ja zu keinem Ergebnis gekommen. Die simplen Methoden (Header überprüfen, Differenz aus ersten und letzem PCR ermitteln etc.) helfen ja auch nicht wirklich weiter, wie du dort bestätigt hast.

Mir ist das daher im Momemt eine Nummer zu groß. Tut mir leid. :oops:

Viele Grüße
Stefan