changeset 1726:38871427a131

corrections to OSD progbar position calculations
author atlka
date Tue, 28 Aug 2001 12:43:41 +0000
parents 24e75b632740
children 9da2b587b029
files libvo/sub.c mplayer.c
diffstat 2 files changed, 25 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/sub.c	Tue Aug 28 10:54:31 2001 +0000
+++ b/libvo/sub.c	Tue Aug 28 12:43:41 2001 +0000
@@ -30,12 +30,20 @@
 }
 
 int vo_osd_progbar_type=-1;
-int vo_osd_progbar_value=100;   // 0..255
+int vo_osd_progbar_value=100;   // 0..256
+
+// if we have n=256 bars then OSD progbar looks like below
+// 
+// 0   1    2    3 ...   256  <= vo_osd_progbar_value
+// |   |    |    |       |
+// [ ===  ===  === ... === ]
+// 
+//  the above schema is rescalled to n=elems bars
 
 inline static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){
    	unsigned char *s;
    	unsigned char *sa;
-        int i,w,h,st;
+        int i,w,h,st,mark;
         int y=(dys-vo_font->height)/2;
         int c,font;
         int delimw=vo_font->width[OSD_PB_START]
@@ -45,8 +53,15 @@
    	int charw=vo_font->width[OSD_PB_0]+vo_font->charspace;
         int elems=width/charw;
    	int x=(dxs-elems*charw-delimw)/2;
-        int mark=(vo_osd_progbar_value*(elems+1))>>8;
 
+	if (vo_osd_progbar_value<=0)
+     	   mark=0;
+	else {
+	   int mm=vo_osd_progbar_value*elems;
+	   mark=mm>>8;
+	   if (mm & 0x00FF) mark++;
+	   if (mark>elems) mark=elems;
+	}
 //        printf("osd.progbar  width=%d  xpos=%d\n",width,x);
 
         c=vo_osd_progbar_type;
@@ -254,3 +269,4 @@
     }
 
 }
+         
--- a/mplayer.c	Tue Aug 28 10:54:31 2001 +0000
+++ b/mplayer.c	Tue Aug 28 12:43:41 2001 +0000
@@ -1612,8 +1612,8 @@
         if(osd_level){
           osd_visible=sh_video->fps; // 1 sec
           vo_osd_progbar_type=OSD_VOLUME;
-          vo_osd_progbar_value=(mixer_l+mixer_r)*255/200;
-          //printf("volume: %d\n",vo_osd_progbar_value);
+          vo_osd_progbar_value=((mixer_l+mixer_r)*256.0)/200.0;
+          // printf("volume: %d\n",vo_osd_progbar_value);
         }
 #endif
       }
@@ -1649,7 +1649,7 @@
     		if(osd_level){
             	    osd_visible=sh_video->fps; // 1 sec
 	    	    vo_osd_progbar_type=OSD_CONTRAST;
-            	    vo_osd_progbar_value=(v_cont)*255/100;
+            	    vo_osd_progbar_value=((v_cont)<<8)/100;
 		}
 #endif
 	}
@@ -1668,7 +1668,7 @@
     		if(osd_level){
             	    osd_visible=sh_video->fps; // 1 sec
 	    	    vo_osd_progbar_type=OSD_BRIGHTNESS;
-            	    vo_osd_progbar_value=(v_bright)*255/100;
+            	    vo_osd_progbar_value=((v_bright)<<8)/100;
 		}
 #endif
 	}
@@ -1687,7 +1687,7 @@
     		if(osd_level){
             	    osd_visible=sh_video->fps; // 1 sec
 	    	    vo_osd_progbar_type=OSD_HUE;
-            	    vo_osd_progbar_value=(v_hue)*255/100;
+            	    vo_osd_progbar_value=((v_hue)<<8)/100;
 		}
 #endif
 	}
@@ -1706,7 +1706,7 @@
     		if(osd_level){
             	    osd_visible=sh_video->fps; // 1 sec
 	    	    vo_osd_progbar_type=OSD_SATURATION;
-            	    vo_osd_progbar_value=(v_saturation)*255/100;
+            	    vo_osd_progbar_value=((v_saturation)<<8)/100;
 		}
 #endif
 	}
@@ -1763,10 +1763,6 @@
           osd_visible=sh_video->fps; // 1 sec
           vo_osd_progbar_type=0;
 	  vo_osd_progbar_value=(demuxer->filepos-demuxer->movi_start)/len;
-	  if (vo_osd_progbar_value<0)
-	     vo_osd_progbar_value=0;
-	  else if (vo_osd_progbar_value>255)
-	     vo_osd_progbar_value=255;
         }
       }
 #endif