OSDN Git Service

Fast seeking.
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 5 Feb 2010 00:37:39 +0000 (00:37 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 5 Feb 2010 00:37:39 +0000 (00:37 +0000)
Try clicking with the mouse in the window, hold the button and drag.

Originally committed as revision 21638 to svn://svn.ffmpeg.org/ffmpeg/trunk

ffplay.c

index dbe5001..f6d2157 100644 (file)
--- a/ffplay.c
+++ b/ffplay.c
@@ -2327,6 +2327,7 @@ static void event_loop(void)
     double incr, pos, frac;
 
     for(;;) {
+        double x;
         SDL_WaitEvent(&event);
         switch(event.type) {
         case SDL_KEYDOWN:
@@ -2398,10 +2399,18 @@ static void event_loop(void)
             }
             break;
         case SDL_MOUSEBUTTONDOWN:
+        case SDL_MOUSEMOTION:
+            if(event.type ==SDL_MOUSEBUTTONDOWN){
+                x= event.button.x;
+            }else{
+                if(event.motion.state != SDL_PRESSED)
+                    break;
+                x= event.motion.x;
+            }
             if (cur_stream) {
                 if(seek_by_bytes || cur_stream->ic->duration<=0){
                     uint64_t size=  url_fsize(cur_stream->ic->pb);
-                    stream_seek(cur_stream, size*(double)event.button.x/(double)cur_stream->width, 0, 1);
+                    stream_seek(cur_stream, size*x/cur_stream->width, 0, 1);
                 }else{
                     int64_t ts;
                     int ns, hh, mm, ss;
@@ -2410,7 +2419,7 @@ static void event_loop(void)
                     thh = tns/3600;
                     tmm = (tns%3600)/60;
                     tss = (tns%60);
-                    frac = (double)event.button.x/(double)cur_stream->width;
+                    frac = x/cur_stream->width;
                     ns = frac*tns;
                     hh = ns/3600;
                     mm = (ns%3600)/60;
@@ -2650,7 +2659,6 @@ int main(int argc, char **argv)
     }
 
     SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
-    SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
     SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);
     SDL_EventState(SDL_USEREVENT, SDL_IGNORE);