Ein paar Fragen zur libFireBird / WSSKiller source
Ein paar Fragen zur libFireBird / WSSKiller source
Hallo ihr alle!
Da ihr unschwer an der Anzahl meiner Beiträge erkennt, dass ich relativ neu hier bin bitte ich um Nachsicht, falls meine Fragen irgendwo schon 100mal beantwortet wurden... ich habe die Antworten dann wohl nicht gefunden...
Ich versuche gerade ein eigenes Tap zu schreiben und brauche dafür eine Funktion, um die Farbinformationen einer X und Y Koordinate auslesen zu können... bzw um genau zu sein die Helligkeitsinformation.
Mittels TAP_CaptureScreen erschien mir das wenig sinnvoll, da ich nur EIN Pixel und nicht alle Pixel brauche...
Nach ein wenig Source-Code leserei im WSSKiller habe ich dort dann die Funktion isActiveArea gefunden die wohl scheinbar zusammen mit der libFireBird mir die gewünschte Information heraussucht...
Nur verstehe ich den Code nicht so ganz, insbesonder den If-Block bei dem gegen den Schwarzwert getestet wird.... kann mir das evtl. mal irgendwer erklären oder mir zumidest sagen, ob ich damit den betreffenden Helligkeitswert herausfinden kann?
Was hat es mit den (libFireBird) Werten EMMA_MPEG_PARAM_SEQ und EMMA_WMIF_ATBLO_Y auf sich?
Ist der zweite Wert die Hauptspeicheradresse an der sich der Grafikspeicher befindet?
Wäre echt supernett wenn mir hier irgendwer weiterhelfen könnte....
Viele Grüße,
Stevie
Da ihr unschwer an der Anzahl meiner Beiträge erkennt, dass ich relativ neu hier bin bitte ich um Nachsicht, falls meine Fragen irgendwo schon 100mal beantwortet wurden... ich habe die Antworten dann wohl nicht gefunden...
Ich versuche gerade ein eigenes Tap zu schreiben und brauche dafür eine Funktion, um die Farbinformationen einer X und Y Koordinate auslesen zu können... bzw um genau zu sein die Helligkeitsinformation.
Mittels TAP_CaptureScreen erschien mir das wenig sinnvoll, da ich nur EIN Pixel und nicht alle Pixel brauche...
Nach ein wenig Source-Code leserei im WSSKiller habe ich dort dann die Funktion isActiveArea gefunden die wohl scheinbar zusammen mit der libFireBird mir die gewünschte Information heraussucht...
Nur verstehe ich den Code nicht so ganz, insbesonder den If-Block bei dem gegen den Schwarzwert getestet wird.... kann mir das evtl. mal irgendwer erklären oder mir zumidest sagen, ob ich damit den betreffenden Helligkeitswert herausfinden kann?
Was hat es mit den (libFireBird) Werten EMMA_MPEG_PARAM_SEQ und EMMA_WMIF_ATBLO_Y auf sich?
Ist der zweite Wert die Hauptspeicheradresse an der sich der Grafikspeicher befindet?
Wäre echt supernett wenn mir hier irgendwer weiterhelfen könnte....
Viele Grüße,
Stevie
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28968
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
AW: Ein paar Fragen zur libFireBird / WSSKiller source
Hi Stevie,
(jetzt wird es mit dem Auseinanderhalten bald wirklich schwierig
)
[quote=""Stevie2k""]Nach ein wenig Source-Code leserei im WSSKiller habe ich dort dann die Funktion isActiveArea gefunden die wohl scheinbar zusammen mit der libFireBird mir die gewünschte Information heraussucht...
Nur verstehe ich den Code nicht so ganz, insbesonder den If-Block bei dem gegen den Schwarzwert getestet wird.... kann mir das evtl. mal irgendwer erklären oder mir zumidest sagen, ob ich damit den betreffenden Helligkeitswert herausfinden kann?[/quote]
EMMA_MPEG_PARAM_SEQ enthält die X- und Y-Grösse der aktuellen Videoframes und EMMA_WMIF_ATBL0_Y zeigt auf den ersten der 8 Frame-Buffer. Die Routine ist deshalb kompliziert, weil sie den OSD-Buffer mit konstant 720x576 auf die aktuelle Framegrösse umrechnen muss. Zusätzlich ist der Framebuffer nicht ein zweidimensionales Gebilde, sondern wird noch in 32x32 Pixel Blöcke unterteilt. Also wenn Du die Farbe eines Punktes haben möchtest, dann entferne die beiden Schleifen und übernimm den Rest so gut wie möglich. (eigentlich sollte man die ganze Routine in die FBLib assimilieren
)
MfG. Alex
(jetzt wird es mit dem Auseinanderhalten bald wirklich schwierig

[quote=""Stevie2k""]Nach ein wenig Source-Code leserei im WSSKiller habe ich dort dann die Funktion isActiveArea gefunden die wohl scheinbar zusammen mit der libFireBird mir die gewünschte Information heraussucht...
Nur verstehe ich den Code nicht so ganz, insbesonder den If-Block bei dem gegen den Schwarzwert getestet wird.... kann mir das evtl. mal irgendwer erklären oder mir zumidest sagen, ob ich damit den betreffenden Helligkeitswert herausfinden kann?[/quote]
EMMA_MPEG_PARAM_SEQ enthält die X- und Y-Grösse der aktuellen Videoframes und EMMA_WMIF_ATBL0_Y zeigt auf den ersten der 8 Frame-Buffer. Die Routine ist deshalb kompliziert, weil sie den OSD-Buffer mit konstant 720x576 auf die aktuelle Framegrösse umrechnen muss. Zusätzlich ist der Framebuffer nicht ein zweidimensionales Gebilde, sondern wird noch in 32x32 Pixel Blöcke unterteilt. Also wenn Du die Farbe eines Punktes haben möchtest, dann entferne die beiden Schleifen und übernimm den Rest so gut wie möglich. (eigentlich sollte man die ganze Routine in die FBLib assimilieren

MfG. Alex
- StevieC
- Moderator & Design Guru
- Beiträge: 13189
- Registriert: Fr 9. Dez 2005, 11:24
- Receivertyp: TMS SRP2100
- Receiverfirmware: Immer die neueste ;-)
- Kontaktdaten:
AW: Ein paar Fragen zur libFireBird / WSSKiller source
[quote=""FireBird""]Hi Stevie,
(jetzt wird es mit dem Auseinanderhalten bald wirklich schwierig
)
[/quote]
Wüsste jetzt nicht, was du meinst
Gruß
StevieC
(jetzt wird es mit dem Auseinanderhalten bald wirklich schwierig

[/quote]
Wüsste jetzt nicht, was du meinst


Gruß
StevieC

iTiNa TMS V0.94
CallMonitor V1.2RC
Mediaaspect V1.3
TMSDisplay V1.5
- ibbi
- Moderierter Ignorator Bitteschöööön!
- Beiträge: 7110
- Registriert: Fr 9. Dez 2005, 12:49
- Receivertyp: TF5000PVR • SRP-2401CI+ Eco
- Receiverfirmware: Sep 2005 PHTF • Jan 2015
AW: Ein paar Fragen zur libFireBird / WSSKiller source
[quote=""FireBird""](eigentlich sollte man die ganze Routine in die FBLib assimilieren
)[/quote]
Sir. Yes, Sir.

Sir. Yes, Sir.

Power Restore 0.8 | PiP 1.2 | 1.1v | QuickTimer 1.0.3 (IB) | TF5000 Display 1.53 | dbPlay 1.2 | Auto Resume 1.30 | IdleHdd 1.0 | EPPG 2.0 | WWWW 0.1b
(Kanalarbeiter 0.9, RecRepair 0.4, ScanDisk 1.4, ScreenCapture with OSD 3.1)
•
Power Restore 0.8 | EasyTimer 1.0 | EPPG 2.0 | 1.1v
(telnetd 1.0, TMSRemote 4.6)
(Kanalarbeiter 0.9, RecRepair 0.4, ScanDisk 1.4, ScreenCapture with OSD 3.1)
•
Power Restore 0.8 | EasyTimer 1.0 | EPPG 2.0 | 1.1v
(telnetd 1.0, TMSRemote 4.6)
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28968
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
AW: Ein paar Fragen zur libFireBird / WSSKiller source
[quote=""ibbi""]Sir. Yes, Sir.
[/quote]
So war's aber nicht gemeint.
:

So war's aber nicht gemeint.

- ibbi
- Moderierter Ignorator Bitteschöööön!
- Beiträge: 7110
- Registriert: Fr 9. Dez 2005, 12:49
- Receivertyp: TF5000PVR • SRP-2401CI+ Eco
- Receiverfirmware: Sep 2005 PHTF • Jan 2015
AW: Ein paar Fragen zur libFireBird / WSSKiller source
[quote=""FireBird""]So war's aber nicht gemeint.
[/quote]
Ist schon ok.
:

Ist schon ok.

Power Restore 0.8 | PiP 1.2 | 1.1v | QuickTimer 1.0.3 (IB) | TF5000 Display 1.53 | dbPlay 1.2 | Auto Resume 1.30 | IdleHdd 1.0 | EPPG 2.0 | WWWW 0.1b
(Kanalarbeiter 0.9, RecRepair 0.4, ScanDisk 1.4, ScreenCapture with OSD 3.1)
•
Power Restore 0.8 | EasyTimer 1.0 | EPPG 2.0 | 1.1v
(telnetd 1.0, TMSRemote 4.6)
(Kanalarbeiter 0.9, RecRepair 0.4, ScanDisk 1.4, ScreenCapture with OSD 3.1)
•
Power Restore 0.8 | EasyTimer 1.0 | EPPG 2.0 | 1.1v
(telnetd 1.0, TMSRemote 4.6)
AW: Ein paar Fragen zur libFireBird / WSSKiller source
Schönen guten morgen mal an alle und erst mal danke für die Antworten...
Sehe ich das richtig, dass folgender Code dann funktionieren müsste? (Bei ersten Versuchen gestern ist mein Toppy (5200 PVRc, FW vom Dez 06) abgestürzt... allerdings hatte ich da noch die Schleife drin. )
Muss ich die LibFireBird erst irgendwie initialisieren? Oder kann ich direkt in meinen Progs damit arbeiten...
Was liefert mit result dann eigentlich genau? Den Y-Anteil aus dem YUV Farbraum?Zwischen 0 (Schwarz) und 255 (weiß)? Kann ich auf diese Weise auch U und V irgendwie erhalten?
Mir geht es zwar primär um den Helligkeitswert, aber für andere Dinge wären die Farbinformationen schon ganz nett...
Ach noch was: so wie ich das verstanden habe, erhalte ich damit den Helligkeitswert bei X,Y im gerade dekodierten MPEG-Frame, hoffentlich ohne OSD... (genau das will ich ja auch)
Gibt es ein Register mit dem ich feststellen kann, ob es sich bei dem aktuellen Frame um einen I-Frame handelt?
Viele Grüße und danke schon mal...
Stevie2k (==> 2k zur Unterscheidung mit den ganzen anderen Stevie's die hier rumschreiben ^^)
Sehe ich das richtig, dass folgender Code dann funktionieren müsste? (Bei ersten Versuchen gestern ist mein Toppy (5200 PVRc, FW vom Dez 06) abgestürzt... allerdings hatte ich da noch die Schleife drin. )
Code: Alles auswählen
int giveColorExample (dword x, dword y) {
dword i, j, fx, fy;
dword picAddr;
dword Width, Height;
int result;
Width = (*EMMA_MPEG_PARAM_SEQ & 0x000000ff) << 4;
Height = (*EMMA_MPEG_PARAM_SEQ & 0x0000ff00) >> 4;
picAddr = (((*EMMA_WMIF_ATBL0_Y & 0xffff0000) >> 6) | 0xa0000000);
//If the horizontal size of the frame is not 720 pixel, scale down the x coordinate
fx = (Width != 720) ? x * Width / 720 : x;
//If the vertical size of the frame is not 576 pixel (e.g. NTSC), scale down the y coordinate
fy = (Height != 576) ? y * Height / 576 : y;
result = *(byte *) (picAddr + (fx & 0x1f) + ((fy & 0x1f) << 5) + ((fx & 0xffe0) << 5) + ((fy & 0xffe0) * 736));
return result;
}
Was liefert mit result dann eigentlich genau? Den Y-Anteil aus dem YUV Farbraum?Zwischen 0 (Schwarz) und 255 (weiß)? Kann ich auf diese Weise auch U und V irgendwie erhalten?
Mir geht es zwar primär um den Helligkeitswert, aber für andere Dinge wären die Farbinformationen schon ganz nett...
Ach noch was: so wie ich das verstanden habe, erhalte ich damit den Helligkeitswert bei X,Y im gerade dekodierten MPEG-Frame, hoffentlich ohne OSD... (genau das will ich ja auch)
Gibt es ein Register mit dem ich feststellen kann, ob es sich bei dem aktuellen Frame um einen I-Frame handelt?
Viele Grüße und danke schon mal...
Stevie2k (==> 2k zur Unterscheidung mit den ganzen anderen Stevie's die hier rumschreiben ^^)
Zuletzt geändert von Stevie2k am Di 20. Mär 2007, 09:15, insgesamt 1-mal geändert.
- Sigittarius-E
- FIQMDTSSOOLUETSNAK
- Beiträge: 8216
- Registriert: Fr 9. Dez 2005, 18:49
- Receivertyp: TF5kPVR/TF3kCIpro
- Receiverfirmware: 13.9.'05 SHUFGmUx/19.4.'04
- Wohnort: Österreich, NÖrdl.d.Donau
AW: Ein paar Fragen zur libFireBird / WSSKiller source
OT: mit dem # Symbol im Editor (oder mit Code: Alles auswählen
|
Grüsse
Sigittarius-E
S-VHS ist nicht S-Video. So schreibt man: Standard, Satellit, wäre. TABs sind was für die Dritten.
TF5000PVR
HD:SP2514N
CAM:irdeto CW v3.15 ORF
Lüfter:Noiseblocker USF S1+Poti.
Verb.
/b]Silex SX2kU2
TV:Toshiba 42"
Auto Start-Reihenf.: GMTTimerBug WA2|QT|IB Prem|StopExit|WSSKiller|JagEPG|Matrix Screensaver|PiP|DisplayTAP|wwww|reccopy|TSBProtector v0.9.0|CheckAndCreate_EPGTimer v1.1
Manuell: SimpleCharEditor v3.09b,SetCryptFlag v0.3,exie v0.3,EBM v0.01
Sigittarius-E
S-VHS ist nicht S-Video. So schreibt man: Standard, Satellit, wäre. TABs sind was für die Dritten.
TF5000PVR
HD:SP2514N
CAM:irdeto CW v3.15 ORF
Lüfter:Noiseblocker USF S1+Poti.
Verb.

TV:Toshiba 42"
Auto Start-Reihenf.: GMTTimerBug WA2|QT|IB Prem|StopExit|WSSKiller|JagEPG|Matrix Screensaver|PiP|DisplayTAP|wwww|reccopy|TSBProtector v0.9.0|CheckAndCreate_EPGTimer v1.1
Manuell: SimpleCharEditor v3.09b,SetCryptFlag v0.3,exie v0.3,EBM v0.01
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28968
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
AW: Ein paar Fragen zur libFireBird / WSSKiller source
[quote=""Stevie2k""]Muss ich die LibFireBird erst irgendwie initialisieren? [/quote]
Ja, nämlich mit InitTAPex(), sonst sind die EMMA_*-Pointer nicht initialisiert.
MfG. Alex
Ja, nämlich mit InitTAPex(), sonst sind die EMMA_*-Pointer nicht initialisiert.
Genau.Was liefert mit result dann eigentlich genau? Den Y-Anteil aus dem YUV Farbraum?Zwischen 0 (Schwarz) und 255 (weiß)?
EMMA_WMIF_ATBL0_C zeigt auf den UV-Buffer. Dort stehen dann 2 Byte per Pixel aber abgesehen davon ist die Formel die Selbe. Es wird im nächsten Release der FBLib eine entsprechende Funktion existieren.Kann ich auf diese Weise auch U und V irgendwie erhalten?
Ist mir zumindest nicht bekannt.Gibt es ein Register mit dem ich feststellen kann, ob es sich bei dem aktuellen Frame um einen I-Frame handelt?
MfG. Alex
- ibbi
- Moderierter Ignorator Bitteschöööön!
- Beiträge: 7110
- Registriert: Fr 9. Dez 2005, 12:49
- Receivertyp: TF5000PVR • SRP-2401CI+ Eco
- Receiverfirmware: Sep 2005 PHTF • Jan 2015
AW: Ein paar Fragen zur libFireBird / WSSKiller source
[quote=""FireBird""]Es wird im nächsten Release der FBLib eine entsprechende Funktion existieren.[/quote]
... in der dann eine explizite Initialisierung für die EMMA_*-Pointer auch nicht mehr nötig ist.
:
... in der dann eine explizite Initialisierung für die EMMA_*-Pointer auch nicht mehr nötig ist.

Power Restore 0.8 | PiP 1.2 | 1.1v | QuickTimer 1.0.3 (IB) | TF5000 Display 1.53 | dbPlay 1.2 | Auto Resume 1.30 | IdleHdd 1.0 | EPPG 2.0 | WWWW 0.1b
(Kanalarbeiter 0.9, RecRepair 0.4, ScanDisk 1.4, ScreenCapture with OSD 3.1)
•
Power Restore 0.8 | EasyTimer 1.0 | EPPG 2.0 | 1.1v
(telnetd 1.0, TMSRemote 4.6)
(Kanalarbeiter 0.9, RecRepair 0.4, ScanDisk 1.4, ScreenCapture with OSD 3.1)
•
Power Restore 0.8 | EasyTimer 1.0 | EPPG 2.0 | 1.1v
(telnetd 1.0, TMSRemote 4.6)
AW: Ein paar Fragen zur libFireBird / WSSKiller source
Um also die YUV Werte eines beliebigen Pixels zu erhalten würde folgende Funktion gehen? (Ich kann das hier atm leider nicht ausprobieren... meine Entwicklungsumgebung und mein Topf sind ca. 30 km voneinander getrennt :-))
@Sigittarius-E: Danke für den Hinweis... ich hab hier kein Java-Script deshalb ist das etwas mühsam mit den Tags...
Code: Alles auswählen
void giveColor (dword x, dword y, int *Y, int *U, int *V) {
dword fx, fy;
dword brightAddr;
dword uvAddr;
dword Width, Height;
int result;
Width = (*EMMA_MPEG_PARAM_SEQ & 0x000000ff) << 4;
Height = (*EMMA_MPEG_PARAM_SEQ & 0x0000ff00) >> 4;
// get the Y frame adress
brightAddr = (((*EMMA_WMIF_ATBL0_Y & 0xffff0000) >> 6) | 0xa0000000);
// get the U and V frame adress
uvAddr = (((*EMMA_WMIF_ATBL0_C & 0xffff0000) >> 6) | 0xa0000000);
//If the horizontal size of the frame is not 720 pixel, scale down the x coordinate
fx = (Width != 720) ? x * Width / 720 : x;
//If the vertical size of the frame is not 576 pixel, scale down the y coordinate
fy = (Height != 576) ? y * Height / 576 : y;
// get the right byte for the adress (calculating the 32 x 32 superblocks) for Y
*Y = *(byte *) (brightAddr + (fx & 0x1f) + ((fy & 0x1f) << 5) + ((fx & 0xffe0) << 5) + ((fy & 0xffe0) * 736));
// get the right byte for the adress (calculating the 32 x 32 superblocks) for U
*U = *(byte *) (uvAddr + (fx & 0x1f) + ((fy & 0x1f) << 5) + ((fx & 0xffe0) << 5) + ((fy & 0xffe0) * 736));
// get the right byte for the adress (calculating the 32 x 32 superblocks) for V
*V = *(byte *) (uvAddr + 1 + (fx & 0x1f) + ((fy & 0x1f) << 5) + ((fx & 0xffe0) << 5) + ((fy & 0xffe0) * 736));
}
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28968
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
AW: Ein paar Fragen zur libFireBird / WSSKiller source
Bei der Adressierung der Farbinformation sehe ich kein 2*.
AW: Ein paar Fragen zur libFireBird / WSSKiller source
Das eine Byte für U hole ich mir aus uvAddr, das andere für V aus uvAddr + 1
Oder kommt erst der gesamte U Aressraum und dann der gesamte V Adress-Raum?
Oder kommt erst der gesamte U Aressraum und dann der gesamte V Adress-Raum?
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28968
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
AW: Ein paar Fragen zur libFireBird / WSSKiller source
Vielleicht ist es wirklich noch zu zeitig in der Nacht für mich:
Das Springen um 2 Bytes sehe ich nicht in Deinem Code. Was ich jetzt nicht beschwören möchte, aber ich glaube, dass das erste der beiden Bytes V ist.
Code: Alles auswählen
uvAddr = (((*EMMA_WMIF_ATBL0_C & 0xffff0000) >> 6) | 0xa0000000);
dword Offset = (fx & 0x1f) + ((fy & 0x1f) << 5) + ((fx & 0xffe0) << 5) + ((fy & 0xffe0) * 736);
*U = *(byte *) (uvAddr + [color=Red]2 *[/color] Offset);
*V = *(byte *) (uvAddr + [color=red]2 *[/color] Offset + 1);
AW: Ein paar Fragen zur libFireBird / WSSKiller source
[quote=""FireBird""]Vielleicht ist es wirklich noch zu zeitig in der Nacht für mich[/quote]
Eher für mich... ich hab das mit den 2 Bytes nicht gescheit umgesetzt... (erst denken dann schreiben hilft :-)
Eher für mich... ich hab das mit den 2 Bytes nicht gescheit umgesetzt... (erst denken dann schreiben hilft :-)