16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Wünsche, Anträge, Fehlermeldungen
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

dbt hat geschrieben:
Tommy hat geschrieben:das Zipfile mit dem Zoom Plugin unter o.g. Link ist korrupt (läßt sich nicht entpacken)
Ein alternativer Link befindet sich aber im JTG-Board. Ohne Registrierung gehts aber bekanntlich dort nicht, sollte aber kein Problem sein.

http://www.jackthegrabber.de/viewtopic. ... highlight=

OTon:
Kennt jemand 'ne vernünftge Alternative für Postnuke?
OToff
der Link im JTG bringt nicht wirklich was da er auf die gleiche Datei verweist. Der Download startet, läuft durch aber scheint irgendwie kein Ende zu finden. Das Dowloadfenster bleibt bis vermutl Timeout stehen. Die Datei läßt sich weder mit rar, Winzip, XP selbst oder Ace öffnen. Wäre Super wenn Du die Datei ins ULC packst.

EDIT: liegt ja schon Da ;-)

Ich steig momentan durch die Funktion nicht durch. Mein TV unterstützt die automatische Umschaltung, d.h. Wenn vom Sender passend ausgestrahlt (ich komm mit anamorph ja/nein nicht klar) wird aufgezoomt. Ich geh mal davon aus das dies von der dbox über Scartpin gesteuert wird. Wenn ich jetzt mit dem o.g. Plugin die Modi durchschalte passiert rein gar nichts. Erwartet hätte ich, das zumindest bei 16:9 LB brute force gezoomt wird. Ordnungsgemäß installiert ist es (Rechte 755 auf binary und .so. Allerdings konnte ich nirgendwo im zip die .conf finden :gruebel:
Zuletzt geändert von Tommy am Sonntag 20. Mai 2007, 20:12, insgesamt 1-mal geändert.
jmittelst
Tuxboxer
Tuxboxer
Beiträge: 6044
Registriert: Montag 17. November 2003, 06:48

Beitrag von jmittelst »

@Tommy: Ich hab die doch schon stellvertretend ins ULC gepackt. Folge einfach dem Link, den ich oben gepostet hab.

cu
Jens

P.S. Bei mir macht der Download übrigends nirgends Probleme > WinXP > aktueller Opera via Arcor DSL über Router
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Beitrag von dbt »

Eigentlich wollte ich es vermeiden die Sachen kreuz und quer zu lagern.
Habs aber mal neu mit Winrar-gepackt und hierabgelegt. Fürs ULC habe ich noch keinen Account, werds aber noch nachholen.

@Tommy
Ich geh mal davon aus das dies von der dbox über Scartpin gesteuert wird.
Wird es nicht!
Alle WSS-Modi werden übers Bildsignal geschickt. Dein TV muss daher auf Autozoom stehen. RGB-Zentrierung der Box auf 0 stellen, sonst gehts auch nicht.
Um das WSS-Tool zu konfigurieren, empfehle ich den XEditor.
Damit tut man sich leichter.
Allerdings konnte ich nirgendwo im zip die .conf finden
brauchst Du auch nicht, wird beim ersten Start des Tools eigenständig angelegt. Steht alles in der Doku...
Edv-Man
Interessierter
Interessierter
Beiträge: 72
Registriert: Sonntag 15. Mai 2005, 11:39

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Edv-Man »

Ich würde das WSSD-Plugin auch gerne mit einem YADI 2.01 aus 2005 verwenden - kann es sein, dass das WSSD-Plugin damit nicht läuft oder noch spezielle Anpassungen notwendig sind?

Die Dateien wurden genau nach Anleitung kopiert und ausführbar gemacht, dann Plugins neu geladen und neuer Menüpunkt erscheint auch, aber es tut sich nach Aufruf dieses Menüpunktes nichts und eine wss.conf wird auch nicht angelegt.

Per Telnet sieht es dann so aus:

/var # /var/bin/wssd
/var/bin/wssd: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory


Gruß
Mike

(Ein neueres Image nöchte ich ungern flashen, da mir der MP3-Player in den Nachfolgeversionen nicht mehr flott genug bedienbar ist...)
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von dbt »

Wegen der lib sieht's schlecht aus. Das Tool wurde Ende 2006 compiled. sorry. :( aber der MP3-Player läuft doch eigentlich sauber, den Umständen entsprechend was die Box eben rausholen kann.
Edv-Man
Interessierter
Interessierter
Beiträge: 72
Registriert: Sonntag 15. Mai 2005, 11:39

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Edv-Man »

Oh das ist schade, dann muss ich halt mit den weissen Strichen bei den SF es leben.

Jaja der MP3-Player läuft schon sauber, aber wenn er gerade was abspielt, vor allem mit höherer Bitrate als 128, dann funktioniert das Scrollen zu einem anderen Titel bei den Nachfolgeversionen schon deutlich langsamer/zögerlicher (auch bei hoher Priorität). Zumindest bei meiner Box ;-)
Und das ist eben für mich als intensiven MP3-Nutzer ein K.O.-Kriterium.

Gruß
Mike
dwilx

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von dwilx »

Was meinst Du denn...
Edv-Man hat geschrieben:...mit den weissen Strichen bei den SF e...
Regloh
Semiprofi
Semiprofi
Beiträge: 1470
Registriert: Donnerstag 14. März 2002, 07:14

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Regloh »

Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Gorcon »

Gabs da nichtmal so ein Plugin zum Abdecken von Logos, das könnte man dann auch nutzen zum abdecken der WSS Signale.

Habs gefunden LogoMask
Edv-Man
Interessierter
Interessierter
Beiträge: 72
Registriert: Sonntag 15. Mai 2005, 11:39

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Edv-Man »

Habs gefunden LogoMask
Genial - und weg sind die weissen Striche. :D
DANKE!

Gruß
Mike
dwilx

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von dwilx »

vorhol...
Mal eine Frage für die EPG-Spezies :wink:
Gibt es eigentlich über den EPG die Möglichkeit, das LB-Format einer Sendung zu erkennen? Meine ja nur, in Programzeitschriften hat man ja auch oft die entsprechenden Angaben dazu abgedruckt, wäre immerhin denkbar , dass es auch mit der elektronischen Programmzeitschrift möglich ist. Die FSK-Angabe wird ja ebenso im EPG mitgeliefert.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von seife »

http://pda.etsi.org/pda/queryform.asp
Dort "DVB Service Information" "(*) All Words" Auswählen und "Search" klicken.

Das führt dich zu "ETSI EN 300 468 V1.8.1 (2008-07)" "Title: Digital Video Broadcasting (DVB);Specification for Service Information (SI) in DVB systems". Dort registrieren und downloaden.

Oder diesen Link hier nehmen: http://webapp.etsi.org/action/OP/OP2008 ... 10801o.pdf

Dort müsste das drinstehen.
dwilx

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von dwilx »

Scheint tatsächlich was zu geben einschließlich HD.
Auf Seite 38 Final draft ETSI EN 300 468 V1.8.1 (2007-10) ist das zu finden:

Code: Alles auswählen

Table 26: Stream_content and component_type
Stream_content Component_type Description
0x00 0x00 to 0xFF reserved for future use
0x01 0x00 reserved for future use
0x01 0x01 MPEG-2 video, 4:3 aspect ratio, 25 Hz (see note 2)
0x01 0x02 MPEG-2 video, 16:9 aspect ratio with pan vectors, 25 Hz (see note 2)
0x01 0x03 MPEG-2 video, 16:9 aspect ratio without pan vectors, 25 Hz (see note 2)
0x01 0x04 MPEG-2 video, > 16:9 aspect ratio, 25 Hz (see note 2)
0x01 0x05 MPEG-2 video, 4:3 aspect ratio, 30 Hz (see note 2)
0x01 0x06 MPEG-2 video, 16:9 aspect ratio with pan vectors, 30 Hz (see note 2)
0x01 0x07 MPEG-2 video, 16:9 aspect ratio without pan vectors, 30 Hz (see note 2)
0x01 0x08 MPEG-2 video, > 16:9 aspect ratio, 30 Hz (see note 2)
0x01 0x09 MPEG-2 high definition video, 4:3 aspect ratio, 25 Hz (see note 2)
0x01 0x0A MPEG-2 high definition video, 16:9 aspect ratio with pan vectors, 25 Hz (see note 2)
0x01 0x0B MPEG-2 high definition video, 16:9 aspect ratio without pan vectors, 25 Hz (see note 2)
0x01 0x0C MPEG-2 high definition video, > 16:9 aspect ratio, 25 Hz (see note 2)
0x01 0x0D MPEG-2 high definition video, 4:3 aspect ratio, 30 Hz (see note 2)
0x01 0x0E MPEG-2 high definition video, 16:9 aspect ratio with pan vectors, 30 Hz (see note 2)
0x01 0x0F MPEG-2 high definition video, 16:9 aspect ratio without pan vectors, 30 Hz (see note 2)
0x01 0x10 MPEG-2 high definition video, > 16:9 aspect ratio, 30 Hz (see note 2)
Müsste man irgendwie sehen ob das auch tatsächlich im Stream verbaut ist. Ginge das mit DVBSnoop zu erkennen?
NanoBot
Interessierter
Interessierter
Beiträge: 59
Registriert: Samstag 9. März 2002, 20:58

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von NanoBot »

Hi,

Die in der obigen Tabelle angegebenen Signale sind natürlich im Stream vorhanden. Nur leider nutzen uns die hier angegebenen Formatdaten nichts.

Es ging ja um die Frage, ob man bei Sendungen, die auf 4:3 letterboxed wurden, das Originalformat erkennen kann, um das TV-Gerät dann per WSS dazu zu bringen, den passenden Zoom anzuwenden. Das WSS Signal sieht dies ja ausdrücklich vor, im Gegensatz hierzu ist es in der DVB-Norm wohl nicht vorgesehen.

Dies hat auch einen nachvollziehbaren Grund: Die Verwendung einer Letterbox ist bei DVB-Empfang völlig überflüssig und sinnlos. Jeder DVB-Receiver ist in der Lage, anhand der oben angegebenen Flags ein anamorphes Videosignal zu erkennen und bei Bedarf zu entzerren, indem er von sich aus eine Letterbox hinzufügt.

Ursächlich für das Problem ist vielmehr die falsche Sparsamkeit bei vielen, vornehmlich den privaten, Senderanbietern: Wenn ich das Signal letterboxed sende, spare ich Bandbreite und brauche es vor der Einspeisung in analoge Netze nicht noch einmal aufbereiten. Daher kommt doch die Unsitte, daß per DVB überhaupt letterboxed Signale gesendet werden.

C.U. NanoBot
dwilx

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von dwilx »

Dies hat auch einen nachvollziehbaren Grund: Die Verwendung einer Letterbox ist bei DVB-Empfang völlig überflüssig und sinnlos. Jeder DVB-Receiver ist in der Lage, anhand der oben angegebenen Flags ein anamorphes Videosignal zu erkennen und bei Bedarf zu entzerren, indem er von sich aus eine Letterbox hinzufügt.
Es geht aber nicht um anamorphe Sendungen. Das Thema ist schon lange vom Tisch. Das funktioniert sowieso. Es geht nur um die Blackbars und wie man die erkennt und konkret, ob genau das irgendwie im EPG als reine Programminfo (siehe FSK) oder im besten Fall im Stream als Flag hinterlegt wird.

Letzlich landet das Signal am TV-Gerät und in der momentanen Situation immer noch analog, also nicht digital, solange nicht sowas wie HDMI oder HDTV im Spiel ist. Was dann an der Scart-Buchse ankommt ist also kein DVB mehr, sondern herkömmliches analoges PAL (darum gehts ja bei der Box). Der TV weiß also nichts von irgendwelchen DVB-Flags, aber WSS versteht der schon. Es war mir daher Gedanke gekommen, ob so ein Flag oder was auch immer, der über EPG oder Stream verbaut sein könnte, nutzbar wäre. Man könnte das als WSS übersetzen, was einen Algo für eine BlackBarDetection überflüssig machen würde. Das hängt natürlich auch wieder von der Mitteilungsfreudigkeit der Sender ab. Aber wenn man die Pixelgewitter bei einigen (Billig-)Sendern anschaut, kann man sich auch vorstellen, dass nicht nur an Datenraten gespart, sondern auch für solche Sachen keine Zeit verschwendet wird.
SnowHead
Einsteiger
Einsteiger
Beiträge: 105
Registriert: Sonntag 6. Juni 2004, 16:04

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von SnowHead »

Das Thema hier ruht zwar schon eine Weile, aber vielleicht kann ja folgende Lösung Einigen helfen. Ich hatte nämlich seit kurzem auch das Problem, daß mein neuer TV seinen Zoom nicht mehr entsprechden dem Bildinhalt automatisch eingestellt hat und somit z.B. auf Pro7, wo ja sehr gern 16:9-Filme aus Spargründen im 4:3-Format ausgestrahlt werden, nun nicht nur links und rechts schwarze Balken zu sehen waren, sondern auch oben und unten. Von der nutzbaren Bildschirmdiagonale blieb da nicht viel übrig. Auch Discovery Channel sendet gern mal 14:9-Inhalte, ohne das WSS-Signal umzustellen. Da gerade Plasma-Fernseher auf immer wiederkehrende schwarze Streifen an den gleichen Stellen über längere Zeit mit Einbrenneffekten reagieren und um in solchen Fällen endlich wieder ein formatfüllendes Bild zu sehen, habe ich mal ein Tool zusammengeschrieben, welches (zumindest schon mal in experimenteller Form) eine dem Bildinhalt entsprechende Umschaltung des WSS-Signals vornimmt. Ich habe es erst mal als eigenständiges Binary realisiert (auch wenn extra Plugins verpönt sind und die bekannten Abschneide-Probleme von Infobar und Senderliste bei aufgezoomtem Bild auftreten), da es sich so leichter bauen und testen läßt. Dieses Tool analysiert nun das innere Drittel (um nicht durch Logos gestört zu werden) des oberen Bildrandes und schaltet entsprechend der Anzahl der gefundenen Schwarzzeilen das WSS zwischen zwei einstellbaren Bildformaten und "aus" um. Im Standardmodus werden wirklich nur schwarze Bildschirmzeilen ausgewertet, im experimentellen Modus wird versucht, z.B. den bei VIVA in diesem Bildbereich gesendeten Schrott zu ignorieren. Als Gerüst für Grabbing und Umwandlung habe ich das Outdoor-Plugin verwendet, welches für diesen Zweck fast ideal war. Das befürchtete Ausbremsen der Box bleibt bei moderater Einstellung des Abfrageintervalls aus und auch eine laufende Aufnahme wird bei aktivem Plugin nicht unterbrochen. Steuerung und Konfiguration erfolgen bei mir über das FlexMenü. Die Config-Datei ist natürlich auch von Hand editierbar. Sinnvollerweise sollte das Teil automatisch mit gestartet werden und ständig laufen, da die Bildinhalte in den Sendern sich ohne weitere Informationen aus dem EPG immer wieder ändern (auch innerhalb einer Sendung).

Hier die (erst mal unkommentierte) Quelle des Tools "aformat.c" an sich:

Code: Alles auswählen

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/poll.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>

#include <dbox/saa7126_core.h>

#define SAA7126_DEVICE "/dev/dbox/saa0"

#include <config.h>

#define P_VERSION "1.1"

#if HAVE_DVB_API_VERSION >= 3
 #include <linux/dvb/avia/avia_gt_capture.h>
#else
 #include <dbox/avia_gt_capture.h>
#endif

int stride;
static char msg[]="[aformat] ";
static char CFG_FILE[]="/var/tuxbox/config/aformat.conf";
static char ZAP_FILE[]= "/tmp/.actchan";
char *tstr=NULL,*blacklist=NULL, line_buffer[64];

#define XRES	120
#define YRES	65
#define CYRES	32 

void TrimString(char *strg)
{
char *pt1=strg, *pt2=strg;

	while(*pt2 && *pt2<=' ')
	{
		++pt2;
	}
	if(pt1 != pt2)
	{
		do
		{
			*pt1=*pt2;
			++pt1;
			++pt2;
		}
		while(*pt2);
		*pt1=0;
	}
	while(strlen(strg) && strg[strlen(strg)-1]<=' ')
	{
		strg[strlen(strg)-1]=0;
	}
}

int HTTP_downloadFile(char *host, int port, char *page, char *downloadTarget, int tmo, int repeats)
{
   char ustr[256];
   
   sprintf(ustr,"wget -Y off -q -O %s http://%s:%d%s",downloadTarget,host,port,page);
   system(ustr);
   return 0;
}

int is_blacklisted(void)
{
FILE *fh1;
	
	if(blacklist)
	{
		if(!HTTP_downloadFile("localhost",80,"/control/zapto", ZAP_FILE, 0, 1))
		{
			if((fh1=fopen(ZAP_FILE,"r"))!=NULL)
			{
				while((fgets(line_buffer, sizeof(line_buffer), fh1)>0) && (strlen(line_buffer)<4));
				if(strlen(line_buffer)>1)
				{
					TrimString(line_buffer);
					if(strstr(blacklist,line_buffer)!=NULL)
					{
						fclose(fh1);
						return 1;
					}
				}
				fclose(fh1);
			}
		}
	}
	return 0;
}

int read_wss(void)
{
	int arg=0;
	int fd;

	if((fd = open(SAA7126_DEVICE,O_RDWR|O_NONBLOCK)) < 0){
		perror("SAA DEVICE: ");
		return -1;
	}

	if ( (ioctl(fd,SAAIOGWSS,&arg) < 0)){
		perror("IOCTL: ");
		close(fd);
		return -1;
	}
	close(fd);

	return arg;
}

void write_wss(int mode)
{
	int arg=mode;
	int fd;

	if((fd = open(SAA7126_DEVICE,O_RDWR|O_NONBLOCK)) < 0){
		perror("SAA DEVICE: ");
		return;
	}

	if ( (ioctl(fd,SAAIOSWSS,&arg) < 0)){
		perror("IOCTL: ");
		close(fd);
		return;
	}
	close(fd);
}

inline int compute(int l, int d)
{
	switch (d)
	{
	case 0:
		return l;
	case 1:
		return l+2;
	case 2:
		return l+8;
	case 3:
		return 0x1C;
	case 4:
		return 0x30;
	case 5:
		return 0x44;
	case 6:
		return 0x58;
	case 7:
		return 0x6c;
	case 8:
		return 0x80;
	case 9:
		return 0x94;
	case 10:
		return 0xa8;
	case 11:
		return 0xbc;
	case 12:
		return 0xd0;
	case 13:
		return 0xe4;
	case 14:
		return l-8;
	case 15:
		return l-2;
	default:
		return 0;
	}
}

int read_frame(int fd, int experimental)
{
	unsigned short buffer[stride*CYRES/2], ts, go, lum=0;
	int x, y, tz=3, cnt=0, CXRES=stride/6;
	int LXRES=(stride>>1) - CXRES - 4;
	read(fd, buffer, stride * CYRES);

	for (y=1; y<CYRES && tz; y++)
	{
		go=1;
		for (x=CXRES; x<LXRES && go; x++)
		{
			if(ts=buffer[y*stride/2+x])
			{
				if(experimental)
				{
					int val=buffer[y*stride/2+x];
					int dy[2]={val&0xF, (val>>8)&0xF};
					lum=compute(lum, dy[1]);
					if(abs(lum)>0x02)
						go=0;
					lum=compute(lum, dy[0]);
					if(abs(lum)>0x02)
						go=0;
				}
				else
				{
					go=0;
				}
			}
		}
		if(!go)
			tz--;
		if(tz)
			cnt++;
	}
	return cnt;
}

int main(int argc, char **argv)
{
	int capture, amode=0, tmode, repeat=0, trepeat, fcnt, scnt, tv, loop=3, exp=0, run=0, maxblack14=24, maxblack16=48, wide14=1, wide16=3, normal=0, noswitch=7;
	unsigned long towait=3000000L;
	long size;
	FILE *cfh;
	unsigned char *tptr;

	printf("aformat: Automatisches Bildschirmformat Version %s\n",P_VERSION);
	
	for(tv=1; tv<argc; tv++)
	{
		if(strstr(argv[tv],"LOOP")==argv[tv])
			run=1;
	}

	if((cfh=fopen(CFG_FILE,"r"))!=NULL)
	{
   		fseek(cfh, 0, SEEK_END);
   		size = ftell(cfh);
		rewind(cfh);
		tstr=malloc(size);
		if(fread(tstr, 1, size, cfh))
		{

			tptr=tstr;
			if(((tptr=strstr(tptr,"LOOP=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&loop)!=1)
				{
					loop=3;
				}
			}
			if(((tptr=strstr(tptr,"REPEAT=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr,"%d",&repeat)!=1)
				{
					repeat=0;
				}
			} 
			if(((tptr=strstr(tptr,"NOSWITCH=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&noswitch)!=1)
				{
					noswitch=7;
				}
			} 
			if(((tptr=strstr(tptr,"MAXBLACK14=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&maxblack14)!=1)
				{
					maxblack14=24;
				}
			} 
			if(((tptr=strstr(tptr,"MAXBLACK16=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&maxblack16)!=1)
				{
					maxblack16=48;
				}
			} 
			if(((tptr=strstr(tptr,"WIDE14=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&wide14)!=1)
				{
					wide14=1;
				}
			} 
			if(((tptr=strstr(tptr,"WIDE16=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&wide16)!=1)
				{
					wide16=3;
				}
			} 
			if(((tptr=strstr(tptr,"NORMAL=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&normal)!=1)
				{
					normal=0;
				}
			} 
			if(((tptr=strstr(tptr,"EXPERIMENTAL=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&exp)!=1)
				{
					exp=0;
				}
			} 
			if(((tptr=strstr(tptr,"BLACKLIST=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				blacklist=strdup(tstr);
			}
		}
		fclose(cfh);
	}
	if(tstr)
		free(tstr);
	towait=1000000L*loop;
	trepeat=repeat;

	while(run || (access("/var/etc/.aformat",0)!=-1))
	{

		amode=read_wss();
		
		if(amode!=noswitch)
		{
			if(!is_blacklisted())
			{
				capture=open("/dev/dbox/capture0", O_RDONLY);
				capture_stop(capture);
				capture_set_input_pos(capture, 0, 0);
				capture_set_input_size(capture, 720, 576);
				capture_set_output_size(capture, XRES, YRES*2);
				stride = capture_start(capture);
				usleep(10000);
				fcnt=read_frame(capture,exp);
				capture_stop(capture);
				close(capture);
	
				capture=open("/dev/dbox/capture0", O_RDONLY);
				capture_stop(capture);
				capture_set_input_pos(capture, 0, 0);
				capture_set_input_size(capture, 720, 576);
				capture_set_output_size(capture, XRES, YRES*2);
				stride = capture_start(capture);
				usleep(10000);
				scnt=read_frame(capture,exp);
				capture_stop(capture);
				close(capture);

				if((fcnt!=scnt) || (fcnt==31))
				{
					fcnt=-1;
				}
				else
				{
					fcnt-=2;
					fcnt<<=3;
				}
		
				if(fcnt>=0)
				{
					tmode=-1;
					if(fcnt>=maxblack16)
					{
						if(amode != 3 && amode != 4 && amode != 5 && amode != 7)
							tmode=wide16;
					}
					else
						if(fcnt>=maxblack14)
						{
							if(amode != 1 && amode != 2 && amode != 6 && amode != 7)
								tmode=wide14;
						}
						else
							tmode=normal;
	
					if(tmode>=0 && amode!=tmode)
					{
						if(!trepeat)
						{
							write_wss(tmode);
							trepeat=repeat;
							printf("%sBildformat von Modus %d auf %d umgeschaltet\n",msg,amode,tmode);
						}
						else
							--trepeat;
					}
				}
				else
					trepeat=repeat;
			}
			else
			{
				if(amode!=8)
					write_wss(8);
				trepeat=repeat;
			}
		}
		else
			trepeat=repeat;
		usleep(towait);
	}
	printf("%sProgrammende\n",msg);
	return 1;
}
.. hier die Config "/var/tuxbox/config/aformat.conf":

Code: Alles auswählen

####################################################################################
#### 				Konfigurationsdatei fuer aformat 
#### 			Automatische Formatanpassung bei Schummelsendern
####################################################################################
 
# Aller wieviel Sekunden soll getestet werden?
LOOP=3 
 
# Wie oft soll der Test vor dem Umschalten wiederholt werden?
REPEAT=1
 
# WelcheS Format soll nicht veraendert werden?
NOSWITCH=7
 
# Ab wieviel schwarzen Zeilen am oberen Bildrand soll auf 14:9 umgeschaltet werden?
MAXBLACK14=16 
 
# Ab wieviel schwarzen Zeilen am oberen Bildrand soll auf 16:9 umgeschaltet werden?
MAXBLACK16=48 
 
# Auf welches Format soll bei 14:9 umgeschaltet werden?
WIDE14=1
 
# Auf welches Format soll bei 16:9 umgeschaltet werden?
WIDE16=3
 
# Auf welches Format soll bei erkanntem Vollbild umgeschaltet werden?
NORMAL=0
 
# Soll der experimentelle Modus verwendet werden?
EXPERIMENTAL=1
 
# moegliche Formate (siehe Kommando "saa")
# 0 4:3 full format
# 1 14:9 center letterbox
# 2 14:9 top letterbox
# 3 16:9 center letterbox
# 4 16:9 top letterbox
# 5 >16:9 center letterbox
# 6 4:3 with 14:9 center letterbox
# 7 16:9 full format (anamorphic)
# 8 turned off
 
# Auf welchen Kanaelen soll keine Formatumschaltung erfolgen?
BLACKLIST=
... und hier die readme.txt dazu:
####################################################################################
#### aformat 1.1
#### Automatische Formatanpassung bei Schummelsendern
####################################################################################

Viele Sender (z.B. "Discovery-Channel" oder "Discovery Geschichte") machen es sich aus
Kostengründen zur Angewohnheit, auch Sendungen, welche ursprünglich im 16:9- oder sogar
Kino-Format aufgenommen wurden, einfach auf 4:3 runterzuskalieren und dann so zu senden.
Das Ergebnis besteht dann bei 16:9-Fernsehern in schwarzen Streifen nicht nur links und
rechts sondern zusätzlich oben und unten. Da ist dann auf dem nutzbaren Bereich eines
Fernsehers nicht mehr viel zu sehen. Auch mögen Plasmafernseher solche Balken im Hinblick
auf den Einbrenneffekt überhaupt nicht.
Deshalb habe ich mal eine Testversion einer entsprechenden Umschaltung gebaut. Sie wertet
die Größe der schwarzen Balken am oberen Bildrand aus und zoomt das Bild entsrechend der
gemachten Einstellungen auf. Das funktioniert allerdings nur bei Fernsehern, welche das WSS-
Signal (wide screen signaling) auswerten können. Das sollten die meisten können.
Für die Basisfunktion ist das Plugin "aformat" mit den Rechten 755 nach /var/plugins/ und
"aformat.conf" nach /var/tuxbox/config/ zu kopieren. Gestartet wird entweder automatisch
oder über das Flexmenü.
Wichtig: Um das Plugin beim Boxenstart automatisch zu starten, ist noch die Zeile
"[ -e /var/etc/.aformat ] && ( sleep 20; aformat ) &" in die start_neutrino vor dem eigent-
lichen Start von Neutrino einzufügen.

Start und Konfiguration über das Flexmenü:

Installation des Flexmenüstarts:
--------------------------------
plrun_aformat.mnu --> nach /var/tuxbox/config/flexinc/
in_plugin_run.mnu_einfuegen --> den Inhalt in /var/tuxbox/config/flexinc/plugin_run.mnu einfügen

Gesteuert wird das Plugin nun übers Menü unter:
Automatikformat starten / beenden

Installation der Menükonfiguration:
-----------------------------------
afops --> nach /var/plugins/ + Dateirechte 755
plconfig_aformat.mnu --> nach /var/tuxbox/config/flexinc
in_plugin_config.mnu_einfuegen --> den Inhalt in /var/tuxbox/config/flexinc/plugin_config.mnu einfügen
Ich habe das gesamte Paket hier hochgeladen. Es enhält neben der Binary auch die passenden Einträge für das FlexMenü und ein zugeschnittenes Konfigurationsscript. Wer das FlexMenü nicht verwendet, kann den folgenden Abschnitt überspringen. Zum Verständnis der Dateien muß ich mal kurz auf das hier verwendete Konzept des FlexMenüs eingehen. Um nicht immer bei jeder kleinen Änderung, Installation oder Deinstallation die zentrale Konfigurationsdatei des FlexMenüs bearbeiten zu müssen, hat sich folgendes Konzept eingebürgert: Jedes Plugin hat eine eigene FlexMenü-Konfig für den Start und eine für die Konfiguration. Diese pluginspezifischen Konfigs werden mittels INCLUDE in zentrale Start- und Konfigurationsdateien eingebunden, welche wiederum in der zentralen Menüdatei "shellexec.conf" includiert sind. Somit muß bei einer Änderung nur die kleine pluginspezifische Konfig-Datei bearbeitet werden und beim Installieren bzw. Deistallieren des Plugins werden einfach die entsprechenden INCLUDE-Zeilen in den Zentraldateien hinzugefügt oder halt gelöscht. Es existiert also die zentrale shellexec.conf in /var/tuxbox/config/, welche mittels

Code: Alles auswählen

INCLUDE=/var/tuxbox/config/flexinc/plugin_run.mnu
INCLUDE=/var/tuxbox/config/flexinc/plugin_config.mnu
die Zentraldateien einbindet. Diese enthalten (neben den Einträgen für die übrigen Plugins) auch die Verweise auf die Menüdateien des Autoformats:

/var/tuxbox/config/flexinc/plugin_run.mnu:

Code: Alles auswählen

INCLUDE=/var/tuxbox/config/flexinc/plrun_aformat.mnu
/var/tuxbox/config/flexinc/plugin_config.mnu:

Code: Alles auswählen

INCLUDE=/var/tuxbox/config/flexinc/plconfig_aformat.mnu
Wer will, kann diese beiden Dateien auch gleich direkt in die shellexec.conf einbinden. Das Konfigurations-Script geht allerdings davon aus, daß daß die beiden Menüdateien in var/tuxbox/config/flexinc/ liegen und auch wie angegeben heißen. Wer das ändern will, muß das Script entsprechend anpassen.

Um das Plugin automatisch starten zu können, ist der Eintrag

Code: Alles auswählen

[ -e /var/etc/.aformat ] && ( sleep 20; aformat ) &
in die start_neutrino vor der Keep-Alive-Schleife von Neutrino einzufügen. Wer den Eintrag lieber in der init.end vornehmen möchte, muß aformat dann aber innerhalb der Keep-Alive-Schleife in der start_neutrino hinter dem Aufruf von Neutrino killen.

Für die Anpassung der Einstellungen in der aformat.conf per Hand sind die entprechenden Parameter in der Config selbst und in der readme.txt erläutert.

Als kleine Einstellungshilfe hier mal die ganzen Settings, mit welchen ich mit meinem Panasonic TX-P37X10E immer das passende Format ohne Eierköpfe oder abgeschnittene Bildbereiche habe:

Code: Alles auswählen

Plugin-Settings: Default-Einstellungen
DBox: Einstellungen -> Video -> Bildschirmformat: automatisch
Fernseher: Aspect 4:3
Zusammenfassend kann ich sagen, daß mit den passenden Einstellungen außer bei Animationsfilmen (vor allem bei den Simpsons) eine doch recht zuverlässige Erkennung von Letterbox-Sendungen und die entsprechende Umschaltung erfolgt, ohne die Box zu sehr zu belasten. An Verbesserungsvorschlägen bin ich natürlich interessiert. Vielleicht findet ja jemand noch eine sicherere Auswertemethode oder baut es gleich in Neutrino ein. Wobei im Hinblick auf Updates wohl erst mal die Plugin-Version günstiger ist.

PS: Ich hoffe, ich habe alle anstößigen Hinweise aus den Dateien entfernt und dabei keine zusätzlichen Feher eingebaut. Falls nicht, bitte nicht zerfleischen sondern sachlich darauf hinweisen.
Zuletzt geändert von SnowHead am Freitag 4. September 2009, 21:11, insgesamt 6-mal geändert.
dwilx

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von dwilx »

SnowHead hat geschrieben:Das Thema hier ruht zwar schon eine Weile,...
Hätte auch nicht gedacht, dass sich das so lange hält. Das sind jetzt ca. 7 :wink: Jahre. http://forum.tuxbox-cvs.sourceforge.net ... 926#p64926
Danke. Das scheint mal eine Lösung zu sein, die was bringen könnte, obwohl ich selbst nicht so gerne mit dem Flexmenü hantieren würde. Eine integrierte Lösung für Neutrino wäre mir lieber.
Das würde aber wahrscheinlich auch nur auf der dBox funktionieren, bzw. dort wo SAA drin ist. Evtl. portiert jemand dein Tool für Neutrino... :wink: Super wäre dieses Feature allemal.->immernoch
SnowHead
Einsteiger
Einsteiger
Beiträge: 105
Registriert: Sonntag 6. Juni 2004, 16:04

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von SnowHead »

Wenn Du die Konfiguration mit einem Editor vornimmst und das Teil mit in den Autostart aufnimmst oder Dir einen Shellstarter zum Starten/Beenden per Hand baust, benötigst Du das FlexMenü nicht. Achte aber darauf, aformat mit dem Kommandozeilenparameter "LOOP" aufzurufen, wenn Du nicht mit der Datei /var/etc/.aformat" arbeitest, da sich das Plugin sonst sofort wieder beenden würde, wenn es diese Datei nicht findet. Ob der feste Einbau in Neutrino sinnvoll ist, will ich nicht entscheiden. Da aber jeder Fernseher anders reagiert, ist der Test- und Konfigurationsaufwand für dieses Teil sehr hoch und sollte meiner Meinung nach nur Profis vorbehalten bleiben, da hier sehr hoher Erläuterungsbedarf besteht und sich sonst die Meldungen über "Fehler" im Neutrino häufen würden. Wer sich das Teil händisch einbaut, sollte wissen was er macht und die unerklärlichen Reaktionen seines Fernseher zuordnen und interpretieren können. Im Moment ist es ja eh nur mehr eine Machbarkeitsstudie. Und natürlich funktioniert dieses Plugin auch nur in Geräten mit capture- und saa-devices welche von der Konfigurations- und Datenseite identisch zu denen der DBox-Devices sind.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von seife »

wir können es ja auf jeden Fall mal ins CVS packen (wenn dir das recht ist und du es unter GPL veröffentlichst), dann gehts nicht verloren und man kann flash-targets dafür machen etc.

Dummerweise reagiert mein Fernseher nicht auf WSS etc, darum kann ich's nicht direkt ausprobieren ;(
Die anderen APIs (dreambox, TD) muss ich mir mal anschauen, ob die nur PIP können oder ob man da auch ein Frame grabben kann. Die dream müsste das eigentlich können, denn da kann man einen Screenshot vom Fernsehbild im Webinterface machen...
SnowHead
Einsteiger
Einsteiger
Beiträge: 105
Registriert: Sonntag 6. Juni 2004, 16:04

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von SnowHead »

Ihr könnt damit machen, was Ihr wollt. Sonst hätte ich es hier nicht gepostet. Ich muß allerdings zu meiner Schande gestehen, daß ich doch nicht alles bereinigt habe. "HTTP_downloadFile()" ist bei mir in einer speziellen Lib welche ich aus hoffentlich nachvollziehbaren Gründen hier nicht hochstellen kann und das würde beim Bauen natürlich als fehlend angemeckert werden. Um jetzt nicht das ganze easycurl-Gedöns hier mit einbinden zu müssen, könnte man diese Funktion erst mal Quick'n dirty in aformat.c selbst so deklarieren:

Code: Alles auswählen

int HTTP_downloadFile(char *host, int port, char *page, char *downloadTarget, int tmo, int repeats)
{
	char tstr[256];
	
	sprintf(tstr,"wget -Y off -q -O %s http://%s:%d%s",downloadTarget,host,port,page);
	system(tstr);
	return 0;
}
oder den aktuellen Sender intelligenter abfragen (z.B. gleich ein CPP-Programm draus machen und den zapitclient verwenden). Für erste Tests sollte es aber erst mal so reichen. Für das CVS ist es meiner Meinung nach noch zu früh, aber das könnt ihr, wie gesagt, halten wir Ihr möchtet.

PS: Ich habe das oben in der Quelle gleich mal geändert.
Zuletzt geändert von SnowHead am Mittwoch 17. Juni 2009, 20:49, insgesamt 2-mal geändert.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Houdini »

cool,
das faule Pro7 Format geht mir auch schon 'ne weile auf den Senkel...

Danke
SnowHead
Einsteiger
Einsteiger
Beiträge: 105
Registriert: Sonntag 6. Juni 2004, 16:04

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von SnowHead »

So, zum Testen mal schnell auf zapitclient umgeschrieben. Der Rest ist allerdings immer noch ANSI-C. Bin in dieser Hinsicht halt ein Fossil. Den controldclient kann man leider nicht verwenden, da er nicht alle Formate unterstützt. Da muß man also weiter direkt über den SAA gehen. Ich habe die "aformat.cpp" mal nach ...cvs/apps/dvb/zapit/src/ gepackt und dort auch die makefile.am wie unten beschrieben angepasst. Es gibt sicher bessere Orte, wo man da platzieren könnte, aber so war es erst mal am einfachsten. Nachteil der Verwendung des zapitclient ist die Vergrößerung der Binary um 5kB.

aformat.cpp

Code: Alles auswählen

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/poll.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>
#include <zapit/client/zapitclient.h>

#include <dbox/saa7126_core.h>

#define SAA7126_DEVICE "/dev/dbox/saa0"

#include <config.h>

#define P_VERSION "1.2"

#if HAVE_DVB_API_VERSION >= 3
 #include <linux/dvb/avia/avia_gt_capture.h>
#else
 #include <dbox/avia_gt_capture.h>
#endif

int stride;
static char msg[]="[aformat] ";
static char CFG_FILE[]="/var/tuxbox/config/aformat.conf";
char *tstr=NULL, *blacklist=NULL, line_buffer[64];

#define XRES	120
#define YRES	65
#define CYRES	32 

void TrimString(char *strg)
{
char *pt1=strg, *pt2=strg;

	while(*pt2 && *pt2<=' ')
	{
		++pt2;
	}
	if(pt1 != pt2)
	{
		do
		{
			*pt1=*pt2;
			++pt1;
			++pt2;
		}
		while(*pt2);
		*pt1=0;
	}
	while(strlen(strg) && strg[strlen(strg)-1]<=' ')
	{
		strg[strlen(strg)-1]=0;
	}
}

int is_blacklisted(void)
{
CZapitClient zapit;
t_channel_id channel=zapit.getCurrentServiceID();
	
	if(blacklist)
	{
		sprintf(line_buffer,"%llx",channel);
		return (strstr(blacklist,line_buffer)!=NULL);
	}
	return 0;
}

int read_wss(void)
{
	int arg=0;
	int fd;

	if((fd = open(SAA7126_DEVICE,O_RDWR|O_NONBLOCK)) < 0){
		perror("SAA DEVICE: ");
		return -1;
	}

	if ( (ioctl(fd,SAAIOGWSS,&arg) < 0)){
		perror("IOCTL: ");
		close(fd);
		return -1;
	}
	close(fd);

	return arg;
}

void write_wss(int mode)
{
	int arg=mode;
	int fd;

	if((fd = open(SAA7126_DEVICE,O_RDWR|O_NONBLOCK)) < 0){
		perror("SAA DEVICE: ");
		return;
	}

	if ( (ioctl(fd,SAAIOSWSS,&arg) < 0)){
		perror("IOCTL: ");
		close(fd);
		return;
	}
	close(fd);
}

inline int compute(int l, int d)
{
	switch (d)
	{
	case 0:
		return l;
	case 1:
		return l+2;
	case 2:
		return l+8;
	case 3:
		return 0x1C;
	case 4:
		return 0x30;
	case 5:
		return 0x44;
	case 6:
		return 0x58;
	case 7:
		return 0x6c;
	case 8:
		return 0x80;
	case 9:
		return 0x94;
	case 10:
		return 0xa8;
	case 11:
		return 0xbc;
	case 12:
		return 0xd0;
	case 13:
		return 0xe4;
	case 14:
		return l-8;
	case 15:
		return l-2;
	default:
		return 0;
	}
}

int read_frame(int fd, int experimental)
{
//	unsigned short buffer[stride*YRES/2];
	unsigned short buffer[stride*CYRES/2], ts, go, lum=0;
	int x, y, tz=3, cnt=0, CXRES=stride/6;
	int LXRES=(stride>>1) - CXRES - 4;
	read(fd, buffer, stride * CYRES);

	for (y=1; y<CYRES && tz; y++)
	{
		go=1;
		for (x=CXRES; x<LXRES && go; x++)
		{
			if(ts=buffer[y*stride/2+x])
			{
				if(experimental)
				{
					int val=buffer[y*stride/2+x];
					int dy[2]={val&0xF, (val>>8)&0xF};
					lum=compute(lum, dy[1]);
					if(abs(lum)>0x02)
						go=0;
					lum=compute(lum, dy[0]);
					if(abs(lum)>0x02)
						go=0;
				}
				else
				{
					go=0;
				}
			}
		}
		if(!go)
			tz--;
		if(tz)
			cnt++;
	}
	return cnt;
}

int main(int argc, char **argv)
{
	int capture, amode=0, tmode, repeat=0, trepeat, fcnt, scnt, tv, loop=3, exp=0, run=0, maxblack14=24, maxblack16=48, wide14=1, wide16=3, normal=0, noswitch=7;
	unsigned long towait=3000000L;
	long size;
	FILE *cfh;

	printf("aformat: Automatisches Bildschirmformat Version %s\n",P_VERSION);
	
	for(tv=1; tv<argc; tv++)
	{
		if(strstr(argv[tv],"LOOP")==argv[tv])
			run=1;
	}

	if((cfh=fopen(CFG_FILE,"r"))!=NULL)
	{
   		fseek(cfh, 0, SEEK_END);
   		size = ftell(cfh);
		rewind(cfh);
		tstr=malloc(size);
		if(fread(tstr, 1, size, cfh))
		{

			tptr=tstr;
			if(((tptr=strstr(tptr,"LOOP=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&loop)!=1)
				{
					loop=3;
				}
			}
			if(((tptr=strstr(tptr,"REPEAT=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr,"%d",&repeat)!=1)
				{
					repeat=0;
				}
			} 
			if(((tptr=strstr(tptr,"NOSWITCH=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&noswitch)!=1)
				{
					noswitch=7;
				}
			} 
			if(((tptr=strstr(tptr,"MAXBLACK14=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&maxblack14)!=1)
				{
					maxblack14=24;
				}
			} 
			if(((tptr=strstr(tptr,"MAXBLACK16=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&maxblack16)!=1)
				{
					maxblack16=48;
				}
			} 
			if(((tptr=strstr(tptr,"WIDE14=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&wide14)!=1)
				{
					wide14=1;
				}
			} 
			if(((tptr=strstr(tptr,"WIDE16=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&wide16)!=1)
				{
					wide16=3;
				}
			} 
			if(((tptr=strstr(tptr,"NORMAL=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&normal)!=1)
				{
					normal=0;
				}
			} 
			if(((tptr=strstr(tptr,"EXPERIMENTAL=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				if(sscanf(tptr+1,"%d",&exp)!=1)
				{
					exp=0;
				}
			} 
			if(((tptr=strstr(tptr,"BLACKLIST=")!=NULL)&&((tptr=strchr(tptr,'=')!=NULL))
			{
				blacklist=strdup(tstr);
			}
		}
		fclose(cfh);
	}
	if(tstr)
		free(tstr);
	towait=1000000L*loop;
	trepeat=repeat;

	while(run || (access("/var/etc/.aformat",0)!=-1))
	{

		amode=read_wss();
		
		if(amode!=noswitch)
		{
			if(!is_blacklisted())
			{
				capture=open("/dev/dbox/capture0", O_RDONLY);
				capture_stop(capture);
				capture_set_input_pos(capture, 0, 0);
				capture_set_input_size(capture, 720, 576);
				capture_set_output_size(capture, XRES, YRES*2);
				stride = capture_start(capture);
				usleep(10000);
				fcnt=read_frame(capture,exp);
				capture_stop(capture);
				close(capture);
	
				capture=open("/dev/dbox/capture0", O_RDONLY);
				capture_stop(capture);
				capture_set_input_pos(capture, 0, 0);
				capture_set_input_size(capture, 720, 576);
				capture_set_output_size(capture, XRES, YRES*2);
				stride = capture_start(capture);
				usleep(10000);
				scnt=read_frame(capture,exp);
				capture_stop(capture);
				close(capture);

				if((fcnt!=scnt) || (fcnt==31))
				{
					fcnt=-1;
				}
				else
				{
					fcnt-=2;
					fcnt<<=3;
				}
		
				if(fcnt>=0)
				{
					tmode=-1;
					if(fcnt>=maxblack16)
					{
						if(amode != 3 && amode != 4 && amode != 5 && amode != 7)
							tmode=wide16;
					}
					else
						if(fcnt>=maxblack14)
						{
							if(amode != 1 && amode != 2 && amode != 6 && amode != 7)
								tmode=wide14;
						}
						else
							tmode=normal;
	
					if(tmode>=0 && amode!=tmode)
					{
						if(!trepeat)
						{
							write_wss(tmode);
							trepeat=repeat;
							printf("%sBildformat von Modus %d auf %d umgeschaltet\n",msg,amode,tmode);
						}
						else
							--trepeat;
					}
				}
				else
					trepeat=repeat;
			}
			else
			{
				if(amode!=8)
					write_wss(8);
				trepeat=repeat;
			}
		}
		else
			trepeat=repeat;
		usleep(towait);
	}
	printf("%sProgrammende\n",msg);
	return 1;
}
makefile.am:

Code: Alles auswählen

SUBDIRS = zapci zapost zapsi irsend

INCLUDES = \
	-I$(top_srcdir)/include \
	@CONFIGFILE_CFLAGS@ \
	@CONNECTION_CFLAGS@ \
	@LIRCDCLIENT_CFLAGS@ \
	@XML_CFLAGS@

bin_PROGRAMS = pzapit zapit aformat
sbin_PROGRAMS = udpstreampes

pzapit_SOURCES = \
	pzapit.cpp

pzapit_LDADD = \
	$(top_builddir)/lib/libzapitclient.la \
	@CONNECTION_LIBS@

aformat_SOURCES = \
	aformat.cpp

aformat_LDADD = \
	$(top_builddir)/lib/libzapitclient.la \
	@CONNECTION_LIBS@

udpstreampes_SOURCES = \
	udpstreampes.cpp

udpstreampes_LDADD = \
	$(top_builddir)/lib/libzapitclient.la \
	@CONNECTION_LIBS@ \
	-lpthread

zapit_SOURCES = \
	bouquets.cpp channel.cpp dvbstring.cpp \
	getservices.cpp scan.cpp \
	eventwatchdog.cpp controld.cpp \
	zapit.cpp

zapit_LDADD = \
	$(top_builddir)/lib/libzapitclient.la \
	$(top_builddir)/src/zapci/libzapci.la \
	$(top_builddir)/src/zapost/libzapost.la \
	$(top_builddir)/src/zapsi/libzapsi.la \
	$(top_builddir)/src/irsend/libirsend.la \
	@CONFIGFILE_LIBS@ \
	@CONNECTION_LIBS@ \
	@LIRCDCLIENT_LIBS@ \
	@XML_LIBS@ \
	-lpthread

if BOXTYPE_DBOX2
zapit_LDADD += \
	-ltuxbox
endif

installdir = $(CONFIGDIR)/zapit

install_DATA = 

if BOXTYPE_DBOX2
install-data-local:
	install -d $(CONFIGDIR)
	install -m 644 $(srcdir)/scart.conf $(CONFIGDIR)
endif
Zuletzt geändert von SnowHead am Samstag 12. September 2009, 19:22, insgesamt 1-mal geändert.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Houdini »

Habs mal nen bisschen umgeräumt /optimiert /daemonisiert /benutzt jetzt die Configfileklasse.
http://home.arcor.de/houdini/dbox/zapit/aformat.cpp
(aber cpp ist es noch nicht wirklich...)

Code: Alles auswählen

aformat_LDADD = \
	$(top_builddir)/lib/libzapitclient.la \
+	@CONFIGFILE_LIBS@ \
	@CONNECTION_LIBS@
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von rhabarber1848 »

Hier der Patch CVS-ready: EDIT: Patch ist im CVS

Einfach ein normales Image bauen, /bin/aformat (14k) landet
mit den anderen zapit-Dateien automatisch im Image.
Zuletzt geändert von rhabarber1848 am Sonntag 19. Juli 2009, 18:28, insgesamt 1-mal geändert.
Barf
Developer
Beiträge: 1475
Registriert: Dienstag 4. Februar 2003, 22:02

Re: 16:9 Kennung in Bildsignal, Auto-Zoom Funktion

Beitrag von Barf »

Viel Dank an Snowhead für den Beitrag!! 8) :D

Das zapit/controld-Verzeichnis finde ich dafür nicht geeignet. Argumente, Alternativvorschlag (sowie einige weitere Verbesserungen?) werden in Kurze nachgereicht.

rhabarber, bitte ein Bisschen Geduld...