comparison mplayer.c @ 595:12922295d3a8

OSD fixes
author arpi_esp
date Mon, 23 Apr 2001 19:20:44 +0000
parents d4e467a0b942
children c7117e17e20b
comparison
equal deleted inserted replaced
594:dc093ff7b86e 595:12922295d3a8
90 90
91 #define ABS(x) (((x)>=0)?(x):(-(x))) 91 #define ABS(x) (((x)>=0)?(x):(-(x)))
92 92
93 static subtitle* subtitles=NULL; 93 static subtitle* subtitles=NULL;
94 void find_sub(subtitle* subtitles,int key); 94 void find_sub(subtitle* subtitles,int key);
95
96
97 #if 0
98 //**************************************************************************//
99 // .SUB
100 //**************************************************************************//
101
102 static current_sub=0;
103
104 static subtitle* subtitles=NULL;
105 static int nosub_range_start=-1;
106 static int nosub_range_end=-1;
107
108 void find_sub(int key){
109 int i,j;
110 if(vo_sub){
111 if(key>=vo_sub->start && key<=vo_sub->end) return; // OK!
112 } else {
113 if(key>nosub_range_start && key<nosub_range_end) return; // OK!
114 }
115 // sub changed!
116
117 // printf("\r---- sub changed ----\n");
118
119 // check next sub.
120 if(current_sub>=0 && current_sub+1<sub_num){
121 if(key>subtitles[current_sub].end && key<subtitles[current_sub+1].start){
122 // no sub
123 nosub_range_start=subtitles[current_sub].end;
124 nosub_range_end=subtitles[current_sub+1].start;
125 vo_sub=NULL;
126 return;
127 }
128 // next sub?
129 ++current_sub;
130 vo_sub=&subtitles[current_sub];
131 if(key>=vo_sub->start && key<=vo_sub->end) return; // OK!
132 }
133
134 // printf("\r---- sub log search... ----\n");
135
136 // use logarithmic search:
137 i=0;j=sub_num-1;
138 // printf("Searching %d in %d..%d\n",key,subtitles[i].start,subtitles[j].end);
139 while(j>=i){
140 current_sub=(i+j+1)/2;
141 vo_sub=&subtitles[current_sub];
142 if(key<vo_sub->start) j=current_sub-1;
143 else if(key>vo_sub->end) i=current_sub+1;
144 else return; // found!
145 }
146 // if(key>=vo_sub->start && key<=vo_sub->end) return; // OK!
147
148 // check where are we...
149 if(key<vo_sub->start){
150 if(current_sub<=0){
151 // before the first sub
152 nosub_range_start=key-1; // tricky
153 nosub_range_end=vo_sub->start;
154 // printf("FIRST... key=%d end=%d \n",key,vo_sub->start);
155 vo_sub=NULL;
156 return;
157 }
158 --current_sub;
159 if(key>subtitles[current_sub].end && key<subtitles[current_sub+1].start){
160 // no sub
161 nosub_range_start=subtitles[current_sub].end;
162 nosub_range_end=subtitles[current_sub+1].start;
163 // printf("No sub... 1 \n");
164 vo_sub=NULL;
165 return;
166 }
167 printf("HEH???? ");
168 } else {
169 if(key<=vo_sub->end) printf("JAJJ! "); else
170 if(current_sub+1>=sub_num){
171 // at the end?
172 nosub_range_start=vo_sub->end;
173 nosub_range_end=0x7FFFFFFF; // MAXINT
174 // printf("END!?\n");
175 vo_sub=NULL;
176 return;
177 } else
178 if(key>subtitles[current_sub].end && key<subtitles[current_sub+1].start){
179 // no sub
180 nosub_range_start=subtitles[current_sub].end;
181 nosub_range_end=subtitles[current_sub+1].start;
182 // printf("No sub... 2 \n");
183 vo_sub=NULL;
184 return;
185 }
186 }
187
188 printf("SUB ERROR: %d ? %d --- %d [%d] \n",key,vo_sub->start,vo_sub->end,current_sub);
189
190 vo_sub=NULL; // no sub here
191 }
192
193 #endif
194 95
195 //**************************************************************************// 96 //**************************************************************************//
196 // Config file 97 // Config file
197 //**************************************************************************// 98 //**************************************************************************//
198 99
1212 int grab_frames=0; 1113 int grab_frames=0;
1213 char osd_text_buffer[64]; 1114 char osd_text_buffer[64];
1214 int osd_level=2; 1115 int osd_level=2;
1215 int osd_visible=100; 1116 int osd_visible=100;
1216 int osd_function=OSD_PLAY; 1117 int osd_function=OSD_PLAY;
1118 int osd_last_pts=-303;
1217 1119
1218 #ifdef HAVE_LIRC 1120 #ifdef HAVE_LIRC
1219 lirc_mp_setup(); 1121 lirc_mp_setup();
1220 #endif 1122 #endif
1221 1123
1596 frame_time*=sh_video->frametime; 1498 frame_time*=sh_video->frametime;
1597 if(file_format==DEMUXER_TYPE_ASF && !force_fps){ 1499 if(file_format==DEMUXER_TYPE_ASF && !force_fps){
1598 // .ASF files has no fixed FPS - just frame durations! 1500 // .ASF files has no fixed FPS - just frame durations!
1599 float d=d_video->pts-pts1; 1501 float d=d_video->pts-pts1;
1600 if(d>=0 && d<5) frame_time=d; 1502 if(d>=0 && d<5) frame_time=d;
1503 if(d>0){
1504 if(verbose)
1505 if((int)sh_video->fps==1000)
1506 printf("\rASF framerate: %d fps \n",(int)(1.0f/d));
1507 sh_video->frametime=d; // 1ms
1508 sh_video->fps=1.0f/d;
1509 }
1601 } 1510 }
1602 v_frame+=frame_time; 1511 v_frame+=frame_time;
1603 v_pts+=frame_time; 1512 v_pts+=frame_time;
1604 1513
1605 current_module="flip_page"; 1514 current_module="flip_page";
1934 1843
1935 if(verbose) printf("SEEK: idx=%d (a:%d v:%d) v.skip=%d a.skip=%d/%4.3f \n", 1844 if(verbose) printf("SEEK: idx=%d (a:%d v:%d) v.skip=%d a.skip=%d/%4.3f \n",
1936 demuxer->idx_pos,audio_chunk_pos,video_chunk_pos, 1845 demuxer->idx_pos,audio_chunk_pos,video_chunk_pos,
1937 skip_video_frames,skip_audio_bytes,skip_audio_secs); 1846 skip_video_frames,skip_audio_bytes,skip_audio_secs);
1938 1847
1939 // Set OSD:
1940 if(osd_level){
1941 osd_visible=sh_video->fps; // 1 sec
1942 vo_osd_progbar_type=0;
1943 vo_osd_progbar_value=(demuxer->filepos)/((demuxer->movi_end-demuxer->movi_start)>>8);
1944 //printf("avi filepos = %d \n",vo_osd_progbar_value);
1945 // printf("avi filepos = %d (len=%d) \n",demuxer->filepos,(demuxer->movi_end-demuxer->movi_start));
1946 }
1947
1948 } 1848 }
1949 break; 1849 break;
1950 1850
1951 case DEMUXER_TYPE_ASF: { 1851 case DEMUXER_TYPE_ASF: {
1952 //================= seek in ASF ========================== 1852 //================= seek in ASF ==========================
1987 // if(has_audio) ds_fill_buffer(d_audio); 1887 // if(has_audio) ds_fill_buffer(d_audio);
1988 } 1888 }
1989 break; 1889 break;
1990 1890
1991 } // switch(file_format) 1891 } // switch(file_format)
1892
1893 // Set OSD:
1894 if(osd_level){
1895 int len=((demuxer->movi_end-demuxer->movi_start)>>8);
1896 if(len>0){
1897 osd_visible=sh_video->fps; // 1 sec
1898 vo_osd_progbar_type=0;
1899 vo_osd_progbar_value=(demuxer->filepos)/len;
1900 }
1901 //printf("avi filepos = %d \n",vo_osd_progbar_value);
1902 // printf("avi filepos = %d (len=%d) \n",demuxer->filepos,(demuxer->movi_end-demuxer->movi_start));
1903 }
1992 1904
1993 //====================== re-sync audio: ===================== 1905 //====================== re-sync audio: =====================
1994 if(has_audio){ 1906 if(has_audio){
1995 1907
1996 if(skip_audio_bytes){ 1908 if(skip_audio_bytes){
2055 } // keyboard event handler 1967 } // keyboard event handler
2056 1968
2057 //================= Update OSD ==================== 1969 //================= Update OSD ====================
2058 { int i; 1970 { int i;
2059 if(osd_level>=2){ 1971 if(osd_level>=2){
1972 int pts=v_pts;
1973 if(pts==osd_last_pts-1) ++pts; else osd_last_pts=pts;
2060 vo_osd_text=osd_text_buffer; 1974 vo_osd_text=osd_text_buffer;
2061 sprintf(vo_osd_text,"%c %02d:%02d:%02d",osd_function,(int)v_pts/3600,((int)v_pts/60)%60,((int)v_pts)%60); 1975 sprintf(vo_osd_text,"%c %02d:%02d:%02d",osd_function,pts/3600,(pts/60)%60,pts%60);
2062 } else { 1976 } else {
2063 vo_osd_text=NULL; 1977 vo_osd_text=NULL;
2064 } 1978 }
2065 // for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0; 1979 // for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0;
2066 // vo_osd_text=osd_text_buffer; 1980 // vo_osd_text=osd_text_buffer;