# HG changeset patch # User arpi_esp # Date 987996887 0 # Node ID 9bdb59e8887d9670efcf707297d0447785267eb2 # Parent da08ded038831f5adead715653c89d655a1dfc08 find_sub() moved out from mplayer.c diff -r da08ded03883 -r 9bdb59e8887d find_sub.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/find_sub.c Mon Apr 23 03:34:47 2001 +0000 @@ -0,0 +1,101 @@ +//**************************************************************************// +// .SUB +//**************************************************************************// + +#include + +#include "libvo/video_out.h" +#include "subreader.h" +#include "libvo/sub.h" + +static int current_sub=0; + +//static subtitle* subtitles=NULL; +static int nosub_range_start=-1; +static int nosub_range_end=-1; + +void find_sub(subtitle* subtitles,int key){ + int i,j; + if(vo_sub){ + if(key>=vo_sub->start && key<=vo_sub->end) return; // OK! + } else { + if(key>nosub_range_start && key=0 && current_sub+1subtitles[current_sub].end && key=vo_sub->start && key<=vo_sub->end) return; // OK! + } + +// printf("\r---- sub log search... ----\n"); + + // use logarithmic search: + i=0;j=sub_num-1; +// printf("Searching %d in %d..%d\n",key,subtitles[i].start,subtitles[j].end); + while(j>=i){ + current_sub=(i+j+1)/2; + vo_sub=&subtitles[current_sub]; + if(keystart) j=current_sub-1; + else if(key>vo_sub->end) i=current_sub+1; + else return; // found! + } +// if(key>=vo_sub->start && key<=vo_sub->end) return; // OK! + + // check where are we... + if(keystart){ + if(current_sub<=0){ + // before the first sub + nosub_range_start=key-1; // tricky + nosub_range_end=vo_sub->start; +// printf("FIRST... key=%d end=%d \n",key,vo_sub->start); + vo_sub=NULL; + return; + } + --current_sub; + if(key>subtitles[current_sub].end && keyend) printf("JAJJ! "); else + if(current_sub+1>=sub_num){ + // at the end? + nosub_range_start=vo_sub->end; + nosub_range_end=0x7FFFFFFF; // MAXINT +// printf("END!?\n"); + vo_sub=NULL; + return; + } else + if(key>subtitles[current_sub].end && keystart,(int)vo_sub->end,current_sub); + + vo_sub=NULL; // no sub here +} +