[SCM] libav/experimental: add "seek by bytes" support to ffplay Patch by Steve Lhomme % slhomme A divxcorp P com % Orginal thread: Date: Nov 6, 2006 5:58 PM Subject: Re: [Ffmpeg-devel] [Bad news]: MPEG Seek has failed to work in FFmpeg SVN

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:53:05 UTC 2013


The following commit has been merged in the experimental branch:
commit 94b594c68ae36848605766c84771674ef7b21bc9
Author: Steve L'Homme <slhomme at divxcorp.com>
Date:   Tue Nov 7 22:35:41 2006 +0000

    add "seek by bytes" support to ffplay
    Patch by Steve Lhomme % slhomme A divxcorp P com %
    Orginal thread:
    Date: Nov 6, 2006 5:58 PM
    Subject: Re: [Ffmpeg-devel] [Bad news]: MPEG Seek has failed to work in FFmpeg SVN
    
    Originally committed as revision 6937 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/ffplay.c b/ffplay.c
index 08e71d3..5ac33c6 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -192,6 +192,7 @@ static int screen_width = 640;
 static int screen_height = 480;
 static int audio_disable;
 static int video_disable;
+static int seek_by_bytes;
 static int display_disable;
 static int show_status;
 static int av_sync_type = AV_SYNC_AUDIO_MASTER;
@@ -918,6 +919,8 @@ static void stream_seek(VideoState *is, int64_t pos, int rel)
     if (!is->seek_req) {
         is->seek_pos = pos;
         is->seek_flags = rel < 0 ? AVSEEK_FLAG_BACKWARD : 0;
+        if (seek_by_bytes)
+            is->seek_flags |= AVSEEK_FLAG_BYTE;
         is->seek_req = 1;
     }
 }
@@ -2222,9 +2225,19 @@ static void event_loop(void)
                 incr = -60.0;
             do_seek:
                 if (cur_stream) {
-                    pos = get_master_clock(cur_stream);
-                    pos += incr;
-                    stream_seek(cur_stream, (int64_t)(pos * AV_TIME_BASE), incr);
+                    if (seek_by_bytes) {
+                        pos = url_ftell(&cur_stream->ic->pb);
+                        if (cur_stream->ic->bit_rate)
+                            incr *= cur_stream->ic->bit_rate / 60.0;
+                        else
+                            incr *= 180000.0;
+                        pos += incr;
+                        stream_seek(cur_stream, pos, incr);
+                    } else {
+                        pos = get_master_clock(cur_stream);
+                        pos += incr;
+                        stream_seek(cur_stream, (int64_t)(pos * AV_TIME_BASE), incr);
+                    }
                 }
                 break;
             default:
@@ -2344,6 +2357,7 @@ const OptionDef options[] = {
     { "an", OPT_BOOL, {(void*)&audio_disable}, "disable audio" },
     { "vn", OPT_BOOL, {(void*)&video_disable}, "disable video" },
     { "ss", HAS_ARG, {(void*)&opt_seek}, "seek to a given position in seconds", "pos" },
+    { "bytes", OPT_BOOL, {(void*)&seek_by_bytes}, "seek by bytes" },
     { "nodisp", OPT_BOOL, {(void*)&display_disable}, "disable graphical display" },
     { "f", HAS_ARG, {(void*)opt_format}, "force format", "fmt" },
     { "stats", OPT_BOOL | OPT_EXPERT, {(void*)&show_status}, "show status", "" },

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list