diff options
author | Benjamin Otte <otte@gnome.org> | 2008-12-10 18:14:27 +0100 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2008-12-16 21:38:15 +0100 |
commit | 4625422b186e863188a9425b5c076154c04eb926 (patch) | |
tree | 1c8c070e26136b6c2e2cbacd463fbf97f455e173 | |
parent | c54d6df2ae2f605975b1cc56bf1ceafce118b19d (diff) |
implement NetStream.time
-rw-r--r-- | swfdec/swfdec_net_stream.c | 8 | ||||
-rw-r--r-- | swfdec/swfdec_net_stream_video.c | 3 | ||||
-rw-r--r-- | swfdec/swfdec_net_stream_video.h | 1 | ||||
-rw-r--r-- | swfdec/swfdec_rtmp_connection.c | 3 |
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) |