[MN-dev] [mndiff]: r65 - in trunk/2010: 2010.cpp 2_71x6.cpp 2_crypt.cpp 2_crypt.h 2_grafix.cpp 2_pal.h 2_vpaytv.cpp 2d 2d.txt

michael subversion at mplayerhq.hu
Wed Jul 4 11:38:46 CEST 2007


Author: michael
Date: Wed Jul  4 11:38:46 2007
New Revision: 65

Log:
version from 2000-04-18 13:27


Added:
   trunk/2010/2_pal.h
   trunk/2010/2d.txt
      - copied, changed from r62, /trunk/2010/2d
Removed:
   trunk/2010/2d
Modified:
   trunk/2010/2010.cpp
   trunk/2010/2_71x6.cpp
   trunk/2010/2_crypt.cpp
   trunk/2010/2_crypt.h
   trunk/2010/2_grafix.cpp
   trunk/2010/2_vpaytv.cpp

Modified: trunk/2010/2010.cpp
==============================================================================
--- trunk/2010/2010.cpp	(original)
+++ trunk/2010/2010.cpp	Wed Jul  4 11:38:46 2007
@@ -50,7 +50,7 @@ extern bool drop;
 
  int maxBuf=2;
  int some=0;
-
+ int some2=0;
 
 int _crt0_startup_flags = _CRT0_FLAG_NEARPTR | _CRT0_FLAG_NONMOVE_SBRK;
  bool fShowRaw=false;
@@ -485,6 +485,10 @@ int main(int argc, char **argv){
                        break;
                        case '4'  : some--; if(some<0) some=0;
                        break;
+                       case '5'  : some2++;
+                       break;
+                       case '6'  : some2--; if(some2<0) some2=0;
+                       break;
                        case 'a'  : 
                        case 'A'  : if(TVStd!=TXTPAL) break;
                                    tabActive=true;

Modified: trunk/2010/2_71x6.cpp
==============================================================================
--- trunk/2010/2_71x6.cpp	(original)
+++ trunk/2010/2_71x6.cpp	Wed Jul  4 11:38:46 2007
@@ -761,13 +761,16 @@ void doTxtHack(int txtHackState){
 }
 
 void vPayTvShiftHack(int amount)
-    {
-    write_saa7196(0x0F, 0x50);
+{
+//	__dpmi_yield();
 
-    for(int i=0; i<10000*amount; i++);
+	write_saa7196(0x0F, 0x50);
+
+//	for(int i=1000*amount; i>0; i--);
+	for(int i=0; i<10000*amount; i++);
 
     write_saa7196(0x0F, 0x10);
-    }
+}
 
 
 void vPayTvBrightHack(bool b, int posInLCC)
@@ -786,10 +789,10 @@ void vPayTvBrightHack(bool b, int posInL
 	int hSyncBegin=         - 96 +posInLCC;
 	int hSyncStop= 			- 70 +posInLCC;
 	int hClampBegin=		- 60 +posInLCC;
-    int hClampStop=         - 59 +posInLCC+some;
+    int hClampStop=         - 59 +posInLCC+some/2;
 	int hSyncStartAfterPH1=	  96;//+posInLCC;
 
-	if(some==0) hClampStop=         148 +posInLCC;
+	if(some/2==0) hClampStop=         148 +posInLCC;
 	//else 		hClampStop=         -59 +posInLCC + 10;
 
 	hSyncBegin = minmax(-382, hSyncBegin,  126);
@@ -807,7 +810,7 @@ void vPayTvBrightHack(bool b, int posInL
 	if(hClampBegin <= hSyncStop) hClampBegin= hSyncStop+1;
 	if(hClampStop <= hClampBegin) hClampStop= hClampBegin+1;
 
-    if(b)
+    if(b ^ (some&1))
         {
 		write_saa7196(0x01, (-hSyncBegin-3        )&0xFF);/* 7:0  Horizontal Sync Begin for 50hz          */
  		write_saa7196(0x02, (-hSyncBegin        )&0xFF);/* 7:0  Horizontal Sync Begin for 50hz          */

Modified: trunk/2010/2_crypt.cpp
==============================================================================
--- trunk/2010/2_crypt.cpp	(original)
+++ trunk/2010/2_crypt.cpp	Wed Jul  4 11:38:46 2007
@@ -46,7 +46,7 @@ void decrypt(void){
  }
 
  if( cryptStd == nag && satur!=0 ) Decomb(0);
- if( cryptStd == vc  && satur!=0 ) Decomb(1); 
+ if( cryptStd == vc  && satur!=0 ) Decomb(1);  
 
  if(iState){
    T2=uclock();

Modified: trunk/2010/2_crypt.h
==============================================================================
--- trunk/2010/2_crypt.h	(original)
+++ trunk/2010/2_crypt.h	Wed Jul  4 11:38:46 2007
@@ -5,11 +5,6 @@
 #define max_x 900
 #define max_y 700
 
-#define BLACK_LEVEL 0.0
-#define BLANK_LEVEL 0.0
-#define WHITE_LEVEL 1.0
-#define SYNC_LEVEL (-43.0 / 100.0)
-
 #define FREQ_CHROM     4433618.75
 #define FREQ_HS        15625.0
 #define FREQ_PIX       (FREQ_HS * 1888.0 * 0.5)

Modified: trunk/2010/2_grafix.cpp
==============================================================================
--- trunk/2010/2_grafix.cpp	(original)
+++ trunk/2010/2_grafix.cpp	Wed Jul  4 11:38:46 2007
@@ -26,7 +26,7 @@
  extern int infoPosX;
  extern int infoPosY;
  extern VID2MEMBUF *vid2MemBuf;
- extern int some;
+ extern int some, some2;
  extern bool allowDrop;
 
  bool helpState=true;
@@ -127,6 +127,8 @@ void showStuff(void){
 
    sprintf(textbuf,"%d Some", some);
    gprint(infoPosX, infoPosY+=10, c.col, textbuf);
+   sprintf(textbuf,"%d Some2", some2);
+   gprint(infoPosX, infoPosY+=10, c.col, textbuf);
    infoPosY+=5;
  }
  if(iState==2){

Added: trunk/2010/2_pal.h
==============================================================================
--- (empty file)
+++ trunk/2010/2_pal.h	Wed Jul  4 11:38:46 2007
@@ -0,0 +1,16 @@
+//2010 0.1 Copyright (C) Michael Niedermayer 2000
+#ifndef n2_pal_h
+#define n2_pal_h
+
+#define PAL_FREQ_CHROM     			4433618.75
+#define PAL_FREQ_HS        			15625.0
+#define PAL_NUM_LINES 				625
+#define PAL_PHASE_DRIFT_PER_LINE 	(-fmod(PAL_FREQ_CHROM/PAL_FREQ_HS*4.0, 1.0)/4.0*PI*2.0)
+#define PAL_VSYNC_SIZE 				26 //?
+
+#define PAL_BLACK_LEVEL 0.0
+#define PAL_BLANK_LEVEL 0.0
+#define PAL_WHITE_LEVEL 1.0
+#define PAL_SYNC_LEVEL (-43.0 / 100.0) //?
+ 
+#endif

Modified: trunk/2010/2_vpaytv.cpp
==============================================================================
--- trunk/2010/2_vpaytv.cpp	(original)
+++ trunk/2010/2_vpaytv.cpp	Wed Jul  4 11:38:46 2007
@@ -15,34 +15,41 @@
 #include "2_nag_a.h"
 #include "2_hw_mem.h"
 #include "2_vpaytv.h"
+#include "2_pal.h"
 #include "2010.h"
 
-#define FREQ_CHROM     4433618.75
-#define FREQ_HS        15625.0
-#define PHASE_DRIFT_PER_LINE (-fmod(FREQ_CHROM/FREQ_HS*4.0, 1.0)/4.0*PI*2.0)
-#define Q_2_HSYNC_DISTANCE 6		//HACK (only 400x300)
-#define VSYNC_SIZE 26
-
-#define REAL_QLINE_POS (wndx-10)
+/* SyncSupression Encoding Constants */
+#define Q_2_HSYNC_DISTANCE (QCOL_SIZE + 2)						// only 400x300 
+#define QCOL_SIZE 14 											// only 400x300 
 
-#define QLINE_COEFFICIENT_THRESHOLD 0.20
-//#define QLINE_OVERBRIGHT_THRESHOLD 220
-#define QLINE_OVERBRIGHT_THRESHOLD 240
-#define OVERBRIGHT_TEST_COLUMN 4
-#define HSYNC_THRESHOLD 30
-#define HSYNC_SEARCH_START (Q_2_HSYNC_DISTANCE-3)
-#define HSYNC_SEARCH_END 22
+/* VSync Detection */
 #define VSYNC_SEARCH_COLUMN (-2)
-#define VSYNC_OVERBRIGHT_THRESHOLD 230
 #define MIN_VSYNC_DISTANCE 20
 
-#define LEFT_QLINE_BOUNDRY (wndx-20)
-#define RIGHT_QLINE_BOUNDRY (wndx-7)
+/* HSync Detection */
+#define QCOL_CORREL_QCOL_SIZE 5 								// only 400x300 
+#define QCOL_CORREL_BORDER_SIZE (QCOL_CORREL_QCOL_SIZE)		// only right, there is none at the left	
+#define QCOL_CORREL_SIZE (QCOL_CORREL_QCOL_SIZE + QCOL_CORREL_BORDER_SIZE)	
+#define QCOL_COEFFICIENT_THRESHOLD 0.20
+#define HSYNC_SEARCH_START (Q_2_HSYNC_DISTANCE-5)
+#define HSYNC_SEARCH_END (Q_2_HSYNC_DISTANCE+5)
+
+#define REAL_HSYNC_LOC (wndx-10)
+#define LEFT_HSYNC_BOUNDRY (wndx-10)
+#define RIGHT_HSYNC_BOUNDRY (wndx-5)
 
 #define TOP_VSYNC_BOUNDRY (wndy-50)
 #define BOTTOM_VSYNC_BOUNDRY (wndy+50)
 
-#define RELATIV_LEVEL_SHIFT 2.0
+/* Brightness / Contrast Fix */
+#define RELATIV_LEVEL_SHIFT 2.0 
+#define BLANK_REF_LOC (-3)
+#define SYNC_REF_LOC 3
+//#define CLIP_REJECTION_THRESHOLD 1.5
+
+/* Color-Phase Fix */
+#define START_Q_PHASE (some2 /180.0*PI)
+#define Q_PHASE_DELTA (-2*PI /(PAL_NUM_LINES))
 
 
 extern vgax, vgay, wndx, wndy, outy, y_field, x_field;
@@ -55,9 +62,11 @@ extern int yuvMode;
 extern bool mmx;
 extern int infoPosX;
 extern int infoPosY;
-extern int some;
+extern int some, some2;
 extern bool drop;
 extern bool isVCPhaseTrick;
+extern int bright;
+extern int contr;
 
 static inline float atan3(const float f1, const float f2){
   float out;
@@ -73,7 +82,7 @@ static inline float atan3(const float f1
 }
 
 static int qPhase=0;
-int findQLine(void)
+int findHSync(void)
 {
 	long T1=0, T2;
 	color c;
@@ -82,39 +91,53 @@ int findQLine(void)
     
 	if(iState==2)
 		T1=uclock();
+	
+	static float blankCorrelVector[4]= {0.5, 0.5, 0.5, 0.5};
+	static float qColCorrelVector[4]= {1.0, 1.0, 0.0, 0.0};
 
-	const int xSizeOfCorrelVector= 4;
-	float correlVector[4][4]= { 	{1,1,0   ,0   },
-									{0,0,0.33,0.33},
-									{0,0,0.33,0.33},
-									{0,0,0.33,0.33} };
+	static bool isFirst= true;
+	if(isFirst)
+	{
 
-	float meanOfCorrelVector= 0;
-	for(int y=0; y<4; y++)
-		for(int x=0; x<xSizeOfCorrelVector; x++)
-			meanOfCorrelVector+= correlVector[y][x];
+		/* Normalize CorrelVectors */
 
-	meanOfCorrelVector/= xSizeOfCorrelVector*4;
-		
-	float varianceOfCorrelVector= 0;
-	for(int y=0; y<4; y++)
-		for(int x=0; x<xSizeOfCorrelVector; x++)
-			{
-			correlVector[y][x] -= meanOfCorrelVector;
-			varianceOfCorrelVector+= correlVector[y][x] * correlVector[y][x];
-			}
+		double mean= 0;
+		for(int y=0; y<4; y++)
+		{
+			mean+= blankCorrelVector[y] * QCOL_CORREL_BORDER_SIZE;
+			mean+= qColCorrelVector[y] * QCOL_CORREL_QCOL_SIZE;
+		}
+		mean/= 4.0 * QCOL_CORREL_SIZE;
 
-	varianceOfCorrelVector/= xSizeOfCorrelVector*4;
+		float variance= 0;
+		for(int y=0; y<4; y++)
+		{
+			blankCorrelVector[y] -= mean;
+			qColCorrelVector[y] -= mean;
+			
+			variance += blankCorrelVector[y] * blankCorrelVector[y] * QCOL_CORREL_BORDER_SIZE;
+			variance += qColCorrelVector[y] * qColCorrelVector[y] * QCOL_CORREL_QCOL_SIZE;
+		}
+		variance/= 4.0 * QCOL_CORREL_SIZE;
+		double stdDev= sqrt(variance);
 
+		for(int y=0; y<4; y++)
+		{
+			blankCorrelVector[y] /= stdDev;
+			qColCorrelVector[y] /= stdDev;
+		}
+		
+	}
+	
 	byte const * const p= &actVid2MemBufp->b[0];
 
 	if(iState==2)
-		{
+	{
 	    T2=uclock();
     	sprintf(textbuf,"%f X", (float)(T2-T1)/UCLOCKS_PER_SEC);
     	gprint(infoPosX, infoPosY+=10, c.col, textbuf);
 		T1=T2;
-		}
+	}
 	
 	int aSumsOfEquivalentPoints[4][1000];
 	for(int i=0; i<4; i++)
@@ -127,15 +150,13 @@ int findQLine(void)
 
 	for(int line=0; line<wndy; line+=3)
 		for(int x=0; x<wndx; x++)
-			{
+		{
 			const int index= (line*vgax + x)*2;
-			const int a= 
-				       int(p[index + 1]) 
-				+ mabs(int((char)(p[index + 2])))
-				+ mabs(int((char)(p[index])));
+			const int a= 	  mabs(int((char)(p[index + 2])))
+							+ mabs(int((char)(p[index    ])));
 			aSumsOfEquivalentPoints[line & 3][x]+= a;
 			aSumsOfSqrs[x]+= a*a;
-			}
+		}
 	
 	for(int x=0; x<wndx; x++)
 	{
@@ -143,117 +164,119 @@ int findQLine(void)
 		aSumsOfEquivalentPoints[1][x]*= 3;
 		aSumsOfEquivalentPoints[2][x]*= 3;
 		aSumsOfEquivalentPoints[3][x]*= 3;
-		aSumsOfSqrs[x]*= 3;;
+		aSumsOfSqrs[x]*= 3;
 	}
 			
 		
 
 	if(iState==2)
-		{
+	{
 	    T2=uclock();
     	sprintf(textbuf,"%f EquivSum & SumSqr", (float)(T2-T1)/UCLOCKS_PER_SEC);
     	gprint(infoPosX, infoPosY+=10, c.col, textbuf);
 		T1=T2;
-		}
+	}	
+	
 			
 	int bestQLine=-1;
 	float bestCoefficient=-1;
-	for(int qLine=0; qLine<wndx-xSizeOfCorrelVector+1; qLine++)
+	for(int xStart=0; xStart<wndx-QCOL_CORREL_SIZE; xStart++)
 		{
 		int sum=0;
 		for(int line=0; line<4; line++)
-			for(int x=qLine; x<qLine + xSizeOfCorrelVector; x++)
+			for(int x=xStart; x<xStart + QCOL_CORREL_SIZE; x++)
 				sum+= aSumsOfEquivalentPoints[line][x];
 
-		const double mean= double(sum) / (xSizeOfCorrelVector*wndy);
+		const double mean= double(sum) / (QCOL_CORREL_SIZE*wndy);
 
 		int sumOfSqrs=0;
-		for(int x=qLine; x<qLine + xSizeOfCorrelVector; x++)
+		for(int x=xStart; x<xStart + QCOL_CORREL_SIZE; x++)
 			sumOfSqrs+= aSumsOfSqrs[x];
 	
-		float variance= (sumOfSqrs - sum*mean) / (xSizeOfCorrelVector*wndy); 
+		float variance= (sumOfSqrs - sum*mean) / (QCOL_CORREL_SIZE*wndy); 
 //		printf("%f = %d - %d * %f / ...\n", variance, sumOfSqrs, sum, mean);
 		if(variance<0.0) variance=0;
 
 		float coefficient[4]={0,0,0,0};
 		for(int line=0; line<4; line++)
-			for(int x=qLine; x<qLine + xSizeOfCorrelVector; x++)
-				{
-				coefficient[0]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) 
-									* correlVector[(line+0) &3][x-qLine];
-				coefficient[1]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) 
-									* correlVector[(line+1) &3][x-qLine];
-				coefficient[2]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) 
-									* correlVector[(line+2) &3][x-qLine];
-				coefficient[3]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) 
-									* correlVector[(line+3) &3][x-qLine];
-				}
+		{
+			for(int x=xStart; x<xStart + QCOL_CORREL_QCOL_SIZE; x++)
+			{
+				coefficient[0]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * qColCorrelVector[(line+0) &3];
+				coefficient[1]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * qColCorrelVector[(line+1) &3];
+				coefficient[2]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * qColCorrelVector[(line+2) &3];
+				coefficient[3]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * qColCorrelVector[(line+3) &3];				
+			}
 
-		for(int i=0; i<4; i++)
+			for(int x=xStart + QCOL_CORREL_QCOL_SIZE; x<xStart + QCOL_CORREL_SIZE; x++)
 			{
-			coefficient[i]/= xSizeOfCorrelVector*wndy* sqrt(variance * varianceOfCorrelVector + 0.000001);
+				coefficient[0]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * blankCorrelVector[(line+0) &3];
+				coefficient[1]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * blankCorrelVector[(line+1) &3];
+				coefficient[2]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * blankCorrelVector[(line+2) &3];
+				coefficient[3]+= (aSumsOfEquivalentPoints[line][x]-mean*wndy/4) * blankCorrelVector[(line+3) &3];				
+			}
+		}
 
-			if(coefficient[i]>bestCoefficient)
-				{
+		for(int i=0; i<4; i++)
+		{
+			coefficient[i]/= QCOL_CORREL_SIZE * wndy * sqrt(variance + 0.000001);
+
+			if(coefficient[i] > bestCoefficient)
+			{
 				bestCoefficient= coefficient[i];
-				bestQLine= qLine;		
+				bestQLine= xStart - QCOL_SIZE + QCOL_CORREL_QCOL_SIZE;		
 				qPhase= (4-i) &3;
 //				some= int(minmax(-10000, bestCoefficient*100, 10000));
-				}
 			}
 		}
+	}
 
 	if(iState==2)
-		{
+	{
 	    T2=uclock();
-    	sprintf(textbuf,"%f coeff", (float)(T2-T1)/UCLOCKS_PER_SEC);
+    	sprintf(textbuf,"%f coeffTime", (float)(T2-T1)/UCLOCKS_PER_SEC);
     	gprint(infoPosX, infoPosY+=10, c.col, textbuf);
 		T1=T2;
-		}
-
-
-	if(bestCoefficient < QLINE_COEFFICIENT_THRESHOLD) 	return -1;
-
-
-	// try to find the Sync pulse 
+    
+		sprintf(textbuf,"%f coeff", bestCoefficient);
+	   	gprint(infoPosX, infoPosY+=10, c.col, textbuf);
+	}
 
-	int score[1000];
-	for(int i=0; i<1000; i++)
-		score[i]=0;
+	
+	if(bestCoefficient < QCOL_COEFFICIENT_THRESHOLD) 	return -1;
 
-	for(int x= min(bestQLine+HSYNC_SEARCH_END, wndx-1); x >= bestQLine + HSYNC_SEARCH_START; x--)
+	int bestHSyncScore= 0;
+	int bestHSync= 0;
+	int hSync;	
+	for(hSync= bestQLine + HSYNC_SEARCH_START; hSync < bestQLine + HSYNC_SEARCH_END; hSync++)
+	{
+		if(hSync+1 >= wndx) return -1;
+		
+		int hSyncScore= 0;
+		for(int line= 0; line<wndy; line+=3)
 		{
-		for(int line=0; line<wndy; line+=3)
-			{
-			score[x] += p[(line*vgax + x)*2 + 1];
-			}
-			
-		score[x]*= 3;	
-
-		if( x+2 <= min(bestQLine+HSYNC_SEARCH_END, wndx-1) 
-			&& (score[x] - score[x+2])/wndy > HSYNC_THRESHOLD) 
-			{
-			bestQLine= x - Q_2_HSYNC_DISTANCE;
-			if(bestQLine<0) bestQLine=0;
-			return bestQLine;
-			}
+			if(line&3 == qPhase) continue;
+			hSyncScore+= (int)( (byte)( p[(line*vgax + hSync-1)*2 + 1] ) )
+						-(int)( (byte)( p[(line*vgax + hSync+1)*2 + 1] ) );
 		}
-
-	if(bestQLine + OVERBRIGHT_TEST_COLUMN >= wndx) return -1;
-	int sum=0;
-	for(int line=0; line<wndy; line++)
-		sum+= p[(line*vgax + bestQLine + OVERBRIGHT_TEST_COLUMN)*2 + 1];
-
-	if(sum/wndy > QLINE_OVERBRIGHT_THRESHOLD) return -1; // Sync Pulse not found and Pic to Bright
-
-	return bestQLine; //no Sync Pulse Found (Picture perhaps too dark) 
-	//perhaps -1 better
+		
+		if(hSyncScore > bestHSyncScore)
+		{
+			bestHSyncScore= hSyncScore;
+			bestHSync= hSync;
+		}		
+	}
+	
+	return bestHSync; 
+	
+		
+//	return minmax(0, bestQLine + Q_2_HSYNC_DISTANCE, wndx-1);	
 }
 
-int findVSync(int qLine)
+int findVSync(int qCol)
 {
-	if(qLine==-1) return -1;
-	if(qLine<2 || qLine+1>=wndx) return -1;
+	if(qCol==-1) return -1;
+	if(qCol<2 || qCol+1>=wndx) return -1;
 
     byte const * const p= &actVid2MemBufp->b[0];
 
@@ -266,15 +289,15 @@ int findVSync(int qLine)
 	int runningNotQSum=0;
 	int nRunningQSum=0;
 	int nRunningNotQSum=0;
-	for(int vSyncStart= -VSYNC_SIZE; vSyncStart<wndy; vSyncStart++)
+	for(int vSyncStart= -PAL_VSYNC_SIZE; vSyncStart<wndy; vSyncStart++)
 		{
-		const vSyncEnd= vSyncStart + VSYNC_SIZE;
+		const vSyncEnd= vSyncStart + PAL_VSYNC_SIZE;
 		int index= vSyncStart;
-		if(index<0) index= vSyncStart + wndy + VSYNC_SIZE;
+		if(index<0) index= vSyncStart + wndy + PAL_VSYNC_SIZE;
 
 		if(vSyncStart>=0)
 			{
-			const int xP= (vSyncStart*vgax + qLine + VSYNC_SEARCH_COLUMN) * 2;
+			const int xP= (vSyncStart*vgax + qCol + VSYNC_SEARCH_COLUMN) * 2;
 			const int scoreStart=      int(p[xP + 1]) 
 								+ mabs(int((char)(p[xP + 2])))
 								+ mabs(int((char)(p[xP])));
@@ -292,7 +315,7 @@ int findVSync(int qLine)
 			}
 		if(vSyncEnd<wndy)
 			{
-			const int xP= (vSyncEnd*vgax + qLine + VSYNC_SEARCH_COLUMN) * 2;
+			const int xP= (vSyncEnd*vgax + qCol + VSYNC_SEARCH_COLUMN) * 2;
 			const int scoreEnd=        int(p[xP + 1]) 
 								+ mabs(int((char)(p[xP + 2])))
 								+ mabs(int((char)(p[xP])));
@@ -322,7 +345,7 @@ int findVSync(int qLine)
 	int bestScore= -1000000;
 	int bestVSync= -1;
 
-	for(int vSync= 0; vSync<wndy+VSYNC_SIZE; vSync++)
+	for(int vSync= 0; vSync<wndy+PAL_VSYNC_SIZE; vSync++)
 		{
 		if(vSync < wndy && vSync > wndy-MIN_VSYNC_DISTANCE) continue;   
 		if(vSync >= wndy && vSync-wndy < MIN_VSYNC_DISTANCE) continue;
@@ -342,15 +365,17 @@ int findVSync(int qLine)
 
 // Should be writen as an Object...
 //6015X 10960D 994498XX 3224315DD 1789858XD 55n
+
 static int hSyncDelaySumX=  6015;
 static int hSyncDelaySumD=  10960;
 static int hSyncDelaySumXX= 994498;
 static int hSyncDelaySumDD= 3224315;
 static int hSyncDelaySumDX= 1789858;
 static int hSyncDelays=55;
+		
 static int lastHSyncDelay=0;
-static int lastQLine=0; //from last call to doHSyncDelay
-void doHSyncDelay(int hDistance, int qLine)
+static int lastHSync=0; //from last call to doHSyncDelay
+void doHSyncDelay(int hDistance, int hSync)
 {
 	double sigmaXD=   double(hSyncDelaySumDX) * double(hSyncDelays) 
 					- double(hSyncDelaySumX) * double(hSyncDelaySumD);
@@ -363,7 +388,9 @@ void doHSyncDelay(int hDistance, int qLi
 
 	double diffFromMeanX= double(hDistance) - double(hSyncDelaySumX) / double(hSyncDelays);
 	double diffFromMeanD= diffFromMeanX * sigmaXD / sigmaX2;
-/*	printf("%d %d\n", hDistance, qLine);
+
+	/*
+		printf("%d %d\n", hDistance, hSync);
 	printf("%dX %dD %dXX %dDD %dXD %dn\n", 
 		hSyncDelaySumX, hSyncDelaySumD,
 		hSyncDelaySumXX, hSyncDelaySumDD,
@@ -371,7 +398,10 @@ void doHSyncDelay(int hDistance, int qLi
 	printf("%fSXD %fSX2\n",sigmaXD, sigmaX2);
 	printf("%fdfmx %fdfmd\n", diffFromMeanX, diffFromMeanD);
 
-	printf("%f\n", diffFromMeanD + double(hSyncDelaySumD) / double(hSyncDelays) + 0.5);*/
+	printf("%f\n", diffFromMeanD + double(hSyncDelaySumD) / double(hSyncDelays) + 0.5);
+	*/
+	
+	
 	int delay= int(diffFromMeanD + double(hSyncDelaySumD) / double(hSyncDelays) + 0.5);
 	if(delay<0) delay=0;
 
@@ -379,7 +409,7 @@ void doHSyncDelay(int hDistance, int qLi
 //	printf("%d Delay\n", delay);
 
 	lastHSyncDelay= delay;
-	lastQLine= qLine;
+	lastHSync= hSync;
 
 	vPayTvShiftHack(delay);
 }
@@ -387,13 +417,13 @@ void doHSyncDelay(int hDistance, int qLi
 static nStat=0;
 static int *statX= new int[10000];
 static int *statY= new int[10000];
-void analyzeHSyncDelay(int newQLine)
+void analyzeHSyncDelay(int newHSync)
 {	
-	int realHDistance= newQLine - lastQLine;
-	if(newQLine!=-1 && realHDistance>0)
+	int realHDistance= newHSync - lastHSync;
+	if(newHSync!=-1 && realHDistance>0)
 		{
-//		statX[nStat]= realHDistance;
-//		statY[nStat++]= lastHSyncDelay;
+		statX[nStat]= realHDistance;
+		statY[nStat++]= lastHSyncDelay;
 
 		hSyncDelaySumX+= realHDistance;
 		hSyncDelaySumD+= lastHSyncDelay;
@@ -468,8 +498,8 @@ void analyzeVSyncDelay(int newVSync)
 	if(newVSync!=-1 && realVDistance>0)
 		{
 
-		statX[nStat]= lastVSyncDelay;
-		statY[nStat++]= realVDistance;
+//		statX[nStat]= lastVSyncDelay;
+	//	statY[nStat++]= realVDistance;
 
 		vSyncDelaySumY+= realVDistance;
 		vSyncDelaySumD+= lastVSyncDelay;
@@ -502,26 +532,61 @@ void analyzeVSyncDelay(int newVSync)
 	*/
 
 }
-/*
-void fixColor(int qLine)
+
+void fixColor(int qCol)
 {
-	qLine&= ~1;
+	/*
+	qCol&= ~2;
     byte * const p= &actVid2MemBufp->b[0];
 
-	for(int line=qPhase; line<wndy-3; line+=4)
+	for(int qLine=qPhase+1; qLine<wndy-3; qLine+=4)
+	{
+		const float targetPhase= (START_Q_PHASE - Q_PHASE_DELTA*qLine)*0;
+		
+		int nSamples=0;
+		int uSum=0, vSum=0;
+		for(int x=qCol+2; x<qCol + QCOL_SIZE-1; x+=2)
 		{
-		int u=char(p[(line*vgax + qLine-2)*2    ]);
-		int v=char(p[(line*vgax + qLine-2)*2 + 2]);
-		printf("%d %d %f\n", u, v, atan3(u,v)/PI*180);
-		for(int x=0; x<wndx-1; x+=2)
+			if(x>=wndx) break;
+			
+			uSum+= char(p[(qLine*vgax + x)*2    ]);
+			vSum+= char(p[(qLine*vgax + x)*2 + 2]);
+			
+			nSamples++;
+		}
+		
+		const float u= ((float)uSum) / nSamples;
+		const float v= ((float)vSum) / nSamples;
+		
+		const float qPhase= atan3(u, v);
+		const float phaseDiff= targetPhase - qPhase;
+
+		const int s= (int)(sin(phaseDiff)*127.0);
+		const int c= (int)(cos(phaseDiff)*127.0);
+		
+		printf("%f %f %f %f \n", u, v, atan3(u,v)/PI*180, targetPhase/PI*180);
+		for(int line= qLine; line< qLine+4; line++)
+		{
+			for(int x=0; x<wndx-1; x+=2)
 			{
+				int ou= (char)p[ (line*vgax + x)*2     ];
+				int ov= (char)p[ (line*vgax + x)*2 + 2 ];
+				
+				int nu= (ou*c - ov*s)>>7;
+				int nv= (ou*s + ov*c)>>7;
+				
+				p[ (line*vgax + x)*2     ]= (char)nu;
+				p[ (line*vgax + x)*2 + 2 ]= (char)nv;
+           
 			}
-
 		}
+
+	}
+	*/
 }
-*/
 
-void fixBrightness(int qLine)
+
+void fixBrightness(int hSync)
 {
 	static int darkestVal=0;
 	static int brightestVal=255;
@@ -531,54 +596,84 @@ void fixBrightness(int qLine)
 	
 	byte * const p= &actVid2MemBufp->b[0];
 
+	int nClipedPixels= 0;
+	
+	infoPosY+=10;	
+	
 	for(int line=1; line<wndy; line++)
     {
 
-        if(qLine + Q_2_HSYNC_DISTANCE + 3>=wndx) break;
+        if(hSync + 3>=wndx) break;
 		
 		double encodedBlankLevel = 0;
 		double encodedSyncLevel  = 0;
 		
 		int nLines= 0;
 		
-		for(int refLine= max(line-4, 0); refLine<min(wndy, line+4); refLine++)
+		for(int refLine= max(line-2, 0); refLine<min(wndy, line+2); refLine++)
 		{
 			if((refLine&3) == qPhase) continue;
 			
 			nLines++;
-			encodedBlankLevel += p[(refLine*vgax + qLine + Q_2_HSYNC_DISTANCE - 3)*2 + 1];
-			encodedSyncLevel  += p[(refLine*vgax + qLine + Q_2_HSYNC_DISTANCE + 3)*2 + 1];
+			encodedBlankLevel += p[(refLine*vgax + hSync + BLANK_REF_LOC)*2 + 1];
+			encodedSyncLevel  += p[(refLine*vgax + hSync + SYNC_REF_LOC )*2 + 1];
 		}
 		
 		encodedBlankLevel/= nLines;
 		encodedSyncLevel /= nLines;
 		
-		const double shift= RELATIV_LEVEL_SHIFT* (encodedBlankLevel - encodedSyncLevel);
+		const double shift= (RELATIV_LEVEL_SHIFT + (bright - 0x80) / 4.0)* (encodedBlankLevel - encodedSyncLevel);
 		
 		const double blankLevel = encodedBlankLevel - shift;
 		const double syncLevel = encodedSyncLevel - shift;
 		
-		const int blackLevel = int(blankLevel) -20;
+		const int blackLevel = int(blankLevel) ; 
 		
-		const int scale =  int((BLANK_LEVEL - SYNC_LEVEL) / max(blankLevel - syncLevel, 1.0) * (256.0 * 235.0));
+		const int scale =  
+			int((PAL_BLANK_LEVEL - PAL_SYNC_LEVEL) / max(blankLevel - syncLevel, 1.0) * (256.0 * 255.0) * (contr-0x40+10)/10.0); 
+		
+		const int brightestPossible= ((255 - blackLevel) * scale) >> 8;
+		const int darkestPossible= ((0 - blackLevel) * scale) >> 8;
+		
+		if(iState>=1)
+		{
+			for(int x=0; x<256; x++)
+			{
+				if(x<darkestPossible || x>brightestPossible) 
+				{
+				p[((infoPosY+5)*vgax + x)*2 + 1]= 255;					
+				p[((infoPosY+6)*vgax + x)*2 + 1]= 0;					
+					
+				p[((infoPosY+5)*vgax + x)*2 ]= 0;					
+				p[((infoPosY+6)*vgax + x)*2 ]= 0;					
 
+				}
+			}
+		}
 		
 
-        for(int x=0; x<min(qLine, wndx); x++)
-        {
+				
+		
+
+        for(int x=0; x<min(hSync + BLANK_REF_LOC - 1, wndx); x++)
+        {/*
 			if(p[(line*vgax + x)*2 + 1] >= brightestVal && (some&1))
 			{
 				p[(line*vgax + x)*2]= 127;
 				
+		//		nClipedPixels++;
+				
 				if(p[(line*vgax + x)*2 + 1] > brightestVal) brightestVal= p[(line*vgax + x)*2 + 1];
 			}
 			else if( p[(line*vgax + x)*2 + 1] <= darkestVal && (some&1))
 			{
 				p[(line*vgax + x)*2]= 128;
 	
+	//			nClipedPixels++;
+				
 				if(p[(line*vgax + x)*2 + 1] < darkestVal) darkestVal= p[(line*vgax + x)*2 + 1];
 			}
-			else
+			else*/
 			{
 				int v = p[(line*vgax + x)*2 + 1];
 				
@@ -589,6 +684,11 @@ void fixBrightness(int qLine)
 			}
         }
     }
+	
+
+//	static int nClipedPixelSum=0;
+	
+//	nClipedPixelSum += nClipedPixels;
 }
 
 void showStat(void)
@@ -604,7 +704,7 @@ void showStat(void)
 	for(int i=0; i<nStat; i++)
 		{
 		int x= statX[i] + 100;
-		int y= statY[i] + 100;
+		int y= statY[i]/10 + 100;
 		if(y<0 || x<0) continue;
 		if(y>=wndy || x>=wndx) continue;
 
@@ -613,6 +713,38 @@ void showStat(void)
 		}
 }
 
+void movePic(int hSync)
+{
+    int nPixMove= REAL_HSYNC_LOC - hSync;
+
+    if(nPixMove>wndx) nPixMove=0;
+    if(nPixMove<-wndx) nPixMove=0;
+
+    byte * p= &actVid2MemBufp->b[0];
+    for(int line=1; line<wndy; line++)
+    {
+        if(nPixMove>0)
+        {
+            memmove(&p[nPixMove*2], &p[0], (wndx-nPixMove)*2);
+        }
+        else if(nPixMove<0)
+        {
+            memmove(&p[0], &p[-nPixMove*2], (wndx+nPixMove)*2);
+        }
+        if(nPixMove & 1)
+            for(int x=0; x<wndx-2; x++)
+            {
+                p[x*2]= p[x*2+2];
+            }
+		for(int x=0; x<wndx-2; x++)
+		{
+//			p[x*2]=0;
+		}
+        p+= vgax<<1;
+    }
+}
+
+
 extern volatile bool isVPayTvBrightHack;
 extern volatile int vPayTvQPosInLCC;
 	
@@ -633,118 +765,98 @@ void vPayTvDecrypt(void)
         if(dropList[0]&2) return;
 	}
 
-	int qLine= findQLine();
-	int vSync= -1;//findVSync(qLine);
+	int hSync= findHSync();
+	int vSync= -1;//findVSync(qCol);
 
-	if(qLine!= -1)
-		{
-		vPayTvQPosInLCC= (qLine-wndx-6)*1888 / wndx;
-		}
+	if(hSync!= -1)
+	{
+		vPayTvQPosInLCC= (hSync-wndx-12)*1888 / wndx; //FIXME #DEFINE IT
+	}
 
+	int qCol;
+	if(hSync==-1) 	qCol= -1;
+	else 			qCol= hSync - Q_2_HSYNC_DISTANCE;
+	
     byte * p= &actVid2MemBufp->b[0];
     for(int line=0; line<wndy; line++)
-        {
+    {
         if((line&3) == qPhase)
-            {
-            p[2*qLine+1]=0;
-            p[2*qLine+3]=255;
-            }
-        p+= vgax<<1;
+        {
+            p[2*qCol+1]=0;
+            p[2*qCol+3]=255;
+            p[2*hSync+1]=0;
+            p[2*hSync+3]=255;
         }
+        p+= vgax<<1;
+    }
 
     p= &actVid2MemBufp->b[0];
 	for(int x=0; x<wndx; x++)
-        {
+    {
         if((x&3)==0)
-            {
+        {
 //            p[(vSync*vgax + x)*2 + 1]=0;
  //           p[(vSync*vgax + x)*2 + 3]=255;
-            }
         }
+    }
 
 
 	if(lastHSyncDelay!=0)
-		{
-		analyzeHSyncDelay(qLine);
-		}
+	{
+		analyzeHSyncDelay(hSync);
+	}
 
 	if(lastVSyncDelay!=0)
-		{
+	{
 		analyzeVSyncDelay(vSync);
-		}
+	}
 
 	static bool isVSyncBad= false;
 	if(vSync!=-1 && (vSync<TOP_VSYNC_BOUNDRY || vSync>BOTTOM_VSYNC_BOUNDRY) && 0) 
-		{
+	{
 		if(isVSyncBad)
-			{
+		{
 			doVSyncDelay(BOTTOM_VSYNC_BOUNDRY - vSync, vSync);
             dropList[1]|=2;
 			isVSyncBad= false;
-			}
+		}
 		else
-			{
+		{
 			isVSyncBad= true;
-			}
 		}
-    else if(qLine!=-1 && qLine<LEFT_QLINE_BOUNDRY)
-		{
-		doHSyncDelay((RIGHT_QLINE_BOUNDRY + LEFT_QLINE_BOUNDRY)/2 - qLine, qLine);
+	}
+    else if(hSync!=-1 && hSync<LEFT_HSYNC_BOUNDRY)
+	{
+		doHSyncDelay((RIGHT_HSYNC_BOUNDRY + LEFT_HSYNC_BOUNDRY)/2 - hSync, hSync);
         dropList[1]|=2;
-		}
-	else if(qLine==-1 && 0)
-		{
+	}
+	else if(hSync==-1 && 0)
+	{
 		doHSyncDelay(wndx/2, 1);
 		lastHSyncDelay=0;
         dropList[1]|=2;
-		}
+	}
 	else if(isVCPhaseTrick)
-		{
+	{
 		isVCPhaseTrick= false;
         vPayTvShiftHack(1000);
         dropList[1]|=2;
-		}
+	}
 	else
-		{
+	{
 		isVSyncBad= false;
-		}
+	}
 
-    if(qLine==-1) dropList[1]|=2;
+    if(hSync==-1) dropList[1]|=2;
 
 
-	fixBrightness(qLine);
+	fixBrightness(hSync);
+	
+	//fixColor(qCol);
 
 //	showStat();
   
-    int nPixMove= REAL_QLINE_POS - qLine;
-
-    if(nPixMove>wndx) nPixMove=0;
-    if(nPixMove<-wndx) nPixMove=0;
-
-
-    p= &actVid2MemBufp->b[0];
-    for(int line=1; line<wndy; line++)
-        {
-        if(nPixMove>0)
-            {
-            memmove(&p[nPixMove*2], &p[0], (wndx-nPixMove)*2);
-            }
-        else if(nPixMove<0)
-            {
-            memmove(&p[0], &p[-nPixMove*2], (wndx+nPixMove)*2);
-            }
-        if(nPixMove & 1)
-            for(int x=0; x<wndx-2; x++)
-                {
-                p[x*2]= p[x*2+2];
-                }
-		for(int x=0; x<wndx-2; x++)
-			{
-//			p[x*2]=0;
-			}
-        p+= vgax<<1;
-        }
-
+	movePic(hSync);
 
-	lastQLine= qLine;        
+	lastHSync= hSync;        
 }

Copied: trunk/2010/2d.txt (from r62, /trunk/2010/2d)
==============================================================================
--- /trunk/2010/2d	(original)
+++ trunk/2010/2d.txt	Wed Jul  4 11:38:46 2007
@@ -1,3 +1,9 @@
+VPAYTV
+timing Info
+optimieren
+fine Tunenen v #defines
+
+sync info verschieben abh„ngig v vLine
 txt restart!?
 rgb565 / 1555 stuff not realy correct but works
 add rgb1555 support
@@ -21,11 +27,11 @@ vc color deco mmx
 
 nag last line ?
 
-yuv2rgb mmx
-
 NAG_LINES ?
 
 teletext:  
  BETTER decode
  SAVE
  fix fractional digits
+
+a few PAL-Constants are in 2_crypt.h should be in 2_pal.h



More information about the Mndiff-dev mailing list