Ein paar Fragen zur libFireBird / WSSKiller source

Zusatz-Programme für Receiver der 5000er und 6000er Serie.

Hier geht's um alles, was mit den TAP Anwendungen für den PVR5x00/6000 zu tun hat.
Stevie2k
Topfazubi
Topfazubi
Beiträge: 26
Registriert: Di 27. Feb 2007, 06:58

Ein paar Fragen zur libFireBird / WSSKiller source

#1

Beitrag von Stevie2k » Mo 19. Mär 2007, 14:46

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

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
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

#2

Beitrag von FireBird » Mo 19. Mär 2007, 15:07

Hi Stevie,

(jetzt wird es mit dem Auseinanderhalten bald wirklich schwierig :wink: )

[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 :thinker: )

MfG. Alex

Benutzeravatar
StevieC
Moderator & Design Guru
<font color=lue>Moderator</font> & <font color=
ed>Design Guru</font>
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

#3

Beitrag von StevieC » Mo 19. Mär 2007, 15:22

[quote=""FireBird""]Hi Stevie,

(jetzt wird es mit dem Auseinanderhalten bald wirklich schwierig :wink: )


[/quote]

Wüsste jetzt nicht, was du meinst :u: :lol:

Gruß

StevieC


iTiNa TMS V0.94
CallMonitor V1.2RC
Mediaaspect V1.3
TMSDisplay V1.5

Benutzeravatar
ibbi
Moderierter Ignorator Bitteschöööön!
Moderierter Ignorator  <font color=#E9E9E9>Bitteschöööön!</font>
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

#4

Beitrag von ibbi » Mo 19. Mär 2007, 15:52

[quote=""FireBird""](eigentlich sollte man die ganze Routine in die FBLib assimilieren :thinker: )[/quote]

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)

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
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

#5

Beitrag von FireBird » Mo 19. Mär 2007, 16:11

[quote=""ibbi""]Sir. Yes, Sir. [/quote]
So war's aber nicht gemeint. :D :

Benutzeravatar
ibbi
Moderierter Ignorator Bitteschöööön!
Moderierter Ignorator  <font color=#E9E9E9>Bitteschöööön!</font>
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

#6

Beitrag von ibbi » Mo 19. Mär 2007, 16:13

[quote=""FireBird""]So war's aber nicht gemeint. :D:[/quote]

Ist schon ok. :D :
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)

Stevie2k
Topfazubi
Topfazubi
Beiträge: 26
Registriert: Di 27. Feb 2007, 06:58

AW: Ein paar Fragen zur libFireBird / WSSKiller source

#7

Beitrag von Stevie2k » Di 20. Mär 2007, 07:29

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. )

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;
}
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 ^^)
Zuletzt geändert von Stevie2k am Di 20. Mär 2007, 09:15, insgesamt 1-mal geändert.

Benutzeravatar
Sigittarius-E
FIQMDTSSOOLUETSNAK
<span title=ForuminformationsquellemitdauertimeshiftschaltungoutingOberlehrerUndErfahrenerTratscherStatusNichtAussprechenKönner>FIQMDTSSOOLUETSNAK</span>
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

#8

Beitrag von Sigittarius-E » Di 20. Mär 2007, 08:27

OT:

mit dem # Symbol im Editor (oder mit

Code: Alles auswählen

 bzw. [/CODE ] kannst du deinen Source Code besser im Thread darstellen. Schaut übersichtlicher (auch für die anderen Boardleser) aus.
 
z.B.
 
[code]int giveColorExample (dword x, dword y) {
dword i, j, fx, fy;
dword picAddr;
.....

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

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
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

#9

Beitrag von FireBird » Di 20. Mär 2007, 08:37

[quote=""Stevie2k""]Muss ich die LibFireBird erst irgendwie initialisieren? [/quote]
Ja, nämlich mit InitTAPex(), sonst sind die EMMA_*-Pointer nicht initialisiert.
Was liefert mit result dann eigentlich genau? Den Y-Anteil aus dem YUV Farbraum?Zwischen 0 (Schwarz) und 255 (weiß)?
Genau.
Kann ich auf diese Weise auch U und V irgendwie erhalten?
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.
Gibt es ein Register mit dem ich feststellen kann, ob es sich bei dem aktuellen Frame um einen I-Frame handelt?
Ist mir zumindest nicht bekannt.

MfG. Alex

Benutzeravatar
ibbi
Moderierter Ignorator Bitteschöööön!
Moderierter Ignorator  <font color=#E9E9E9>Bitteschöööön!</font>
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

#10

Beitrag von ibbi » Di 20. Mär 2007, 08:50

[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. :D :
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)

Stevie2k
Topfazubi
Topfazubi
Beiträge: 26
Registriert: Di 27. Feb 2007, 06:58

AW: Ein paar Fragen zur libFireBird / WSSKiller source

#11

Beitrag von Stevie2k » Di 20. Mär 2007, 09:30

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 :-))


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));
	
} 
@Sigittarius-E: Danke für den Hinweis... ich hab hier kein Java-Script deshalb ist das etwas mühsam mit den Tags...

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
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

#12

Beitrag von FireBird » Di 20. Mär 2007, 09:38

Bei der Adressierung der Farbinformation sehe ich kein 2*.

Stevie2k
Topfazubi
Topfazubi
Beiträge: 26
Registriert: Di 27. Feb 2007, 06:58

AW: Ein paar Fragen zur libFireBird / WSSKiller source

#13

Beitrag von Stevie2k » Di 20. Mär 2007, 09:39

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?

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
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

#14

Beitrag von FireBird » Di 20. Mär 2007, 09:48

Vielleicht ist es wirklich noch zu zeitig in der Nacht für mich:

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);
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.

Stevie2k
Topfazubi
Topfazubi
Beiträge: 26
Registriert: Di 27. Feb 2007, 06:58

AW: Ein paar Fragen zur libFireBird / WSSKiller source

#15

Beitrag von Stevie2k » Di 20. Mär 2007, 09:58

[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 :-)

Antworten

Zurück zu „TF 5x00/6000 PVR TAP“