[Top][All Lists]
[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;
- [Gnash-commit] gnash ChangeLog libbase/FLVParser.cpp server/as...,
Tomas Groth <=