Mercurial > mplayer.hg
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; |