diff options
author | Benjamin Otte <otte@gnome.org> | 2008-12-15 16:55:21 +0100 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2008-12-16 21:38:19 +0100 |
commit | 3d819aded9429bd894b882b17b050f5411df16e1 (patch) | |
tree | aa4612df6d582306372fc4843e55e20e01aad51c | |
parent | 5926a3a04a9c9f9e2fa504ab428fa91d01918000 (diff) |
make seeking work properly
-rw-r--r-- | swfdec/swfdec_net_stream_video.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/swfdec/swfdec_net_stream_video.c b/swfdec/swfdec_net_stream_video.c index 9d945181..f7fe381f 100644 --- a/swfdec/swfdec_net_stream_video.c +++ b/swfdec/swfdec_net_stream_video.c @@ -289,9 +289,16 @@ swfdec_net_stream_video_decode (SwfdecNetStreamVideo *video) static void swfdec_net_stream_video_start (SwfdecNetStreamVideo *video) { + SwfdecRtmpPacket *packet = g_queue_peek_head (video->next); + + g_assert (packet); + g_assert (!video->playing); + video->time = 0; + video->next->length += packet->header.timestamp; video->playing = TRUE; video->timeout.timestamp = SWFDEC_PLAYER (swfdec_gc_object_get_context (video))->priv->time; + video->timeout.timestamp -= SWFDEC_TICKS_PER_SECOND * packet->header.timestamp / 1000; g_object_notify (G_OBJECT (video), "playing"); } @@ -306,8 +313,9 @@ swfdec_net_stream_video_push (SwfdecNetStreamVideo *video, packet = swfdec_rtmp_packet_new (header->channel, header->stream, header->type, header->timestamp, buffer); + if (video->playing || !g_queue_is_empty (video->next)) + video->next_length += header->timestamp; g_queue_push_tail (video->next, packet); - video->next_length += header->timestamp; if (!video->playing && video->next_length >= video->buffer_time) { swfdec_net_stream_video_start (video); swfdec_net_stream_video_decode (video); |