summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2008-12-10 18:14:27 +0100
committerBenjamin Otte <otte@gnome.org>2008-12-16 21:38:15 +0100
commit4625422b186e863188a9425b5c076154c04eb926 (patch)
tree1c8c070e26136b6c2e2cbacd463fbf97f455e173
parentc54d6df2ae2f605975b1cc56bf1ceafce118b19d (diff)
implement NetStream.time
-rw-r--r--swfdec/swfdec_net_stream.c8
-rw-r--r--swfdec/swfdec_net_stream_video.c3
-rw-r--r--swfdec/swfdec_net_stream_video.h1
-rw-r--r--swfdec/swfdec_rtmp_connection.c3
4 files changed, 12 insertions, 3 deletions
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index 67ccc832..ca70ac37 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -334,7 +334,11 @@ static void
swfdec_net_stream_get_time (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
- SWFDEC_STUB ("NetStream.time (get)");
+ SwfdecNetStream *stream;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_NET_STREAM, &stream, "");
+
+ *rval = swfdec_as_value_from_number (cx, stream->video->time / 1000.);
}
static void
@@ -348,6 +352,8 @@ static void
swfdec_net_stream_install_properties (SwfdecAsObject *object)
{
object = object->prototype;
+ if (object == NULL)
+ return;
swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_audiocodec,
swfdec_net_stream_get_audiocodec, NULL);
diff --git a/swfdec/swfdec_net_stream_video.c b/swfdec/swfdec_net_stream_video.c
index 13fd14fb..e09b497d 100644
--- a/swfdec/swfdec_net_stream_video.c
+++ b/swfdec/swfdec_net_stream_video.c
@@ -137,7 +137,6 @@ swfdec_net_stream_video_class_init (SwfdecNetStreamVideoClass * g_class)
static void
swfdec_net_stream_video_init (SwfdecNetStreamVideo *video)
{
- video->buffer_time = 100;
video->next = g_queue_new ();
}
@@ -262,6 +261,7 @@ swfdec_net_stream_video_decode (SwfdecNetStreamVideo *video)
}
swfdec_net_stream_video_decode_one (video, packet->buffer);
video->next_length -= packet->header.timestamp;
+ video->time += packet->header.timestamp;
swfdec_rtmp_packet_free (packet);
}
}
@@ -269,6 +269,7 @@ swfdec_net_stream_video_decode (SwfdecNetStreamVideo *video)
static void
swfdec_net_stream_video_start (SwfdecNetStreamVideo *video)
{
+ video->time = 0;
video->playing = TRUE;
video->timeout.timestamp = SWFDEC_PLAYER (swfdec_gc_object_get_context (video))->priv->time;
g_object_notify (G_OBJECT (video), "playing");
diff --git a/swfdec/swfdec_net_stream_video.h b/swfdec/swfdec_net_stream_video.h
index 163d048b..2aa51456 100644
--- a/swfdec/swfdec_net_stream_video.h
+++ b/swfdec/swfdec_net_stream_video.h
@@ -41,6 +41,7 @@ typedef struct _SwfdecNetStreamVideoClass SwfdecNetStreamVideoClass;
struct _SwfdecNetStreamVideo {
SwfdecGcObject object;
+ guint time; /* time as reported by NetStream.getTime() in ms */
gulong buffer_time; /* time to buffer before starting to play */
GQueue * next; /* queue of pending packets */
gulong next_length; /* number of milliseconds in the next queue */
diff --git a/swfdec/swfdec_rtmp_connection.c b/swfdec/swfdec_rtmp_connection.c
index e3dc0134..e2842086 100644
--- a/swfdec/swfdec_rtmp_connection.c
+++ b/swfdec/swfdec_rtmp_connection.c
@@ -356,6 +356,7 @@ swfdec_rtmp_connection_init (SwfdecRtmpConnection *conn)
conn->control_packets = g_queue_new ();
conn->rpc = swfdec_rtmp_rpc_new (conn, SWFDEC_AS_RELAY (conn));
+ conn->rpc->id = 1;
conn->read_size = SWFDEC_RTMP_BLOCK_SIZE;
conn->write_size = SWFDEC_RTMP_BLOCK_SIZE;
@@ -488,7 +489,7 @@ swfdec_rtmp_connection_send (SwfdecRtmpConnection *conn, SwfdecRtmpPacket *packe
g_assert (packet->header.size == packet->buffer->length);
packet->buffer->length = 0;
send = g_queue_is_empty (conn->packets);
- g_queue_push_tail (conn->packets, packet);
+ g_queue_push_head (conn->packets, packet);
SWFDEC_LOG ("pushed channel %u - %u packets now", packet->header.channel,
g_queue_get_length (conn->packets));
if (send)