gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog libbase/FLVParser.cpp server/as...


From: Tomas Groth
Subject: [Gnash-commit] gnash ChangeLog libbase/FLVParser.cpp server/as...
Date: Mon, 07 May 2007 23:15:44 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Tomas Groth <tgc>       07/05/07 23:15:44

Modified files:
        .              : ChangeLog 
        libbase        : FLVParser.cpp 
        server/asobj   : NetStream.cpp NetStream.h NetStreamFfmpeg.cpp 
                         NetStreamFfmpeg.h NetStreamGst.cpp 
                         NetStreamGst.h 

Log message:
                * libbase/FLVParser.cpp: When seeking to 0 just go to
                  the first frames.
                * server/asobj/NetStream.{h,cpp}: Moved setBufferTime() to
                  the base class, implemented bufferTime().
                * server/asobj/NetStreamFfmpeg.{cpp,h}: Moved setBufferTime()
                  to the base class.
                * server/asobj/NetStreamGst.{cpp,h}: Moved setBufferTime() to
                  the base class. tried to improve seeking by using an offset
                  to avoid telling gstreamer about the seek.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3120&r2=1.3121
http://cvs.savannah.gnu.org/viewcvs/gnash/libbase/FLVParser.cpp?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.cpp?cvsroot=gnash&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.h?cvsroot=gnash&r1=1.29&r2=1.30
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamFfmpeg.cpp?cvsroot=gnash&r1=1.48&r2=1.49
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamFfmpeg.h?cvsroot=gnash&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamGst.cpp?cvsroot=gnash&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamGst.h?cvsroot=gnash&r1=1.14&r2=1.15

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3120
retrieving revision 1.3121
diff -u -b -r1.3120 -r1.3121
--- ChangeLog   7 May 2007 16:43:27 -0000       1.3120
+++ ChangeLog   7 May 2007 23:15:44 -0000       1.3121
@@ -1,5 +1,17 @@
 2007-05-07 Tomas Groth Christensen <address@hidden>
 
+       * libbase/FLVParser.cpp: When seeking to 0 just go to
+         the first frames.
+       * server/asobj/NetStream.{h,cpp}: Moved setBufferTime() to
+         the base class, implemented bufferTime().
+       * server/asobj/NetStreamFfmpeg.{cpp,h}: Moved setBufferTime()
+         to the base class.
+       * server/asobj/NetStreamGst.{cpp,h}: Moved setBufferTime() to
+         the base class. tried to improve seeking by using an offset
+         to avoid telling gstreamer about the seek.
+
+2007-05-07 Tomas Groth Christensen <address@hidden>
+
        * server/asobj/NetStream{Ffmpeg,Gst}.cpp: After playback stops,
          make it possible to restart video by seeking to 0 and setting
          pause to false.

Index: libbase/FLVParser.cpp
===================================================================
RCS file: /sources/gnash/gnash/libbase/FLVParser.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- libbase/FLVParser.cpp       5 May 2007 16:19:18 -0000       1.8
+++ libbase/FLVParser.cpp       7 May 2007 23:15:44 -0000       1.9
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-// $Id: FLVParser.cpp,v 1.8 2007/05/05 16:19:18 strk Exp $
+// $Id: FLVParser.cpp,v 1.9 2007/05/07 23:15:44 tgc Exp $
 
 #include "FLVParser.h"
 #include "amf.h"
@@ -441,6 +441,11 @@
 {
        boost::mutex::scoped_lock lock(_mutex);
 
+       if (time == 0) {
+               if (_video) _lastVideoFrame = -1;
+               if (_audio) _lastAudioFrame = -1;
+       }
+
        if (_video)     time = seekVideo(time);
        if (_audio)     time = seekAudio(time);
        return time;

Index: server/asobj/NetStream.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStream.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- server/asobj/NetStream.cpp  5 May 2007 13:31:44 -0000       1.42
+++ server/asobj/NetStream.cpp  7 May 2007 23:15:44 -0000       1.43
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: NetStream.cpp,v 1.42 2007/05/05 13:31:44 strk Exp $ */
+/* $Id: NetStream.cpp,v 1.43 2007/05/07 23:15:44 tgc Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -63,7 +63,8 @@
        as_object(getNetStreamInterface()),
        _netCon(NULL),
        m_env(NULL),
-       _lastStatus(invalidStatus)
+       _lastStatus(invalidStatus),
+       m_bufferTime(100)
 {
 }
 
@@ -302,16 +303,8 @@
 {
        boost::intrusive_ptr<NetStream> ns = ensureType<NetStream>(fn.this_ptr);
 
-       if ( fn.nargs == 0 ) // getter
-       {
-               log_unimpl("NetStream.bufferTime get");
-               return as_value();
-       }
-       else // setter
-       {
-               log_unimpl("NetStream.bufferTime set");
-               return as_value();
-       }
+       uint32_t ret = ns->bufferTime();
+       return as_value(ret);
 }
 
 // Both a getter and a (do-nothing) setter for liveDelay
@@ -459,6 +452,20 @@
        _statusQueue.push_back(status);
 }
 
+void
+NetStream::setBufferTime(double time)
+{
+       // The argument is in seconds, but we store in milliseconds
+    m_bufferTime = static_cast<uint32_t>(time*1000);
+}
+
+uint32_t
+NetStream::bufferTime()
+{
+       // The argument is in seconds, but we store in milliseconds
+    return (m_bufferTime/1000);
+}
+
 std::pair<const char*, const char*>
 NetStream::getStatusCodeInfo(StatusCode code)
 {

Index: server/asobj/NetStream.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStream.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- server/asobj/NetStream.h    5 May 2007 13:31:44 -0000       1.29
+++ server/asobj/NetStream.h    7 May 2007 23:15:44 -0000       1.30
@@ -18,7 +18,7 @@
 //
 //
 
-/*  $Id: NetStream.h,v 1.29 2007/05/05 13:31:44 strk Exp $ */
+/*  $Id: NetStream.h,v 1.30 2007/05/07 23:15:44 tgc Exp $ */
 
 #ifndef __NETSTREAM_H__
 #define __NETSTREAM_H__
@@ -107,6 +107,9 @@
        // The actionscript enviroment for the AS callbacks
        as_environment* m_env;
 
+       // The size of the buffer in milliseconds
+       uint32_t m_bufferTime;
+
 public:
 
        NetStream();
@@ -121,8 +124,6 @@
 
        virtual void seek(double /*pos*/){}
 
-       virtual void setBufferTime(double /*time*/){}
-
        virtual void setNetCon(boost::intrusive_ptr<NetConnection> nc)
        {
                _netCon = nc;
@@ -151,6 +152,10 @@
                m_env = env;
        }
 
+       void setBufferTime(double time);
+
+       uint32_t bufferTime();
+
 private:
 
        typedef std::vector<StatusCode> StatusQueue;

Index: server/asobj/NetStreamFfmpeg.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamFfmpeg.cpp,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- server/asobj/NetStreamFfmpeg.cpp    7 May 2007 16:43:27 -0000       1.48
+++ server/asobj/NetStreamFfmpeg.cpp    7 May 2007 23:15:44 -0000       1.49
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: NetStreamFfmpeg.cpp,v 1.48 2007/05/07 16:43:27 tgc Exp $ */
+/* $Id: NetStreamFfmpeg.cpp,v 1.49 2007/05/07 23:15:44 tgc Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -72,7 +72,6 @@
        m_parser(NULL),
        m_isFLV(false),
        m_newFrameReady(false),
-       m_bufferTime(100),
        m_start_onbuffer(false)
 {
 
@@ -1030,13 +1029,6 @@
 }
 
 void
-NetStreamFfmpeg::setBufferTime(double time)
-{
-       // The argument is in seconds, but we store in milliseconds
-    m_bufferTime = static_cast<uint32_t>(time*1000);
-}
-
-void
 NetStreamFfmpeg::advance()
 {
        // Check if we should start the playback when a certain amount is 
buffered

Index: server/asobj/NetStreamFfmpeg.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamFfmpeg.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- server/asobj/NetStreamFfmpeg.h      6 May 2007 13:35:37 -0000       1.25
+++ server/asobj/NetStreamFfmpeg.h      7 May 2007 23:15:44 -0000       1.26
@@ -14,7 +14,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: NetStreamFfmpeg.h,v 1.25 2007/05/06 13:35:37 tgc Exp $ */
+/* $Id: NetStreamFfmpeg.h,v 1.26 2007/05/07 23:15:44 tgc Exp $ */
 
 #ifndef __NETSTREAMFFMPEG_H__
 #define __NETSTREAMFFMPEG_H__
@@ -181,8 +181,6 @@
        void pause(int mode);
        int play(const std::string& source);
        void seek(double pos);
-       void setBufferTime(double time);
-       void setNetCon(as_object* nc);
        int64_t time();
        long bytesLoaded();
        long bytesTotal();
@@ -281,9 +279,6 @@
        // Are a new frame ready to be returned?
        volatile bool m_newFrameReady;
 
-       // The size of the buffer in milliseconds
-       uint32_t m_bufferTime;
-
        // The handler which is invoked on status change
        boost::intrusive_ptr<as_function> m_statusHandler;
 

Index: server/asobj/NetStreamGst.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamGst.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- server/asobj/NetStreamGst.cpp       7 May 2007 16:43:27 -0000       1.34
+++ server/asobj/NetStreamGst.cpp       7 May 2007 23:15:44 -0000       1.35
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: NetStreamGst.cpp,v 1.34 2007/05/07 16:43:27 tgc Exp $ */
+/* $Id: NetStreamGst.cpp,v 1.35 2007/05/07 23:15:44 tgc Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -90,6 +90,7 @@
        videowidth(0),
        videoheight(0),
        m_newFrameReady(false),
+       m_clock_offset(0),
        m_parser(NULL),
        m_pausePlayback(false),
        m_start_onbuffer(false)
@@ -299,7 +300,7 @@
 //     if (GST_BUFFER_DATA(buffer)) delete [] GST_BUFFER_DATA(buffer);
        GST_BUFFER_SIZE(buffer) = frame->dataSize;
        GST_BUFFER_DATA(buffer) = frame->data;
-       GST_BUFFER_TIMESTAMP(buffer) = frame->timestamp * 1000000;
+       GST_BUFFER_TIMESTAMP(buffer) = (frame->timestamp + ns->m_clock_offset) 
* GST_MSECOND;
        delete frame;
        return;
 
@@ -321,7 +322,7 @@
 //     if (GST_BUFFER_DATA(buffer)) delete [] GST_BUFFER_DATA(buffer);
        GST_BUFFER_SIZE(buffer) = frame->dataSize;
        GST_BUFFER_DATA(buffer) = frame->data;
-       GST_BUFFER_TIMESTAMP(buffer) = frame->timestamp * 1000000;
+       GST_BUFFER_TIMESTAMP(buffer) = (frame->timestamp + ns->m_clock_offset) 
* GST_MSECOND;
        delete frame;
        return;
 }
@@ -641,14 +642,13 @@
        if (!pipeline) return;
 
        if (m_isFLV) {
-               /*uint32_t newpos =*/ 
m_parser->seek(static_cast<uint32_t>(pos*1000))/1000;
-               /*if (!gst_element_seek (pipeline, 1.0, GST_FORMAT_TIME, 
GST_SEEK_FLAG_FLUSH,
-                       GST_SEEK_TYPE_SET, GST_SECOND * 
static_cast<long>(newpos),
-                       GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) {
-                       log_error("Gstreamer seek failed");
-                       setStatus(invalidTime);
-                       return;
-               }*/
+               uint32_t newpos = 
m_parser->seek(static_cast<uint32_t>(pos*1000));
+               GstClock* clock = GST_ELEMENT_CLOCK(pipeline);
+               uint64_t currenttime = gst_clock_get_time (clock);
+               gst_object_unref(clock);
+               
+               m_clock_offset = (currenttime / GST_MSECOND) - newpos;
+
        } else {
                if (!gst_element_seek (pipeline, 1.0, GST_FORMAT_TIME, 
GST_SEEK_FLAG_FLUSH,
                        GST_SEEK_TYPE_SET, GST_SECOND * static_cast<long>(pos),
@@ -662,13 +662,6 @@
 }
 
 void
-NetStreamGst::setBufferTime(double time)
-{
-       // The argument is in seconds, but we store in milliseconds
-    m_bufferTime = static_cast<uint32_t>(time*1000);
-}
-
-void
 NetStreamGst::advance()
 {
        // Check if we should start the playback when a certain amount is 
buffered
@@ -687,6 +680,7 @@
                        setStatus(playStop);
                        gst_element_set_state (GST_ELEMENT (pipeline), 
GST_STATE_NULL);
                        m_go = false;
+                       m_clock_offset = 0;
                } else {
                        gst_element_set_state (GST_ELEMENT (pipeline), 
GST_STATE_PAUSED);
                        GstFormat fmt = GST_FORMAT_TIME;
@@ -729,7 +723,7 @@
        if (current != GST_STATE_NULL && gst_element_query_position (pipeline, 
&fmt, &pos)) {
                pos = pos / 1000000000;
 
-               return pos;
+               return pos - m_clock_offset/1000;
        } else {
                return 0;
        }

Index: server/asobj/NetStreamGst.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamGst.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- server/asobj/NetStreamGst.h 5 May 2007 13:31:44 -0000       1.14
+++ server/asobj/NetStreamGst.h 7 May 2007 23:15:44 -0000       1.15
@@ -45,8 +45,6 @@
        void pause(int mode);
        int play(const std::string& source);
        void seek(double pos);
-       void setBufferTime(double time);
-       void setNetCon(as_object* nc);
        int64_t time();
        long bytesLoaded();
        long bytesTotal();
@@ -120,8 +118,7 @@
 
        volatile bool m_newFrameReady;
        
-       // The size of the buffer in milliseconds
-       uint32_t m_bufferTime;
+       volatile long m_clock_offset;
 
        // The status message
        std::string m_status;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]